Files
hermes-auxiliary-local-models/references/text-aux-qwen3-think-false.md
T

5.9 KiB
Raw Blame History

Текстовые aux на локальной Ollama (qwen3:8b) + отключение thinking

Дата: 2026-08-30. Продолжение qwen3-vl-ollama-setup.md: после vision переведены текстовые auxiliary-задачи (title_generation, web_extract) на локальную qwen3:8b. Хост: RTX 5060 Ti 16 GB VRAM, Ollama в Docker, main-модель — polza.ai.

Итоговая конфигурация

auxiliary:
  vision:            # qwen3-vl:8b (мультимодальная)
    provider: custom
    model: qwen3-vl:8b
    base_url: http://localhost:11434/v1
    api_key: ollama
  title_generation:  # qwen3:8b (текстовая)
    provider: custom
    model: qwen3:8b
    base_url: http://localhost:11434/v1
    api_key: ollama
    extra_body:
      think: false
  web_extract:       # qwen3:8b
    provider: custom
    model: qwen3:8b
    base_url: http://localhost:11434/v1
    api_key: ollama
    extra_body:
      think: false
  compression:       # остаётся в облаке (нужен 64K+ контекст)
    provider: auto

Проверено E2E через from agent.auxiliary_client import call_llm:

  • title_generation: "Настройка Ollama: локальные модели" — 11.3 сек (на qwen3-vl было 109 сек)
  • web_extract: нормальный пересказ — 7.5 сек
  • compression резолвится на auto → polza, не тронута

Почему qwen3-vl НЕ годится для текстовых aux

На простой вопрос ("какой сегодня день недели?") qwen3-vl:8b сгенерила 3778 токенов (eval_ms 54 сек) и отвечала 64 сек. reasoning=false в ответе, но content огромный — модель "растекается". Для быстрых aux (заголовки, извлечение) непригодна.

Ключевая находка: отключение thinking у qwen3 в Ollama

ВАЖНО (2026-09-04, Ollama 0.22.1): think: false через OpenAI /v1/chat/completions НЕ работает для qwen3 — модель все равно думает, content пуст, finish: length (reasoning съел лимит). Через нативный /api/chat + think: false думание выключается корректно (но Hermes ходит через /v1).

Решение для Hermes/aux — собрать тег с вырезанным reasoning (никакие опции не помогают):

# 1. Получить modelfile (docker):
docker exec ollama ollama show qwen3:8b            # или GET /api/show -> поле "modelfile"
# 2. В TEMPLATE заменить все $.IsThinkSet -> false (ветки thinking навсегда выключены)
# 3. Собрать (переиспользует blob, без скачивания):
docker cp /tmp/qwen3-nothink-Modelfile ollama:/root/
docker exec ollama ollama create qwen3:8b-nothink -f /root/qwen3-nothink-Modelfile

Ключ: $.IsThinkSet управляет думанием (вставляет /think//no_think в user msg и thinking{{ .Thinking }} в assistant). При false модель просто отвечает. Проверено: qwen3:8b-nothink через /v1 отвечает мгновенно (finish: stop), E2E через call_llm(task=...) в Hermes — корректный content (title_generation, web_extract). Оригинальный qwen3:8b не трогаем (откат — 1 строка в config).

Затем в config.yaml (вручную, т.к. hermes config set не правит dict extra_body; порядок полей в файле: provider, model, base_url, api_key, timeout, extra_body): model для auxiliary.title_generation и auxiliary.web_extract := qwen3:8b-nothink.

ОПРОВЕРГНУТЫЕ способы (не работают — модель все равно генерит reasoning первыми токенами):

  • enable_thinking: false в options (/api/chat) — таймаут
  • enable_thinking: false в extra_body (/v1/chat/completions) — content пустой
  • /no_think в начале user-сообщения — reasoning=True, content пустой
  • system prompt "don't think" — не помогает
  • корневой think: false в /v1 — НЕ работает в Ollama 0.22 (работает только native /api/chat)

Симптом при неотключённом thinking: content = '', usage.completion_tokens == max_tokens (весь бюджет съело reasoning), время ответа большое. Диагностика: смотреть поле reasoning/reasoning_content в ответе.

Полный список auxiliary-задач (из config.yaml)

vision, web_extract, compression, skills_hub, approval, mcp, title_generation, triage_specifier, kanban_decomposer, profile_describer, curator.

session_search — НЕ auxiliary-задача: hermes config set auxiliary.session_search.provider даёт warning "not a recognized config key" (в конфиге у неё только extra_body/max_concurrency/ timeout). Не настраивать как auxiliary.

VRAM (обе модели одновременно)

qwen3:8b 6.13 GB + qwen3-vl:8b 7.19 GB + bge-m3 1.21 GB ≈ 14.5 GB — влезают в 16 GB, переключение vision↔текст без выгрузки (keep_alive по умолчанию). При нехватке Ollama выгружает LRU-модель и перезагружает при следующем вызове (+5-15 сек).

Нюанс hermes config set

hermes config set auxiliary.<task>.extra_body не пройдёт (extra_body — dict, не скаляр) — править YAML вручную (python+yaml.safe_dump). Остальные ключи (provider/model/base_url/ api_key) ставятся через hermes config set с --force если ключ не в schema.