AAYMA
RU
Войти

Low Prior Energy

Прогноз почасовой нормализованной мощности двух ветротурбин на 24–48 часов.

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

О проекте

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

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

Суть

Прогноз почасовой нормализованной мощности двух ветротурбин на 24–48 часов. Детерминированный ForecastAgent работает на CatBoost по погоде и SCADA и пересчитывает прогноз при изменении входов. Есть React-дашборд, экран Evidence и replay февраля 2026 (2 784 строки).

Как устроено

Агент отбирает снимки погоды ECMWF IFS 00 UTC с явной предпосылкой available_at = run_init + 10h и проверяет доступность и покрытие. Признаки: ветер и направление на 100 м, температура, календарь, лид и SCADA на момент выпуска; для каждой турбины обучается свой CatBoost. Параметры выбираются на хронологических фолдах ноября–декабря, модель сравнивается с константой, климатологией, persistence и SCADA-only на январе, затем дообучается до 31.01. LLM-аналитик (OpenAI или NVIDIA) получает только read-only инструменты и цифры не меняет. Всё воспроизводится командой npm run reproduce.

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

  • CatBoost weather-SCADA
  • Ridge baseline
  • хронологическая кросс-валидация
  • persistence/климатология baseline
  • ECMWF IFS / GFS / ICON previous runs
  • read-only LLM tools
  • fingerprint-based refresh

Метрики

Январь, 2784 пары, норм. мощность: CatBoost weather-SCADA MAE 0.162 / RMSE 0.233 vs климатология 0.267/0.342, persistence 0.338/0.459, CatBoost SCADA 0.312/0.389

Особенности

Все модели сравниваются на одинаковых парах выпуск/цель. Воспроизведение идёт одной командой, CSV в чистом клоне совпадает побайтно. Ограничения описаны честно: hindcast не равен архиву оперативных прогнозов, февральских метрик нет, январь не считается независимым holdout.

Стек

Python · FastAPI · CatBoost · uv · SQLite · React · TypeScript · Vite · Vitest · GitHub Actions

Модели

OpenAI · NVIDIA


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

README

README.md

Low Prior Energy

Low Prior Energy прогнозирует почасовую нормализованную мощность двух ветротурбин на 24–48 часов вперёд. React-дашборд операционного управления подключается к сервису FastAPI и детерминированному агенту прогнозирования: он отбирает подходящие снимки погоды, строит погодные/SCADA-признаки, запускает CatBoost-модели по каждой турбине, проверяет результаты, объясняет их и пересчитывает прогноз при изменении входных данных. Проводник (explorer) поддерживает разные типы энергоактивов; солнечная и гидроэнергетика — задачи на будущее.

Для жюри

Цикл агента: получение погоды → проверка доступности и подготовка → модель → почасовой прогноз → проверка и необязательный LLM-анализ → пересчёт при обновлении входов. OpenAI/NVIDIA-аналитик получает только read-only инструменты и никогда не меняет численные прогнозы. Без ключа работает детерминированный анализ.

Погода действительно входит в модель: ветер и направление на 100 м, температура на 2 м, календарь, лид и SCADA, доступная на момент выпуска. Параметры выбираются только по ноябрю–декабрю 2025; январь используется для сравнения после фиксации выбора. Все пять моделей оцениваются на одинаковых парах выпуск/цель, с разрезами по турбинам и лидам 1–24 / 25–48. Январь уже использовался в предыдущих экспериментах, поэтому это не новый независимый holdout.

МодельПарMAERMSE
Константа (медиана)27840.268170.34506
Климатология (турбина × час)27840.266560.34237
Persistence27840.337670.45934
CatBoost SCADA27840.312240.38933
CatBoost weather-SCADA27840.161810.23328

Метрики — ошибка нормализованной мощности на шкале [0,1], не проценты «точности» и не МВт. Подробные разрезы и результаты фолдов: отчёт обучения, машиночитаемые результаты, экран Evidence.

Главный артефакт: февральский CSV и манифест: 29 выпусков с 31 января по 28 февраля, две турбины, по 48 часов — 2 784 строки. Сохранены полные горизонты, включая пограничные цели января и марта. Февральских фактов нет, поэтому февральские MAE/RMSE не заявляются.

Существенное ограничение: это реконструкция с реальными погодными модельными данными, не доказанный архив оперативных прогнозов. Open-Meteo описывает ранний ECMWF IFS как Cycle 49R1 hindcast. available_at = run_init + 10h — явно принятая предпосылка по опубликованному расписанию, а не подтверждение публикации каждого запуска. Строгая часть кейса о фактической доступности в прошлом остаётся открытой. Источники, пропуски и правила импорта.

