system/@platform-tools.service/README_PROJECTOR_MODE.md

Projector Mode Detection

Модуль: library/core/projector_mode.py
Версия: 1.0.0
Дата: 2025-12-26


Описание

Автоматическое определение режима работы Проектора по триггерам в тексте запроса.

Источник данных: system/config/models.yamlroles.projector.modes


Режимы

Режим Модель Провайдер Описание
research Opus 4.5 claude Исследование кодовой базы
planning Opus 4.5 claude Проектирование фичи (plan mode)
implement Sonnet 4.5 claude Реализация кода (по умолчанию)
review Sonnet 4.5 claude Проверка кода
analyze Gemini Flash openrouter Анализ данных (бесплатно)
quick Llama 3.1 openrouter Быстрые операции (бесплатно)

Использование

Python API

from library.core.projector_mode import get_projector_mode, list_modes

# Определить режим по тексту
mode = get_projector_mode("исследуй структуру проекта")
# → {"mode": "research", "model": "claude-opus-4-5-20251101", ...}

# Список всех режимов
modes = list_modes()
# → Dict[mode_name, mode_config]

CLI

# Определить режим
python3 library/core/projector_mode.py "создай функцию sync_orders"
# → implement

# Подробный вывод
python3 library/core/projector_mode.py "спланируй архитектуру" --verbose
# → Режим, модель, провайдер, описание

# Список всех режимов
python3 library/core/projector_mode.py --list

# Помощь
python3 library/core/projector_mode.py --help

Возвращаемые данные

get_projector_mode(prompt: str) → Dict

Возвращает словарь с ключами:

{
    "mode": str,              # Название режима (research|planning|...)
    "model": str,             # ID модели
    "provider": str,          # Провайдер (claude|openrouter)
    "description": str,       # Описание режима
    "claude_code_mode": str   # Режим Claude Code (normal|plan)
}

list_modes() → Dict[str, Dict]

Возвращает словарь всех доступных режимов из конфигурации.


Триггеры

Определение режима происходит по наличию триггерных слов в тексте запроса:

Режим Триггеры
research исследуй, изучи, найди как, разберись
planning спланируй, спроектируй, продумай, подготовь план
implement реализуй, напиши, создай, сделай, добавь
review проверь, ревью, посмотри код
analyze проанализируй, разбери данные, статистика
quick форматируй, преобразуй, извлеки

Поиск: регистронезависимый, работает с пробелами.

По умолчанию: Если триггеры не найдены → режим implement.


Примеры

Пример 1: Базовое использование

from library.core.projector_mode import get_projector_mode

result = get_projector_mode("исследуй структуру проекта")

print(result['mode'])        # → research
print(result['model'])       # → claude-opus-4-5-20251101
print(result['provider'])    # → claude

Пример 2: Условная логика

from library.core.projector_mode import get_projector_mode

prompt = "спланируй новую фичу для каталога"
result = get_projector_mode(prompt)

if result['mode'] == 'planning':
    print("Обнаружен режим планирования")

    if result['claude_code_mode'] == 'plan':
        print("Используй Claude Code в plan mode (Shift+Tab×2)")

    print("Действия:")
    print("1. Создай документ с архитектурой")
    print("2. Согласуй с пользователем")
    print("3. Только после согласования → код")

Пример 3: Список режимов

from library.core.projector_mode import list_modes

modes = list_modes()

for mode_name, mode_config in modes.items():
    print(f"{mode_name}: {mode_config['model']}")

Пример 4: Экономия на моделях

from library.core.projector_mode import get_projector_mode

tasks = [
    "спланируй архитектуру",     # → Opus (дорого)
    "форматируй данные",          # → Llama (бесплатно)
    "проанализируй логи",         # → Gemini (бесплатно)
]

for task in tasks:
    result = get_projector_mode(task)

    if result['provider'] == 'openrouter':
        print(f"{task}{result['model']} (дешёво)")
    else:
        print(f"{task}{result['model']} (Claude)")

Edge Cases

Входные данные Результат
Пустая строка "" implement (по умолчанию)
Верхний регистр "ИССЛЕДУЙ" research (работает)
Пробелы " исследуй " research (работает)
Нет триггеров "xyz" implement (по умолчанию)

Тестирование

Быстрый тест

python3 library/core/projector_mode.py "исследуй структуру"
# → research

Полный набор примеров

PYTHONPATH=/opt/claude-workspace \
  python3 library/core/examples/projector_mode_examples.py

Тест edge cases

python3 -c "
from library.core.projector_mode import get_projector_mode

tests = [
    ('проверь код', 'review'),
    ('СПЛАНИРУЙ', 'planning'),
    ('   форматируй   ', 'quick'),
    ('', 'implement'),
]

for prompt, expected in tests:
    result = get_projector_mode(prompt)
    status = '✓' if result['mode'] == expected else '✗'
    print(f'{status} \"{prompt}\" → {result[\"mode\"]}')
"

Конфигурация

Источник данных

Файл: system/config/models.yaml

roles:
  projector:
    modes:
      research:
        model: claude-opus-4-5-20251101
        provider: claude
        claude_code_mode: normal
        triggers: [исследуй, изучи, найди как, разберись]

      # ... другие режимы

Переменные окружения

# Корень workspace (для поиска конфигурации)
export WORKSPACE=/opt/claude-workspace

Константы

DEFAULT_MODE = "implement"
DEFAULT_MODEL = "claude-sonnet-4-5-20250929"
DEFAULT_PROVIDER = "claude"

Зависимости

Установка:

pip install pyyaml

Интеграция

С model_selector

from library.core.projector_mode import get_projector_mode
from library.core.model_selector import get_model

prompt = "исследуй структуру проекта"
mode_info = get_projector_mode(prompt)

# Получить детали модели
model = get_model(mode_info['model'])

С workflow системой

from library.core.projector_mode import get_projector_mode

def handle_user_request(prompt: str):
    """Обработка запроса с автоопределением режима"""
    mode_info = get_projector_mode(prompt)

    if mode_info['mode'] == 'research':
        return research_workflow(prompt)
    elif mode_info['mode'] == 'planning':
        return planning_workflow(prompt)
    elif mode_info['mode'] == 'implement':
        return implementation_workflow(prompt)
    # ...

Ошибки

FileNotFoundError

Конфигурация не найдена: /opt/claude-workspace/system/config/models.yaml

Решение: Проверить переменную $WORKSPACE или создать конфигурацию.

ValueError

В models.yaml отсутствует roles.projector.modes

Решение: Проверить структуру конфигурации.


Связи


Changelog

v1.0.0 (2025-12-26)


Версия: 1.0.0