AAYMA
RU
Войти

Cindrelo

Агентная система прогноза почасовой мощности двух турбин ВЭС.

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

О проекте

Команда: Cindrelo
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Доведённый продукт

Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным

Суть

Агентная система прогноза почасовой мощности двух турбин ВЭС. OpenAI-контроллер вызывает ограниченный набор инструментов: погода, подготовка, валидация, модель, ревизии, публикация. Есть Streamlit-дашборд и выгрузка day-ahead на февраль 2026.

Как устроено

Инструменты с защитой получают архивные прогнозы погоды нескольких провайдеров (IFS, AIFS, GEM, GFS, ICON, JMA через Previous Runs с учётом задержки публикации), кэшируют их с проверкой контрольных сумм и валидируют временную допустимость. Часы 1–24 прогнозирует эмпирическая кривая мощности, часы 25–48 — выбранная на декабре модель AIFS/GEM. Январь служит holdout, февраль — replay без утечки будущего. Цепочкой вызовов управляет OpenAI Responses function calling, есть детерминированный офлайн-режим без ключа. Streamlit показывает прогнозы, ревизии каждые 12 ч, факт, метрики и трассу вызовов.

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

  • OpenAI function calling
  • эмпирическая кривая мощности
  • мульти-провайдерные погодные признаки
  • временная валидация (декабрь → январь holdout)
  • февральский replay
  • дедупликация по идентичности входов
  • CatBoost (.cbm артефакты)
  • блендинг histogram-curve

Особенности

Честная работа с происхождением данных: допущения о часовом поясе и задержке публикации погоды описаны, прогнозы помечены статусом degraded, точность на февраль не заявляется. Много задокументированных бенчмарков провайдеров и семейств моделей, при этом baseline сохранён после регрессии на январе. Снапшоты запусков неизменяемы, есть офлайн-репетиция без API-ключа.

Стек

Python · Streamlit · OpenAI Responses API · pandas

Модели

gpt-4.1-mini


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

README

README.md

Cindrelo — wind power forecasting

Hourly normalized-power forecasts for two wind turbines, driven by archived weather. A bounded OpenAI tool controller fetches weather, prepares data, validates temporal eligibility, runs a numerical model, compares revisions and publishes dashboard files. The same guarded tools also run deterministically without an API key.

Implemented: data preparation, weather caching, December model selection, January holdout evaluation, February replay, agent execution/recovery, real dashboard examples, an offline demonstration, and a Streamlit dashboard with a one-click forecast cycle, forecasts, revisions, actuals, metrics and tool traces.

Limitations: source timezone and interval convention are assumed; weather publication delay is assumed; the archive's historical as-issued provenance is unverified. Forecasts carry degraded status and visible warnings. February has no supplied observations, so no February accuracy is claimed.

Dashboard

[!NOTE] Review CINDRELO_ARCHITECTURE.pdf for details

Quick start

Tested with Python 3.14.7 on macOS ARM64. Run from the repository root:

python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements-backend.txt
python -m src demo

demo recomputes two real January forecasts from the bundled empirical curve and four cached weather responses. It needs no network, API key or prior training. Outputs go to outputs/offline-demo/. Running it again skips numerical prediction for unchanged inputs. The included source turbine CSVs supply actuals.

The UI can immediately consume examples/dashboard/: 192 genuine forecast rows, matching actuals, measured January metrics, and traces from two successful live OpenAI runs:

python -m pip install -r requirements-ui.txt
CINDRELO_OUTPUT_DIR=examples/dashboard streamlit run app.py
# Or use freshly recomputed forecasts:
CINDRELO_OUTPUT_DIR=outputs/offline-demo streamlit run app.py

Start Streamlit from the repository root so it loads .streamlit/config.toml. Horizon uses an explicit light theme for native controls and text, including on machines with a dark system preference. After updating this file, stop Streamlit with Ctrl+C, restart it, and reload the browser. The Streamlit theme configuration keeps widget colors consistent with the dashboard's light backgrounds.

docs/fixtures/dashboard/ remains synthetic UI test data. examples/dashboard/ contains model results. Both follow the same contract.

Run the full cycle from the dashboard

