AAYMA
RU
Войти

QALA LAB

Городской симулятор сценариев QALA LAB по кейсу «Аким на 5 часов»: пользователь выбирает 5 мер, код проверяет правила и считает Score по формуле…

Доведённый продукт
Команда «Newcastle» 10💬 0 комментариевс 18 сентября 2026 г.

О проекте

Команда: Newcastle
Кейс HackAlem.ai: Спецтрек — Astana Innovations
Стадия: Доведённый продукт

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

Суть

Городской симулятор сценариев QALA LAB по кейсу «Аким на 5 часов»: пользователь выбирает 5 мер, код проверяет правила и считает Score по формуле организаторов, AI объясняет только на основе фактов расчёта; интерфейс на казахском, русском и английском.

Как устроено

Датасет программно перенесён из DOCX в dataset.json и сверяется тестами с Word XML. engine.py валидирует решения и считает лаги, синергии, clip и Score в Decimal, ведёт журнал before→terms→after по всем 50 ячейкам и выдаёт SHA-256-паспорт сценария. LLM (OpenAI Responses, strict JSON Schema) возвращает только heading и fact_ids из каталога проверенных фактов; без ключа — шаблонное объяснение на правилах. Есть B−A сравнение, «лаборатория сроков» и экспорт JSON/CSV/PDF.

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

  • Decimal arithmetic
  • fact-ID grounded LLM
  • SHA-256 scenario passport
  • per-cell calculation trace
  • sensitivity to lag

Особенности

Прозрачный след расчёта по каждой ячейке и воспроизводимый паспорт сценария; импортированный Score не принимается на веру, сервер пересчитывает. README на казахском; 125 автотестов. В истории был и удалённый прототип подбора подрядчиков Firebird, первые коммиты от 2026-09-18.

Стек

Python · vanilla JS · HTML/CSS · Docker · GitHub Actions · unittest

Модели

OpenAI Responses API · gpt-4.1-mini


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

QALA LAB

5 шешім. Әр санға дәлел.

1.1 нұсқасы: Қазақша / Русский / English. Ескі нұсқадан көшу: UPDATE_3_LANGUAGES_KK.md.

125 автоматты тест өтті. Үш тілге арналған тексеру көлемі мен шектеулер: docs/TRILINGUAL_TEST_REPORT.md.

«5 сағатқа әкім» HackAlem тапсырмасына арналған жұмыс істейтін, дереккөзге сүйенген қалалық сценарийлер симуляторы. Қолданушы бес шараны өзі таңдайды; код ережелерді тексеріп, ұйымдастырушының формуласы бойынша есептейді; қосымша AI қабаты тек сол есептегі дәлелдерді таңдап түсіндіреді.

Бұл — синтетикалық модель. Нақты Астанаға баға, нақты бюджет ұсынысы немесе болашақ болжамы емес. Жоба қай саясатты таңдау керегін шешпейді, сценарийлерді рейтингтемейді және нақты тұрғындардың пікірін ойдан шығармайды.

Жылдам бастау: START_HERE_KK.md.

QALA LAB үш тілдегі интерфейсі

Іске қосу

Python 3.11+ және заманауи браузер жеткілікті. Негізгі қолданбаға үшінші тарап пакеттері, Node.js, сыртқы шрифттер, CDN немесе дерекқор қажет емес.

python server.py --open
# Browser: http://127.0.0.1:8000

Windows: START_WINDOWS.bat. macOS/Linux: sh start.sh. python орнына Windows-та py -3, macOS/Linux-та python3 қолдануға болады. Сервер терминалын ашық қалдырыңыз. Тоқтату — Ctrl+C.

Тесттер:

python -m unittest discover -s tests -v

Локалды Docker нұсқасы, қосымша мүмкіндік:

docker build -t qala-lab .
docker run --rm -p 127.0.0.1:8000:8000 qala-lab
# With a configured server-side API key:
docker run --rm -p 127.0.0.1:8000:8000 --env-file .env qala-lab

Dockerfile дайындалды, бірақ осы жинақты жасаған ортада Docker build/run орындалған жоқ. Бұл HTTP сервері қоғамдық production үшін арналмаған.

Не іске асырылды?

