AAYMA
RU
Войти

AKIM

Лаборатория бюджетных решений для «Аким на 5 часов»: V1 считает AQOL Score по правилам ТЗ и ищет альтернативы, экспериментальный V2 моделирует город…

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

О проекте

Команда: Attractor
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Рабочий MVP

Задача кейса: «Аким на 5 часов»: городской симулятор, распределяющий бюджет по 5 направлениям и 5 районам

Суть

Лаборатория бюджетных решений для «Аким на 5 часов»: V1 считает AQOL Score по правилам ТЗ и ищет альтернативы, экспериментальный V2 моделирует город во времени (сценарий «Снегопад»: бригады, очереди, обращения).

Как устроено

Data Gate превращает исходный датасет в проверенный снимок с отчётом о качестве. На нём evaluator V1 считает эффекты мер с лагами, синергиями, clip и штрафами, валидирует портфель (5 мер, ≤100, ≤2 мер одного направления, конфликты) и раскладывает Score по вкладам. Альтернативы ищутся перебором одиночной замены меры или района. Отчёт с evidence собирается на сервере; OpenAI-адаптер есть, но без ключа работает rule-based и живым вызовом не проверялся. V2 — отдельный worker на PostgreSQL с событиями, checkpoint и ветками, парными экспериментами по seed и экспортом. API на FastAPI, фронтенд React/TS с картой; всё поднимает Docker Compose.

Ключевые решения

  • deterministic scoring engine
  • single-swap local search
  • discrete-event simulation
  • paired-seed experiments
  • data quality gate
  • API-first contracts (OpenAPI/JSON Schema)

Метрики

Контрольный Score 56.54307 (cost 95); лучшая найденная альтернатива 57.20556 за 100

Особенности

Официальная модель V1 отделена от исследовательской V2, которая не влияет на Score. Архитектура API-first с JSON Schema контрактами и Data Gate. В README честно указано, что готово, что осталось preview и что LLM вживую не проверялся. Видеообзор лежит в репозитории.

Стек

Python · FastAPI · React · TypeScript · Vite · PostgreSQL · SQLite · nginx · Docker Compose · GitHub Actions

Модели

OpenAI


Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-d4922f7f-attractor.

README

README.md
Логотип AKIM

AKIM

Проверяемая лаборатория бюджетных решений для городского управления

Python 3.11+ · FastAPI · React + TypeScript · Docker Compose

Запуск · Демо · Архитектура · API · Планы

Городские решения конкурируют за один бюджет, а их эффект трудно проверить до запуска. AKIM рассчитывает Astana Quality of Life Score (AQOL) по условию «Аким на 5 часов» и показывает проверяемые причины изменения результата.

AKIM в действии — видеообзор

Короткое знакомство с AKIM и интерфейсом городской лаборатории — за одну минуту.

Смотреть видеообзор AKIM: что изменит один снегопад?

▶ Смотреть видеообзор · 60 секунд · Full HD

Два режима

V1 · Задание хакатонаV2 · Исследовательская симуляция
ВопросКак пять мер меняют заданный Score?Как город развивается во времени при разных решениях?
Основа5 условных районов, 14 мер, бюджет 100Жители, инфраструктура, службы, городские финансы, внешняя экономика
ДинамикаИтог по формуле с лагомСобытия, очереди, передвижения, проекты, сезонность
AIОбъясняет расчёт и исследует альтернативыПомогает ставить эксперименты, общаться с агентами, анализировать процессы
Доказательство качестваКонтрольные числа и тесты правилПроверка механизмов, калибровка, исторические тесты, неопределённость

V1 сохраняет исходные правила без изменений. V2 получает отдельные версии данных, моделей и метрик. Модельные реакции жителей не меняют официальный Score V1.

Текущий статус

Реализован бэкенд V1: API, evaluator, Data Gate, локальный поиск альтернатив, отчёт с evidence. Фронтенд из актуального main подключён к API через адаптер; Compose поднимает оба слоя. В этой ветке добавлен бэкенд V2-demo: отдельный worker, PostgreSQL, события, часы, checkpoint/ветки, парные эксперименты и экспорт. Интерфейс из codex/aygerim-v2-preview объединён с этим бэкендом: кнопка «Снегопад · V2» запускает реальный worker через API. Остальные исследовательские экраны пока остаются preview; расчёт V1 доступен по /?mode=v1. AI и альтернативы V1 пока доступны через API/Swagger, но не подключены к кнопкам текущего интерфейса. LLM-адаптер проверен тестовыми ответами; живой вызов провайдера в этом прогоне не выполнялся. Без ключа явно возвращается mode: rule-based.