Install both backend and UI requirements as above, set OPENAI_API_KEY in an ignored root .env file, and press Run forecast cycle. The default action:

  1. Retrieves external archived weather for the 9 January 2026, 19:00 UTC issuance.
  2. Prepares hourly observations, validates inputs and runs the trained numerical model.
  3. Analyzes revisions and publishes 48 hourly predictions for each turbine.
  4. Advances the replay clock 12 hours, fetches the newer eligible weather run and repeats the cycle automatically.
  5. Displays the latest forecast, previous issuance, actuals and the recorded tool trace.

Progress comes from actual tool calls. This is a historical replay; it does not claim to forecast today's weather. The bundled December-selected AIFS/GEM wind model supplies hours 25–48; the empirical curve supplies hours 1–24. No training is needed. The 12-hour update is an operational replay; its accuracy has not been evaluated separately. Run options lets you change the issuance, disable the automatic revision, or select Offline deterministic rehearsal with cached weather and no OpenAI call. Refresh only reloads files.

Live mode rechecks external weather on every run. Each weather request has one attempt with a 12-second timeout before falling back to a verified cache when available; cache fallback is visibly logged. Input identity ignores provider timing metadata, so repeated unchanged inputs reuse forecasts. Changed selected weather values from any provider or a newly eligible IFS run produce a new version. Runtime weather caches are isolated under outputs/; responses must pass validation before replacing cached data. Actual observations refresh even when predictions are reused.

To run the same selected-model service from the terminal:

python -m src cycle --offline
# Live OpenAI controller and external weather refresh:
python -m src cycle --agent --output outputs/candidate-live

The command prints the completed snapshot directory to use as CINDRELO_OUTPUT_DIR. Bundled candidate caches cover the default issuance and its 12-hour revision; other dates require online retrieval or an existing cache. Candidate model fitting uses no January labels. The extra AIFS/GEM/GFS/ICON/JMA inputs use eligible 48/72-hour Previous Runs offsets with an assumed eight-hour publication delay. Original publication times are unverified.

Completed dashboard runs are immutable snapshots under outputs/dashboard-runs/<session>/snapshot-<id>/. The UI selects a snapshot only after the entire requested cycle succeeds; a failed revision keeps the previous view. Committed examples are preserved. The cycle runs on demand, with a simulated update; there is no background scheduler.

Windows PowerShell

Backend files are explicitly read as UTF-8 (with optional BOM) and written as UTF-8. -X utf8 is no longer required for backend file handling. This fixes the spurious weather-cache checksum mismatch caused by Windows legacy encodings; checksum validation remains enabled and the bundled hashes are unchanged. The regression suite exercises a clean demo under a simulated Windows cp1252 file default, including Cyrillic source metadata, degree-symbol weather units, Unicode event messages and repeat-run deduplication. The integrated backend also runs on Windows/Python 3.12 without the earlier python -X utf8 workaround. On an older checkout, python -X utf8 -m src demo enables UTF-8 explicitly; upgrading and regenerating old output is the durable fix.

python -m venv .venv
.\.venv\Scripts\python.exe -m pip install -r requirements-backend.txt -r requirements-ui.txt
.\.venv\Scripts\python.exe -m src demo
$env:CINDRELO_OUTPUT_DIR = "outputs/offline-demo"
.\.venv\Scripts\python.exe -m streamlit run app.py --browser.gatherUsageStats false

To view the committed live-agent examples instead, set $env:CINDRELO_OUTPUT_DIR = "examples/dashboard". Offline regeneration uses the deterministic controller; its events do not represent a live OpenAI run.

Recovery for artifacts created before the fix: if a previous run wrote metadata or events using a Windows legacy encoding, regenerate preparation metadata and use a fresh output directory. Changing the file-handling code cannot repair already misencoded files. Do not disable weather-cache validation or change bundled hashes.

.\.venv\Scripts\python.exe -m src prepare
.\.venv\Scripts\python.exe -m src demo --output outputs/offline-demo-utf8
$env:CINDRELO_OUTPUT_DIR = "outputs/offline-demo-utf8"
.\.venv\Scripts\python.exe -m streamlit run app.py --browser.gatherUsageStats false

See the demo guide for the walkthrough and original integration rehearsal, and the backend follow-up for the fixes and repeated checks after PR #6.

Train and replay the full period

python -m src prepare
python -m src train
python -m src replay

Training downloads daily single-run forecasts for September 2025–January 2026 at both coordinates, caches them under data/weather/, and fits three temporally separated model bundles. Requests have bounded retries. Re-running uses the cache. python -m src train --offline reproduces training after that cache exists.