После установки зависимостей три основные команды:

npm run reproduce
npm run dev
npm run check

Первая воспроизводит подготовку, импорт, выбор модели, январскую оценку, дообучение, февральский replay и регистрацию модели для дашборда. Вторая запускает сайт/API и остаётся работать; третья выполняется в другом терминале. Время полного воспроизведения на этой машине: 485,3 с в чистом клоне (около 8 минут); повтор с готовым кешем — 4,5 с. Seed = 42, CPU, два потока CatBoost; время зависит от CPU. CSV чистого клона совпал побайтно, повторный запуск не изменил опубликованные файлы. Веса обучаются из исходных файлов, не требуют ручного копирования с компьютера автора.

Установка и дашборд

Требования: Node.js 22.12+ и uv. Из корня репозитория:

uv sync --locked
npm ci

Затем выполните три команды выше. Дашборд: http://127.0.0.1:5173; API: http://127.0.0.1:8000; интерактивные маршруты: http://127.0.0.1:8000/docs. Vite проксирует /api и /health на бэкенд. При необходимости запускайте npm run dev:api / npm run dev:web отдельно.

В Explore выберите Казахстан, ветровую площадку и её турбины, затем нажмите Open forecast. После воспроизведения обновите рабочую область, выберите зарегистрированную модель catboost-weather-scada-v1 и Verified archive, укажите выпуск 2026-01-31 12:00 UTC и выберите 24 или 48 часов. Запустите прогноз, чтобы посмотреть график, погоду, происхождение данных (provenance), события агента и почасовой экспорт. Run February replay использует ежедневные выпуски в 12:00 UTC. Модель остаётся помеченной как предварительная (provisional), поскольку предпосылки о задержке публикации и SCADA независимо не подтверждены. Перечисление архива само по себе не доказывает историческую достоверность: смотрите доказательства по каждому снимку.

Evidence описывает зафиксированный январский бенчмарк независимо от модели, выбранной в данный момент для прогноза. Profile → Appearance предлагает General, Light и Black. У глобуса есть доступный с клавиатуры резервный справочник стран/станций.

HTTP-проверка при запущенном сайте:

uv run python scripts/smoke_demo.py
uv run python scripts/smoke_demo.py --archive

Вторая команда задействует воспроизведённую погодную модель, 29 ежедневных архивных прогнозов, обновление при неизменных входах и экспорт CSV. Обе команды создают локальные записи; ни одна не оценивает точность за февраль.

Протокол воспроизведения

  • Входные данные под контролем Git: data/raw/turbine_1.csv, turbine_2.csv и data/weather/ecmwf_ifs_single_runs.csv.gz.
  • Канонический SCADA содержит только полные почасовые интервалы. Исходные часы зафиксированы как UTC+06:00, метки времени обозначают начало интервала, доступность предполагает задержку отчётности 10 минут. Пропущенные показания не заполняются нулями; невалидные строки помещаются в карантин и подсчитываются. Эти правила исходных часов отличаются от текущего гражданского времени.
  • Во всём обучении и replay используются только запуски ECMWF 00 UTC. Выпуск в 12:00 UTC = 17:00 Asia/Almaty в феврале 2026 (18:00 по зафиксированным часам SCADA) использует лиды запуска 13–60. Предполагаемая 10-часовая задержка публикации оставляет два часа до выпуска.
  • Отсчёт обучающих периодов начинается 15 марта 2024, 12:00 UTC. Пропущенные погодные периоды пропускаются и подсчитываются при обучении. Инференс и оценка по-прежнему требуют полного подходящего снимка.
  • Три заранее заданные погодные конфигурации соревнуются на хронологических ноябрьско-декабрьских фолдах. Январское сравнение использует отсечку 1 января 2026, 00:00 UTC, выпуски с 1 по 29 января в полдень и одинаковые цели для всех моделей. Константа/климатология — медианы за период обучения; persistence читает только наблюдения, доступные на момент каждого выпуска.
  • Финальная погодная модель использует зафиксированные победившие параметры и отсечку 31 января 2026, 12:00 UTC. Январские метрики не оценивают эти дообученные веса. SCADA после последнего наблюдения не синтезируется в феврале.
  • Воспроизведение вызывает код WindService.execute_backtest / ForecastAgent API с weather_source="archive" и без февральских фактов. Загрузки API/воркера остаются неподтверждёнными до отдельного документированного импорта; они никогда не продвигаются автоматически.
  • Локальные кеши и файлы моделей игнорируются. Завершённые кеши проходят проверку контрольных сумм; изменённые входные данные/код создают новую ревизию эксперимента. CSV и манифест лежат в отслеживаемой папке results/february-2026/. npm run reproduce -- --no-register генерирует результаты без публикации в локальный реестр API.