МүмкіндікҚайда қарау керек
14 шара, 5 аудан, 10 көрсеткіш«Шешімдер», «Қалаға шолу», app/dataset.json
Бюджет, дәл бес шара, қайталанбау, аудан және үйлесім ережелеріapp/engine.py::validate, HTTP 422
Толық лаг, синергия, clip, салмақтар және Score формуласыapp/engine.py::simulate
Барлық 50 ұяшықтың before → terms → after журналы«Есеп ізі», көрсеткішті басу
Екі сценарийдің бейтарап B−A айырмасы«Сценарийлер»
Деректер мен код нұсқасына байланған SHA-256 паспортJSON экспорт/импорт
Шараны кешіктіру тәжірибесі, ресми есептен бөлек«Мерзім зертханасы»
Қазақша/орысша/ағылшынша интерфейсҚАЗ / РУС / ENG ауыстырғышы
Енгізуді болдырмау/қайталауЖоғарғы панельдегі екі көрсеткі
Браузерде 8 сценарийге дейін сақтау«Сценарийлер»; localStorage
JSON, CSV, басып шығарылатын PDF есебі«Паспорт», «CSV», принтер белгісі
Бес қадамдық қорғау нұсқаулығы«Демо»
OpenAI Responses API интеграциясы, дәлел ID валидациясыapp/ai.py
Кілтсіз детерминдік түсіндірме«ЖЕРГІЛІКТІ ШАБЛОН» белгісі; LLM емес

Дереккөз және ережелер

Түпнұсқалар өзгертілмей сақталған:

  • sources/dataset.docx — пайдаланушы берген «Датасет районов.docx».
  • sources/brief.pdf — пайдаланушы берген HackAlem тапсырмасы.
  • sources/SHA256SUMS.txt — түпнұсқа файлдардың бақылау сомалары.

app/dataset.json кестелері DOCX файлынан бағдарламалық түрде көшірілген. Қазақша атаулар интерфейс үшін қосылған; ID, орысша түпнұсқа атаулар және сандық параметрлер сақталған. SourceTests бастапқы Word XML кестелерімен салыстырып тексереді.

Құжаттағы жалпы сипаттама бес бағытты атайды. Қолданба нақты тексеру үшін датасеттің §4 бөліміндегі егжей-тегжейлі ережені қолданады: дәл 5 шара, бір бағыттан ең көбі 2. Бес бағыттың әрқайсысынан бір шара алу міндетті емес. Бұл таңдау README-де және интерфейсте ашық көрсетілген.

Түпнұсқа бөліміІске асырылуы
Датасет §1: аудандар, халық үлестері, 10 көрсеткішdataset.json:districts,metrics
Датасет §2: 14 шара, құн, лаг, әсерdataset.json:measures; _compute
Датасет §2: 3 синергияdataset.json:synergies; өзгермейтін бонус
Датасет §2: үйлеспейтін жұптарdataset.json:incompatibilities; validate
Датасет §3: формула, салмақтар, <40 шегіsimulate, _compute
Датасет §4: жарамдылық ережелеріvalidate
Тапсырма PDF, 1–2-беттер: негізгі сценарий және түсіндірмеИнтерфейс, есептеу, AI дәлел қабаты
Тапсырма PDF, 3-бет: README және қайта тексеруБұл README, тесттер, паспорт, қорғау материалдары

Есептеу

H = 8 тоқсан
Әсер үлесі = (8 − lag) / 8
I′ = clip(I + Σ толық_әсер × әсер_үлесі + синергия, 0, 100)
D = Σ weight × I′
D_avg = Σ population_share × D
Score = 0.7 × D_avg + 0.3 × min(D) − N_crit
N_crit = барлық аудан × көрсеткіш жұптарының ішінде I′ < 40 болатындарының саны

Салмақтар: T1 0.10, T2 0.10, E1 0.09, E2 0.11, S1 0.11, S2 0.11, B1 0.09, B2 0.09, C1 0.10, C2 0.10. Қосындысы — 1.

Әр шара бір рет қана таңдалады. Қалалық шара барлық бес ауданға әсер етеді; аудандық шара тек бір көрсетілген ауданға әсер етеді. Қалалық шарада district_id кілті мүлде болмауы керек, null да қабылданбайды.

Синергиялар лагпен азайтылмайды. Барлық әсерлер қосылғаннан кейін ғана әр көрсеткіш 0–100 аралығына шектеледі. Score-дың өзін 0–100 аралығына қосымша шектеу түпнұсқада жоқ және кодта қосылмаған.