Replay covers local daily origins January 31–February 28. It writes 2,784 forecast rows (29 origins × 48 hours × 2 turbines) to outputs/dashboard/forecasts.csv. february_day_ahead.csv contains exactly 1,344 rows: February's 672 hours per turbine. It always selects horizons 25–48 from the preceding local midnight, rather than choosing a forecast based on future accuracy. March spillover remains in the full export only.

A ready-to-review February day-ahead CSV is committed with verification and provenance, so the export is available without the full local weather/model cache. This 24-hour-per-origin table is a submission export, not a complete dashboard directory.

The January 31 origin uses the December-trained bundle because a model fitted through January 31 would leak future observations at that origin. February origins use the final bundle fitted through January 31. All cutoffs use interval end times, not just target start timestamps.

Run the agent

Set OPENAI_API_KEY in an ignored root .env file. Optional OPENAI_MODEL defaults to gpt-4.1-mini; .env.example shows the format. Viewing saved dashboard files and running the deterministic pipeline require no key. The dashboard's live-agent button does require one.

python -m src forecast --issue 2026-01-09T19:00:00Z --agent --output outputs/agent-demo
python -m src forecast --issue 2026-01-10T07:00:00Z --agent --output outputs/agent-demo

The second issuance advances the simulated clock 12 hours. A newer archived run becomes eligible and produces a new version, compared on 36 overlapping hours per turbine. Repeating an identical issuance and inputs deduplicates it. To re-demonstrate the live path after generating these versions, use a fresh output directory.

The Responses function-calling API controls the tool sequence and recovery choices. Numerical values come from Python. Code enforces weather availability, training cutoffs, complete horizons, valid power bounds and tool order. The agent gets at most 10 API turns; weather acquisition gets at most two run choices. CLI requests allow three attempts; the dashboard uses the shorter timeout/cache policy above. --offline disables weather network access but an --agent invocation still needs OpenAI access. Omit --agent for the deterministic controller, which needs no LLM.

Tools: fetch_weather, prepare_inputs, validate_inputs, predict_power, compare_forecasts, publish_forecast. Errors, retries, tool results and skips are saved to events.jsonl. A failed run cannot publish invented forecasts. Full-month replay deliberately uses the deterministic controller to avoid hundreds of unnecessary LLM calls. This is an on-demand replay application; no background scheduler is installed.

Measured results

The original baseline selection used December 2025 only. The empirical curve's December MAE was 0.2236, versus 0.2395 for the fixed CatBoost candidate, so the curve was selected before January evaluation.

January 2026 holdout, both turbines and horizons pooled; 2,928 identical scored forecast/target pairs per model:

ModelMAE, normalized power
Empirical curve, selected0.1669
CatBoost0.2087
Training mean0.3023
Last-known-power persistence0.3340

Detailed per-turbine/horizon MAE, RMSE and sample counts are in the measured metrics. These results are conditional on the documented timezone and archive assumptions. They do not establish operational forecast accuracy or February performance.

Additional forecasting research tests other regression families, a week of past turbine observations and multiple weather providers. The latest December-selected AIFS/GEM challenger reduces full-January day-ahead MAE from 0.176782 to 0.160737, with January 31 MAE 0.242786 versus 0.308140. The preceding site-weather model retains a better January 31 score of 0.215940, while a nearby-grid experiment improves an exploratory monthly blend. These use a different, complete day-ahead target set and a two-hour reporting delay; they are not directly comparable with the pooled-horizon score above. January is now a reused research diagnostic. The 0.05 target is unmet. The dashboard now serves the selected AIFS/GEM model for hours 25–48 and the empirical curve for hours 1–24. The committed original February submission and legacy demo/forecast/replay commands retain their baseline model. See the candidate decision for comparable results and scope. Research dependencies are optional: python -m pip install -r requirements-research.txt.

Training uses complete six-sample hourly means; missing hours remain unknown. The curve uses pre-cutoff measured turbine wind/power, then receives archived 100 m forecast wind for inference. Hub height is unconfirmed, so that wind-height mapping is an explicit approximation. The original baseline CatBoost uses only archived weather, turbine ID, calendar features and lead times; no future measured wind or invented February power lags. Its fixed configuration is 400 trees, depth 6, learning rate 0.05, seed 42. No hyperparameter search used January labels.