Офлайн-импорт явно принимает документированную предпосылку hindcast/расписания. Чтобы удовлетворить строгим требованиям исторического replay, предоставьте современные прогнозы с оригинальными доказательствами публикации и повторите тот же процесс. Изменения в проверках меток времени не требуются.

Архитектура

flowchart LR
  UI[React-дашборд] --> API[FastAPI]
  API --> Agent[ForecastAgent]
  Agent --> Weather[Неизменяемые снимки погоды]
  Weather --> Guards[Проверки доступности и покрытия]
  Guards --> ML[Погода + SCADA / CatBoost]
  ML --> Audit[Численный аудит + опциональный read-only LLM]
  Audit --> DB[(SQLite / CSV)]
  DB --> UI
  Weather --> Refresh[Изменение отпечатка]
  Refresh --> Agent
ОбластьРасположение
Дашборд, проводник, Evidencefrontend/
API, хранилище, обучение, оценкаbackend/wind_backend/
Погода, проверки времени, оркестрация, облачные объясненияagent/wind_agent/
Общие типизированные контрактыcontracts/wind_contracts/
Сгенерированные OpenAPI / TypeScriptcontracts/openapi.json, frontend/src/generated/api.ts
Воспроизведение одной командойscripts/reproduce.py
Итоговые артефакты для проверкиresults/february-2026/, docs/model-selection-results.json

Исходное распределение обязанностей между тремя участниками команды сохранено в docs/team-plan.md.

Маршруты API

Все бизнес-маршруты используют /api/v1. Полные типы запросов/ответов и примеры — в /docs и закоммиченном файле OpenAPI.

МетодМаршрут после /api/v1Назначение / результат
GET/assetsРеестр энергоактивов с метаданными страны/площадки и явной возможностью прогноза
GET/turbinesМетаданные настроенных турбин
GET/datasetsМетаданные импортированных наборов данных
POST/datasetsИмпорт валидированных наблюдений (201)
GET/datasets/{id}/observations?start=...&end=...Наблюдения во включительном, учитывающем часовой пояс окне для сравнения на графике
GET/modelsМетаданные доступных демо- и обученных моделей
GET/evidenceЗафиксированный хронологический бенчмарк, сравнения, происхождение данных и ограничения
GET/evidence/exportСкачать тот же типизированный отчёт evidence в JSON
POST/models/trainОбучить базовую модель, используя только данные, доступные на момент отсечки (201)
GET/weather/snapshots?turbine_id=...Сохранённая погода и происхождение данных
POST/weather/fetchЗагрузить неподтверждённого кандидата Single Runs (201)
POST/weather/snapshotsИмпорт неизменяемого снимка/ревизии (201)
GET/forecasts?limit=20Последние запуски, включая статус и результаты
POST/forecastsПоставить прогноз в очередь (202)
GET/forecasts/{id}Опрос статуса запуска, результата, ошибок и событий
GET/forecasts/{id}/eventsЖурнал решений агента
POST/forecasts/{id}/refreshПереиспользовать неизменённые входы или поставить новый запуск
GET/forecasts/{id}/exportСкачать почасовой CSV с происхождением данных
GET/backtestsИстория replay
POST/backtestsПоставить в очередь ежедневный скользящий replay (202)
GET/backtests/{id}Прогресс, дочерние запуски, метрики, отсутствующие факты
GET/backtests/{id}/exportCSV, ограниченный целевыми часами оценки

GET /health находится вне версионированного префикса. Жизненный цикл задачи: queued → running → succeeded | failed. Опрашивайте каждые 1–2 секунды; ответ 202 означает «в очереди», а не «завершено». Ошибки HTTP используют { "code": "...", "message": "..." }; сбои задач — run.error. Основные статусы ошибок: 404 неизвестный ресурс, 409 недоступный архив/неизменяемая запись/экспорт не готов, 422 неверные входные данные, 503 временный сбой транспорта погодных данных.

Целостность данных и ограничения

