О проекте
Команда: MG-AI
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Доведённый продукт
Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным
Суть
В репозитории два решения. Первое, ZHEL.ai, — агент почасового прогноза P10/P50/P90 на 48 ч для двух турбин Шелекской ВЭС по NWP-прогнозам погоды. Второе, OrgDiff, сравнивает документы оргструктуры до и после реорганизации (кейс 11).
Как устроено
ZHEL.ai: SCADA агрегируется по часам с флагами очистки. Прогнозы погоды нескольких NWP-моделей (Open-Meteo, IFS, Previous Runs) хранятся в AsOfStore с защитой от утечки: берутся только прогнозы, опубликованные к моменту выпуска. ML-сервис выдаёт квантильный прогноз, машина состояний с журналом решений оркестрирует выпуск. Прогон проигрывает весь февраль 2026. Стек: FastAPI с JWT, PostgreSQL/Alembic, дашборд. OrgDiff парсит docx/pdf/xlsx, выравнивает подразделения и функции (TF-IDF similarity), находит потерянные, перенесённые и дублированные функции и конфликты интересов, к каждой находке даёт цитату. Опционально находки верифицирует LLM.
Ключевые решения
- квантильный прогноз P10/P50/P90
- ансамбль NWP-моделей
- as-of leakage guard
- SCADA cleaning
- state machine агента
- TF-IDF выравнивание документов
- LLM-верификация
Особенности
Одна команда закрыла два кейса (1 и 11) в отдельных папках. Утечке будущих погодных данных уделено много внимания: публикационные задержки источников и выбор прогона as-of. Работа велась в 5 параллельных ветках, 136 коммитов, CI и dev-notes.
Стек
Python · FastAPI · PostgreSQL · Alembic · pandas · scikit-learn · Docker Compose · GitHub Actions · Makefile
Модели
OpenAI gpt-4.1-mini · OpenAI gpt-4.1
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-5e5a1903-mg-ai.
README
README.mdHackAlem AI: two case solutions
This repository holds two independent solutions built by our team at the HackAlem AI hackathon. Each lives in its own folder with its own code, tests, Docker setup and README, and runs on its own. The folders share nothing at runtime.
| Project | Case | Folder | README |
|---|---|---|---|
| ZHEL.ai | Agentic AI for an hourly 24–48 h power forecast of the Shelek wind farm | zhel-ai/ | zhel-ai/README.md |
| OrgDiff | AI agent: analysis of organisational structure and functions | check-theory-kazakhtelecom/ | check-theory-kazakhtelecom/README.md |
Each project README follows the eleven sections required by the organisers: problem and users, what is implemented, user flow, technologies, architecture, installation, a test scenario the jury can repeat, data, limitations and deployment.
ZHEL.ai
An agent that issues an hourly P10 / P50 / P90 power forecast for the next 48 hours for each of the two turbines of the Shelek wind farm. It uses only the weather forecasts published by the issue time, and replays all of February 2026 as if each forecast were made on its own day. No API keys and no network are needed after the first build.
cd zhel-ai
cp .env.example .env
make demo # then open http://localhost:3000, log in as admin / admin
OrgDiff
An agent that compares the "before" and "after" document sets of a reorganisation (.docx, .pdf, .xlsx) and reports changed units, lost, moved and duplicated functions and conflicts of interest, with a document, clause and verbatim quote behind every finding. Runs without a key; an OpenAI key switches on model verification.
cd check-theory-kazakhtelecom
cp .env.example .env # OPENAI_API_KEY is optional
docker compose up -d --build # then open http://localhost:8765
The two stacks use different ports (ZHEL.ai: 3000, 8000, 8010, 8020, 5432; OrgDiff: 8765) and can run at the same time.
Repository layout
zhel-ai/ wind power forecast: backend, ML service, dashboard, data
check-theory-kazakhtelecom/ organisational structure and functions analysis
.github/workflows/ CI: ci.yml and audit.yml for ZHEL.ai, orgdiff.yml for OrgDiff
rules/ hackathon rules summary
Авторы коммитов
История коммитов
- 2026-09-23 18:11Merge pull request #85 from BAITC-Hacks/devAibek9898
- 2026-09-23 18:09docs(readme): match test counts and the launch steps to the current stackAibek.Khabibulla
- 2026-09-23 18:09docs(readme): root README points to both case solutionsAibek.Khabibulla
- 2026-09-23 18:09fix: point CI, hooks and docs at zhel-ai/ after the moveAibek.Khabibulla
- 2026-09-23 17:56refactor: move the wind forecast project into zhel-ai/Aibek.Khabibulla
- 2026-09-23 17:56chore(sync): merge main into dev after the squashed releaseAibek.Khabibulla
- 2026-09-23 17:54fix(dispatch): take bid shortfall from the model backtest (#81)Aibek9898
- 2026-09-23 17:53release: прогноз выработки ВЭС — агент, интерфейс, ML и сервис погоды (#82)permsdenied
Все коммиты (136)
- 2026-09-23 17:53feat(forecast): make leakcheck checks leakage on the fly (#80)ShisuiZH
- 2026-09-23 17:52test(weather): tighten AsOfStore leak tests and input checks (#74)ShisuiZH
- 2026-09-23 17:51fix(forecast): serve the weather page from live NWP runs instead of the stub (#79)ShisuiZH
- 2026-09-23 17:51docs(readme): rewrite the README for the wind forecast case (#78)Aibek9898
- 2026-09-23 17:50feat(frontend): раздел «Свои данные» — прогноз по загруженному датасету (#75)permsdenied
- 2026-09-23 17:50fix(nginx): resolve the backend address per request, not once at startup (#77)permsdenied
- 2026-09-23 17:49feat(ml): write backtest hours of day D into the metrics seriesAibek.Khabibulla
- 2026-09-23 17:49fix(dispatch): take bid shortfall from the model backtestAibek.Khabibulla
- 2026-09-23 17:49fix(nginx): resolve the backend address per request, not once at startuppermsdenied
- 2026-09-23 17:49docs(readme): rewrite the README for the wind forecast caseAibek.Khabibulla
- 2026-09-23 17:49fix(forecast): serve the weather page from live NWP runs instead of the stubZhanat
- 2026-09-23 17:48fix(weather): reject off-hour valid times and repeated sources in AsOfStoreZhanat
- 2026-09-23 17:48test(weather): pin source publication delays and state what they rest onZhanat
- 2026-09-23 17:48test(weather): build synthetic Previous Runs with prev_day 1..3 like the real cacheZhanat
- 2026-09-23 17:48test(weather): check AsOfStore on the committed NWP cacheZhanat
- 2026-09-23 17:48test(weather): run the canary a minute before a publicationZhanat
- 2026-09-23 17:47Merge pull request #71 from BAITC-Hacks/features-dev1-orgdiff-launchpermsdenied
- 2026-09-23 17:47Merge pull request #73 from BAITC-Hacks/features-dev1-uploadpermsdenied
- 2026-09-23 17:47feat(frontend): add the "Свои данные" section for user datasetspermsdenied
- 2026-09-23 17:47feat(frontend): send multipart requests from the API clientpermsdenied
- 2026-09-23 17:46docs(orgdiff): link the launch guide from both READMEspermsdenied
- 2026-09-23 17:46Merge pull request #72 from BAITC-Hacks/features-dev1-sync-mainpermsdenied
- 2026-09-23 17:45docs(orgdiff): add a Russian launch guide for administratorspermsdenied
- 2026-09-23 17:45feat(weather): run the weather service in compose as the backend's primary weather path (#70)ShisuiZH
- 2026-09-23 17:43chore(sync): bring the org-structure case from main into devpermsdenied
- 2026-09-23 17:40feat(forecast): forecast from a dataset the user uploadspermsdenied
- 2026-09-23 17:40feat(orgdiff): add the org-structure and functions case solution (#66)permsdenied
- 2026-09-23 17:39fix(forecast): widen the interval in proportion to the spread, not in one jump (#67)permsdenied
- 2026-09-23 17:38fix(forecast): widen the interval in proportion to the spread, not in one jumppermsdenied
- 2026-09-23 17:38feat(orgdiff): add the org-structure and functions case solutionpermsdenied
- 2026-09-23 17:23feat(ml): calibrate P10/P90 on the three-model ensemble and share ExtraTrees features (#63)Aibek9898
- 2026-09-23 17:20fix(weather): as-of fallback for IFS runs without wind, loader and test fixes from #47 review (#62)ShisuiZH
- 2026-09-23 17:19chore(compose): give the backend the weather cache and the turbine history (#64)permsdenied
- 2026-09-23 17:19chore(compose): give the backend the weather cache and the turbine historypermsdenied
- 2026-09-23 17:19feat(ml): calibrate P10/P90 on the three-model ensemble and share ExtraTrees featuresAibek.Khabibulla
- 2026-09-23 17:19fix(weather): close Previous Runs leakage through 3-hourly interpolation (#60)ShisuiZH
- 2026-09-23 17:18fix(dataset): count only filled SCADA values towards the 4-of-6 hour rule (#61)ShisuiZH
- 2026-09-23 17:17refactor(frontend): drop the architecture page and the dead actuals toggle (#59)permsdenied
- 2026-09-23 17:17feat(forecast): выпуски из сервисов погоды и модели вместо заглушки (#57)permsdenied
- 2026-09-23 17:17fix(weather): skip NWP rows without wind so as-of falls back to an older runZhanat
- 2026-09-23 17:17test(weather): check parsed IFS values, null gaps and wind over all issuesZhanat
- 2026-09-23 17:17fix(weather): refetch IFS runs with nulls and reject a bad timeout cleanlyZhanat
- 2026-09-23 17:17docs(weather): state the IFS delay assumption and the August 2025 archive gapsZhanat
- 2026-09-23 17:15feat(forecast): build issues from the weather and model servicespermsdenied
- 2026-09-23 17:15test(forecast): cover the agent rules and the neighbour boundarypermsdenied
- 2026-09-23 17:15docs(forecast): describe how the backend talks to its neighbourspermsdenied
- 2026-09-23 17:15fix(dataset): count only filled SCADA values towards the 4-of-6 hour ruleZhanat
- 2026-09-23 17:15chore(dataset): drop stale TODO from dataset configZhanat
- 2026-09-23 17:15fix(weather): label interpolated hours of 3-hourly Previous Runs models with the newest runZhanat
- 2026-09-23 17:15fix(weather): retry Open-Meteo 200 responses that are not JSONZhanat
- 2026-09-23 17:14fix(weather): close leakage loopholes in the issue manifest (#58)ShisuiZH
- 2026-09-23 17:14refactor(frontend): drop the architecture page and the dead actuals togglepermsdenied
- 2026-09-23 17:14feat(ml): ExtraTrees ensemble member (#55)Aibek9898
- 2026-09-23 17:12feat(ml): ExtraTrees ensemble member with training and checksAibek.Khabibulla
- 2026-09-23 17:12docs(worktrees): register features-dev2-extratrees worktreeAibek.Khabibulla
- 2026-09-23 17:11fix(weather): verify available_at against the source publication delayZhanat
- 2026-09-23 17:11fix(weather): verify cache files against SHA256SUMS before pinning them in the manifestZhanat
- 2026-09-23 17:11feat(weather): record requested weather sources missing from the issue in the manifestZhanat
- 2026-09-23 17:11fix(weather): serialize timedelta and dataclasses in the manifest config hashZhanat
- 2026-09-23 17:11fix(weather): reject sub-second weather times in the manifestZhanat
- 2026-09-23 17:11refactor(weather): take SCADA file names and DATA_DIR for the manifest from dataset configZhanat
- 2026-09-23 17:11feat(weather): flag uncommitted changes next to git sha in the manifestZhanat
- 2026-09-23 17:11docs(weather): describe manifest guarantees for version 1 and recomputesZhanat
- 2026-09-23 17:11fix(weather): reject naive timestamps in manifest like AsOfStore doesZhanat
- 2026-09-23 17:11fix(weather): bind manifest version 1 to issue time and recomputes to a later as_ofZhanat
- 2026-09-23 17:11fix(weather): treat sourceless weather rows as leakage unless they are empty placeholdersZhanat
- 2026-09-23 17:11feat(ml): MLP ensemble member for the ML service (#54)Aibek9898
- 2026-09-23 17:11Merge branch 'dev' into features-dev2-mlpAibek9898
- 2026-09-23 17:10feat(ml): trained LightGBM model for the ML service (#53)Aibek9898
- 2026-09-23 17:07docs(goal): describe the model as built: SCADA-trained ensemble, per-turbine, random-day 80/20Aibek.Khabibulla
- 2026-09-23 17:06feat(ml): explicit turbine selection in the predict contract and per-turbine metricsAibek.Khabibulla
- 2026-09-23 17:06feat(ml): blend ExtraTrees and MLP members into P50 when their artifacts are presentAibek.Khabibulla
- 2026-09-23 17:06feat(ml): train LightGBM on SCADA with calibrated P10/P90 for the ML serviceAibek.Khabibulla
- 2026-09-23 17:05fix(analysis): compare ensemble with single models after the same correction (#56)ShisuiZH
- 2026-09-23 17:02fix(analysis): compare ensemble with single models after the same correctionZhanat
- 2026-09-23 17:00chore(compose): serve the dashboard from nginx and drop the dead pipeline command (#52)permsdenied
- 2026-09-23 17:00chore(compose): serve the dashboard from nginx and drop the dead pipeline commandpermsdenied
- 2026-09-23 16:59feat(ml): MLP ensemble member trained on SCADA with forecast checkAibek.Khabibulla
- 2026-09-23 16:55feat(frontend): дашборд из восьми страниц на данных API (#51)permsdenied
- 2026-09-23 16:51feat(weather): ECMWF IFS loader from Open-Meteo Single Runs and run cache (#47) (#50)ShisuiZH
- 2026-09-23 16:50feat(frontend): fill all eight pages from the forecast APIpermsdenied
- 2026-09-23 16:50docs(frontend): explain the folder, the API address and how to open itpermsdenied
- 2026-09-23 16:50feat(frontend): add the offline dashboard shell and login screenpermsdenied
- 2026-09-23 16:50chore(git): treat woff2 fonts as binarypermsdenied
- 2026-09-23 16:46docs(workflow): merge feature PRs into dev, and only dev into main (#49)Aibek9898
- 2026-09-23 16:44docs(workflow): merge feature PRs into dev, and only dev into mainAibek.Khabibulla
- 2026-09-23 16:44feat(weather): ECMWF IFS loader from Open-Meteo Single Runs and run cache (#47)ShisuiZH
- 2026-09-23 16:41feat(weather): add Open-Meteo Single Runs loader for ECMWF IFS runsZhanat
- 2026-09-23 16:41chore(data): add IFS run cache for 2024-03 to 2026-02Zhanat
- 2026-09-23 16:41docs(dev3): describe IFS source, cache format and archive gapsZhanat
- 2026-09-23 16:41docs(workflow): require every pull request to reference an issue (#45)Aibek9898
- 2026-09-23 16:40docs: team split and ML service boundary (#43)Aibek9898
- 2026-09-23 16:38docs(workflow): require every pull request to reference an issueAibek.Khabibulla
- 2026-09-23 16:36docs: describe the team split and the ML service boundaryAibek.Khabibulla
- 2026-09-23 16:36docs(dev2): fill in dev2 notes and answer dev3's questionsAibek.Khabibulla
- 2026-09-23 16:36feat(weather): Previous Runs archive of four NWP models for the ensemble (#40)ShisuiZH
- 2026-09-23 16:35feat(auth): вход admin/admin для демонстрационного стенда (#42)permsdenied
- 2026-09-23 16:31feat(ml): ML service with Swagger contract for model predictions (#41)Aibek9898
- 2026-09-23 16:31Merge pull request #38 from BAITC-Hacks/features-dev3-scadaShisuiZH
- 2026-09-23 16:30docs(dev3): describe dataset modules and SCADA notes for the teamZhanat
- 2026-09-23 16:30refactor(ml): align ML service contract with docs/api-contract.mdAibek.Khabibulla
- 2026-09-23 16:30feat(dataset): load SCADA history with hourly aggregation and cleaning flagsZhanat
- 2026-09-23 16:30feat(analysis): confirm SCADA timezone against weather forecastsZhanat
- 2026-09-23 16:29Merge pull request #36 from BAITC-Hacks/features-dev3-asofShisuiZH
- 2026-09-23 16:27docs(ml): record ML service decision and document its endpointsAibek.Khabibulla
- 2026-09-23 16:27chore(ml): run ML service in compose, CI and dependency auditAibek.Khabibulla
- 2026-09-23 16:27chore: release the port slot of the docker worktree (#35)permsdenied
- 2026-09-23 16:26refactor(weather): use LeakageError from asof in manifestZhanat
- 2026-09-23 16:25feat(ml): add ML service with prediction contract and baseline modelAibek.Khabibulla
- 2026-09-23 16:25feat(weather): add weather source registry with publication delaysZhanat
- 2026-09-23 16:25feat(weather): add AsOfStore with as-of run selection and leakage guardZhanat
- 2026-09-23 16:25docs(dev3): describe weather as-of store and source registryZhanat
- 2026-09-23 16:24Merge pull request #33 from BAITC-Hacks/features-dev3-manifestShisuiZH
- 2026-09-23 16:22feat(forecast): add the API contract the dashboard is built against (#34)permsdenied
- 2026-09-23 16:19feat(weather): add forecast issue manifest with leakage guardZhanat
- 2026-09-23 16:19feat(weather): separate as_of from issue time in the manifestZhanat
- 2026-09-23 16:16Merge pull request #31 from BAITC-Hacks/features-dev3-weather-compareShisuiZH
- 2026-09-23 16:08feat(analysis): compare Open-Meteo weather models with SCADAZhanat
- 2026-09-23 16:03feat(agent): add forecast issue state machine with decision journalpermsdenied
- 2026-09-23 16:03chore(docker): add pipeline service to run the forecast in the backend image (#29)permsdenied
- 2026-09-23 15:46docs: add GOAL.md for wind forecast case and mark research as chosen (#26)permsdenied
- 2026-09-23 15:44chore(deps): add pandas and scikit-learn, promote httpx to runtime (#25)permsdenied
- 2026-09-23 15:13data: add datasetsAibek.Khabibulla
- 2026-09-23 15:08docs: add wind forecast case research and dashboard prototype (#1)permsdenied
- 2026-09-23 14:29chore(ci): add CI, dependency audit, git hooks and repo audit skillpermsdenied
- 2026-09-23 14:29feat(backend): add FastAPI service with JWT auth and Docker setuppermsdenied
- 2026-09-23 14:28docs: add hackathon rules, architecture and team workflowpermsdenied
- 2026-09-23 13:51chore: initialize repositorypermsdenied
Структура репозитория (360 файлов)
.claude/skills/repo-audit/SKILL.md .dev-notes/README.md .dev-notes/dev1.md .dev-notes/dev2.md .dev-notes/dev3.md .dev-notes/me.example.md .dev-notes/worktrees.md .editorconfig .gitattributes .github/pull_request_template.md .github/workflows/audit.yml .github/workflows/ci.yml .github/workflows/orgdiff.yml .gitignore .pre-commit-config.yaml CLAUDE.md README.md check-theory-kazakhtelecom/.dockerignore check-theory-kazakhtelecom/.env.example check-theory-kazakhtelecom/.gitignore check-theory-kazakhtelecom/Dockerfile check-theory-kazakhtelecom/README.md check-theory-kazakhtelecom/app.py check-theory-kazakhtelecom/ci/orgdiff.yml check-theory-kazakhtelecom/docker-compose.yml check-theory-kazakhtelecom/docs/README.ru.md check-theory-kazakhtelecom/make_testdata.py check-theory-kazakhtelecom/orgdiff/__init__.py check-theory-kazakhtelecom/orgdiff/align.py check-theory-kazakhtelecom/orgdiff/analyze.py check-theory-kazakhtelecom/orgdiff/golden.py check-theory-kazakhtelecom/orgdiff/llm.py check-theory-kazakhtelecom/orgdiff/load.py check-theory-kazakhtelecom/orgdiff/owners.py check-theory-kazakhtelecom/orgdiff/parse.py check-theory-kazakhtelecom/orgdiff/pipeline.py check-theory-kazakhtelecom/orgdiff/report.py check-theory-kazakhtelecom/orgdiff/similarity.py check-theory-kazakhtelecom/orgdiff/structure.py check-theory-kazakhtelecom/orgdiff/synth.py check-theory-kazakhtelecom/orgdiff/verify.py check-theory-kazakhtelecom/pyproject.toml check-theory-kazakhtelecom/reports/gpt-4.1-mini-final.md check-theory-kazakhtelecom/reports/gpt-4.1-mini-run1.md check-theory-kazakhtelecom/reports/gpt-4.1-mini-run2.md check-theory-kazakhtelecom/reports/gpt-4.1.md check-theory-kazakhtelecom/reports/result_pdf_xlsx_verified.json check-theory-kazakhtelecom/reports/synth-hybrid.md check-theory-kazakhtelecom/reports/synth-verified.md check-theory-kazakhtelecom/reports/synth.md check-theory-kazakhtelecom/reports/tfidf.md check-theory-kazakhtelecom/reports/заключение_pdf_xlsx.docx check-theory-kazakhtelecom/reports/заключение_pdf_xlsx.md check-theory-kazakhtelecom/run.py check-theory-kazakhtelecom/synth_test.py check-theory-kazakhtelecom/test_formats.py check-theory-kazakhtelecom/testdata/положение_ред8.pdf check-theory-kazakhtelecom/testdata/положение_ред9.pdf check-theory-kazakhtelecom/testdata/структура_ред8.xlsx check-theory-kazakhtelecom/testdata/структура_ред9.xlsx check-theory-kazakhtelecom/tests/conftest.py check-theory-kazakhtelecom/tests/test_align.py check-theory-kazakhtelecom/tests/test_control_set.py check-theory-kazakhtelecom/tests/test_formats.py check-theory-kazakhtelecom/tests/test_guardrails.py check-theory-kazakhtelecom/tests/test_parse.py check-theory-kazakhtelecom/tests/test_report_and_app.py check-theory-kazakhtelecom/tests/test_synthetic.py check-theory-kazakhtelecom/uv.lock check-theory-kazakhtelecom/ЗАПУСК.md rules/Instructions_for_HackAlem_AI_Participants.pdf rules/README.md rules/Инструкция по кибербезопасности.pdf rules/Правила зачета участия.pdf zhel-ai/.env.example zhel-ai/AGENTS.md zhel-ai/GOAL.md zhel-ai/Makefile zhel-ai/README.md zhel-ai/SECURITY.md zhel-ai/backend/.dockerignore zhel-ai/backend/.python-version zhel-ai/backend/Dockerfile zhel-ai/backend/README.md zhel-ai/backend/alembic.ini zhel-ai/backend/migrations/env.py zhel-ai/backend/migrations/script.py.mako zhel-ai/backend/migrations/versions/44afa53fd865_initial.py zhel-ai/backend/pyproject.toml zhel-ai/backend/src/__init__.py zhel-ai/backend/src/analysis/__init__.py zhel-ai/backend/src/analysis/tz_check.py zhel-ai/backend/src/analysis/weather_vs_scada.py zhel-ai/backend/src/core/__init__.py zhel-ai/backend/src/core/base_model.py zhel-ai/backend/src/core/base_schemas.py zhel-ai/backend/src/core/config.py zhel-ai/backend/src/core/database.py zhel-ai/backend/src/core/exceptions.py zhel-ai/backend/src/core/logger.py zhel-ai/backend/src/core/security.py zhel-ai/backend/src/forecast/__init__.py zhel-ai/backend/src/forecast/dataset/__init__.py zhel-ai/backend/src/forecast/dataset/config.py zhel-ai/backend/src/forecast/dataset/scada.py zhel-ai/backend/src/forecast/dataset/scada_summary.py zhel-ai/backend/src/forecast/leakcheck.py zhel-ai/backend/src/forecast/weather/__init__.py zhel-ai/backend/src/forecast/weather/asof.py zhel-ai/backend/src/forecast/weather/fetch_ifs.py zhel-ai/backend/src/forecast/weather/fetch_prev_runs.py zhel-ai/backend/src/forecast/weather/manifest.py zhel-ai/backend/src/forecast/weather/prev_runs_rule.py zhel-ai/backend/src/forecast/weather/sources.py zhel-ai/backend/src/main.py zhel-ai/backend/src/modules/__init__.py zhel-ai/backend/src/modules/auth/__init__.py zhel-ai/backend/src/modules/auth/dependencies.py zhel-ai/backend/src/modules/auth/models.py zhel-ai/backend/src/modules/auth/router.py zhel-ai/backend/src/modules/auth/schemas.py zhel-ai/backend/src/modules/auth/service.py zhel-ai/backend/src/modules/forecast/__init__.py zhel-ai/backend/src/modules/forecast/analyze.py zhel-ai/backend/src/modules/forecast/clients/__init__.py zhel-ai/backend/src/modules/forecast/clients/base.py zhel-ai/backend/src/modules/forecast/clients/ml.py zhel-ai/backend/src/modules/forecast/clients/schemas.py zhel-ai/backend/src/modules/forecast/clients/weather.py zhel-ai/backend/src/modules/forecast/config.py zhel-ai/backend/src/modules/forecast/decisions.py zhel-ai/backend/src/modules/forecast/orchestrator.py zhel-ai/backend/src/modules/forecast/router.py zhel-ai/backend/src/modules/forecast/schemas.py zhel-ai/backend/src/modules/forecast/service.py zhel-ai/backend/src/modules/forecast/upload.py zhel-ai/backend/src/scripts/__init__.py zhel-ai/backend/src/scripts/seed.py zhel-ai/backend/src/weather_service/__init__.py zhel-ai/backend/src/weather_service/catalog.py zhel-ai/backend/src/weather_service/errors.py zhel-ai/backend/src/weather_service/export_openapi.py zhel-ai/backend/src/weather_service/main.py zhel-ai/backend/src/weather_service/schemas.py zhel-ai/backend/src/weather_service/service.py zhel-ai/backend/tests/__init__.py zhel-ai/backend/tests/conftest.py zhel-ai/backend/tests/forecast/__init__.py zhel-ai/backend/tests/forecast/synthetic_nwp.py zhel-ai/backend/tests/forecast/test_asof.py zhel-ai/backend/tests/forecast/test_asof_real_cache.py zhel-ai/backend/tests/forecast/test_fetch_ifs.py zhel-ai/backend/tests/forecast/test_fetch_prev_runs.py zhel-ai/backend/tests/forecast/test_leakcheck.py zhel-ai/backend/tests/forecast/test_manifest.py zhel-ai/backend/tests/forecast/test_prevday_mapping.py zhel-ai/backend/tests/forecast/test_scada.py zhel-ai/backend/tests/test_auth_api.py zhel-ai/backend/tests/test_auth_service.py zhel-ai/backend/tests/test_forecast_agent.py zhel-ai/backend/tests/test_forecast_api.py zhel-ai/backend/tests/test_forecast_dispatch.py zhel-ai/backend/tests/test_forecast_gateway.py zhel-ai/backend/tests/test_forecast_upload.py zhel-ai/backend/tests/test_health.py zhel-ai/backend/tests/test_security.py zhel-ai/backend/tests/test_seed.py zhel-ai/backend/tests/test_tz_check.py zhel-ai/backend/tests/test_weather_vs_scada.py zhel-ai/backend/tests/weather_service/__init__.py zhel-ai/backend/tests/weather_service/consumer_schemas.py zhel-ai/backend/tests/weather_service/test_api.py zhel-ai/backend/tests/weather_service/test_compat.py zhel-ai/backend/tests/weather_service/test_openapi.py zhel-ai/backend/uv.lock zhel-ai/data/Dataset HackAlemAI turbine 1.csv zhel-ai/data/Dataset HackAlemAI turbine 2.csv zhel-ai/data/nwp/gem/2024.csv.gz zhel-ai/data/nwp/gem/2025.csv.gz zhel-ai/data/nwp/gem/2026.csv.gz zhel-ai/data/nwp/gem/SHA256SUMS zhel-ai/data/nwp/gfs/2024.csv.gz zhel-ai/data/nwp/gfs/2025.csv.gz zhel-ai/data/nwp/gfs/2026.csv.gz zhel-ai/data/nwp/gfs/SHA256SUMS zhel-ai/data/nwp/icon/2024.csv.gz zhel-ai/data/nwp/icon/2025.csv.gz zhel-ai/data/nwp/icon/2026.csv.gz zhel-ai/data/nwp/icon/SHA256SUMS zhel-ai/data/nwp/ifs/2024-03.csv.gz zhel-ai/data/nwp/ifs/2024-04.csv.gz zhel-ai/data/nwp/ifs/2024-05.csv.gz zhel-ai/data/nwp/ifs/2024-06.csv.gz zhel-ai/data/nwp/ifs/2024-07.csv.gz zhel-ai/data/nwp/ifs/2024-08.csv.gz zhel-ai/data/nwp/ifs/2024-09.csv.gz zhel-ai/data/nwp/ifs/2024-10.csv.gz zhel-ai/data/nwp/ifs/2024-11.csv.gz zhel-ai/data/nwp/ifs/2024-12.csv.gz zhel-ai/data/nwp/ifs/2025-01.csv.gz zhel-ai/data/nwp/ifs/2025-02.csv.gz zhel-ai/data/nwp/ifs/2025-03.csv.gz zhel-ai/data/nwp/ifs/2025-04.csv.gz zhel-ai/data/nwp/ifs/2025-05.csv.gz zhel-ai/data/nwp/ifs/2025-06.csv.gz zhel-ai/data/nwp/ifs/2025-07.csv.gz zhel-ai/data/nwp/ifs/2025-08.csv.gz zhel-ai/data/nwp/ifs/2025-09.csv.gz zhel-ai/data/nwp/ifs/2025-10.csv.gz zhel-ai/data/nwp/ifs/2025-11.csv.gz zhel-ai/data/nwp/ifs/2025-12.csv.gz zhel-ai/data/nwp/ifs/2026-01.csv.gz zhel-ai/data/nwp/ifs/2026-02.csv.gz zhel-ai/data/nwp/ifs/SHA256SUMS zhel-ai/data/nwp/ifs/gaps.csv zhel-ai/data/nwp/ifs025/2024.csv.gz zhel-ai/data/nwp/ifs025/2025.csv.gz zhel-ai/data/nwp/ifs025/2026.csv.gz zhel-ai/data/nwp/ifs025/SHA256SUMS zhel-ai/data/weather_compare/era5.csv.gz zhel-ai/data/weather_compare/prev_runs_ecmwf_ifs025.csv.gz zhel-ai/data/weather_compare/prev_runs_gem_global.csv.gz zhel-ai/data/weather_compare/prev_runs_gfs_global.csv.gz zhel-ai/data/weather_compare/prev_runs_icon_global.csv.gz zhel-ai/deploy/nginx/default.conf zhel-ai/docker-compose.dev.yml zhel-ai/docker-compose.yml zhel-ai/docs/ARCHITECTURE.md zhel-ai/docs/README.md zhel-ai/docs/adr/0001-fastapi-template-as-base.md zhel-ai/docs/adr/0002-worktree-per-feature.md zhel-ai/docs/adr/0003-single-compose-entrypoint.md zhel-ai/docs/adr/0004-sqlite-for-tests.md zhel-ai/docs/adr/0005-ml-stack.md zhel-ai/docs/adr/0006-ml-service.md zhel-ai/docs/adr/0007-frontend-as-static-behind-nginx.md zhel-ai/docs/ai-workflow.md zhel-ai/docs/api-contract.md zhel-ai/docs/architecture-guidelines.md zhel-ai/docs/backend.md zhel-ai/docs/dependency-audit.md zhel-ai/docs/dev1/README.md zhel-ai/docs/dev2/README.md zhel-ai/docs/dev3/README.md zhel-ai/docs/dev3/weather-openapi.json zhel-ai/docs/dev3/weather-service.md zhel-ai/docs/git-workflow.md zhel-ai/docs/pre-submit-checklist.md zhel-ai/docs/proposals.md zhel-ai/docs/research/wind-forecast-case/00-brief.md zhel-ai/docs/research/wind-forecast-case/README.md zhel-ai/docs/research/wind-forecast-case/dashboard/PROJECT.md zhel-ai/docs/research/wind-forecast-case/dashboard/ZHEL Forecast Dark.dc.html zhel-ai/docs/research/wind-forecast-case/dashboard/ZHEL Forecast.dc.html zhel-ai/docs/research/wind-forecast-case/dashboard/support.js zhel-ai/docs/research/wind-forecast-case/round1-architect.md zhel-ai/docs/research/wind-forecast-case/round1-critic.md zhel-ai/docs/research/wind-forecast-case/round1-visionary.md zhel-ai/docs/worktrees.md zhel-ai/frontend/README.md zhel-ai/frontend/api.js zhel-ai/frontend/app.js zhel-ai/frontend/fonts/jetbrains-mono-cyrillic-ext.woff2 zhel-ai/frontend/fonts/jetbrains-mono-cyrillic.woff2 zhel-ai/frontend/fonts/jetbrains-mono-greek.woff2 zhel-ai/frontend/fonts/jetbrains-mono-latin-ext.woff2 zhel-ai/frontend/fonts/jetbrains-mono-latin.woff2 zhel-ai/frontend/fonts/jetbrains-mono-vietnamese.woff2 zhel-ai/frontend/fonts/onest-cyrillic-ext.woff2 zhel-ai/frontend/fonts/onest-cyrillic.woff2 zhel-ai/frontend/fonts/onest-latin-ext.woff2 zhel-ai/frontend/fonts/onest-latin-extra.woff2 zhel-ai/frontend/fonts/onest-latin.woff2 zhel-ai/frontend/fonts/onest-math.woff2 zhel-ai/frontend/fonts/onest-symbols.woff2 zhel-ai/frontend/img/site-satellite.jpg zhel-ai/frontend/index.html zhel-ai/ml/.dockerignore zhel-ai/ml/.python-version zhel-ai/ml/Dockerfile zhel-ai/ml/README.md zhel-ai/ml/artifacts/README.md zhel-ai/ml/artifacts/calibration.json zhel-ai/ml/artifacts/extratrees/metrics.json zhel-ai/ml/artifacts/extratrees/model.joblib zhel-ai/ml/artifacts/lgbm_p50_s0.txt zhel-ai/ml/artifacts/lgbm_p50_s1.txt zhel-ai/ml/artifacts/lgbm_p50_s2.txt zhel-ai/ml/artifacts/lgbm_p50_s3.txt zhel-ai/ml/artifacts/lgbm_p50_s4.txt zhel-ai/ml/artifacts/metrics.json zhel-ai/ml/artifacts/mlp/metrics.json zhel-ai/ml/artifacts/mlp/mlp.joblib zhel-ai/ml/artifacts/model_info.json zhel-ai/ml/openapi.json zhel-ai/ml/pyproject.toml zhel-ai/ml/scripts/export_openapi.py zhel-ai/ml/src/ml_service/__init__.py zhel-ai/ml/src/ml_service/config.py zhel-ai/ml/src/ml_service/errors.py zhel-ai/ml/src/ml_service/features.py zhel-ai/ml/src/ml_service/frame.py zhel-ai/ml/src/ml_service/main.py zhel-ai/ml/src/ml_service/members/__init__.py zhel-ai/ml/src/ml_service/members/extratrees.py zhel-ai/ml/src/ml_service/members/mlp.py zhel-ai/ml/src/ml_service/predictors/__init__.py zhel-ai/ml/src/ml_service/predictors/baseline.py zhel-ai/ml/src/ml_service/predictors/lgbm.py zhel-ai/ml/src/ml_service/schemas.py zhel-ai/ml/src/ml_service/service.py zhel-ai/ml/tests/__init__.py zhel-ai/ml/tests/conftest.py zhel-ai/ml/tests/test_api.py zhel-ai/ml/tests/test_extratrees.py zhel-ai/ml/tests/test_lgbm.py zhel-ai/ml/tests/test_mlp.py zhel-ai/ml/tests/test_openapi.py zhel-ai/ml/training/train.py zhel-ai/ml/training/train_extratrees.py zhel-ai/ml/training/train_mlp.py zhel-ai/ml/uv.lock zhel-ai/outputs/.gitkeep zhel-ai/reports/.gitkeep zhel-ai/reports/leakcheck.md zhel-ai/reports/manifests/2026-01-31.json zhel-ai/reports/manifests/2026-02-01.json zhel-ai/reports/manifests/2026-02-02.json zhel-ai/reports/manifests/2026-02-03.json zhel-ai/reports/manifests/2026-02-04.json zhel-ai/reports/manifests/2026-02-05.json zhel-ai/reports/manifests/2026-02-06.json zhel-ai/reports/manifests/2026-02-07.json zhel-ai/reports/manifests/2026-02-08.json zhel-ai/reports/manifests/2026-02-09.json zhel-ai/reports/manifests/2026-02-10.json zhel-ai/reports/manifests/2026-02-11.json zhel-ai/reports/manifests/2026-02-12.json zhel-ai/reports/manifests/2026-02-13.json zhel-ai/reports/manifests/2026-02-14.json zhel-ai/reports/manifests/2026-02-15.json zhel-ai/reports/manifests/2026-02-16.json zhel-ai/reports/manifests/2026-02-17.json zhel-ai/reports/manifests/2026-02-18.json zhel-ai/reports/manifests/2026-02-19.json zhel-ai/reports/manifests/2026-02-20.json zhel-ai/reports/manifests/2026-02-21.json zhel-ai/reports/manifests/2026-02-22.json zhel-ai/reports/manifests/2026-02-23.json zhel-ai/reports/manifests/2026-02-24.json zhel-ai/reports/manifests/2026-02-25.json zhel-ai/reports/manifests/2026-02-26.json zhel-ai/reports/manifests/2026-02-27.json zhel-ai/reports/scada_summary.md zhel-ai/reports/tz_check.md zhel-ai/reports/weather_vs_scada.md zhel-ai/scripts/audit-deps.sh zhel-ai/scripts/no-push-to-main.sh zhel-ai/scripts/protect-main.sh zhel-ai/scripts/wait-healthy.sh
Ветки (36)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.