mirror of
https://gitverse.ru/kpa39l/hermes-auxiliary-local-models.git
synced 2026-09-29 10:05:02 +00:00
73 lines
5.6 KiB
Markdown
73 lines
5.6 KiB
Markdown
# Inventory of Hermes auxiliary tasks + model routing (2026-09-04)
|
|
|
|
Все задачи, которые Hermes решает "в фоне" отдельно от main-модели через
|
|
`call_llm(task=...)` (agent/auxiliary_client.py) и точки их вызова в коде.
|
|
Использовать для решения: какую задачу направить на локальную Ollama, какую оставить на облаке.
|
|
|
|
## Полная карта задач
|
|
|
|
| Задача | Назначение / где вызывается | Требования/характер |
|
|
|---------------------|------------------------------------------------------|----------------------------------------|
|
|
| title_generation | Заголовки сессий (/title) | короткий вывод, мгновенно |
|
|
| web_extract | Пересказ/извлечение из веб-страниц (web_extract) | средний вывод |
|
|
| vision | Анализ изображений, скриншоты браузера | нужна vision-модель, приватность |
|
|
| skills_hub | Поиск/описание скиллов в хабе (skills_hub) | короткий вывод |
|
|
| profile_describer | Описание пользовательского профиля (profile_describer)| не hot-path, краткий вывод |
|
|
| compression | Сжатие длинных диалогов (context_compressor) | **контекст ≥ 64K**, важна надёжность |
|
|
| approval | Умное авто-одобрение команд, режим smart (approval.py) | безопасность, одно слово (APPROVE/DENY/ESCALATE) |
|
|
| mcp | Обёртка MCP-серверов (tools/mcp_tool.py) | может быть сложный вывод |
|
|
| kanban_decomposer | Декомпозиция задач каньбан в JSON (kanban_decompose.py) | длинный JSON (до max 4000 токенов) |
|
|
| triage_specifier | Спецификация/уточнение задач каньбан (kanban_specify.py) | рабочие задачи, надёжность |
|
|
| curator | Фоновый анализ/жизненный цикл скиллов (curator) | фоновый, но смысловой анализ |
|
|
|
|
## Рекомендуемое распределение (проверено, применено в конфиге)
|
|
|
|
**На локальную qwen3:8b-nothink (текст) / qwen3-vl:8b (vision):**
|
|
title_generation, web_extract, vision, skills_hub, profile_describer.
|
|
Экономит облачные токены, картинки не уходят в облако.
|
|
|
|
**Оставить на облаке (provider: auto / main):**
|
|
- compression — жёсткий минимум `MINIMUM_CONTEXT_LENGTH = 64_000`, локаль (< 40K) не тянет
|
|
- approval — безопасность, не направлять на слабую локаль
|
|
- mcp — может требовать сложного вывода
|
|
- kanban_decomposer — длинный JSON, локаль 8b рискует битой структурой
|
|
- triage_specifier — рабочие задачи, надёжность
|
|
- curator — фоновый, смысловой анализ
|
|
|
|
## КРИТИЧНО: session_search — НЕ auxiliary-задача
|
|
|
|
`session_search` НЕ имеет отдельной auxiliary-модели. Проверено резолвером:
|
|
```
|
|
_resolve_task_provider_model(task="session_search") # -> provider=auto model=None
|
|
```
|
|
Это agent-loop инструмент (наравне с todo, memory, delegate_task), он ВСЕГДА идёт на
|
|
main-модель/auto. Настройка `auxiliary.session_search.provider` не имеет эффекта
|
|
(её блок в конфиге имеет только extra_body/max_concurrency/timeout). Не трать время
|
|
на попытку переключить её на локаль — это ограничение Hermes, а не наша ошибка.
|
|
|
|
## Настройка блока в config.yaml (вручную, НЕ hermes config set)
|
|
|
|
`hermes config set` не правит dict-блоки aux корректно — правь текстом:
|
|
```yaml
|
|
<task>:
|
|
provider: custom
|
|
model: qwen3:8b-nothink
|
|
base_url: http://localhost:11434/v1
|
|
api_key: ollama
|
|
timeout: 60
|
|
```
|
|
Замена по маркеру ` <task>:` (2 пробела + имя целиком, включая последующий отступ
|
|
в 4 пробела + пустую строку до следующей задачи). Порядок полей в существующем блоке
|
|
в файле: provider, model, base_url, api_key, timeout, extra_body.
|
|
|
|
## Проверка E2E после смены модели
|
|
|
|
Реальный контур (не CLI, который может не подхватить ключ):
|
|
```python
|
|
import sys; sys.path.insert(0, "/opt/hermes/.hermes/hermes-agent")
|
|
from agent.auxiliary_client import call_llm
|
|
r = call_llm(task="<task>", messages=[{"role":"user","content":"<короткий промпт>"}], max_tokens=80)
|
|
# смотри: r.model == ожидаемая модель, r.choices[0].finish_reason == "stop", content не пуст
|
|
```
|
|
Признак рабочей локальной модели: `finish_reason: stop` + осмысленный content.
|
|
| r.choices[0].message.content | r.model | |