AAYMA
RU
Войти

Mangust

Автономный оператор прогноза ветровой генерации: восстанавливает погоду (архивный NOAA GFS), доступную на выбранный момент, запускает LightGBM и…

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

О проекте

Команда: 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 logo

Mangust

Agentic AI operator for 24–48 hour wind-power forecasting.

HackAlem AI OpenAI LightGBM NOAA GFS FastAPI React

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

LayerWhat it does
NOAA GFS adapterFinds and decodes archived operational weather forecasts
Replay engineEnforces as_of, horizon, source availability and temporal boundaries
OpenAI OperatorOrchestrates the forecasting workflow with strict function tools
Forecast engineRuns GFS-trained LightGBM / registered forecast bundles
Publication gateRevalidates model, snapshot, coverage and immutable context
FastAPI workerExecutes forecast runs and durable background jobs
SQLiteStores runs, points, jobs, events and revision history
React dashboardShows 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

CriterionMangust evidence
Task fit & workability · 25Hourly 24–48h forecasts for two turbines, archived weather replay, complete 96-point forecast runs
Technical implementation · 25GFS-trained model serving, live OpenAI tool orchestration, deterministic publication gate, durable worker and immutable revisions
README & reproducibility · 25Committed fixtures, model bundles, hashes, CLI replay, documented API, automated test suites
Value & applicability · 15End-to-end wind-power forecast operations with live validation, provenance and automatic recalculation
Development potential & originality · 10Point-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

Python FastAPI React TypeScript Vite

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.

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

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

codepharm99 40Alzhan Taurbek 14Aibek 13

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

  • 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 комментариев

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

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