Каждое признаковое наблюдение подчиняется и valid_time <= issue_time, и available_at <= issue_time. Каждая обучающая метка подчиняется отсечке обучения. Модель не может прогнозировать выпуск раньше своей отсечки. Архивная погода должна иметь run_init <= issue_time, available_at <= issue_time, обязательное доказательство и каждую запрошенную почасовую цель. Полные контрольные суммы модели/истории, неизменяемые снимки, отпечатки и обновление по-прежнему обеспечиваются принудительно. Будущие валидные времена погоды ожидаемы; будущая публикация отклоняется.

Мощность нормализована в диапазоне [0,1]. Номинальные мощности и высоты ступиц неизвестны: агрегация по станциям в МВт, коррекция по высоте ступицы или калиброванная неопределённость не заявляются. Ветер на 100 м — ковариата модели, а не измерение турбины. Пропуски августовской погоды пропускаются только при обучении и фиксируются. Hindcast-данные и доступность, выведенная из расписания, не позволяют безусловно утверждать соответствие исторической доступности требованиям соревнования. Февральских фактических данных во входных данных нет. Прогнозы солнечной/гидроэнергетики и автоматизированное планирование новых моментов выпуска остаются задачами на будущее.

Опциональные облачные объяснения: OpenAI / NVIDIA. Учётные данные хранятся в локальном .env; никогда не коммитьте их. Настройте WINDFARM_DB, WINDFARM_MODELS и WINDFARM_TURBINES согласованно для воспроизведения и API. Для детерминированного офлайн-эксперимента ключ не нужен.

Проверка

npm run contracts
npm run check

Коммитьте оба сгенерированных файла контрактов вместе. CI проверяет расхождение сгенерированных контрактов. Тесты покрывают поздние/будущие наблюдения, отсечки моделей, неподтверждённую и неполную погоду, выбор снимков, неизменяемые артефакты, общие пары сравнения, フронтенд-сценарии и закоммиченные февральские CSV/манифест. scripts/run_tests.py использует локальную для репозитория временную директорию, чтобы избежать проблем с ACL системного temp в Windows. Компонентные тесты не заменяют визуальную проверку в браузере/WebGL.

Работа из интегрированной ветки main

Создайте фиче-ветку от текущей main, делайте коммиты сфокусированными и открывайте PR с доказательствами валидации. Проверьте настроенную идентичность автора перед коммитом; см. CONTRIBUTING.md. Изменения контрактов включают регенерированные типы и совместимое поведение фронтенда.

Чек-лист приёмки

  • Значения погоды используются в модели прогнозирования.
  • Выбор модели использует только хронологические ноябрьско-декабрьские фолды.
  • Январское сравнение включает константу, климатологию, persistence и оба набора признаков CatBoost на одинаковых парах.
  • Февральский CSV прогноза и манифест происхождения данных закоммичены; синтетическая погода не используется.
  • Пропущенная обучающая погода подсчитывается; инференс остаётся строгим.
  • Воспроизведение одной командой восстанавливает веса модели и реестр дашборда из чистого клона.
  • Агент проверяет, прогнозирует, анализирует и пересчитывает при изменении подходящих входов.
  • Историческая публикация каждого точного погодного прогноза независимо доказана (ограничение hindcast).
  • Задержка наблюдений, номинальные мощности и высоты ступиц независимо подтверждены.
  • Февральская точность измерена по предоставленным фактическим данным (факты недоступны).

См. обзор для жюри и исходный кейс.

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

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

Genpactal 23RiceEnjoyer21 15DinGoMaDDoG 5DinGoMaDDoG 5Abylaikhan 1

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

  • 2026-09-23 17:56lastGenpactal
  • 2026-09-23 17:54lastGenpactal
  • 2026-09-23 17:53lastGenpactal
  • 2026-09-23 17:34Keep replay status responsive and accept documented weather exportsGenpactal
  • 2026-09-23 17:27Verify reproduction cache and immutable input integrityGenpactal
  • 2026-09-23 17:25Reproduce and publish February archive forecasts with noon issue timesGenpactal
  • 2026-09-23 17:25Expose forecast wind summaries to the read-only analystGenpactal
  • 2026-09-23 17:25Show matched weather and baseline evidence with explicit provenanceGenpactal
