Files

100 lines
5.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# Текстовые 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.
## Итоговая конфигурация
```yaml
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** (никакие опции не помогают):
```bash
# 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.