AAYMA
RU
Войти

Аким на 5 часов

AI-симулятор управления Астаной: пользователь выбирает пять решений в бюджете 100, детерминированный движок считает качество жизни до/после, AI по…

Рабочий MVP
Команда «dr1mt1am» 3💬 0 комментариевс 23 сентября 2026 г.

О проекте

Команда: 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
Звёзды
⭐ 0
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
18
Авторы
3
Файлы
66
Ветки
5

Авторы коммитов

UziSQL 11aldiyarzholmbet-web 6darigakudaibergen 1

История коммитов

  • 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
Ветки (5)

Обсуждение 0 комментариев

Войдите, чтобы комментировать

Пока нет комментариев — будьте первым.