ВозможностьРеализацияДоказательство
Расчёт AQOLЭффекты, лаги, синергии, clip, штрафы и декомпозицияКонтрольный Score 56.54307
Проверка портфеляРовно 5 уникальных мер, бюджет ≤100, ≤2 мер одного направления, районы и конфликтыНевалидный набор получает score: null
Data Gate → APIИсходник → quality report → опубликованный snapshot → evaluatorV1 закреплён за одним снимком
АльтернативыПеребор одной замены меры/района; фиксация решенийНайден вариант 57.20556 за 100
ОбъяснениеСильные стороны, риски, последствия и проверенные предложенияЧисла и формулировки берутся из серверного evidence
API-firstOpenAPI, проверка версий, структурные ошибкиHTTP integration tests
V2 «Снегопад»6 синтетических районов, транспортный спрос, бригады, очереди и обращенияpython -m scripts.demo_v2
V2 лабораторияСохраняемые прогоны, идемпотентные команды, replay, ветки, парные seedЭкспорт manifest/state/events + интервалы различий
V2 стратегический прототипКогорты и миграция, жильё, проекты, проводки, синтетические голосованияБалансы населения и денег; статус каждого модуля в /v2/catalog

Полная исследовательская платформа из ТЗ не объявляется завершённой: транспорт пока агрегированный, нет мультимодального графа, калибровки, модулей озеленения/безопасности и полного десятилетнего политико-бюджетного сценария. Реализованное и ограничения V2 · Контракт для фронтенда.

Быстрый старт

Нужно: запущенный Docker Desktop в режиме Linux containers (или Docker Engine) с Docker Compose v2.20+ (или v5), Git и интернет для первой сборки. Python/Node на хосте для этого способа не нужны. Объединённая версия находится в main:

git clone --branch main https://github.com/BAITC-Hacks/hack-d4922f7f-attractor.git
cd hack-d4922f7f-attractor
docker compose up --build -d --wait

После клонирования запуск всего проекта — одна последняя команда, без обязательного .env и без ключей. Compose собирает web (React + nginx) и api (FastAPI + engine + Data Gate), worker V2 и db (PostgreSQL); ждёт healthcheck. База не публикует порт на хост. Для стабильного V1 без V2 сохранена ветка fix/backend-readiness.

Куда открытьЧто находится
localhost:8080Новый интерфейс: API V1 и реальный прогон «Снегопад · V2»; mock-элементы подписаны
localhost:8080/?mode=v1Полный калькулятор V1: выбор пяти мер, валидация и расчёт
localhost:8000/docsSwagger: расчёт, альтернативы, анализ и Data Gate
localhost:8000/healthГотовность бэкенда и версии снимка
localhost:8000/v2/catalogV2: снимок, параметры, единицы, ограничения модулей
localhost:8000/v2/healthHeartbeat отдельного worker V2

В новом интерфейсе выберите «Снегопад · V2» и дождитесь 360 / 360 мин · completed. Для V1 откройте «Расчёт V1» → «Загрузить контрольный сценарий» → «Рассчитать»: ожидаемый Score — 56.54307.

Проверьте сквозной сценарий (каталог → расчёт → альтернативы → отчёт):

docker compose exec -T api python -m scripts.demo_backend
docker compose exec -T api python -m scripts.demo_backend --url http://web/api
docker compose exec -T api python -m scripts.demo_v2

Вторая команда проверяет также nginx-прокси, которым пользуется браузер. Ожидается score: 56.54307, cost: 95, analysisMode: rule-based. Третья воспроизводит снегопад, ветку с переброской бригады, сравнение по трём seed, evidence-отчёт и проверяет ZIP-экспорт. Она не вызывает платный LLM.

Настройки, логи, остановка и повторный запуск

Необязательная настройка: скопируйте .env.example в .env (PowerShell: Copy-Item .env.example .env; Linux/macOS: cp .env.example .env). Если файл уже есть, отредактируйте его — не перезаписывайте секреты.

