Initial commit: Hermes skill hermes-auxiliary-local-models

This commit is contained in:
estorozhenko
2026-09-06 13:50:44 +00:00
commit 977dc51d8a
4 changed files with 343 additions and 0 deletions
+79
View File
@@ -0,0 +1,79 @@
# Qwen3-VL 8B + Ollama: разбор сессии настройки auxiliary.vision
Дата: 2026-08-30. Хост: RTX 5060 Ti 16 GB VRAM, Ollama в Docker (контейнер `ollama`),
main-модель Hermes — облачная polza.ai (deepseek/deepseek-v4-flash-0731).
## Итог
`auxiliary.vision` переведён на локальную `qwen3-vl:8b`:
- model: qwen3-vl:8b (~6.14 GB на диске, ~7.2 GB VRAM при ctx 4096/8192)
- provider: custom, base_url: http://localhost:11434/v1, api_key: ollama
- остальные auxiliary остались на `auto` → облачный main-провайдер
Проверено E2E: vision-запрос через Hermes-клиент (`resolve_provider_client`) отвечает
"red"/"blue" на тестовых PNG.
## Ключевые факты о Hermes auxiliary (agent/auxiliary_client.py)
- Раздел конфига: `auxiliary.<task>.provider/model/base_url/api_key` в config.yaml.
- `provider: auto` цепочка (текст): main-провайдер → OpenRouter → Nous Portal →
custom endpoint → Anthropic → прямые провайдеры. Для vision своя цепочка:
main-провайдер (если поддерживает vision) → OpenRouter → Nous → Anthropic →
custom endpoint (локальные Qwen-VL/LLaVA/Pixtral).
- `MINIMUM_CONTEXT_LENGTH = 64_000` (agent/model_metadata.py:405) — флор только для
`compression`. Остальные задачи без флора.
- `resolve_provider_client()` сигнатура: `explicit_base_url` / `explicit_api_key`
(не `base_url`/`api_key` — TypeError).
- Vision-capable локальных моделей определяется через `query_ollama_supports_vision`
(capabilities в `/api/show`, или model_info.*.vision.block_count на старых серверах).
## Ошибки в процессе (транскрипт)
1. `HTTP 500` на `/api/chat` с картинкой 1×1 px:
```
panic: height:1 or width:1 must be larger than factor:32
github.com/ollama/ollama/model/models/qwen3vl.(*ImageProcessor).SmartResize
```
→ Ошибка картинки, не конфигурации. Входной образ должен быть ≥ 32 px.
2. Пустой `content` при `finish_reason: stop` на картинке 64×64 — reasoning ушёл в
`reasoning` поле. На 256×256 ответ нормальный ("red").
3. `hermes chat -m ... --provider custom` в CLI: "No API key found for provider 'custom'"
— CLI-запуск не отражает auxiliary-резолв; auxiliary берётся из config.yaml напрямую.
4. `curl ... | python3` в terminal — блокируется security scan (pipe to interpreter);
использовать execute_code с urllib вместо пайпов.
## VRAM-планирование (qwen3-vl:8b, GGUF)
- GGUF-контекст: `qwen3vl.context_length = 262144`, layers=36, embedding=4096.
- KV cache (f16) ≈ 2 · layers · dim · 2 · ctx · 2 bytes:
- 32K → ~38.7 GB, 64K → ~77 GB, 128K → ~155 GB, 262K → ~309 GB.
→ Физически полный контекст не влезает в 16 GB. Ollama грузит с num_ctx 4096 по умолчанию,
для запросов задавать `options: {num_ctx: 8192}`.
- Итоговое распределение: qwen3-vl 7.19 GB + bge-m3 1.21 GB = 8.4 GB занято, ~7.3 GB свободно.
- qwen3:8b и qwen2.5-coder:14b имеют GGUF-контекст 40960/32768 (имена "-64k"/"-65k" лгут) —
ниже 64K флора compression, поэтому compression оставлен на облаке.
## Полезные команды
```bash
# Pull в Docker
docker exec ollama ollama pull qwen3-vl:8b
# Проверка caps/контекста
curl -s http://localhost:11434/api/show -d '{"model":"qwen3-vl:8b"}' | jq '.capabilities, .model_info["qwen3vl.context_length"]'
# Тест vision напрямую
curl -s http://localhost:11434/api/chat -d '{"model":"qwen3-vl:8b","messages":[{"role":"user","content":"What color?","images":["<b64>"]}],"options":{"num_ctx":8192},"stream":false}'
# OpenAI-совместимый путь (что использует Hermes)
curl -s http://localhost:11434/v1/chat/completions -d '{"model":"qwen3-vl:8b","messages":[{"role":"user","content":[{"type":"text","text":"What color?"},{"type":"image_url","image_url":{"url":"data:image/png;base64,<b64>"}}]}],"max_tokens":50}'
# Выгрузка из VRAM
docker exec ollama ollama stop qwen3-vl:8b
```
## Откат конфигурации
```bash
hermes config set auxiliary.vision.provider auto
hermes config set auxiliary.vision.model ""