Assumptions, provenance and reproducibility

See config.json: raw and calendar timezone Asia/Almaty, timestamps treated as interval starts, local midnight issuance, ECMWF IFS 00/12 UTC runs, assumed eight-hour publication delay. IANA timezone handling preserves Kazakhstan's historical offset change; one ambiguous hour per turbine is excluded rather than guessed. Six samples are required for an hourly target. Telemetry is assumed available at the end of its hourly interval for the persistence baseline.

Only weather runs with initialization + delay <= issuance are eligible. Returned weather must cover all 48 target hours with finite values and expected units. Cached envelopes preserve request coordinates, returned grid coordinates, initialization, retrieval time, units, URL and content hash. Retrieval today is not evidence of historical availability. Do not describe these archives as verified as-issued forecasts until organizers confirm their acceptability. The Open-Meteo Single Runs API is used instead of a stitched historical series.

Weather attribution: Open-Meteo, ECMWF, NOAA, DWD, JMA and Environment Canada, Open-Meteo, CC BY 4.0. Bundled weather is an attributed demonstration subset. Source turbine observations are supplied by the hackathon organizers. Normalized power is not MW or MWh; no capacity or station-energy conversion is invented.

Artifacts and downloads live in ignored artifacts/, data/, and outputs/. Portable AIFS/GEM models, explicit preprocessing statistics, checksums and demo caches live in examples/candidate/. Serving needs only backend dependencies; scikit-learn is used only for optional research. Native CatBoost bundles reproduce the 1,488 January research predictions to numerical precision. Portable baseline curve parameters and four cached weather responses live in examples/backend/; the example model uses only data available before January 2026. Full CatBoost bundles are local pickle files: load only files produced by this project. Configuration changes require regeneration; model/config mismatches fail explicitly. requirements-backend.lock records the full tested development environment; the smaller .txt file pins direct runtime packages.

Use one writer per CLI output directory. CLI files are replaced individually; refresh the UI after the CLI finishes. The dashboard service publishes complete immutable snapshots and serializes cycles within its Streamlit process because preparation and weather caches are shared. Do not run a separate CLI writer alongside a dashboard cycle. events.jsonl timestamps represent simulated issuance; executed_at records actual execution time.

Verification and ownership

python -m pip install -r requirements-dev.txt
python -m pytest -q
python -m src demo --output outputs/verification

The integrated suite covers the backend, dashboard cycle and optional research experiments. requirements-dev.txt installs backend/dashboard test dependencies; requirements-research.txt adds the model experiments. Tests cover complete horizons, future-weather and future-training rejection, tool order, forecast revision, deduplication, refreshed observations and preservation of completed snapshots after failures. Research checks also cover delayed observations and training labels, sequence boundaries and ineligible weather values entering trajectory features.

PR #14's live dashboard cycle was verified in Chrome before this integration: four external weather responses, two completed OpenAI-controlled forecasts, 192 predictions matching the committed examples, and a saved 96-row CSV. The current combined branch passes 95 tests and 12 subtests. Its live AIFS/GEM dashboard cycle completed two OpenAI-controlled forecasts with eight external weather responses and 192 predictions; a fresh backend-only Windows environment also passed. Evidence and the candidate decision are recorded in the integration review. Earlier live-agent, recovery, full-February replay and fresh-environment evidence remains under examples/submission. The trace in examples/backend/recovery-events.jsonl contains an explicitly labelled injected failure.

Backend: src/, configuration, dependencies, root README and real examples. Dashboard teammate: app.py, ui/, assets/, requirements-ui.txt, docs/DEMO.md. Work on feature branches and integrate through PRs.

Planning context: hackathon approach · dashboard handoff.

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

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

fitness-trener 31Nurkanat Baisenkul 25

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

  • 2026-09-23 17:59Merge pull request #16 from BAITC-Hacks/feat/verify-applicationNurkanat Baisenkul
  • 2026-09-23 17:58Update readmeNurkanat Baysenkul
  • 2026-09-23 17:56Update everythingNurkanat Baysenkul
  • 2026-09-23 17:53Merge pull request #13 from BAITC-Hacks/codex/accuracy-experimentsfitness-trener
  • 2026-09-23 17:53Record live AIFS/GEM dashboard integration verificationfitness-trener
  • 2026-09-23 17:50Update readmeNurkanat Baysenkul
  • 2026-09-23 17:49Integrate dashboard cycle with selected AIFS/GEM forecast modelfitness-trener
  • 2026-09-23 17:49Merge remote-tracking branch 'origin/main' into codex/accuracy-experimentsfitness-trener