AKIM_WEB_PORT и AKIM_API_PORT меняют порты хоста (по умолчанию 8080 и 8000). Например, если порт занят, задайте в .env AKIM_WEB_PORT=8081 или AKIM_API_PORT=8001. Внутри контейнеров адреса не меняются. После изменения .env повторите команду запуска. Compose подставляет параметры из .env; переменные оболочки имеют приоритет.

docker compose ps
docker compose logs --tail=100 api worker db
docker compose down
docker compose up --build -d --wait

down останавливает контейнеры, но сохраняет данные в named volumes data-gate и v2-postgres. Не добавляйте -v, если снимки/импорты нужны: docker compose down -v удаляет их. Не запускайте несколько API workers или параллельный CLI writer на этом volume. API работает от непривилегированного пользователя; наружу порты привязаны только к localhost.

Если Docker недоступен, сначала запустите Docker Desktop и проверьте docker version. Если healthcheck не проходит, посмотрите docker compose logs api. Подложка карты загружается из внешнего сервиса и требует интернета; расчёт выполняет локальный API. Первая сборка скачивает образы, npm- и Python-зависимости.

Запуск без Docker

Нужно: Python 3.11+, доступ к PyPI для установки. БД и ключ LLM для demo не нужны. Из корня клонированного репозитория, PowerShell:

python -m venv .venv
.venv/Scripts/python -m pip install -c requirements.lock ".[test]"
.venv/Scripts/python -m unittest discover -s tests -t .
.venv/Scripts/python -m uvicorn services.api.app:app --host 127.0.0.1 --port 8000
Linux / macOS
python3 -m venv .venv
.venv/bin/python -m pip install -c requirements.lock ".[test]"
.venv/bin/python -m unittest discover -s tests -t .
.venv/bin/python -m uvicorn services.api.app:app --host 127.0.0.1 --port 8000

Swagger UI · Каталог. API сам импортирует и публикует официальный исходник. Хранилище: var/data-gate относительно текущего каталога. Запускать один worker. Для V2 запустите ещё один терминал из того же каталога: .venv/Scripts/python -m engine.v2.infrastructure.worker (Linux/macOS: .venv/bin/python -m engine.v2.infrastructure.worker). Без AKIM_DATABASE_URL API и worker используют локальный SQLite-файл var/v2/state.sqlite3; в Compose всегда используется PostgreSQL. AKIM_RUN_TOKEN защищает изменяющие V2-запросы; пустое значение допустимо только для локального однопользовательского демо. AKIM_ADMIN_TOKEN отдельно защищает Data Gate. Это запуск только API. Для локальной разработки интерфейса дополнительно нужны Node.js 22 и npm: в apps/web выполните npm ci и запустите npm run dev с VITE_API_PROXY=true в окружении. Без этого переключателя калькулятор /?mode=v1 использует fixtures; новый preview всегда обращается к локальному API через /api. В Compose нужный адрес /api встраивается автоматически при сборке. Основная точка входа — services.api.app:app; старый api.main оставлен как legacy, Compose его не запускает. Прототип api/v2.py из preview-ветки также сохранён как legacy: он не подключён к production-router и не подменяет сохраняемые прогоны V2.

Демо бэкенда

Во втором терминале, пока сервер запущен:

.venv/Scripts/python -m scripts.demo_backend

Проверяются каталог/версии → контрольный расчёт → отказ неполному набору → альтернативы → evidence-backed report. Сохранённый реальный HTTP-прогон: backend-demo.json.

Для POST /v1/evaluate в Swagger:

{
  "selections": [
    {"measureId": "M7", "districtId": "nura"},
    {"measureId": "M8", "districtId": "nura"},
    {"measureId": "M10", "districtId": "nura"},
    {"measureId": "M12", "districtId": null},
    {"measureId": "M5", "districtId": "saryarka"}
  ]
}

Результат: valid: true, cost: 95, score: 56.54307. aqolScore — алиас Score. Для интеграции передавайте также versions целиком из GET /catalog.

Архитектура

