JUST · AI инженерные заметки Внедрение под ключ
Главная / Статьи / Как я ломал прод
Как я ломал продollama modelollama apiqwen3:14bfetch_urlllm_ollama 2 минуты2026-10-04

Ollama model not found: два места, где молча падала несуществующая модель

Нашёл два живых места с моделью qwen2.5:14b, которой нет в Ollama. Оба падали молча: fetch_url отдавал 404, аварийный канал не отвечал.

2живых места с битой моделью
7файлов нашёл grep
RC=0после правки fetch_url

Нашёл два живых места, где стояла несуществующая модель qwen2.5:14b. В Ollama есть только qwen3:14b, qwen2.5:3b, qwen3:4b и bge-m3. Оба места падали молча: fetch_url отдавал 404, аварийный канал просто не отвечал.

Как я это нашёл

Начал с grep по живым .py — получил 7 файлов. Но fetch_url в список не попал, хотя модель там прописана. Причина: fetch_url — это симлинк на fetch_url.py, и без расширения .py глоб *.py его не ловит.

искать по всем файлам
grep -rl "qwen2.5:14b"

Правильно — искать без --include или читать через readlink -f. Иначе симлинки остаются невидимыми.

Проверка битой модели

Список доступных моделей даёт ollama list. Дальше — прямой запрос к API генерации.

ответ на запрос
{"error":"model 'qwen2.5:14b' not found"}

Так подтверждается, что модель не просто не вызывается, а её нет.

Что я поправил

think: False нужен потому, что qwen3 по умолчанию жжёт вывод на рассуждения.

Проверка живьём

fetch_url вернул RC=0 с реальной сводкой. call_ollama ответил «Аварийный канал жив.».

Подводные камни при проверке. Поток Ollama /api/chat идёт чистыми JSON-строками без префикса data:, а _stream_generator в llm_ollama.py отдаёт их уже в OpenAI-формате и завершает [DONE] — парсить надо delta.content и пропускать [DONE], иначе JSONDecodeError на последнем чанке. head -c обрезает UTF-8 посередине и даёт ложную ошибку декодирования — для русских ответов смотреть через python. llm_ollama импортируется в app.py на старте, поэтому правка требует рестарта, а fetch_url вызывается подпроцессом и подхватывается сразу.

Читайте дальше