Все коммиты (56)
  • 2026-09-23 17:32Merge pull request #15 from BAITC-Hacks/codex/design-harmonyfitness-trener
  • 2026-09-23 17:29Evaluate AIFS GEM spatial weather and causal run-bias modelsfitness-trener
  • 2026-09-23 17:24style: soften dashboard typography and harmonize Horizon themefitness-trener
  • 2026-09-23 17:16Update .gitignoreNurkanat Baysenkul
  • 2026-09-23 17:09Benchmark causal sequence and multi-provider forecasting modelsfitness-trener
  • 2026-09-23 17:07Merge pull request #14 from BAITC-Hacks/feat/dashboard-agent-cycleNurkanat Baisenkul
  • 2026-09-23 17:00feat: run the complete agent forecast cycle from the dashboardNurkanat Baysenkul
  • 2026-09-23 16:54Benchmark alternative weather providers toward the 0.05 MAE targetfitness-trener
  • 2026-09-23 16:46Benchmark alternative model families and evaluate histogram-curve blendsfitness-trener
  • 2026-09-23 16:37Diagnose January forecast errors and evaluate issuance-safe weather correctionfitness-trener
  • 2026-09-23 16:26Generate January 31 and February 1 forecasts with frozen December curvefitness-trener
  • 2026-09-23 16:12Compare smoothed and blended curves across seven historical monthsfitness-trener
  • 2026-09-23 15:58Evaluate accuracy challengers and retain baseline after January regressionfitness-trener
  • 2026-09-23 15:48Merge pull request #12 from BAITC-Hacks:fix/dashboard-themeNurkanat Baisenkul
  • 2026-09-23 15:46fix: align native Streamlit theme with Horizon light designNurkanat Baysenkul
  • 2026-09-23 15:31Merge pull request #7 from BAITC-Hacks/codex/dashboard-designsfitness-trener
  • 2026-09-23 15:30Merge remote-tracking branch 'origin/codex/dashboard-designs' into codex/dashboard-designsfitness-trener
  • 2026-09-23 15:29Keep Horizon as the only dashboard designfitness-trener
  • 2026-09-23 15:27Merge pull request #11 from BAITC-Hacks/codex/dashboard-finalizationfitness-trener
  • 2026-09-23 15:22docs: record dashboard finalization and Windows rehearsal evidencefitness-trener
  • 2026-09-23 15:22Merge pull request #10 from BAITC-Hacks/chore/backend-rehearsalNurkanat Baisenkul
  • 2026-09-23 15:18docs: verify offline restoration of rehearsal backupNurkanat Baysenkul
  • 2026-09-23 15:17fix: handle cross-platform rounding and keep chart labels readablefitness-trener
  • 2026-09-23 15:16docs: record live backend rehearsal and submission handoffNurkanat Baysenkul
  • 2026-09-23 15:10Merge remote-tracking branch 'origin/main' into codex/dashboard-designsfitness-trener
  • 2026-09-23 15:08Merge pull request #9 from BAITC-Hacks:fix/backend-portabilityNurkanat Baisenkul
  • 2026-09-23 15:07Add the finalization checklistNurkanat Baysenkul
  • 2026-09-23 14:59Merge pull request #8 from BAITC-Hacks/fix/backend-portabilityNurkanat Baisenkul
  • 2026-09-23 14:54feat(ui): add three distinct dashboard design directionsfitness-trener
  • 2026-09-23 14:53fix: make backend text I/O portable and verify integrated replayNurkanat Baysenkul
  • 2026-09-23 14:43Merge pull request #6 from BAITC-Hacks/codex/windows-demofitness-trener
  • 2026-09-23 14:40docs: document Windows UTF-8 workaround and integrated demo rehearsalfitness-trener
  • 2026-09-23 14:36Merge remote-tracking branch 'origin/feat/dashboard' into codex/windows-demofitness-trener
  • 2026-09-23 14:33Merge pull request #4 from BAITC-Hacks/feat/dashboard-evidencefitness-trener
  • 2026-09-23 14:33Merge pull request #3 from BAITC-Hacks/feat/dashboardfitness-trener
  • 2026-09-23 14:20Merge pull request #5 from BAITC-Hacks:feat/forecast-pipelineNurkanat Baisenkul
  • 2026-09-23 14:17feat: add dashboard revision and evidence viewsfitness-trener
  • 2026-09-23 14:15feat: add reproducible wind forecasting pipeline and guarded agentNurkanat Baysenkul
  • 2026-09-23 14:04refactor(ui): keep dashboard logic behind thin app entry pointfitness-trener
  • 2026-09-23 14:04Merge remote-tracking branch 'origin/main' into feat/dashboardfitness-trener
  • 2026-09-23 14:03feat(ui): add offline forecast dashboard and CSV exportfitness-trener
  • 2026-09-23 13:55Merge pull request #2 from BAITC-Hacks:docs/dashboard-handoff-updateNurkanat Baisenkul
  • 2026-09-23 13:53docs: clarify dashboard folder ownership and immediate setupNurkanat Baysenkul
  • 2026-09-23 13:49docs: clarify dashboard folder ownership and immediate setupNurkanat Baysenkul
  • 2026-09-23 13:46Merge pull request #1 from BAITC-Hacks:docs/dashboard-handoffNurkanat Baisenkul
  • 2026-09-23 13:44docs: define dashboard handoff and synthetic data contractNurkanat Baysenkul
  • 2026-09-23 13:36Define the approachNurkanat Baysenkul
  • 2026-09-23 13:25Add documentsNurkanat Baysenkul