СлойОтветственностьРеализация
Аким / APIHTTP, доступ к импорту, версии, сборка use casesservices/api
ГородВалидация, точный расчёт, локальные альтернативыengine/v1
Динамический городВременные переходы, ledger, очереди, когорты, проектыengine/v2/domain
Прогоны и лабораторияКоманды, checkpoint, replay, ветвление, ансамблиengine/v2/application
Worker и хранилищеОтдельный процесс, атомарные пакеты, PostgreSQL; локально SQLiteengine/v2/infrastructure
ДанныеПарсеры, паспорт, quality gate, snapshots, lineagedata_gate
AI-аналитикВыбор подтверждённых фактов, read-only tools, fallbackai

Домен/application движка не импортируют FastAPI, OpenAI SDK или Data Gate. Composition root services/api/runtime.py переводит опубликованный payload в immutable модель. Пользовательские импорты не подменяют официальный V1. create_official_service() оставлен как загрузчик эталонного fixture.

Брифы для будущих изображений: README-VISUALS.md. Целевая архитектура с V2: docs/02-architecture.md.

Как считается V1

I′ = clip(I + Σ effect × (8 − lag) / 8 + synergy, 0, 100)
Ddistrict = Σ weight × I′
Score = 0.7 × Davg + 0.3 × min(Ddistrict) − Ncritical

Нужно ровно пять мер, не больше двух одного направления, а не по одной каждой категории. Промежуточные значения не округляются. Критичность — строго ниже 40; остаток бюджета бонуса не даёт. LLM не считает Score. Полная спецификация.

Проверенные результаты

Локально: Windows/Python 3.12.10; проверены Linux-контейнеры через Docker Desktop. CI для Python 3.11/3.12 и Compose добавлен; удалённый результат пока не подтверждён.

ПроверкаРезультат
Автотесты140 Python (139 общий запуск + 1 новый контрактный отдельно), 3 Node; без многократного полного прогона
База без мер (диагностика)52.55768
Контрольный портфель за 9556.54307
Декомпозиция прироста+0.85064 +1.13475 +2 = +3.98539
Лучшая найденная локальная альтернатива57.20556, стоимость 100
Официальный импорт0 critical / 0 warning
Установкаpip install, сборка wheel, ресурсы и HTTP smoke вне checkout
Статические проверкиRuff, pip check, синхронизация OpenAPI
Docker ComposeAPI, worker, PostgreSQL и web healthy; V1 через nginx и V2 HTTP-demo прошли
V2, три парных seedМедиана изменения service-unavailability-hours: −68.8702, p05…p95 −70.8670…−63.4259; дополнительный расход 5 000 модельных KZT

V2-числа — результат синтетического опыта за 840 модельных минут, а не прогноз реального города. Интервал по трём seed иллюстрирует воспроизводимость, но слишком мал для исследовательского вывода. Полный протокол и исходы: v2-demo.json. Бюджет выполним в обеих ветках; равенство фактических расходов не заявляется.

API-first контракты

EndpointНазначение
GET /health, GET /catalogГотовность, каталог, правила, версии, manifest
POST /v1/validateВалидация без LLM
POST /v1/evaluateРасчёт; неправильный портфель → 200 с valid: false
POST /v1/alternativesОдна замена; fixedSelections, allowedDistricts, resultLimit
POST /v1/analysisОтчёт с evidence, явными mode и статусом fallback
POST /datasets/importsТекстовый импорт с паспортом; admin token
GET /datasets/imports/{id}/reportReport, mapping, preview; admin token
POST /datasets/imports/{id}/publishПубликация с принятием warnings; admin token
GET /datasetsНаборы и manifest; admin token
GET /v2/catalog, GET /v2/healthДанные/допущения V2 и состояние worker
POST /scenarios, POST /runsImmutable-сценарий и отдельный прогон с seed
POST /runs/{id}/commandsЧасы и управленческие решения; версия и idempotency key
POST /runs/{id}/checkpoints, /branches, /replayСохранение, ветки и проверка воспроизводимости
GET /runs/{id}/events, /metrics, /trace/{eventId}SSE с cursor, ряды, evidence и причинная трасса
GET /runs/{id}/population, /development, /flows, /politicsСтратегические подсистемы и проводки
POST /experiments, GET /experiments/{id}Асинхронные парные ансамбли; эмпирические интервалы
POST /assistant/messages, GET /runs/{id}/exportRule-based evidence-отчёт V2 и ZIP воспроизведения