Все коммиты (49)
  • 2026-09-23 17:21Train weather-aware models and compare five baselines on matched forecastsGenpactal
  • 2026-09-23 17:13Import ECMWF 00 UTC snapshots with explicit availability assumptionsGenpactal
  • 2026-09-23 16:59Merge branch 'main' of https://github.com/BAITC-Hacks/hack-9c72e88a-low-prior-itGenpactal
  • 2026-09-23 16:59faviconGenpactal
  • 2026-09-23 16:52Merge pull request #1 from BAITC-Hacks/ml-aiagentAbylaikhan
  • 2026-09-23 16:51Merge origin/main and preserve cloud analysis with model evidenceRiceEnjoyer21
  • 2026-09-23 16:48Merge model evidence updates with dashboard flow fixesGenpactal
  • 2026-09-23 16:44Fix dashboard navigation, refresh, and replay user flowsGenpactal
  • 2026-09-23 16:43fix(agent): reject incomplete tool responses and prepare merge handoffRiceEnjoyer21
  • 2026-09-23 16:41Add model evidence workspace and auditable forecast operationsDinGoMaDDoG
  • 2026-09-23 16:39Merge remote-tracking branch 'origin/main' into ml-aiagentRiceEnjoyer21
  • 2026-09-23 16:36llm addedRiceEnjoyer21
  • 2026-09-23 16:08Fix contributor email mapping and document author setupDinGoMaDDoG
  • 2026-09-23 16:05chore: record corrected contributor emailDinGoMaDDoG
  • 2026-09-23 16:03fix: git email for contribution attributionDinGoMaDDoG
  • 2026-09-23 15:59fix: git email for contribution attributionDinGoMaDDoG
  • 2026-09-23 15:58Merge energy explorer and profile themes into mainGenpactal
  • 2026-09-23 15:58Add energy globe explorer and profile appearance themesGenpactal
  • 2026-09-23 15:52Merge ml-aiagent into main and reconcile data provenance docsRiceEnjoyer21
  • 2026-09-23 15:48Merge danik helpers into integrated mainDinGoMaDDoG
  • 2026-09-23 15:48Document selected CatBoost gains and January 31 refit for mergeRiceEnjoyer21
  • 2026-09-23 15:46catboost trainedRiceEnjoyer21
  • 2026-09-23 15:37Merge current main and reconcile model training contractsRiceEnjoyer21
  • 2026-09-23 15:33Add chronological CatBoost selection and extended SCADA featuresRiceEnjoyer21
  • 2026-09-23 15:24back branchDinGoMaDDoG
  • 2026-09-23 15:20Merge data, weather, and backend work into unified mainGenpactal
  • 2026-09-23 15:18Prepare CatBoost training for merge with confirmed UTC+06 interval startsRiceEnjoyer21
  • 2026-09-23 15:15Merge remote-tracking branch 'origin/main' into ml-aiagentRiceEnjoyer21
  • 2026-09-23 15:08Merge ML forecasting and agent work into mainGenpactal
  • 2026-09-23 15:06Polish frontend theme states and documentationGenpactal
  • 2026-09-23 15:00new filesGenpactal
  • 2026-09-23 14:59website style enchanceGenpactal
  • 2026-09-23 14:59forecasting validatedRiceEnjoyer21
  • 2026-09-23 14:57Add wind backend, agent, frontend, and contracts scaffoldingDinGoMaDDoG
  • 2026-09-23 14:25Clean up backend filesDinGoMaDDoG
  • 2026-09-23 14:15Merge branch 'main' into ml-aiagentRiceEnjoyer21
  • 2026-09-23 14:13deletedRiceEnjoyer21
  • 2026-09-23 14:10Complete wind forecasting skeleton and team integration guideGenpactal
  • 2026-09-23 14:01first pushDinGoMaDDoG
  • 2026-09-23 13:59skeleton commitGenpactal
  • 2026-09-23 13:57carcasRiceEnjoyer21
