День 4. Local Boost
Задание: поднять локальную LLM в IDE, перенести правила Дня 1 в system prompt, прогнать те же задачи, сравнить с облаком. Бонус — 2–3 разные модели.
У меня основной harness для мутных делишек — OpenCode (тот же Ollama под капотом). Коммит на 600 с лишним строк.
Железо и модели
У меня не сильно богато: MB air, M4, 24 GB RAM, охладение пассивное.
→ Primary: qwen2.5-coder:7b (4.7 GB).
→ Fallback: deepseek-coder:6.7b (3.8 GB).
Обе в памяти одновременно. Swap при переключении — минус 8–12 секунд.
Два профиля агента
В .opencode/opencode.json:
→ local-coder (qwen) — полноценный агент: write + edit + bash + read + grep. webfetch: false.
→ local-fast (deepseek) — чистый автокомплит: только edit + read. Физически не может сломать репу через tool set.
Правила Дня 1 ( http://go-patterns.md/ на 600+ строк) ужал до .opencode/ http://system-prompt-local.md/ в 73 строки: module path sdp_dev, naming, 4 паттерна, tests, антипаттерны. Целиком в 4k контекста не влезет.
Параметры
Температура 0.1, top_p 0.9, num_ctx 512, stop — пустая строка после блока кода.
Температура критична. На 0.7 qwen сочиняет имена полей, которых нет.
Что получилось
qwen2.5-coder:7b шустр и генерит норм код на мааааленькую задачку
deepseek-coder:6.7b внезапно генерит текст вместо кода
claude-sonnet-4-6 бодр и прекрасен, задачки щелкает мгновенно
Парадокс «deepseek быстрее по t/s, но дольше » — он просто генерит больше токенов. Комментарии и объяснения даже когда просили только код.
Прогон задач
→ Test-coverage (table-driven). qwen — с первого раза. deepseek добавил лишний return false и комментарий вне блока.
→ Bug Fix (replace scope guard). qwen дописал рядом, не заменил — баг остался. deepseek воткнул фикс в похожую функцию, не в ту.
→ WS decomposition. Обе отказались — 4k контекста не хватает. Cloud справился.
Роутер, а не переключатель
В internal/dispatch/local.go — список ключевых слов, по которым WS считается low-complexity: stub, boilerplate, test, rename, simple, implement interface, docstring.
При Complexity=low && RequiredCap=coding роутер подсовывает Ollama с фиксированным score 0.9. Остальное — в облако.
Вывод
Локалки хватает на: стабы, одиночные тесты, симметричные рефакторинги, стандартные интерфейсы, sentinel-ошибки.
Правило: ≤ 512 токенов контекста → локалка, иначе облако. Не ручное решение — это dispatch. Router.
Что зашло больше всего
→ Два профиля с разным tool set'ом. Безопасность через ограничение, не через уговоры.
→ System prompt отдельным файлом. Скармливается в http://Continue.dev/ / LM Studio / куда угодно.
→ num_ctx=512 + temperature=0.1 — 80% эффекта.
Пока засада: stream:false у Ollama этой версии ломается на control chars — насильно stream:true. 24 GB впритык: третью модель не поднять.
Ссылки:
→ Day 4 commit: https://github.com/fall-out-bug/sdp_lab/commit/6d6050a
→ Local model guide: docs/reference/ http://local-model-task-guide.md/
Критика, мысли и PR — это мне надо!