О проекте
Команда: dr1mt1am
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP
Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам
Суть
AI-симулятор управления Астаной: пользователь выбирает пять решений в бюджете 100, детерминированный движок считает качество жизни до/после, AI по кнопке формирует анализ сценария.
Как устроено
Python-движок (validator, simulator, scoring) проверяет набор решений, применяет эффекты и синергии, считает Score и слабейший район; FastAPI отдаёт каталог и результаты React-дашборду. Отдельный AI-слой собирает payload из рассчитанных значений и запрашивает у OpenAI анализ на русском; ошибка AI не затирает результаты симуляции. Есть оптимизатор сценариев.
Ключевые решения
- детерминированный скоринг
- валидация сценария
- синергия мер
- оптимизатор сценариев
- LLM-анализ по рассчитанным значениям
Метрики
Эталонный сценарий: Score 52.56 → 56.54 (+3.99), бюджет 95/100, критические показатели 2 → 0, Нура 49.18 → 52.96
Стек
Python · FastAPI · React · TypeScript · Vite · unittest
Модели
OpenAI (gpt-5.6-terra)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-4cc0e4be-dr1mt1am.
README
README.mdАким на 5 часов
AI-симулятор управления Астаной: пять решений, бюджет 100 единиц и сравнение качества жизни до и после. Детерминированный движок рассчитывает результат, AI объясняет его по отдельному запросу.
React + Python API: запуск двумя терминалами
Терминал 1, из корня репозитория (Python 3.11, существующее окружение .venv):
.\.venv\Scripts\Activate.ps1
python -m pip install -r requirements.txt
python -m uvicorn api.app:app --reload --port 8000
Если окружения ещё нет, сначала выполните python -m venv .venv. Без активации
используйте .\.venv\Scripts\python.exe вместо python.
Терминал 2, также из корня (Node.js 22.18+ или 24+):
cd ui
npm ci
npm run dev
Откройте http://localhost:5173. Backend: http://localhost:8000; описание API: http://localhost:8000/docs. Vite использует фиксированный порт 5173. Каталог загружается из Python; симуляция и проверка решений выполняются engine. Кнопка «Загрузить демо-сценарий» заполняет пять решений; затем нажмите «Симулировать». Изменение решений очищает прежние результаты и отменяет ожидание устаревшего ответа.
Симуляция работает без ключа. AI запускается только кнопкой «Сформировать AI-анализ».
Для него задайте OPENAI_API_KEY в окружении терминала 1 до запуска API;
OPENAI_MODEL необязателен. Ошибка AI сохраняет результаты симуляции на экране.
Ключ никогда не передаётся React. Python автоматически не читает .env.
FRONTEND_ORIGIN на сервере по умолчанию равен http://localhost:5173.
VITE_API_URL в ui/.env.local по умолчанию равен http://localhost:8000
(образец: ui/.env.example). При изменении адресов согласуйте эти настройки и
перезапустите процессы. Все переменные VITE_* публичны: секреты в них запрещены.
Проверки из корня, без настоящего OpenAI-запроса:
python -B -m unittest discover -s tests
cd ui
npm test
npm run build
Frontend-тесты получают fixtures через Python API TestClient; выбирают Python из
корневого .venv или переменной PYTHON, иначе используют python из PATH.
Контракт endpoints описан в api/README.md.
Эталонный сценарий: Score 52.56 → 56.54, изменение +3.99, бюджет 95 / 100, остаток 5, критические показатели 2 → 0, слабейший район — Нура, 49.18 → 52.96. Синергия: M10 + M12 в Нуре.
AI smoke test
Ручная проверка настоящего OpenAI API на эталонном сценарии. Запускайте из корня
репозитория в окружении с установленными зависимостями из requirements.txt.
В PowerShell:
.\.venv\Scripts\Activate.ps1
$env:OPENAI_API_KEY="your-api-key"
$env:OPENAI_MODEL="gpt-5.6-terra"
python scripts/ai_smoke_test.py
OPENAI_MODEL необязателен: по умолчанию AI layer использует gpt-5.6-terra.
Ответ запрашивается на русском языке. Скрипт выводит рассчитанные движком значения,
название модели и разделы AI-анализа. Без ключа запрос не выполняется, выводится
сообщение об отсутствующем OPENAI_API_KEY, код завершения — 2.
Другие коды ошибок: 1 — невалидная/неполная симуляция, 3 — ошибка запроса,
4 — некорректный ответ AI; успешный запуск возвращает 0.
Переменные читаются только из окружения; .env.example служит примером,
файл .env автоматически не загружается. Удалить ключ из текущей сессии PowerShell:
Remove-Item Env:OPENAI_API_KEY
Unit tests работают без сети и не выполняют реальные API-запросы.
Ручной smoke test находится вне tests/ и не запускается этой командой:
python -B -m unittest discover -s tests
Авторы коммитов
История коммитов
- 2026-09-23 17:41Merge branch 'integration'UziSQL
- 2026-09-23 17:41Merge branch 'main' of https://github.com/BAITC-Hacks/hack-4cc0e4be-dr1mt1amUziSQL
- 2026-09-23 17:38chore: finalize React and FastAPI integrationUziSQL
- 2026-09-23 16:51Merge remote-tracking branch 'origin/frontend-ui' into integrationUziSQL
- 2026-09-23 15:56feat: finalize AI scenario analysisUziSQL
- 2026-09-23 16:40chore: ignore Python cache filesaldiyarzholmbet-web
- 2026-09-23 15:39feat: add AI scenario analysisUziSQL
- 2026-09-23 16:35feat: add scenario optimizer featuresaldiyarzholmbet-web
Все коммиты (18)
- 2026-09-23 15:30feat: add AI scenario analysisUziSQL
- 2026-09-23 16:24Merge lead-core into feature-scenario-optimizeraldiyarzholmbet-web
- 2026-09-23 16:23feat: add city simulator frontend dashboarddarigakudaibergen
- 2026-09-23 16:23Merge remote-tracking branch 'origin/lead-core' into feature-scenario-optimizeraldiyarzholmbet-web
- 2026-09-23 15:17feat: implement simulation and scoring engineUziSQL
- 2026-09-23 15:06feat: add scenario validatorUziSQL
- 2026-09-23 14:49feat: add project guidance, typed models and static dataUziSQL
- 2026-09-23 15:44Update main.pyaldiyarzholmbet-web
- 2026-09-23 14:16Stop tracking local Python virtual environmentUziSQL
- 2026-09-23 12:57Add project filesaldiyarzholmbet-web
Структура репозитория (66 файлов)
.agents/skills/ai-analysis/SKILL.md .agents/skills/code-verification/SKILL.md .agents/skills/simulation-engine/SKILL.md .env.example .gitignore AGENTS.md README.md ai/__init__.py ai/analyzer.py ai/models.py ai/payload.py ai/prompts.py api/README.md api/__init__.py api/app.py api/schemas.py api/serializers.py docs/ARCHITECTURE.md docs/PROJECT_SPEC.md docs/TASKS.md engine/__init__.py engine/constants.py engine/data.py engine/models.py engine/scoring.py engine/simulator.py engine/validator.py main.py requirements.txt scripts/ai_smoke_test.py tests/test_ai_analyzer.py tests/test_ai_payload.py tests/test_api.py tests/test_scoring.py tests/test_simulator.py tests/test_static_data.py tests/test_validator.py ui/.env.example ui/.gitignore ui/README.md ui/checks/catalog.test.mjs ui/checks/client.test.mjs ui/checks/fixtures.mjs ui/checks/render.test.mjs ui/index.html ui/package-lock.json ui/package.json ui/public/images/initiatives/.gitkeep ui/src/App.tsx ui/src/api/CatalogContext.tsx ui/src/api/client.ts ui/src/api/types.ts ui/src/components/CityRadar.tsx ui/src/components/Initiatives.tsx ui/src/components/Overview.tsx ui/src/components/Results.tsx ui/src/data/catalog.ts ui/src/hooks/useScenario.ts ui/src/main.tsx ui/src/styles/dashboard.css ui/src/styles/results.css ui/src/types/index.ts ui/src/utils/presentation.ts ui/src/vite-env.d.ts ui/tsconfig.json ui/vite.config.ts
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.