Структура репозитория (163 файлов)
.editorconfig
.env.example
.gitattributes
.github/pull_request_template.md
.github/workflows/ci.yml
.gitignore
.mailmap
.python-version
CONTRIBUTING.md
DATA.md
README.md
agent/wind_agent/__init__.py
agent/wind_agent/analysis.py
agent/wind_agent/interfaces.py
agent/wind_agent/nvidia.py
agent/wind_agent/openai.py
agent/wind_agent/orchestrator.py
agent/wind_agent/scada.py
agent/wind_agent/source_data.py
agent/wind_agent/temporal.py
agent/wind_agent/weather.py
agent/wind_agent/worker.py
artifacts/README.md
backend/wind_backend/__init__.py
backend/wind_backend/catboost_model.py
backend/wind_backend/config.py
backend/wind_backend/evaluation.py
backend/wind_backend/evidence.py
backend/wind_backend/features.py
backend/wind_backend/main.py
backend/wind_backend/ml.py
backend/wind_backend/model_selection.py
backend/wind_backend/ridge_model.py
backend/wind_backend/routes.py
backend/wind_backend/service.py
backend/wind_backend/storage.py
config/turbines.example.json
contracts/openapi.json
contracts/wind_contracts/__init__.py
contracts/wind_contracts/evidence.py
contracts/wind_contracts/models.py
contracts/wind_contracts/scada.py
data/README.md
data/raw/turbine_1.csv
data/raw/turbine_2.csv
data/weather/ecmwf_ifs_single_runs.csv.gz
data/weather/gfs_seamless_previous_runs.csv.gz
data/weather/icon_seamless_previous_runs.csv.gz
docs/agent.md
docs/backend.md
docs/data-and-replay.md
docs/demo.md
docs/explorer.md
docs/frontend-theme.md
docs/frontend.md
docs/implementation-spec.md
docs/initial-training-results.md
docs/judges-walkthrough.md
docs/legacy-data-notes.md
docs/merge-request.md
docs/ml-training.md
docs/model-selection-results.json
docs/nvidia-agent.md
docs/openai-agent.md
docs/task.pdf
docs/tuned-training-results.md
examples/observations.demo.csv
frontend/index.html
frontend/package.json
frontend/public/favicon.ico
frontend/public/favicon.png
frontend/public/geo/README.md
frontend/public/geo/countries.geojson
frontend/src/App.tsx
frontend/src/ForecastChart.tsx
frontend/src/api.ts
frontend/src/components/AgentPanel.tsx
frontend/src/components/DataWorkspace.tsx
frontend/src/components/ForecastInsights.tsx
frontend/src/components/ForecastTable.tsx
frontend/src/components/Icon.tsx
frontend/src/components/ProfileMenu.tsx
frontend/src/components/ReplayPanel.tsx
frontend/src/components/StationMap.tsx
frontend/src/components/WeatherPanel.tsx
frontend/src/evidence/EvidenceView.tsx
frontend/src/evidence/evidence.css
frontend/src/evidence/metrics.test.mjs
frontend/src/evidence/metrics.ts
frontend/src/explore/ExploreView.tsx
frontend/src/explore/GlobeCanvas.tsx
frontend/src/explore/catalog.ts
frontend/src/explore/explore.css
frontend/src/format.ts
frontend/src/generated/api.ts
frontend/src/insights.css
frontend/src/insights.ts
frontend/src/main.tsx
frontend/src/navigation.ts
frontend/src/styles.css
frontend/src/theme.ts
frontend/src/themes.css
frontend/src/useDashboard.ts
frontend/tests/explore.test.mjs
frontend/tests/flow/dashboard.test.tsx
frontend/tests/flow/fixtures.ts
frontend/tests/flow/navigation.test.tsx
frontend/tests/flow/profile.test.tsx
frontend/tests/flow/setup.ts
frontend/tests/flow/weather-selection.test.tsx
frontend/tests/insights.test.mjs
frontend/tsconfig.json
frontend/vite.config.ts
frontend/vitest.config.ts
package-lock.json
package.json
pyproject.toml
requirements.txt
scripts/check_nvidia.py
scripts/check_openai.py
scripts/convert_scada.py
scripts/data_report.py
scripts/export_contracts.py
scripts/export_openapi.py
scripts/fetch_weather.py
scripts/import_csv.py
scripts/import_weather_archive.py
scripts/prepare_dataset.py
scripts/prepare_globe_map.py
scripts/python.mjs
scripts/refit_selected.py
scripts/run_tests.py
scripts/smoke_demo.py
scripts/train_evaluate.py
scripts/tune_model.py
scripts/validate_models.py
tests/__init__.py
tests/conftest.py
tests/test_api.py
tests/test_assets.py
tests/test_branch_integration.py
tests/test_catboost.py
tests/test_data.py
tests/test_data_scripts.py
tests/test_evidence.py
tests/test_forecast_analysis.py
tests/test_leakage.py
tests/test_legacy_weather.py
tests/test_ml.py
tests/test_model_selection.py
tests/test_nvidia.py
tests/test_openai.py
tests/test_scada.py
tests/test_source_data.py
tests/test_tuning_cli.py
tests/test_weather_adapter.py
tests/test_worker.py
uv.lock
windagent/__init__.py
windagent/openmeteo.py
windagent/scada.py
windagent/settings.py
windagent/weather.py
Ветки (5)

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

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

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