Неверная структура → 422; устаревшие версии / запрещённая публикация → 409; нет доступа → 403; body >1 200 000 байт → 413. Ошибки: error: {code, field, message}. Контракты и расхождения с черновым frontend-клиентом.

AI и конфигурация

LLM выбирает/упорядочивает готовые evidence IDs. Сервер проверяет категорию, обязательные риски и полноту, затем подставляет собственные числа и фразы. Это ограниченный evidence-аналитик, не свободный городской агент. Невалидный ответ: один repair, затем шаблон. Ошибка провайдера не ломает расчёт.

ПеременнаяНазначение
AKIM_WEB_PORT, AKIM_API_PORTПорты Compose на localhost: по умолчанию 8080 и 8000
AKIM_DATA_GATE_DIRПуть при прямом Python-запуске; Compose фиксирует путь persistent volume
AKIM_CORS_ORIGINSРазрешённые адреса UI через запятую; по умолчанию закрыто
AKIM_ADMIN_TOKENBearer token для Data Gate; без него HTTP-доступ закрыт
AKIM_RUN_TOKENBearer token для управления V2; пустой только для локального demo
AKIM_DB_PASSWORDПароль внутренней PostgreSQL Compose; demo-default не для production
AKIM_DATABASE_URL, AKIM_V2_STOREPostgreSQL URL либо SQLite-файл при запуске без Compose
AKIM_CODE_REVISIONМетка сборки/commit в manifest; задайте при выпуске
AKIM_LLM_ENABLED=1Явное включение платных запросов
OPENAI_API_KEY, OPENAI_MODELКлюч и доступная Responses-модель с tools/structured outputs
AKIM_LLM_MAX_ANALYSESАнализов на процесс: по умолчанию 10, максимум 100

.env.example — шаблон для необязательного .env. Compose читает .env автоматически, прямой Python — нет (экспортируйте переменные в оболочку). Ключи не коммитьте: .env исключён из Git и Docker build context. Лимиты LLM: один одновременный анализ, deadline 20 секунд, ≤3 вызовов включая repair, ≤800 output tokens/вызов; SDK retries отключены. Это не денежный лимит: настройте бюджет проекта провайдера.

Data Gate

Поддержаны исходник задания, City JSON, GeoJSON WGS84, синтетический V2 City, CSV/XLSX/JSON для нормализованных наблюдений с единицами, provenance и тремя временами. Это определённые схемы, не автоматическое понимание произвольной таблицы. Дубли JSON-ключей, NaN/Infinity, неверные типы/даты/ссылки не исправляются молча. Критические ошибки блокируют публикацию; checksum staging и snapshot проверяется при чтении. Идентичность импорта учитывает байты, формат, паспорт и transform version.

.venv/Scripts/python -m data_gate --store var/data-gate bootstrap

CLI и правила миграции.

Структура проекта

engine/v1/          правила, evaluator, application service, локальный search
engine/v2/domain/   scheduler и чистые переходы синтетического города
engine/v2/application/ прогоны, команды, checkpoint, ветки, replay, эксперименты
engine/v2/infrastructure/ Data Gate adapter, PostgreSQL/SQLite, отдельный worker
data_gate/          import, quality, snapshots, файловые/in-memory adapters, CLI
services/api/       HTTP-модели, маршруты, доступ, composition root
ai/                 evidence policy и Responses adapter
packages/contracts/ domain JSON Schema и генерируемый OpenAPI
data/               исходник и эталонный fixture (входят в wheel)
tests/              golden, regression, integration, search, AI contract tests
scripts/            HTTP demo, OpenAPI export, wheel smoke
apps/web/           React UI и адаптер HTTP-контрактов
compose.yaml        API + worker + PostgreSQL + существующий web; volumes и healthchecks
deploy/             nginx reverse proxy для web → API
docs/               спецификации, аудит, evidence
assets/             логотип и будущие изображения README

Что дальше

Перед защитой: подключить кнопки AI/альтернатив, записать демо, проверить живую LLM-модель и сравнить пользу с rule-based baseline, получить зелёный CI. Сроки не зафиксированы.

Следующий этап: расширить engine/v2/domain графом маршрутов и полным бюджетным циклом; вынести event log из JSON-документа в отдельную PostgreSQL-таблицу, добавить RBAC и измерить задержки на длинном горизонте. Очередь, worker и replay уже есть.