Барлық есептеу Decimal арқылы жүреді. API-ге шығару кезінде мәндер JSON сандарына айналады, ал exact_score және ұяшықтардың exact_after өрістерінде толық ондық жазылым сақталады. Интерфейстегі қысқа дөңгелектеу кейінгі есепке қайта берілмейді.

Толық емес жиынтыққа Score берілмейді. /api/validate ішіндегі complete:false тек редактордағы аралық тексеруге арналған; ол есептеу құқығын бермейді. /api/simulate үнемі толық бес шешімді тексереді. Бастапқы күй экранда «сценарий әлі жоқ» деп бөлек белгіленген.

AI: нақты міндеті мен шектеуі

Қолданушының 5 шешімі
    → Серверлік валидация
    → Decimal есептеу модулі
    → Тексерілген фактілер каталогы
    → LLM сұраққа қатысты fact_id тізімін таңдайды
    → Құрылым мен fact_id қайта тексеріледі
    → Сервер тиісті сөйлемдер мен сандарды шығарады

Бұл — еркін мәтін жазатын қала кеңесшісі емес, дәлелдерге байланған түсіндірме құрастырушы. LLM-дегі сандарға арналған еркін өріс жоқ. Ол heading пен fact_ids ғана қайтарады. Танылмаған ID немесе қосымша мәтін қабылданбайды. Қажетті модель шектеулері және таңдалған M11 шарасының екі жақты әсері түсіндірмеден алынып тасталмайды.

Бұл тексеру деректердің қайдан шыққанын қамтамасыз етеді, бірақ LLM дәлелдерді әрдайым орынды немесе толық таңдайтынына кепіл емес. Семантикалық орындығын адам тексеруі керек. «Галлюцинация мүлде болмайды» деген жалпы мәлімдеме жасалмайды.

Кілтсіз режим — қарапайым кілт-сөз ережелері мен сол есеп фактілерінен құрастырылған шаблон. Ол тілдік модель емес және интерфейс оны жасырмайды. Модельдер тізбегін немесе кәдімгі валидаторларды «көп агентті жүйе» деп атамаймыз.

API қосу:

# .env файлында; браузерде емес
OPENAI_API_KEY=your_key_here
OPENAI_MODEL=gpt-4.1-mini

Серверді қайта іске қосыңыз. OpenAI Responses endpoint, text.format ішіндегі strict JSON Schema және store:false қолданылады. Әр сұрау тек сценарий фактілерін және пайдаланушының сұрағын жібереді. Шығын мен деректерді пайдалану шарттарын өз API аккаунтыңыздан тексеріңіз. Құпия немесе дербес деректерді сұраққа енгізбеңіз.

Нақты OpenAI байланысы осы жинақты дайындағанда тексерілген жоқ: кілт берілмеген. Mock-тесттер HTTP сұрау құрылымын, дұрыс жауапты, 401 қатесін, timeout, refusal және белгісіз дәлел ID-ларын тексереді.

Айырмашылық беретін қосымша мүмкіндіктер

1. Әр ұяшыққа арналған есеп ізі

Қорытынды саннан нақты ауданға, көрсеткішке және әсер еткен шараға дейін баруға болады. Әр жазбада бастапқы мән, толық әсер, лаг, іске асқан әсер, синергия, шектеу түзетуі, соңғы мән және салмақ бар. CSV/JSON экспортында толық 50 ұяшық сақталады.

2. Қайта есептелетін паспорт

ID мына кірістердің SHA-256 хэші: канондық реттелген шешімдер, нормаланған датасет хэші, есептеу модулінің файл хэші және нұсқасы. Шешім реті нәтижеге әсер етпейді. Код немесе дерек өзгерсе, ID өзгереді.

Бұл цифрлық қолтаңба, өзгермейтін тізбек немесе авторлықты растау механизмі емес. Бірдей кіріс пен кодты қайта тексеруге арналған fingerprint. Импортталған файлдағы дайын Score-ға сенілмейді: сервер тек шешімдерді алып қайта есептейді.

3. Болжамға арналған бөлек зертхана

