О проекте
Команда: JFn
Кейс HackAlem.ai: Энергетика — Самрук-Казына
Стадия: Доведённый продукт
Задача кейса: AI-агент, прогнозирующий выработку ветровой электростанции по погодным данным
Суть
Автономный оператор прогноза ветровой генерации: восстанавливает погоду (архивный NOAA GFS), доступную на выбранный момент, запускает LightGBM и публикует 48-часовой прогноз для двух турбин (96 точек) после детерминированного шлюза публикации. Результаты с аудитом и неизменяемыми ревизиями показываются в React-дашборде.
Как устроено
Для заданного as_of адаптер NOAA GFS находит и декодирует архивный GRIB, проверяя, что данные были доступны до момента прогноза, и сохраняет хеши и происхождение. Оператор на OpenAI Responses API с ограниченным циклом инструментов вызывает get_weather_forecast → validate_inputs → run_forecast → validate_forecast → publish_forecast. Инструмент request_recalculation создаёт дочернюю ревизию при появлении новых данных. Числа даёт GFS-обученный pooled LightGBM (есть также эталон кривой мощности и SCADA-модель). Бандлы моделей проверяются по чексуммам, прогоны и события хранит FastAPI-воркер в SQLite.
Ключевые решения
- LightGBM (pooled)
- power-curve benchmark
- point-in-time replay
- NOAA GFS GRIB
- OpenAI Responses API tool loop
- publication gate
- append-only revisions (parent_run_id)
- checksum-verified model bundles
Особенности
Акцент на воспроизводимость и происхождение данных: проверяется реальная доступность GRIB к моменту as_of, а не только время инициализации. История прогнозов неизменяема, пересчёт создаёт дочернюю ревизию. LLM не может сменить as_of, модель или обойти валидацию. Интерфейс на английском и казахском.
Стек
Python · FastAPI · SQLite · LightGBM · React · TypeScript · Vite
Модели
OpenAI Responses API · GPT-6 Luna
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-ee5834af-jfn.
README
README.md
Mangust
Agentic AI operator for 24–48 hour wind-power forecasting.
From weather forecast to an approved power forecast
Mangust is an autonomous forecasting operator for wind farms. It reconstructs the information that was actually available at a selected point in time, obtains the corresponding archived NOAA GFS weather forecast, runs the numerical forecasting engine, validates the result, and publishes a complete 24–48 hour power forecast only after the workflow passes the publication gate.
For a 48-hour run with two turbines, Mangust produces:
48 forecast hours × 2 turbines = 96 turbine-hour predictions
Every forecast is accompanied by its weather snapshot, model version, hashes, temporal checks, agent tool trace, warnings, and immutable run history.
How Mangust works
flowchart LR
A["Forecast origin<br/>AS OF"] --> B["Archived NOAA GFS"]
B --> C["Point-in-time validation"]
C --> D["OpenAI Operator"]
D --> E["get_weather_forecast"]
E --> F["validate_inputs"]
F --> G["run_forecast"]
G --> H["GFS-trained LightGBM"]
H --> I["validate_forecast"]
I --> J["publish_forecast"]
J --> K["96 forecast points"]
J --> L["Audit & provenance"]
J --> M["Mangust dashboard"]
N["New approved inputs"] --> O["request_recalculation"]
O --> P["Immutable child revision"]
The OpenAI model orchestrates the workflow through strict server-owned tools. Numerical turbine power comes from the forecasting engine, while publication remains protected by deterministic validation.
The agentic workflow
Mangust uses the OpenAI Responses API with a bounded tool loop. For each run, the operator receives an immutable context: forecast origin, horizon, registered model, and server-approved weather candidates.
The normal live sequence is:
1. get_weather_forecast
2. validate_inputs
3. run_forecast
4. validate_forecast
5. publish_forecast
A sixth tool, request_recalculation, creates a linked immutable revision when newer approved inputs become available.
The agent cannot change as_of, replace the registered model, invent weather sources, or bypass validation. The final publish gate rechecks the forecast context, model fingerprint, weather snapshot, coverage, and point count independently of the LLM.
A live configured-key smoke run completed all five OpenAI tool calls and published a full 96-point GFS forecast.
Forecast Replay — a time machine for energy forecasting
The core of Mangust is point-in-time replay.
Choose a historical origin such as:
2026-02-06 06:00 UTC
and Mangust rebuilds the forecast exactly from the information allowed at that moment.
It does not simply check the GFS initialization timestamp. The weather layer verifies availability of the archived GRIB data and index objects before the simulated forecast origin, then records their provenance and hashes.
This lets the system answer:
- which GFS cycle was used;
- when the source became available;
- which model bundle produced the forecast;
- which training cutoff applied;
- whether the complete 24/48-hour horizon was present;
- which OpenAI tools were executed;
- which validation gate approved publication.
Forecasting engine
Mangust includes dedicated forecast bundles trained and packaged for CPU inference.
The repository contains:
gfs-pooled-lgbm-mvp-20260131— GFS-trained pooled LightGBM;gfs-power-curve-mvp-20260131— GFS power-curve benchmark;brev-scada-pooled-lgbm-20260201— SCADA-trained reference model.
The production feature contract for the GFS LightGBM is shared between training and serving, so backend inference builds the same feature schema used by the training pipeline.
Model bundles include their schema, training cutoff, metadata, checksums, and model fingerprint. The backend refuses incompatible or modified bundles instead of silently producing a forecast.
Live OpenAI execution in the dashboard
The dashboard shows the real backend-recorded agent execution while a run is still in progress.
The operator panel displays:
Weather source selected
Inputs validated
GFS LightGBM numerical forecast
Forecast validated
Publication approved
Each step transitions from waiting → running → completed using actual backend events. The numerical forecast stays private until publication is approved, then the two-turbine chart and audit become available together.
The UI also provides:
- 24 / 48 hour replay controls;
- two-turbine forecast chart;
- model and provenance cards;
- OpenAI tool timeline;
- audit evidence;
- warning and revision history;
- JSON / CSV export;
- English and Kazakh interface.
Immutable forecasts and automatic revisions
Forecast history is append-only.
If a newer eligible weather snapshot appears, Mangust creates a child run with parent_run_id instead of modifying the previous forecast.
ForecastRun A
│
└── new approved weather
│
▼
ForecastRun B
parent = A
This makes the forecasting process traceable from the first prediction through every recalculation.
Architecture
| Layer | What it does |
|---|---|
| NOAA GFS adapter | Finds and decodes archived operational weather forecasts |
| Replay engine | Enforces as_of, horizon, source availability and temporal boundaries |
| OpenAI Operator | Orchestrates the forecasting workflow with strict function tools |
| Forecast engine | Runs GFS-trained LightGBM / registered forecast bundles |
| Publication gate | Revalidates model, snapshot, coverage and immutable context |
| FastAPI worker | Executes forecast runs and durable background jobs |
| SQLite | Stores runs, points, jobs, events and revision history |
| React dashboard | Shows forecasts, live agent steps, provenance and audit |
Reproducible demo
1. Create the environment
Python 3.11–3.13 is recommended.
git clone https://github.com/BAITC-Hacks/hack-ee5834af-jfn.git
cd hack-ee5834af-jfn
python -m venv .venv
source .venv/bin/activate
pip install -r requirements-backend.txt -r requirements-weather.txt
On Windows:
.venv\Scripts\Activate.ps1
2. Register the GFS model and archived snapshot
mkdir -p data/runtime/models data/runtime/snapshots
cp -R artifacts/models/gfs-pooled-lgbm-mvp-20260131 \
data/runtime/models/
cp data/fixtures/noaa-gfs-20260206T060000Z-h48.json \
data/runtime/snapshots/gfs-feb6-06.json
3. Start the backend with OpenAI
export OPENAI_API_KEY="your-key"
export FORECAST_DATA_DIR="data/runtime"
uvicorn backend.api.app:app --host 127.0.0.1 --port 8011
4. Start the dashboard
VITE_MODEL_ID=gfs-pooled-lgbm-mvp-20260131 \
VITE_WEATHER_SNAPSHOT_ID=gfs-feb6-06 \
npm --prefix frontend run dev
Open the Vite URL and run the default 48-hour replay.
Replay without the UI
Mangust can also reproduce archived weather inputs directly:
python replay.py \
--as-of "2026-02-06T06:00:00Z" \
--horizon 48 \
--snapshot data/fixtures/noaa-gfs-20260206T060000Z-h48.json \
--output-dir artifacts/replay-2026-02-06
For live archive acquisition, omit --snapshot; the NOAA GFS adapter downloads the admissible archived forecast and records its provenance.
Forecast API
Create a forecast run:
POST /forecast-runs
Inspect it through:
GET /forecast-runs/{id}
GET /forecast-runs/{id}/forecast
GET /forecast-runs/{id}/audit
GET /forecast-runs/{id}/events
GET /health
Create a recalculation as a new immutable revision:
POST /forecast-runs/{id}/recalculate
Verification
The integrated GFS + OpenAI route has been exercised end-to-end with a real configured OpenAI key.
Latest integration validation includes:
68 backend tests
10 frontend tests
frontend build
frontend lint
agent guard tests
live 5-tool OpenAI smoke
96 published GFS forecast points
Run the suites locally:
python -m unittest discover -s tests -v
npm --prefix frontend run test -- --run
npm --prefix frontend run lint
npm --prefix frontend run build
Why the architecture matters
A conventional forecasting demo is often:
CSV → model → graph
Mangust is an operational workflow:
historical origin
↓
weather that actually existed then
↓
temporal validation
↓
OpenAI tool orchestration
↓
GFS-trained numerical forecast
↓
deterministic publication gate
↓
immutable forecast + audit
↓
automatic revision when inputs change
That turns the model output into a forecast that can be inspected, replayed, traced and reproduced.
HackAlem AI criteria
| Criterion | Mangust evidence |
|---|---|
| Task fit & workability · 25 | Hourly 24–48h forecasts for two turbines, archived weather replay, complete 96-point forecast runs |
| Technical implementation · 25 | GFS-trained model serving, live OpenAI tool orchestration, deterministic publication gate, durable worker and immutable revisions |
| README & reproducibility · 25 | Committed fixtures, model bundles, hashes, CLI replay, documented API, automated test suites |
| Value & applicability · 15 | End-to-end wind-power forecast operations with live validation, provenance and automatic recalculation |
| Development potential & originality · 10 | Point-in-time forecast time machine, live agent trace, model governance and auditable revision history |
Repository map
backend/
agent/ OpenAI operator, prompts and strict tools
api/ FastAPI endpoints
forecasting/ model loaders and GFS feature contract
replay/ point-in-time temporal validation
storage/ forecast runs, points, events and jobs
weather/ NOAA GFS archive access
workflow/ worker and recalculation lifecycle
ml/ archived-GFS dataset and model training
artifacts/models/ packaged forecast bundles
data/fixtures/ reproducible GFS replay fixtures
frontend/ Mangust React/TypeScript dashboard
docs/ architecture, API and training documentation
tests/ backend, agent, replay and integration tests
replay.py point-in-time replay CLI
Built with
OpenAI Responses API · Python · FastAPI · LightGBM · NOAA GFS · ecCodes · SQLite · React · TypeScript · Vite
Documentation
Mangust does not just predict power. It runs, validates and records the forecasting operation.
Авторы коммитов
История коммитов
- 2026-09-23 17:52MNGST-05: record truthful February numeric replay coverageAlzhan Taurbek
- 2026-09-23 17:51MNGST-05: strengthen replay coverage proofcodepharm99
- 2026-09-23 17:49MNGST-05: add truthful February replay manifestcodepharm99
- 2026-09-23 17:42Merge pull request #22 from BAITC-Hacks/docs/mangust-final-readmeAlzhan Taurbek
- 2026-09-23 17:42docs: present completed agentic forecasting workflowAlzhan Taurbek
- 2026-09-23 17:38Merge pull request #21 from BAITC-Hacks/feat/agent-execution-stepperAlzhan Taurbek
- 2026-09-23 17:38MNGST-05: distinguish completed agent startscodepharm99
- 2026-09-23 17:37MNGST-05: cover agent execution statescodepharm99
Все коммиты (67)
- 2026-09-23 17:36MNGST-05: reflect live agent step statecodepharm99
- 2026-09-23 17:36Compare against prior curve and make bundle hashes portableAibek
- 2026-09-23 17:35Merge remote-tracking branch 'origin/main' into feat/agent-execution-steppercodepharm99
- 2026-09-23 17:34MNGST-05: show event-backed agent executioncodepharm99
- 2026-09-23 17:34Merge pull request #20 from BAITC-Hacks/restore-readme-6921Alzhan Taurbek
- 2026-09-23 17:34docs: restore README from 6921cf3codepharm99
- 2026-09-23 17:32Merge pull request #19 from BAITC-Hacks/feat/agent-visibilityAlzhan Taurbek
- 2026-09-23 17:32MNGST-05: keep agent trace responsivecodepharm99
- 2026-09-23 17:31Experiment with expanded point-in-time GFS origins and January holdoutAibek
- 2026-09-23 17:29MNGST-05: clarify agent activity tracecodepharm99
- 2026-09-23 17:25MNGST-05: integrate archived GFS LightGBM with governed OpenAI publicationAlzhan Taurbek
- 2026-09-23 17:24Merge remote-tracking branch 'origin/main' into feat/issue-5-gfs-router-integrationcodepharm99
- 2026-09-23 17:23MNGST-05: retain GFS audit limitationscodepharm99
- 2026-09-23 17:23MNGST-05: validate optional bundle members safelycodepharm99
- 2026-09-23 17:22MNGST-05: fingerprint governed GFS bundlescodepharm99
- 2026-09-23 17:21MNGST-05: align GFS replay origincodepharm99
- 2026-09-23 17:21MNGST-05: govern API forecast publication through OpenAI operatorAlzhan Taurbek
- 2026-09-23 17:21MNGST-05: integrate GFS model with governed publicationcodepharm99
- 2026-09-23 17:20Merge latest main README and retain GFS validation resultsAibek
- 2026-09-23 17:19Merge remote-tracking branch 'origin/feat/archived-gfs-model' into feat/issue-5-gfs-router-integrationcodepharm99
- 2026-09-23 17:18Merge current main and retain generic native model loaderAibek
- 2026-09-23 17:16Merge remote-tracking branch 'origin/main' into feat/issue-5-router-maincodepharm99
- 2026-09-23 17:16MNGST-05: limit artifact hashing to supported bundlescodepharm99
- 2026-09-23 17:16MNGST-05: preserve native loader checkscodepharm99
- 2026-09-23 17:15docs: redesign hackathon README (#16)Alzhan Taurbek
- 2026-09-23 17:15Merge remote-tracking branch 'origin/main' into feat/issue-5-router-maincodepharm99
- 2026-09-23 17:14MNGST-05: guard computed artifact provenancecodepharm99
- 2026-09-23 17:14feat: train and serve point-in-time archived GFS power forecastsAibek
- 2026-09-23 17:13docs: redesign hackathon READMEAlzhan Taurbek
- 2026-09-23 17:11docs: add honest router quickstartcodepharm99
- 2026-09-23 17:10MNGST-05: reuse computed forecast artifacts safelycodepharm99
- 2026-09-23 17:09MNGST-05: govern worker publication through operatorcodepharm99
- 2026-09-23 17:07MNGST-05: gate OpenAI forecast publicationcodepharm99
- 2026-09-23 17:05MNGST-04: add secure native LightGBM loader infrastructurezimbwq
- 2026-09-23 17:02MNGST-04: keep native model loader infrastructurecodepharm99
- 2026-09-23 16:53local integration: PR12 guarded operator onlycodepharm99
- 2026-09-23 16:52MNGST-06/MNGST-04: align dashboard with forecast API (#13)Alzhan Taurbek
- 2026-09-23 16:49local integration: PR11 native modelcodepharm99
- 2026-09-23 16:49local integration: PR12 guarded operatorcodepharm99
- 2026-09-23 16:49local integration: PR13 API contractcodepharm99
- 2026-09-23 16:37MNGST-06: clean dashboard API adaptercodepharm99
- 2026-09-23 16:37MNGST-06: bound dashboard run lifecyclecodepharm99
- 2026-09-23 16:34MNGST-06: compare forecast timestamps by instantcodepharm99
- 2026-09-23 16:33MNGST-06: reject malformed dashboard forecast coveragecodepharm99
- 2026-09-23 16:31MNGST-06 MNGST-04: align dashboard with forecast APIcodepharm99
- 2026-09-23 16:27Merge remote-tracking branch 'origin/main' into feat/guarded-forecast-operatorAibek
- 2026-09-23 16:20feat: use GPT-6 Luna and local env for forecast operatorAibek
- 2026-09-23 16:20MNGST-02 MNGST-04: serve native SCADA LightGBM bundlescodepharm99
- 2026-09-23 16:17feat: add full-screen Mangust dashboard (#10)Alzhan Taurbek
- 2026-09-23 16:12test: record live OpenAI recovery trace for offline replayAibek
- 2026-09-23 16:07test: verify agent tool trace through events APIAibek
- 2026-09-23 16:06feat: persist Responses call IDs in agent traceAibek
- 2026-09-23 16:03feat: add guarded Responses forecast operatorAibek
- 2026-09-23 15:57Add Brev-trained SCADA LightGBM handoffAibek
- 2026-09-23 15:18MNGST-04: add forecast API and durable worker (#9)Alzhan Taurbek
- 2026-09-23 15:14MNGST-04: add forecast API and durable workercodepharm99
- 2026-09-23 14:57MNGST-03: add point-in-time NOAA GFS weather replay (#8)Alzhan Taurbek
- 2026-09-23 14:48feat: add point-in-time weather replaycodepharm99
- 2026-09-23 14:10docs: define wind forecast architecture and Brev implementation plancodepharm99
Структура репозитория (139 файлов)
.gitattributes .gitignore README.md artifacts/models/brev-scada-pooled-lgbm-20260201/checksums.sha256 artifacts/models/brev-scada-pooled-lgbm-20260201/cpu_fixture.json artifacts/models/brev-scada-pooled-lgbm-20260201/data_analysis.json artifacts/models/brev-scada-pooled-lgbm-20260201/data_manifest.json artifacts/models/brev-scada-pooled-lgbm-20260201/feature_schema.json artifacts/models/brev-scada-pooled-lgbm-20260201/metadata.json artifacts/models/brev-scada-pooled-lgbm-20260201/metrics_summary.json artifacts/models/brev-scada-pooled-lgbm-20260201/model.txt artifacts/models/gfs-pooled-lgbm-mvp-20260131/checksums.sha256 artifacts/models/gfs-pooled-lgbm-mvp-20260131/data_manifest.json artifacts/models/gfs-pooled-lgbm-mvp-20260131/feature_schema.json artifacts/models/gfs-pooled-lgbm-mvp-20260131/metadata.json artifacts/models/gfs-pooled-lgbm-mvp-20260131/metrics_summary.json artifacts/models/gfs-pooled-lgbm-mvp-20260131/model.txt artifacts/models/gfs-power-curve-mvp-20260131/checksums.sha256 artifacts/models/gfs-power-curve-mvp-20260131/data_manifest.json artifacts/models/gfs-power-curve-mvp-20260131/feature_schema.json artifacts/models/gfs-power-curve-mvp-20260131/metadata.json artifacts/models/gfs-power-curve-mvp-20260131/metrics_summary.json artifacts/models/gfs-power-curve-mvp-20260131/model.txt artifacts/replays/20260206T060000Z-h48.json backend/__init__.py backend/agent/README.md backend/agent/__init__.py backend/agent/demo.py backend/agent/operator.py backend/agent/prompts.py backend/agent/tools.py backend/api/__init__.py backend/api/app.py backend/forecasting/__init__.py backend/forecasting/adapter.py backend/forecasting/gfs_features.py backend/replay/__init__.py backend/replay/temporal.py backend/storage/__init__.py backend/storage/sqlite.py backend/weather/__init__.py backend/weather/gfs.py backend/weather/schema.py backend/workflow/__init__.py backend/workflow/service.py data/fixtures/noaa-gfs-20251110T060000Z-h48.json data/fixtures/noaa-gfs-20251110T060000Z-h48.json.sha256 data/fixtures/noaa-gfs-20260206T000000Z-h48.json data/fixtures/noaa-gfs-20260206T000000Z-h48.json.sha256 data/fixtures/noaa-gfs-20260206T060000Z-h48.json data/fixtures/noaa-gfs-20260206T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/manifest.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250804T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250804T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250811T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250811T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250818T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250818T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250825T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250825T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250901T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250901T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250908T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20250908T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20251110T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20251110T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260105T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260105T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260112T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260112T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260119T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260119T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260126T060000Z-h48.json data/gfs-training/mvp-2025-08-to-2026-01/snapshots/noaa-gfs-20260126T060000Z-h48.json.sha256 data/gfs-training/mvp-2025-08-to-2026-01/training_rows.csv data/training/turbine_1.csv data/training/turbine_2.csv docs/architecture.md docs/backend-api.md docs/brev-training.md docs/gfs-training.md docs/implementation-plan.md docs/weather-replay.md february-replay-manifest.json frontend/.gitignore frontend/docs/2026-09-23-dashboard-design.md frontend/docs/2026-09-23-dashboard-plan.md frontend/eslint.config.js frontend/index.html frontend/package-lock.json frontend/package.json frontend/public/mangust-logo.png frontend/src/App.test.tsx frontend/src/App.tsx frontend/src/api.test.ts frontend/src/api.ts frontend/src/components/AgentTimeline.test.tsx frontend/src/components/AgentTimeline.tsx frontend/src/components/AuditPanel.tsx frontend/src/components/ForecastChart.tsx frontend/src/components/ReplayControls.tsx frontend/src/demoFixture.ts frontend/src/i18n.ts frontend/src/main.tsx frontend/src/styles.css frontend/src/testSetup.ts frontend/src/time.ts frontend/src/types.ts frontend/src/vite-env.d.ts frontend/tsconfig.app.json frontend/tsconfig.json frontend/tsconfig.node.json frontend/vite.config.ts ml/README.md ml/brev_run_report.md ml/build_gfs_training_dataset.py ml/config.brev-assumptions.json ml/gfs-origins-mvp.txt ml/requirements-brev.txt ml/test_train_brev.py ml/train_brev.py ml/train_gfs.py ml/verify_model.py replay.py requirements-backend.txt requirements-weather.txt scripts/__init__.py scripts/build_february_replay_manifest.py scripts/build_weather_coverage.py tests/fixtures/agent-live-smoke-recorded.json tests/fixtures/agent-luna-live-smoke-recorded.json tests/test_agent_guards.py tests/test_backend_api.py tests/test_backend_workflow.py tests/test_gfs.py tests/test_gfs_model.py tests/test_gfs_training.py tests/test_replay_cli.py tests/test_temporal.py
Ветки (17)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.