Дальше: реальные разрешённые данные, калибровка/holdout, новые SourceParser adapters и анализ параметрической неопределённости поверх ансамблей V2. Первое ограничение роста — размер полного run-документа и журналов; масштабирование обосновывается измерениями, не числом нарисованных агентов.

Ограничения

  • V1 — синтетическое задание, не прогноз и не доказательство причинного эффекта.
  • Поиск локальный: глобальный максимум не заявляется.
  • Live LLM и пользовательские исследования не подтверждены этим прогоном. UI собирается и связан с API; это ещё не полная UX-приёмка.
  • V2 — частичный V2-demo, не полная реализация всех MUST ТЗ. Коридорное время поездки — модельный proxy, не измеренный P90; интервалы seed не являются confidence interval. В стратегическом режиме услуги агрегируются по суткам, месяц равен 30 дням. Субсуточную погоду проверяйте в оперативном режиме.
  • Файловый Data Gate: один процесс-писатель; не запускайте CLI/API одновременно на одном хранилище. Lock API не заменяет межпроцессные транзакции.
  • Нет готового публичного production deployment, RBAC, постоянного бюджета LLM или нагрузочного отчёта. Compose — локальный demo-профиль, не production.
  • npm audit обнаруживает critical XSS в пришедшем из main [email protected] (GHSA-jrc7-96c5-q579). Исправление начинается с 6.4.1; перед публичным показом нужен проверенный major upgrade. Внешний стиль карты использует затронутый attribution-путь; localhost не устраняет XSS.
  • Отдельная лицензия и состав команды пока не опубликованы.

Документация

Продукт · Архитектура · V1 · V2 · Данные · AI · Исследования · План.

Оценка по обеим рубрикам, исправления и приоритеты: BACKEND-AUDIT.md.

Данные предоставлены в условии задачи. «Исследовательская платформа» означает воспроизводимые гипотезы и прозрачные допущения, а не подтверждённую точность на реальном городе.

Звёзды
⭐ 1
Форки
0
Язык
Python
Последний push
в прошлом месяце
Коммиты
33
Авторы
4
Файлы
190
Ветки
10

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

Aigerim Tanyskozhinova 12VllSunday 11Shah Shamuratov 7Alexandr 3

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

  • 2026-09-23 17:54docs: add AKIM video overview to READMEShah Shamuratov
  • 2026-09-23 17:45feat: merge V2 preview with persistent simulation backendVllSunday
  • 2026-09-23 17:45Revert "docs: add planning assets and V2 preview captures"Aigerim Tanyskozhinova
  • 2026-09-23 17:42docs: add planning assets and V2 preview capturesAigerim Tanyskozhinova
  • 2026-09-23 17:40Merge remote-tracking branch 'origin/feat/v2-simulation' into release/v2-integratedVllSunday
  • 2026-09-23 17:38feat(v2): add persistent simulation backend and experiment APIVllSunday
  • 2026-09-23 17:36feat(api): add synthetic V2 snowfall run sliceAigerim Tanyskozhinova
  • 2026-09-23 17:35Merge remote-tracking branch 'origin/main' into codex/aygerim-v2-previewAigerim Tanyskozhinova