«Мерзім зертханасы» — түпнұсқада жоқ, команда қосқан тәжірибе. Бір таңдалған шараға 0–3 тоқсан кідіріс қосылады. Барлық қалған параметрлер мен синергия бонустары тұрақты қалады. Тек көрсеткіш айырмалары көрсетіледі; жаңа Score немесе ықтималдық жасалмайды. Ресми сценарий мен оның паспорт ID-сы өзгермейді.

Тексеру мысалы

Ұйымдастырушының мысалы examples/organizer_example.json ішінде. Ол «ең дұрыс таңдау» ретінде ұсынылмайды. Тексеру: бес шара, құны 95, мектеп/емхана/жарық Нұрада, таза отын Сарыарқада, өтініштер платформасы бүкіл қалада. Мектептің S1 толық әсері +16, лагы 3; іске асқан әсері +10. ArithmeticTests түпнұсқа мысалды және формуланы тексереді.

Тест орындалуының нақты есебі: docs/TEST_REPORT.md. Бақылау нәтижесінің JSON көшірмесі: examples/reference_output.json. Импортта бәрібір қайта есептеледі.

API

Әдіс / жолНе істейді
GET /api/healthНұсқа, сервер және кілт конфигурациясы; кілт мәнін бермейді
GET /api/bootstrapДатасет және бөлек белгіленген бастапқы күй
POST /api/validate{decisions, complete}; Score есептемейді
POST /api/simulate{decisions}; толық сценарий, журнал және паспорт
POST /api/compare{a, b}; екі толық жарамды сценарийдің B−A айырмасы
POST /api/evidence{decisions}; есептен жасалған дәлелдер каталогы
POST /api/explain{decisions, question, lang}; llm немесе offline режимі
POST /api/sensitivity{decisions, measure_id, extra_lag}; бөлек тәжірибе
{
  "decisions": [
    {"measure_id":"M7","district_id":"nura"},
    {"measure_id":"M8","district_id":"nura"},
    {"measure_id":"M10","district_id":"nura"},
    {"measure_id":"M12"},
    {"measure_id":"M5","district_id":"saryarka"}
  ]
}

Қате жиынтық: HTTP 422, себептер тізімі, score:null. Қате JSON/түр: 400. Шамадан тыс сұрау денесі: 413. Басқа origin: 403. Түсіндірмелерді жергілікті шектеу: минутына жалпы 8 сұрау, асып кетсе 429. Сұрау денесі 64 КБ-тан аспайды.

Қауіпсіздік және сақталатын ақпарат

Кілт тек серверде; .env статикалық файл ретінде берілмейді. Статикалық маршруттар whitelist-пен шектелген. UI енгізулерді HTML ретінде орындамайды. Сыртқы origin қабылданбайды; әдепкі сервер тек 127.0.0.1 мекенжайын тыңдайды. HTTP-ке no-sniff, CSP, no-referrer және frame-deny тақырыптары қойылған.

Сценарийлер осы браузердің localStorage ішінде сақталады, орталық аккаунт/дерекқор жоқ. Құрылғыны ауыстыру үшін JSON файл қажет. «Сілтемені көшіру» сол серверге арналған URL береді; localhost сілтемесі басқа адамның компьютерімен ортақ сервер жасамайды.

http.server қоғамдық production үшін ұсынылмайды. Auth, рөлдер, TLS, тұрақты сақтау, өндірістік сервер, орталық rate limiting және кәсіби security review осы прототиптің дайын мүмкіндіктері емес. Деректердің шынайылығы немесе нақты басқару шешімінің тиімділігі тестпен дәлелденді деп мәлімдемейміз.

Қорғау және репозиторий

GitHub Actions workflow .github/workflows/test.yml ішінде дайын. Оның CI орындалуы бұл жинақты дайындағанда іске қосылмады; локалды тест нәтижесін CI нәтижесі деп көрсетпеңіз. Репозиторий ашып, файлдарды жүктеу кезінде .env қоспаңыз. Түпнұсқа ұйымдастырушы материалдарының жариялау лицензиясы берілген файлдарда көрсетілмеген; оларды ашық репозиторийге қоспас бұрын жариялау шарттарын нақтылаңыз.

Техникалық сыртқы дереккөздер

Бұл сілтемелер симуляция параметрлерін өзгертпейді; тек іске асыру тәсіліне қатысты ресми құжаттама. Қаралған күні: 2026-09-23.

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

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

