Модуль: library/core/projector_mode.py
Версия: 1.0.0
Дата: 2025-12-26
Автоматическое определение режима работы Проектора по триггерам в тексте запроса.
Источник данных: system/config/models.yaml → roles.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 | Быстрые операции (бесплатно) |
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]
# Определить режим
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
Возвращает словарь с ключами:
{
"mode": str, # Название режима (research|planning|...)
"model": str, # ID модели
"provider": str, # Провайдер (claude|openrouter)
"description": str, # Описание режима
"claude_code_mode": str # Режим Claude Code (normal|plan)
}
Возвращает словарь всех доступных режимов из конфигурации.
Определение режима происходит по наличию триггерных слов в тексте запроса:
| Режим | Триггеры |
|---|---|
| research | исследуй, изучи, найди как, разберись |
| planning | спланируй, спроектируй, продумай, подготовь план |
| implement | реализуй, напиши, создай, сделай, добавь |
| review | проверь, ревью, посмотри код |
| analyze | проанализируй, разбери данные, статистика |
| quick | форматируй, преобразуй, извлеки |
Поиск: регистронезависимый, работает с пробелами.
По умолчанию: Если триггеры не найдены → режим implement.
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
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. Только после согласования → код")
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']}")
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)")
| Входные данные | Результат |
|---|---|
Пустая строка "" |
implement (по умолчанию) |
Верхний регистр "ИССЛЕДУЙ" |
research (работает) |
Пробелы " исследуй " |
research (работает) |
Нет триггеров "xyz" |
implement (по умолчанию) |
python3 library/core/projector_mode.py "исследуй структуру"
# → research
PYTHONPATH=/opt/claude-workspace \
python3 library/core/examples/projector_mode_examples.py
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"
pyyaml — загрузка конфигурацииУстановка:
pip install pyyaml
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'])
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)
# ...
Конфигурация не найдена: /opt/claude-workspace/system/config/models.yaml
Решение: Проверить переменную $WORKSPACE или создать конфигурацию.
В models.yaml отсутствует roles.projector.modes
Решение: Проверить структуру конфигурации.
/opt/claude-workspace/system/config/models.yaml/opt/claude-workspace/library/core/examples/projector_mode_examples.py/opt/claude-workspace/CLAUDE.md → режимы Проектора/opt/claude-workspace/library/core/model_selector.pymodels.yamlВерсия: 1.0.0