Все коммиты (33)
  • 2026-09-23 17:34feat(frontend): publish V2 city twin design and keyless mapAigerim Tanyskozhinova
  • 2026-09-23 17:29docs: add AKIM concept demo videoShah Shamuratov
  • 2026-09-23 17:24Merge remote-tracking branch 'origin/docs/v2-spec' into feat/v2-simulationVllSunday
  • 2026-09-23 17:20feat(deploy): integrate web and add one-command Compose startupVllSunday
  • 2026-09-23 17:14feat(backend): add verified API workflow and harden data importsVllSunday
  • 2026-09-23 16:43fix: bundle reference data and reject invalid snapshot numbersShah Shamuratov
  • 2026-09-23 16:41Merge remote-tracking branch 'origin/main' into codex/aygerim-frontendAigerim Tanyskozhinova
  • 2026-09-23 16:39feat(frontend): connect city cockpit to simulation APIAigerim Tanyskozhinova
  • 2026-09-23 16:26docs(readme): restore v1 and v2 comparisonVllSunday
  • 2026-09-23 16:22docs(readme): align architecture and add project brandingVllSunday
  • 2026-09-23 16:11Merge remote-tracking branch 'origin/main' into codex/aygerim-frontendAigerim Tanyskozhinova
  • 2026-09-23 16:03feat(frontend): scaffold API-first city cockpitAigerim Tanyskozhinova
  • 2026-09-23 16:03merge: integrate simulation layer into mainShah Shamuratov
  • 2026-09-23 16:03merge: integrate data layer with simulationShah Shamuratov
  • 2026-09-23 15:54feat(simulation): implement deterministic v1 engineVllSunday
  • 2026-09-23 15:27Merge branch 'refs/heads/main' into codex/aygerim-frontendAigerim Tanyskozhinova
  • 2026-09-23 15:01docs: summarize dataset analysisAigerim Tanyskozhinova
  • 2026-09-23 14:38docs(readme): document agentic architectureVllSunday
  • 2026-09-23 14:35docs: replace project plan with city simulation research roadmapShah Shamuratov
  • 2026-09-23 14:13docs: plan AKIM agents graphs and formulas from 13:35 AlmatyShah Shamuratov
  • 2026-09-23 13:45docs: describe Docker packaging planAigerim Tanyskozhinova
  • 2026-09-23 13:35docs(readme): add city simulator project outlineVllSunday
  • 2026-09-23 17:12docs(v2): add population, development, city finance flows and politicsAlexandr
  • 2026-09-23 16:56docs: add V2 technical specification and frontend planAlexandr
  • 2026-09-23 16:00feat(data-gate): add data layer per docs/05Alexandr