Nurdanig 15serikzhankuat11-netizen 1

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

  • 2026-09-23 16:49Delete .gitignoreNurdanig
  • 2026-09-23 16:48Delete tests directoryNurdanig
  • 2026-09-23 16:47Delete source directoryNurdanig
  • 2026-09-23 16:46Delete scripts directoryNurdanig
  • 2026-09-23 16:46Delete dist directoryNurdanig
  • 2026-09-23 16:44Delete README.mdNurdanig
  • 2026-09-23 16:43Delete design-notes.mdNurdanig
  • 2026-09-23 16:42Update design-notes.mdNurdanig
Все коммиты (16)
  • 2026-09-23 16:31Update README.mdNurdanig
  • 2026-09-23 16:08Add QALA LAB projectNurdanig
  • 2026-09-23 16:05Remove QALA_LAB_HackAlem from repositoryNurdanig
  • 2026-09-23 15:41Merge branch 'main' of https://github.com/BAITC-Hacks/hack-adc03569-newcastleNurdanig
  • 2026-09-23 15:41Add QALA LAB projectNurdanig
  • 2026-09-23 15:18Add Kazakh Russian and English interface languagesNurdanig
  • 2026-09-23 14:57Add Firebird contractor recommendation prototypeNurdanig
  • 2026-09-18 08:55Update README.mdserikzhankuat11-netizen
Структура репозитория (59 файлов)
QALA_LAB/.dockerignore
QALA_LAB/.editorconfig
QALA_LAB/.env.example
QALA_LAB/.github/workflows/test.yml
QALA_LAB/.gitignore
QALA_LAB/Dockerfile
QALA_LAB/MANIFEST.json
QALA_LAB/README.md
QALA_LAB/START_HERE_KK.md
QALA_LAB/START_WINDOWS.bat
QALA_LAB/UPDATE_3_LANGUAGES_KK.md
QALA_LAB/app/__init__.py
QALA_LAB/app/ai.py
QALA_LAB/app/dataset.json
QALA_LAB/app/engine.py
QALA_LAB/app/evidence.py
QALA_LAB/app/i18n.py
QALA_LAB/docs/ARCHITECTURE.md
QALA_LAB/docs/DEFENSE_KK.md
QALA_LAB/docs/DEMO_KK.md
QALA_LAB/docs/Example_Passport_KK.pdf
QALA_LAB/docs/QALA_LAB_Pitch_KK.pdf
QALA_LAB/docs/QALA_LAB_Pitch_KK.pptx
QALA_LAB/docs/RUBRIC_MAP.md
QALA_LAB/docs/TEST_LOG.txt
QALA_LAB/docs/TEST_REPORT.md
QALA_LAB/docs/TRILINGUAL_TEST_REPORT.md
QALA_LAB/docs/ai_preview.png
QALA_LAB/docs/i18n/en_about.png
QALA_LAB/docs/i18n/en_ai.png
QALA_LAB/docs/i18n/en_catalog.png
QALA_LAB/docs/i18n/en_explanation.png
QALA_LAB/docs/i18n/en_explanation_top.png
QALA_LAB/docs/i18n/en_mobile.png
QALA_LAB/docs/i18n/en_mobile_top.png
QALA_LAB/docs/i18n/ui_report.json
QALA_LAB/docs/i18n/unittest_log.txt
QALA_LAB/docs/lab_preview.png
QALA_LAB/docs/mobile_preview.png
QALA_LAB/docs/product_preview.png
QALA_LAB/docs/trace_preview.png
QALA_LAB/docs/ui_report.json
QALA_LAB/examples/organizer_example.json
QALA_LAB/examples/reference_output.json
QALA_LAB/requirements.txt
QALA_LAB/server.py
QALA_LAB/sources/SHA256SUMS.txt
QALA_LAB/sources/brief.pdf
QALA_LAB/sources/dataset.docx
QALA_LAB/start.sh
QALA_LAB/tests/__init__.py
QALA_LAB/tests/test_ai.py
QALA_LAB/tests/test_engine.py
QALA_LAB/tests/test_http.py
QALA_LAB/tests/test_localization.py
QALA_LAB/web/app.js
QALA_LAB/web/favicon.svg
QALA_LAB/web/index.html
QALA_LAB/web/style.css

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

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

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