Структура репозитория (256 файлов)
.DS_Store
.env.example
.gitignore
.streamlit/config.toml
CINDRELO_ARCHITECTURE.pdf
README.md
app.py
assets/dashboard-evidence.png
assets/dashboard-forecast.png
assets/dashboard-metrics.png
assets/dashboard-trace.png
assets/dashboard.css
assets/design-harmony-desktop.png
assets/design-harmony-forecast.png
assets/design-harmony-mobile.png
assets/final-horizon-forecast.png
assets/final-horizon-metrics.png
assets/final-horizon-trace.png
assets/horizon.css
assets/image.png
config.json
docs/ACCURACY_ENHANCEMENT_PLAN.md
docs/ACCURACY_EXPERIMENT_RESULTS.md
docs/ACCURACY_GOAL_AUDIT.md
docs/ACCURACY_ROUND2_RESULTS.md
docs/AI_WEATHER_BENCHMARK.md
docs/AI_WEATHER_FEASIBILITY.md
docs/ARCHITECTURE.html
docs/BACKEND_REHEARSAL.md
docs/BACKEND_VERIFICATION.md
docs/CANDIDATE_SELECTION.md
docs/DASHBOARD_FINALIZATION.md
docs/DEMO.md
docs/DESIGNS.md
docs/Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 1.csv
docs/Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 2.csv
docs/FINALIZATION_CHECKLIST.md
docs/FRESH_PROVIDER_BENCHMARK.md
docs/HACKATHON_APPROACH.md
docs/HackAlem AI_ Agentic AI для прогнозирования выработки ВЭС.pdf
docs/MODEL_FAMILY_RESULTS.md
docs/NEXT_INFORMATION_AUDIT.md
docs/PR13_PR14_INTEGRATION.md
docs/PROVIDER_BENCHMARK.md
docs/RUN_BIAS_BENCHMARK.md
docs/SEQUENCE_BENCHMARK.md
docs/SPATIAL_WEATHER_BENCHMARK.md
docs/TEAMMATE_SPEC.md
docs/WEATHER_CALIBRATION_RESULTS.md
docs/fixtures/dashboard/actuals.csv
docs/fixtures/dashboard/events.jsonl
docs/fixtures/dashboard/forecasts.csv
docs/fixtures/dashboard/manifest.json
docs/fixtures/dashboard/metrics.csv
examples/accuracy-round2/blend_uncertainty.json
examples/accuracy-round2/checksums.json
examples/accuracy-round2/earlier-season/metrics.csv
examples/accuracy-round2/earlier-season/protocol.json
examples/accuracy-round2/earlier-season/recipes.json
examples/accuracy-round2/earlier-season/report.json
examples/accuracy-round2/earlier-season/unavailable_weather.json
examples/accuracy-round2/metrics.csv
examples/accuracy-round2/protocol.json
examples/accuracy-round2/recipes.json
examples/accuracy-round2/report.json
examples/accuracy-round2/selection.json
examples/accuracy-round2/seven_month_blend_uncertainty.json
examples/accuracy-round2/seven_month_summary.csv
examples/accuracy/checksums.json
examples/accuracy/diagnostics.csv
examples/accuracy/environment.json
examples/accuracy/legacy_metrics.csv
examples/accuracy/legacy_pooled_mae.json
examples/accuracy/metrics.csv
examples/accuracy/recipes.json
examples/accuracy/report.json
examples/accuracy/selection.json
examples/accuracy/wind_diagnostics.csv
examples/ai-weather-benchmark/archive_missing_ranges.csv
examples/ai-weather-benchmark/archive_missingness.csv
examples/ai-weather-benchmark/archive_provenance.json
examples/ai-weather-benchmark/comparisons.csv
examples/ai-weather-benchmark/fit_audit.json
examples/ai-weather-benchmark/hashes.json
examples/ai-weather-benchmark/metrics.csv
examples/ai-weather-benchmark/protocol.json
examples/ai-weather-benchmark/report.json
examples/ai-weather-benchmark/selected_feature_missingness.csv
examples/ai-weather-benchmark/selection.json
examples/ai-weather-benchmark/uncertainty.json
examples/ai-weather-benchmark/verification.json
examples/backend/README.md
examples/backend/curve.json
examples/backend/evaluation.json
examples/backend/recovery-events.jsonl
examples/backend/weather/0919c3ac9d22ed269f1355ba42a4c7c70952cea6ee77ec54988e62bac544e037.json
examples/backend/weather/2630024a6ceceb4e1da57f335fbdadeb561db0d8014f85f7117c1224af6ca711.json
examples/backend/weather/4815b77d619ea0922ea278191194b51b03c882ef9d5b20a1f611a8e741acadea.json
examples/backend/weather/811e815e783ab67fe45675e576d6d2e234d2af58e18104c9a5cc1eb3ccb346c4.json
examples/candidate/README.md
examples/candidate/boundary.cbm
examples/candidate/boundary.json
examples/candidate/demo_reference.json
examples/candidate/integration-verification.json
examples/candidate/january.cbm
examples/candidate/january.json
examples/candidate/live-events.jsonl
examples/candidate/manifest.json
examples/candidate/verification.json
examples/candidate/weather/07b76dd36bb47e859b7f76aa94661c501da7ff28c703bd103222d87d35e1f7ef.json
examples/candidate/weather/10a6cdb59dbc828e8f45ca64b795bd82d10afa0f5831b6f7ab70cae060ccffeb.json
examples/candidate/weather/5c04ae7e385dfdb1b3d31db39d00b8691432553157949b0b6ddcaa943347cfb5.json
examples/candidate/weather/b67bbd402f6d3630b08ec2ef7ecf8c0229624974245eafbc1bbdf0ed756c18dc.json
examples/dashboard/actuals.csv
examples/dashboard/events.jsonl
examples/dashboard/forecasts.csv
examples/dashboard/manifest.json
examples/dashboard/metrics.csv
examples/fresh-provider-benchmark/checksums.json
examples/fresh-provider-benchmark/comparison.png
examples/fresh-provider-benchmark/comparisons.csv
examples/fresh-provider-benchmark/january31_comparison.csv
examples/fresh-provider-benchmark/metrics.csv
examples/fresh-provider-benchmark/missingness.csv
examples/fresh-provider-benchmark/protocol.json
examples/fresh-provider-benchmark/provenance.json
examples/fresh-provider-benchmark/report.json
examples/fresh-provider-benchmark/selection.json
examples/fresh-provider-benchmark/uncertainty.json
examples/model-families/blends/metrics.csv
examples/model-families/blends/promising_blend_uncertainty.json
examples/model-families/blends/report.json
examples/model-families/blends/selection.json
examples/model-families/checksums.json
examples/model-families/environment.json
examples/model-families/standalone/metrics.csv
examples/model-families/standalone/protocol.json
examples/model-families/standalone/report.json
examples/model-families/standalone/selection.json
examples/model-families/standalone/warnings_2025-12-01.json
examples/model-families/standalone/warnings_2026-01-01.json
examples/provider-benchmark/checksums.json
examples/provider-benchmark/metrics.csv
examples/provider-benchmark/missingness.csv
examples/provider-benchmark/protocol.json
examples/provider-benchmark/provenance.json
examples/provider-benchmark/report.json
examples/provider-benchmark/selection.json
examples/requested-day-ahead/README.md
examples/requested-day-ahead/comparison_2026-01-31.csv
examples/requested-day-ahead/comparison_2026-02-01.csv
examples/requested-day-ahead/day_ahead_2026-01-31.csv
examples/requested-day-ahead/day_ahead_2026-02-01.csv
examples/requested-day-ahead/requested_day_ahead.csv
examples/requested-day-ahead/verification.json
examples/run-bias-benchmark/checksums.json
examples/run-bias-benchmark/metrics.csv
examples/run-bias-benchmark/protocol.json
examples/run-bias-benchmark/report.json
examples/run-bias-benchmark/selection.json
examples/run-bias-benchmark/uncertainty.json
examples/selected-candidate/selection.json
examples/sequence-benchmark/artifact_hashes.json
examples/sequence-benchmark/comparison.csv
examples/sequence-benchmark/fitting.json
examples/sequence-benchmark/january31_predictions.csv
examples/sequence-benchmark/metrics.csv
examples/sequence-benchmark/protocol.json
examples/sequence-benchmark/report.json
examples/sequence-benchmark/selection.json
examples/sequence-benchmark/uncertainty.json
examples/spatial-weather-benchmark/candidate_uncertainty.json
examples/spatial-weather-benchmark/checksums.json
examples/spatial-weather-benchmark/control_verification.json
examples/spatial-weather-benchmark/january31_predictions.csv
examples/spatial-weather-benchmark/locations.csv
examples/spatial-weather-benchmark/metrics.csv
examples/spatial-weather-benchmark/missingness.csv
examples/spatial-weather-benchmark/protocol.json
examples/spatial-weather-benchmark/report.json
examples/spatial-weather-benchmark/selection.json
examples/submission/README.md
examples/submission/february_day_ahead.csv
examples/submission/live-agent-events.jsonl
examples/submission/rehearsal-events.jsonl
examples/submission/rehearsal-verification.json
examples/submission/verification.json
examples/weather-calibration/checksums.json
examples/weather-calibration/jan31_diagnosis.csv
examples/weather-calibration/jan31_diagnosis.json
examples/weather-calibration/jan31_diagnosis.png
examples/weather-calibration/live/metrics.csv
examples/weather-calibration/live/protocol.json
examples/weather-calibration/live/report.json
examples/weather-calibration/live/selection.json
examples/weather-calibration/static/metrics.csv
examples/weather-calibration/static/protocol.json
examples/weather-calibration/static/report.json
examples/weather-calibration/static/selection.json
requirements-backend.lock
requirements-backend.txt
requirements-dev.txt
requirements-research.txt
requirements-ui.txt
scripts/export_diagram.py
src/__init__.py
src/__main__.py
src/accuracy.py
src/accuracy_round2.py
src/agent.py
src/ai_weather_benchmark.py
src/candidate.py
src/candidate_weather.py
src/common.py
src/data.py
src/fresh_provider_benchmark.py
src/live_bias.py
src/model.py
src/model_families.py
src/pipeline.py
src/provider_benchmark.py
src/provider_weather.py
src/requested_forecasts.py
src/run_bias_benchmark.py
src/sequence_benchmark.py
src/service.py
src/spatial_weather_benchmark.py
src/training.py
src/weather.py
src/weather_calibration.py
tests/test_accuracy.py
tests/test_accuracy_round2.py
tests/test_ai_weather_benchmark.py
tests/test_candidate.py
tests/test_candidate_service.py
tests/test_fresh_provider_benchmark.py
tests/test_live_bias.py
tests/test_model_families.py
tests/test_pipeline.py
tests/test_portability.py
tests/test_provider_benchmark.py
tests/test_run_bias_benchmark.py
tests/test_sequence_benchmark.py
tests/test_service.py
tests/test_spatial_weather_benchmark.py
tests/test_weather_calibration.py
tests/test_weather_refresh.py
ui/__init__.py
ui/charts.py
ui/dashboard.py
ui/data.py
ui/designs.py
ui/runner.py
ui/test_contract.py
ui/test_designs.py
ui/test_runner.py
Ветки (17)

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

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

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