Структура репозитория (190 файлов)
.dockerignore
.env.example
.github/workflows/backend.yml
.gitignore
DATASET_ANALYSIS.md
Dockerfile
README.md
ai/__init__.py
ai/analysis.py
ai/openai_adapter.py
api/__init__.py
api/main.py
api/v2.py
apps/web/Dockerfile
apps/web/index.html
apps/web/package-lock.json
apps/web/package.json
apps/web/public/design-v2/data/astana-core.geojson
apps/web/public/design-v2/index.html
apps/web/public/design-v2/themes/dark.css
apps/web/public/design-v2/themes/light.css
apps/web/public/maps/astana-core.geojson
apps/web/public/mock-api/README.md
apps/web/public/mock-api/alternatives.json
apps/web/public/mock-api/alternatives.response.json
apps/web/public/mock-api/astana-districts.geojson
apps/web/public/mock-api/catalog.json
apps/web/public/mock-api/evaluate-golden.json
apps/web/public/mock-api/evaluate-golden.response.json
apps/web/public/mock-api/evaluate-invalid.json
apps/web/public/mock-api/evaluate-invalid.response.json
apps/web/public/mock-api/validate-invalid.json
apps/web/public/mock-api/validate-invalid.response.json
apps/web/public/mock-api/validate-valid.json
apps/web/public/mock-api/validate-valid.response.json
apps/web/src/application/ports.ts
apps/web/src/domain/scenarios.ts
apps/web/src/domain/types.ts
apps/web/src/infrastructure/httpV1Api.test.mjs
apps/web/src/infrastructure/httpV1Api.ts
apps/web/src/main.tsx
apps/web/src/presentation/App.tsx
apps/web/src/presentation/styles.css
apps/web/src/presentation/v2.css
apps/web/tests/previewApi.test.mjs
apps/web/tsconfig.app.json
apps/web/tsconfig.json
apps/web/tsconfig.node.json
apps/web/vite.config.ts
artifacts/video-test/AKIM-test-01.mp4
assets/akim-logo.png
assets/akim-video-overview.jpg
assets/akim-video-overview.mp4
compose.yaml
data/__init__.py
data/source-dataset.ru.txt
data/v1/official-v1.snapshot.json
data/v2-demo-city.json
data_gate/README.md
data_gate/__init__.py
data_gate/__main__.py
data_gate/application/__init__.py
data_gate/application/ports.py
data_gate/application/service.py
data_gate/composition.py
data_gate/domain/__init__.py
data_gate/domain/canonical.py
data_gate/domain/errors.py
data_gate/domain/model.py
data_gate/domain/preview.py
data_gate/domain/quality.py
data_gate/domain/v2_quality.py
data_gate/infrastructure/__init__.py
data_gate/infrastructure/clock.py
data_gate/infrastructure/filesystem.py
data_gate/infrastructure/memory.py
data_gate/infrastructure/parsers/__init__.py
data_gate/infrastructure/parsers/city_json.py
data_gate/infrastructure/parsers/geojson.py
data_gate/infrastructure/parsers/source_text_v1.py
data_gate/infrastructure/parsers/v2.py
data_gate/infrastructure/serialization.py
deploy/nginx.conf
docs/01-product.md
docs/02-architecture.md
docs/03-v1-reference-model.md
docs/04-v2-simulation.md
docs/05-data-gate.md
docs/06-ai-and-interactions.md
docs/07-research-validation.md
docs/08-delivery-plan.md
docs/09-v2-technical-spec.md
docs/10-frontend-plan.md
docs/BACKEND-AUDIT.md
docs/README-VISUALS.md
docs/V2-API.md
docs/V2-IMPLEMENTATION.md
docs/evidence/backend-demo.json
docs/evidence/v2-demo.json
engine/__init__.py
engine/v1/__init__.py
engine/v1/application/__init__.py
engine/v1/application/alternatives.py
engine/v1/application/service.py
engine/v1/domain/__init__.py
engine/v1/domain/model.py
engine/v1/domain/scoring.py
engine/v1/domain/validation.py
engine/v1/infrastructure/__init__.py
engine/v1/infrastructure/json_snapshot.py
engine/v2/__init__.py
engine/v2/application/__init__.py
engine/v2/application/controller.py
engine/v2/application/experiments.py
engine/v2/application/ports.py
engine/v2/domain/__init__.py
engine/v2/domain/fixtures.py
engine/v2/domain/simulation.py
engine/v2/infrastructure/__init__.py
engine/v2/infrastructure/datasets.py
engine/v2/infrastructure/store.py
engine/v2/infrastructure/worker.py
engine/v2/snowfall.py
packages/contracts/README.md
packages/contracts/data-gate-import.report.schema.json
packages/contracts/data-gate-snapshot.manifest.schema.json
packages/contracts/openapi.json
packages/contracts/package.json
packages/contracts/src/errors.ts
packages/contracts/src/index.ts
packages/contracts/src/v1.ts
packages/contracts/tsconfig.json
packages/contracts/v1-evaluate.request.schema.json
packages/contracts/v1-result.schema.json
packages/contracts/v1-validate.result.schema.json
packages/contracts/v2-checkpoint.schema.json
packages/contracts/v2-command.schema.json
packages/contracts/v2-dataset.schema.json
packages/contracts/v2-event.schema.json
packages/contracts/v2-evidence.schema.json
packages/contracts/v2-metrics.schema.json
packages/contracts/v2-run-manifest.schema.json
packages/contracts/v2-run.schema.json
packages/contracts/v2-scenario.schema.json
previews/v2/data/astana-core.geojson
previews/v2/index.html
previews/v2/scripts/osm_extract.py
previews/v2/themes/dark.css
previews/v2/themes/light.css
pyproject.toml
requirements.lock
scripts/demo_backend.py
scripts/demo_v2.py
scripts/export_openapi.py
scripts/smoke_wheel.py
services/__init__.py
services/api/__init__.py
services/api/app.py
services/api/contracts.py
services/api/runtime.py
services/api/v2.py
services/api/v2_contracts.py
tests/__init__.py
tests/ai/__init__.py
tests/ai/test_analysis.py
tests/api/__init__.py
tests/api/test_api.py
tests/api/test_http.py
tests/data_gate/__init__.py
tests/data_gate/helpers.py
tests/data_gate/test_cli.py
tests/data_gate/test_engine_contract.py
tests/data_gate/test_quality.py
tests/data_gate/test_regressions.py
tests/data_gate/test_service.py
tests/data_gate/test_source_parser.py
tests/data_gate/test_v2.py
tests/v1/__init__.py
tests/v1/test_alternatives.py
tests/v1/test_golden.py
tests/v1/test_properties.py
tests/v1/test_snapshot.py
tests/v1/test_snapshot_numbers.py
tests/v1/test_validation.py
tests/v2/__init__.py
tests/v2/test_contracts.py
tests/v2/test_controller.py
tests/v2/test_domain.py
tests/v2/test_http.py
tests/v2/test_snowfall.py
Ветки (10)

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

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

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