Initial SQL-only 1C adapter baseline
This commit is contained in:
@@ -0,0 +1,245 @@
|
||||
# Local LLM Platform
|
||||
|
||||
Локальная платформа для работы с моделями под разные задачи: текст, перевод, аудио, видео и 1С.
|
||||
|
||||
Архитектура проекта: `core + plugins`.
|
||||
|
||||
- `core` содержит общую платформу: реестр моделей, инференс, обучение, eval-тесты, деплой на GPU, хранилище и мониторинг.
|
||||
- `plugins` содержит прикладные направления: текст, перевод, аудио, видео, фото, 1С.
|
||||
- Каждый плагин проектируется как будущий отдельный сервис, но на старте живет в одном репозитории.
|
||||
|
||||
## Deployment Target
|
||||
|
||||
GPU-нагрузки разворачиваются на `docker-gpu.cin.su`.
|
||||
|
||||
Секреты, токены, пароли, ключи доступа и приватные датасеты не хранятся в репозитории.
|
||||
|
||||
Если `docker-gpu.cin.su` является Windows-хостом с контейнерами на диске `Z:`, используйте runbook `docs/runbooks/windows-docker-gpu-host.md`.
|
||||
|
||||
## Structure
|
||||
|
||||
```text
|
||||
LLM/
|
||||
core/
|
||||
registry/
|
||||
inference/
|
||||
training/
|
||||
evals/
|
||||
deploy/
|
||||
storage/
|
||||
monitoring/
|
||||
|
||||
registry/
|
||||
model-cards/
|
||||
templates/
|
||||
|
||||
datasets/
|
||||
raw/
|
||||
prepared/
|
||||
|
||||
plugins/
|
||||
text/
|
||||
translation/
|
||||
audio/
|
||||
video/
|
||||
image/
|
||||
1c/
|
||||
|
||||
docs/
|
||||
```
|
||||
|
||||
## Development Stages
|
||||
|
||||
1. Описать реестр моделей и формат model card.
|
||||
2. Поднять базовый inference API для текстовых моделей.
|
||||
3. Добавить плагины задач и их минимальные пайплайны.
|
||||
4. Для 1С сначала сделать RAG и инструменты работы с метаданными.
|
||||
5. После накопления качественных примеров добавить LoRA/adapter fine-tuning для 1С.
|
||||
6. Тяжелые плагины постепенно выносить в отдельные контейнеры или сервисы.
|
||||
|
||||
## First Inference
|
||||
|
||||
Шаблон первого GPU inference-сервиса находится в `core/deploy/docker-gpu/vllm`.
|
||||
|
||||
Runbook: `docs/runbooks/first-vllm-inference.md`.
|
||||
Deployment runbook: `docs/runbooks/deploy-vllm.md`.
|
||||
GPU preflight: `docs/runbooks/gpu-host-preflight.md`.
|
||||
|
||||
Полный GPU-контур после настройки SSH-доступа:
|
||||
|
||||
```powershell
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_gpu_stack.ps1 -Pull
|
||||
```
|
||||
|
||||
Посмотреть план без запуска:
|
||||
|
||||
```powershell
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/deploy_gpu_stack.ps1 -PlanOnly -Pull
|
||||
```
|
||||
|
||||
Первая базовая текстовая модель: `Qwen/Qwen3-4B-Instruct-2507`.
|
||||
|
||||
Первая GGUF-модель для 1С/code экспериментов: `bartowski/mistralai_Devstral-Small-2-24B-Instruct-2512-GGUF`, quant `Q4_K_M`.
|
||||
|
||||
Исследование следующих кандидатов под 1С: `docs/research/1c-model-candidates.md`.
|
||||
|
||||
Набор моделей по одному кандидату на каждый плагин: `plugins/model-bundle.yaml`.
|
||||
|
||||
Загрузка набора:
|
||||
|
||||
```powershell
|
||||
powershell -NoProfile -ExecutionPolicy Bypass -File scripts/download_plugin_model_bundle.ps1
|
||||
```
|
||||
|
||||
Проверка model cards:
|
||||
|
||||
```powershell
|
||||
python scripts/validate_model_cards.py
|
||||
```
|
||||
|
||||
Все базовые локальные проверки:
|
||||
|
||||
```powershell
|
||||
python scripts/check_all.py
|
||||
```
|
||||
|
||||
Проверка локального хранилища моделей:
|
||||
|
||||
```powershell
|
||||
python scripts/check_model_storage.py --print
|
||||
```
|
||||
|
||||
Сводный статус платформы:
|
||||
|
||||
```powershell
|
||||
python scripts/collect_platform_status.py --print
|
||||
```
|
||||
|
||||
Список моделей:
|
||||
|
||||
```powershell
|
||||
python scripts/list_model_cards.py
|
||||
```
|
||||
|
||||
Загрузка модели в локальное хранилище:
|
||||
|
||||
```powershell
|
||||
python scripts/download_hf_model.py qwen3-4b-instruct-2507 --dry-run
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/download-model.md`.
|
||||
|
||||
Чат для ручной проверки моделей:
|
||||
|
||||
```powershell
|
||||
python scripts/model_chat_server.py
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/model-chat-testbench.md`.
|
||||
|
||||
## 1C RAG
|
||||
|
||||
Стартовый контур 1С находится в `plugins/1c`.
|
||||
|
||||
Подготовка RAG-корпуса:
|
||||
|
||||
```powershell
|
||||
python scripts/build_1c_knowledge_base.py
|
||||
```
|
||||
|
||||
Отдельные шаги, если нужно управлять ими вручную:
|
||||
|
||||
```powershell
|
||||
python scripts/prepare_1c_rag_corpus.py
|
||||
```
|
||||
|
||||
Построение локального lexical index:
|
||||
|
||||
```powershell
|
||||
python scripts/build_1c_rag_index.py
|
||||
```
|
||||
|
||||
Построение локального SQLite vector index:
|
||||
|
||||
```powershell
|
||||
python scripts/build_1c_rag_vector_index.py
|
||||
python scripts/search_1c_rag_hybrid.py "реквизиты справочника номенклатура" --profile metadata --limit 5
|
||||
```
|
||||
|
||||
Сборка 1С RAG prompt:
|
||||
|
||||
```powershell
|
||||
python scripts/ask_1c_rag.py "Какие реквизиты есть у справочника Номенклатура?" --print-prompt
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/1c-rag.md`.
|
||||
|
||||
Проверка 1С-плагина:
|
||||
|
||||
```powershell
|
||||
python scripts/check_1c_plugin.py --print
|
||||
```
|
||||
|
||||
Контур безопасного взаимодействия с живыми базами 1С: `docs/runbooks/1c-live-interaction.md`.
|
||||
|
||||
Проверка offline/static контура верификации 1С-адаптера:
|
||||
|
||||
```powershell
|
||||
python scripts/check_1c_adapter_verification_stack.py --base-id upo_test
|
||||
```
|
||||
|
||||
Для нестандартных endpoint'ов добавьте `--rest-adapter-url ... --mcp-url ...`;
|
||||
по умолчанию проверяются текущие стендовые URL. Несколько баз можно передать
|
||||
после одного `--base-id`. Чтобы принимать только свежие persisted-отчеты,
|
||||
добавьте `--max-report-age-seconds <seconds>`.
|
||||
Persisted validation also checks
|
||||
`reports/1c-sql/<base-id>/saved-state-copy-plan.json`: the plan must be for
|
||||
the requested base, be `plan_ready`, contain active `Config`/`ConfigCAS` source
|
||||
rows, and show no `ConfigSave`/`ConfigCASSave` target collisions.
|
||||
PowerShell deploy/verify defaults saved-state preparation to `ConfigCASSave`;
|
||||
pass `-SavedStateTable ConfigSave` when checking the base save layer instead.
|
||||
|
||||
Сохранить машинно-читаемый итог этой проверки:
|
||||
|
||||
```powershell
|
||||
python scripts/check_1c_adapter_verification_stack.py --base-id upo_test --json --report reports/1c-sql/upo_test/adapter-verification-stack-check.json
|
||||
```
|
||||
|
||||
Metadata snapshots:
|
||||
|
||||
```powershell
|
||||
python scripts/validate_1c_metadata_snapshot.py plugins/1c/metadata/examples/metadata.example.json
|
||||
python scripts/convert_1c_metadata_to_rag.py --input plugins/1c/metadata/examples/metadata.example.json --output plugins/1c/rag/sources/metadata.example.generated.md
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/1c-metadata-snapshot.md`.
|
||||
|
||||
## 1C Training Data
|
||||
|
||||
Проверка и подготовка синтетического training example:
|
||||
|
||||
```powershell
|
||||
python scripts/validate_1c_training_data.py plugins/1c/training/examples/instruction.examples.jsonl
|
||||
python scripts/prepare_1c_training_data.py --input plugins/1c/training/examples/instruction.examples.jsonl --output plugins/1c/training/prepared/train.chat.jsonl
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/1c-training-data.md`.
|
||||
|
||||
LoRA training:
|
||||
|
||||
```powershell
|
||||
python scripts/preflight_1c_training.py
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/1c-lora-training.md`.
|
||||
|
||||
## Evals
|
||||
|
||||
Проверка eval-наборов:
|
||||
|
||||
```powershell
|
||||
python scripts/validate_evals.py
|
||||
python scripts/run_1c_smoke_eval.py --print
|
||||
```
|
||||
|
||||
Runbook: `docs/runbooks/evals.md`.
|
||||
Reference in New Issue
Block a user