# 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..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":[""]}],"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,"}}]}],"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 ""