Fine-tune Qwen3-4B на CadQuery + агентный пайплайн на трёх LangChain @tool.
| До файнтюна | После 3000 шагов |
|---|---|
| 32% / 100 промптов | 93% / 100 промптов |
FineTune4CAD/
├── Train/ # обучение и оценка
│ ├── script.py # тренировочный пайплайн (Unsloth + QLoRA)
│ ├── eval100.py # сравнение base vs LoRA на 100 промптах
│ ├── reeval.py # быстрый eval сохранённой LoRA
│ ├── export_gguf.py # конверсия LoRA → GGUF Q4_K_M
│ └── REPORT.md # лог обучения с деталями
├── CAD_generator/ # агентное приложение
│ ├── app/ # tools.py, orchestrator, llm_client, ...
│ ├── docker/ # Dockerfile.app + docker-compose.yml (GPU)
│ ├── tests/ # pytest на @tool
│ └── demo.py # headless 5-промптовый прогон
├── assets/ # графики и скриншоты для отчёта
├── REPORT.md / REPORT.pdf # итоговый отчёт (9 стр., с графиками)
└── .gitignore
Нужен Docker с GPU-passthrough (nvidia-container-toolkit) и собранный
CAD_generator/models/cadquery-qwen3-4b.Q4_K_M.gguf (см. Train/export_gguf.py).
cd CAD_generator
make up # docker compose up --build -d
# → llama-server :8081 + Gradio UI :7860
make down # остановить
make logs # tail логи обоих сервисовUI: http://localhost:7860. Запросы только на английском, например:
A cube 50x50x50mmA washer outer diameter 24mm inner diameter 13mm thickness 2.5mmAn L-bracket 60x40mm both legs 20mm wide thickness 5mmA flat disc diameter 80mm thickness 5mmAn electronics enclosure 120x80x40mm wall 2mm
cd CAD_generator
python3 -m venv .venv && .venv/bin/pip install -r requirements.txt cadquery pytest
.venv/bin/python -m app.search_index build # BM25-индекс по 172K скриптов (~1 мин)
.venv/bin/python -m pytest tests/ -v # 7 smoke-тестов на @tool
.venv/bin/python demo.py # headless демоАльтернатива docker — нативный запуск:
make run-llm # терминал 1
make run-app # терминал 2См. REPORT.pdf — задача, выбор метода, гиперпараметры, метрики до/после с графиками, описание трёх tools, скриншоты UI и подводные камни (OOM на встроенном eval, eval-метрика смотревшая не туда, DeepCAD-нормализация).