Локальный сервис для генерации структурированного контракта операции (operation + parameters), проверки валидности, генерации Lua-кода и безопасного выполнения в Docker sandbox.
По текстовой задаче сервис:
- Генерирует структурированный контракт через локальную Ollama-модель.
- Валидирует данные по схеме и правилам выражений.
- Генерирует Lua из Jinja2-шаблонов.
- Проверяет синтаксис Lua и выполняет код в изолированной песочнице.
- Возвращает структурированный
feedbackдля итеративного исправления через/ask.
Проект ориентирован на локальный/offline запуск и воспроизводимые demo-сценарии.
- ✅ Локальная open-source LLM через Ollama
- ✅ Отсутствие внешних AI-вендоров в runtime
- ✅ Генерация Lua-кода по запросу на естественном языке
- ✅ Минимум одна итерация уточнения/доработки (
/ask) - ✅ Проверяемая валидация результата (schema, expression, Lua syntax, sandbox)
- ✅ One-line запуск через
docker-compose up --build - ✅ C4-артефакт архитектуры в репозитории (
docs/diagrams/day5_architecture.mmd) - ✅ Подготовлены артефакты презентации и демо-видео (
docs/deliverables/) - ⏳ Подтвержденный peak VRAM <= 8 GB в
docs/verification/vram_measurement.md(заполнить фактом измерения)
- ✅ Эндпоинты:
/health,/generate,/ask,/execute - ✅ Runtime-управление моделью:
/models,/models/select - ✅ Runtime-управление профилем генерации:
/profiles,/profiles/select - ✅ Двухфазная генерация: JSON (generate) -> YAML (follow-up)
- ✅ Единый формат ошибок:
field,message,expected,got,hint,source - ✅ Генерация Lua через Jinja2 шаблоны (
templates/octapi/*.jinja2) - ✅ Безопасный sandbox (Docker) + логирование runtime в
logs/runtime.log - ✅ UI с примерами, историей и визуальным статусом этапов
- ✅ Скрипт запуска
scripts/run_api_8888.shс авто-проверкой/подъемом Ollama
- Локальная инференс-модель через Ollama (
localhost:11434). - Двухфазная генерация:
- первичная генерация в JSON-режиме,
- автокоррекция/уточнение в YAML-режиме.
- Единый формат ошибок:
field,message,expected,got,hint,source.
- Поддержка 7 операций:
array_lastmath_incrementobject_cleanarray_filterdatetime_isodatetime_unixensure_array_field
- Безопасное выполнение Lua:
- предварительная синтаксическая проверка,
- изоляция в Docker с ограничениями.
- Web UI с примерами, историей, статусами пайплайна, выбором модели и профиля.
- Runtime-эндпоинты для моделей и профилей.
- API:
app/main.py - Валидация/нормализация:
app/services/yaml_pipeline.py - Генерация Lua:
app/services/lua_codegen.py+templates/octapi/*.jinja2 - Песочница:
app/services/sandbox_executor.py - Сессии:
app/services/session_store.py - UI:
templates/index.html
Диаграммы:
docs/diagrams/day5_architecture.mmddocs/diagrams/mvp_day1_day4_flow.mmd
Основные эндпоинты:
GET /health— статус сервиса, модели и docker runtime.POST /generate— первичная генерация структурированного контракта.POST /ask— уточнение/исправление в рамках сессии.POST /execute— валидация + генерация Lua + выполнение.
Управление моделью/профилем в рантайме:
GET /modelsPOST /models/selectGET /profilesPOST /profiles/select
- Инициализируйте submodule:
git submodule update --init --recursive- Запустите стек:
docker-compose up --build- Откройте UI:
- Остановка:
docker-compose down- Python 3.11+
- Docker
- Ollama
python -m venv .venv
source .venv/bin/activate
pip install -r requirements.txt./scripts/run_api_8888.shСкрипт:
- выставляет env-переменные по умолчанию,
- проверяет доступность Ollama,
- при необходимости пытается поднять
ollama serve, - запускает API на
8888.
Ключевые переменные окружения:
OLLAMA_BASE_URL(по умолчаниюhttp://localhost:11434)OLLAMA_MODEL(по умолчаниюqwen2.5-coder:1.5b)SCHEMA_PATH(по умолчаниюschemas/mws_operation.schema.json)TEMPLATES_DIR(по умолчаниюtemplates/octapi)DOCKER_IMAGESANDBOX_TIMEOUT_SECONDSSANDBOX_MEMORY_MBSANDBOX_NETWORK_MODE
Список установленных моделей:
curl -s http://localhost:11434/api/tagsФоновая загрузка модели:
curl -N -sS -X POST http://localhost:11434/api/pull \
-d '{"name":"deepseek-coder:6.7b","stream":true}'Переключение активной модели для API:
curl -sS -X POST http://127.0.0.1:8888/models/select \
-H 'Content-Type: application/json' \
-d '{"model":"qwen2.5-coder:1.5b"}'Удаление модели из Ollama:
curl -sS -X DELETE http://localhost:11434/api/delete \
-d '{"name":"qwen2.5-coder:1.5b-strict"}'Эталонная модель для проверки:
ollama pull qwen2.5-coder:1.5bФиксированные параметры генерации (заданы в коде):
num_ctx=4096num_predict=256batch=1parallel=1
Источник параметров: app/services/ollama_client.py.
Перед отправкой в жюри проверьте:
- One-line запуск работает:
docker-compose up --build- Локальная модель доступна:
curl -s http://localhost:11434/api/tags- API здоров:
curl -s http://localhost:8000/health- Эталонный сценарий проходит:
curl -sS -X POST http://localhost:8000/generate \
-H 'Content-Type: application/json' \
-d '{"prompt":"Get last email from the list"}'- Верификация VRAM заполнена фактами измерений (
nvidia-smi), неPENDING:
docs/verification/vram_measurement.md
Базовый запуск:
pytest -q testsФокусный прогон Day1-Day4:
pytest -q tests/test_day1_generate.py tests/test_day2_generate.py tests/test_day3_execute.py tests/test_day4_runtime_contract.pyМатериалы по верификации:
docs/verification/reference_scenario.mddocs/verification/offline_verification.mddocs/verification/day5_delivery_checklist.md
Карта документации:
docs/README.md
Рекомендуемые разделы:
- Runbook:
docs/ubuntu_runbook.md - Deliverables:
docs/deliverables/ - Planning:
docs/planning/ - История по дням:
docs/days/ - Roadmap:
docs/roadmap/
Генерируемый код рассматривается как недоверенный вход. Для процедуры проверки, ограничений sandbox и итоговой верификации см.:
docs/verification/docs/deliverables/protocollab_integration.md
Используемые модели и сторонние компоненты лицензируются отдельно.
Перед внешней поставкой проверьте условия лицензий в метаданных моделей и в third_party/.