./kerakoll-selector-v2
Phase 0 + Phase 1 passed. Phase 2 не стартовала. Проект закрыт без FT v2.
phase=cancelledheartbeat=—updated=2026-04-15 18:08:00 UTC
// research›
loading_research...
// phase.json›
{
"slug": "kerakoll-selector-v2",
"phase": "cancelled",
"gate": null,
"created_at": "2026-04-15T07:13:19Z",
"updated_at": "2026-04-15T18:08:00Z",
"cancelled_at": "2026-04-15T18:08:00Z",
"cancelled_by": "Лёха (Telegram)",
"cancellation_reason": "Закрыто по решению Лёхи. Gap gemma4:e4b vs gpt-5.4-mini небольшой (−4pp URL / −5pp match), приоритет — автоматизация самого FinetuneLab. Прод остаётся на gpt-5.4-mini, gemma4:e4b база как fallback.",
"notes": "Phase 0 + Phase 1 passed. Phase 2 не стартовала. Проект закрыт без FT v2."
}// progress.md›
# Progress — 2026-04-15T07:13:19Z ## Current step Bootstrap complete. Delegating Phase 1A (datasets research → Hermes) and Phase 1B (models research → Artem) in parallel. ## Completed - Project directory created: /Users/alphamachine/Projects/finetune-lab/projects/kerakoll-selector-v2 - SPEC.md generated from template - phase.json initialized ## Pending - 1A: Hermes research datasets → research-datasets.md - 1B: Artem research models → research-models.md - Gate 1: Лёха selects dataset+model combination ## Issues (none)
// decision.md›
# Decisions — kerakoll-selector-v2 ## Phase 0 gate — 2026-04-15 **Decision:** approved. - Formulation: replace gpt-5.4-mini in MW prod with local model, no quality regression. - Success metric: URL coverage + product match rate (strictly). - Test set source: `chat_messages` table from MW db (1733 real user queries), stratified 50/50 RU/HU/EN. ## Phase 1 gate — 2026-04-15 **Decision:** Option A — FT needed. Baseline-first results (see `baseline-first.md`): - gpt-5.4-mini: 70.0% URL, 53.8% match - gemma4:e4b: 66.0% URL, 48.7% match (gap −4pp/−5pp) - kerakoll-selector:v1: 20.0% URL, 29.5% match (regress confirmed) Gap small but real — FT by correct methodology to close it. Gemma already close (94% URL on RU), need to lift RU to parity and maintain HU/EN. **Next:** skip Phase 1A/1B standard research (candidates already clear — base gemma4:e4b, teacher gpt-5.4-mini via prod proxy). Go directly to Phase 2 prod-shape dataset generation. ## Project cancelled — 2026-04-15T18:08 MSK **Decision:** project closed by Лёха (Telegram). Причина: gap gemma4:e4b vs gpt-5.4-mini небольшой (−4pp URL / −5pp match). Приоритет переключён на автоматизацию самого FinetuneLab фреймворка (launchd sprint, Telegram alerts, UI deploy, status CLI). Прод MW остаётся на gpt-5.4-mini. Phase 2 (prod-shape dataset generation) не стартовала. Артефакты Phase 0/1 сохранены для возможного перезапуска позже.
// baseline-first.md›
# Phase 1 — Baseline-first eval **Дата:** 2026-04-15 **Test set:** 50 стратифицированных реальных прод-запросов из `chat_messages` MW db (17 RU + 17 HU + 16 EN) **Pipeline:** изолированная копия прод `/opt/masterworks/shadow_eval_v2/` (retrieval + rerank + LLM). Prod `/api/chat` не тронут. ## Сводка | Metric | gpt-5.4-mini (прод) | gemma4:e4b (база) | kerakoll-selector:v1 (FT) | |---|---:|---:|---:| | URL coverage | **70.0%** | 66.0% | 20.0% | | Product match rate | **53.8%** | 48.7% | 29.5% | | Avg retrieved products | 3.04 | 3.04 | 3.04 | ## По языкам ### RU (17 questions) | Model | URL | Match | |---|---:|---:| | gpt-5.4-mini | 100.0% | 68.1% | | gemma4:e4b | 94.1% | 48.5% | | FT v1 | 23.5% | 32.4% | ### HU (17 questions) | Model | URL | Match | |---|---:|---:| | gpt-5.4-mini | 52.9% | 45.6% | | gemma4:e4b | 47.1% | 48.5% | | FT v1 | 11.8% | 20.6% | ### EN (16 questions) | Model | URL | Match | |---|---:|---:| | gpt-5.4-mini | 56.3% | 47.4% | | gemma4:e4b | 56.3% | 49.0% | | FT v1 | 25.0% | 35.9% | ## Анализ - **gpt-5.4-mini** — текущий прод baseline. URL 70%, match 54%. Сильна на RU (100%/68%), слабее на HU/EN. Это bar. - **gemma4:e4b (база)** — локальная, без FT. Отстаёт от GPT на ~4pp URL / ~5pp match. На EN паритет (56/49 vs 56/47). На HU паритет. На RU GPT лучше (100 vs 94 URL, 68 vs 49 match). - **kerakoll-selector:v1 (FT)** — подтверждает регресс из прошлого shadow eval: 20% URL, 30% match. В 3.5x хуже GPT по URL. Не деплоим, v1 official failed. ## Phase 1 gate — решение Gap gemma4:e4b vs gpt-5.4-mini: −4pp URL, −5pp match. Небольшой но существующий. На RU gap больше (−5pp URL, −19pp match). **Варианты:** - **A (FT нужен):** делать v2 FT по правильной методологии (prod-shape dataset) чтобы закрыть gap на RU и улучшить HU/EN. Цель — догнать или обогнать gpt-5.4-mini. - **B (FT не нужен):** принять gemma4:e4b как есть, деплоить локально. Потеря ~5pp качества ради $0 OpenAI cost + offline. - **C (остаёмся на gpt-5.4-mini):** статус-кво, если даже 5pp потеря критична. **Рекомендация:** A — FT имеет смысл, gap реален, но небольшой. После правильной методологии (prod-shape dataset + shadow eval gate) шансы обогнать GPT на RU очень высокие (база уже 94%, нужно довести до 100% и поднять match). HU/EN — retrieval слабый (и GPT на них лишь 53-56%). FT может не помочь — проблема в retrieval, не в LLM. Это отдельная задача, не в scope v2. **Решение (записать в decision.md после Лёхи):** - [ ] A — идём в Phase 2 (prod-shape dataset, FT) - [ ] B — закрываем проект, gemma4:e4b деплоится как есть - [ ] C — закрываем проект, остаёмся на gpt-5.4-mini
// spec.md›
# Fine-tune project: kerakoll-selector-v2
## Исходная идея
Fine-tune локальной модели для MasterWorks Kerakoll product recommendation через прод-pipeline, замена gpt-5.4-mini на локальную без регресса качества
## Статус
- **Создан:** 2026-04-15T07:13:19Z
- **Фаза:** 1-research
- **Slug:** `kerakoll-selector-v2`
- **Путь:** `/Users/alphamachine/Projects/finetune-lab/projects/kerakoll-selector-v2`
---
## Phase 0 — Task framing (обязательный gate перед любой работой)
Этот блок заполняет Opus на основе идеи и переспросов у Лёхи. Без этого блока НЕ стартуем research.
### Цель
Заменить gpt-5.4-mini (прод MW chat-engine) на локальную модель без регресса качества подбора Kerakoll продуктов. Бизнес-цель — убрать зависимость от OpenAI billing, возможность offline-режима.
### Прод-стек, в котором модель живёт
- **Режим:** RAG — retrieval (vector search по products + knowledge_base) + rerank (LLM планировщик) + финальная генерация ответа
- **Inference-формат:** OpenAI-compatible chat/completions, messages: `[system (с retrieval_context + правилами ответа), user (запрос клиента)] → assistant`
- **Пример реального прод-запроса:** (см. `/opt/masterworks/src/chat-engine.js` функция `callText`, system prompt включает products digest + knowledge chunks, temperature=0.45, max_tokens=1100)
```
system: "You are MasterWorks Hungary senior engineer... Use only these retrieved products: [Fugabella Color | price 8850 HUF | masterworks.hu/products/... ], [Fugalite Color | ...]. Knowledge chunks: [...]. Reply in user's language with URL to each recommended product."
user: "Нужна затирка для душевой зоны..."
```
- **Кто вызывает модель:** `/opt/masterworks/src/chat-engine.js` на mw-vps, PM2 process `mw-pilot`, endpoint `/api/chat` на mw.ainmid.com
- **Constraints:**
- Latency: до 20s на Pro mode (сейчас gpt-5.4-mini ~19s)
- Hardware: Mac Studio M3 Ultra 96GB для локального inference через Ollama/Tailscale
- Privacy: данные клиентов не должны уходить за пределы нашей инфры
### Baseline
- **Текущая модель в проде:** gpt-5.4-mini через Codex OAuth proxy (SSH tunnel 127.0.0.1:18890 на mw-vps)
- **Вторичный baseline:** gemma4:e4b (база без FT) — по shadow eval от 2026-04-15 показала URL 9/10 в pipeline
- **Метрики baseline на prod-pipeline (30-50 реальных запросов — замерить в Phase 1):**
| Metric | gpt-5.4-mini (цель) | gemma4:e4b база |
|---|---|---|
| URL coverage | TBD (замерить) | 9/10 (shadow eval) |
| product correctness | TBD | TBD |
| instruction following | TBD | TBD |
| latency p50 | TBD | ~33s (слишком медленно?) |
| cost per 1k requests | ~$0.30 (OpenAI) | $0 (local) |
### Success criterion
- **Улучшение которое нужно:** локальная модель с качеством >= gpt-5.4-mini (URL coverage, product correctness) и latency <= 20s p50
- **Гейт остановки:** если FT не обгоняет gemma4:e4b базу в shadow-eval по task-metric ИЛИ регрессит по instruction-following — проект закрывается как "not needed" / "failed", используем базовую Gemma4 или остаёмся на gpt-5.4-mini
---
## Phase 1 — Baseline-first sanity (обязательный gate)
Перед выбором модели/датасета прогнать candidate base model (без FT) через прод-pipeline на 20-50 вопросах из реальных логов.
- **Базовая модель кандидат:** TBD
- **Test set источник:** TBD (реальные прод-логи, не synthetic)
- **Результат baseline через prod-pipeline:** TBD
- **Решение:** [ ] FT нужен (базовая не справляется) / [ ] FT не нужен (задача закрывается)
Если базовая уже даёт target — задача закрыта без FT. Это успех лаба.
---
## Phase 2 — Dataset design (prod-shape)
### Формат training examples
Training examples ОБЯЗАНЫ повторять прод-формат вызова.
- **Не:** `{question → answer}`
- **Да:** `{system (с полным контекстом как в проде), user, assistant}`
### Teacher trace capture
- **Teacher model:** TBD
- **Что сохраняем:** полный trace — system_prompt, retrieved_context, tool_calls, final answer
- **Где:** JSONL, одна строка — один пример, полная структура messages
### Датасеты
- TBD (заполнит research)
### Held-out test set
- **Источник:** реальные прод-логи (НЕ synthetic) — минимум 50 примеров
- **Используется для shadow-eval в Phase 6**
---
## Целевая модель (Phase 1B research)
- **Base model:** TBD
- **Размер:** TBD
- **Формат:** TBD (safetensors / GGUF)
- **Лицензия:** TBD
## Training plan
- **Метод:** LoRA (rank 32, alpha 64 — default, уточнять по задаче)
- **Stages:** TBD (обычно 1-2)
- **Hardware:** Mac Studio M3 Ultra (96GB) через MLX-VLM
---
## Gates (обязательная последовательность)
- [ ] **Phase 0 gate (Лёха):** task framing утверждён, baseline замерен, success criterion зафиксирован
- [ ] **Phase 1 gate (Opus + Лёха):** baseline-first прогон показал, что FT нужен (иначе close)
- [ ] **Gate 1 (Лёха):** research датасетов + моделей одобрен, выбрана комбинация
- [ ] **Gate 2 (Лёха):** sanity check на 10% данных пройден, early-beat-baseline positive
- [ ] **Gate 3 shadow eval (Лёха):** FT через прод-pipeline обгоняет baseline на held-out test, instruction-following не упало
- [ ] **Gate 4 deploy (Лёха):** одобряет регистрацию в Ollama / деплой
## Auto-drop rules
- Sanity (Phase 3) не обгоняет baseline через prod-pipeline на 10% данных → стоп, архивируем.
- Full train не обгоняет baseline → стоп, не экспортим.
- Shadow-eval показал регресс instruction-following → стоп, модель помечается "failed", post-mortem.
---
## Ссылки
- Phase 1 baseline-first: `baseline-first.md`
- Research датасетов: `research-datasets.md`
- Research моделей: `research-models.md`
- Решение Лёхи: `decision.md`
- Shadow eval: `shadow-eval.md`
- Прогресс: `progress.md`
// files [14]›
- ./.artem-prompt.txt
- ./.hermes-prompt.txt
- ./SPEC.md
- ./adapters
- ./baseline-first.md
- ./data
- ./decision.md
- ./eval
- ./idea.txt
- ./phase.json
- ./progress.md
- ./results-baseline-first-gemma4_e4b-20260415T074609Z.json
- ./results-baseline-first-gpt-5.4-mini-20260415T073045Z.json
- ./results-baseline-first-kerakoll-selector_v1-20260415T075855Z.json
/Users/alphamachine/Projects/finetune-lab/projects/kerakoll-selector-v2