AAYMA
RU
Войти

SteppeWind

Агентная система почасового прогноза выработки ВЭС из двух турбин на 24–48 часов с интервалом P10–P90 и строгой защитой от утечки будущих данных.

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

О проекте

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

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

Суть

Агентная система почасового прогноза выработки ВЭС из двух турбин на 24–48 часов с интервалом P10–P90 и строгой защитой от утечки будущих данных. Сдан прогноз на февраль 2026 (28 выпусков), есть живой режим с планировщиком, бэктест и сайт на Streamlit с AI-чатом.

Как устроено

SCADA-CSV проходит QC и почасовую агрегацию. Архив прогнозов погоды Open-Meteo (ECMWF IFS, ICON, GFS, ERA5) доступен только через DataStore(as_of), который отдаёт лишь опубликованные к моменту прогноза прогоны и бросает LeakageError. Около 90 признаков (ветер на высотах, сдвиг, плотность воздуха, разброс моделей и прогонов, календарь) идут в ансамбль из градиентного бустинга с MAE- и MSE-потерей и физической кривой мощности. Интервал строится квантильным бустингом с конформной калибровкой (CQR). LLM-агент (или режим правил) с 8 инструментами проверяет погоду, запускает модель, анализирует результат, публикует v1 с объяснением и выпускает ревизию v2 при новом прогоне ECMWF.

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

  • gradient boosting (MAE/MSE loss)
  • physical power curve
  • ensemble
  • conformalized quantile regression (CQR)
  • leakage-safe as_of data store
  • multi-NWP features (ECMWF/ICON/GFS)
  • backtest by issue protocol
  • function calling agent
  • LLM fact-checking
  • scheduler-triggered revision

Метрики

MAE 0.168 (нормированная мощность, среднее по 3 периодам) против 0.184 у лучшего бейзлайна и 0.328 у климатологии; RMSE 0.234; покрытие P10–P90 73–78% при номинале 80%; 79 автотестов

Особенности

Утечка будущих данных исключена архитектурно (DataStore(as_of) + LeakageError + тесты), к каждому выпуску прилагается манифест с использованными прогонами погоды. Команда честно показывает, что точность упирается в прогноз ветра: с фактическим ветром MAE была бы 0.03–0.04. Агент сам выпускает ревизии при новом прогоне ECMWF (в 23 из 28 выпусков). Проект развёрнут на собственном домене.

Стек

Python · uv · Streamlit · Open-Meteo · Docker Compose · Caddy · PWA · pytest · Parquet

Модели

gpt-5.6-terra (agent) · gpt-6-luna (chat)


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

README

README.md

SteppeWind — Agentic AI прогноз выработки ВЭС

Сайт: https://steppewind.energy · Видео (75 с): docs/media/demo.mp4

Демонстрация SteppeWind: прогноз, AI-агент, качество, чат

Кратко

SteppeWind прогнозирует почасовую выработку ветроэлектростанции из двух турбин (Алматинская область, 43.64° с. ш., 78.54° в. д.) на следующие 24–48 часов.

Для кого: оператор ВЭС и диспетчер. Выработка ветра нестабильна, а график поставки в энергосистему нужно заявить заранее, за сутки. Ошибка прогноза оборачивается штрафами за небаланс и неэффективным планированием.

Главное требование задачи — честная ретроспектива. Прогноз на каждый день тестового периода (февраль 2026) строится только по тем прогнозам погоды, которые уже были опубликованы на момент прогноза. Фактическая погода, ставшая известной позже, не используется. Это гарантируется кодом и проверяется тестами.

AI-агент сам проходит весь цикл:

  1. получает прогнозы погоды;
  2. проверяет их качество;
  3. запускает модель;
  4. анализирует результат;
  5. публикует прогноз с объяснением;
  6. пересчитывает его, когда выходит новый прогон погоды.

Что реализовано

  • Прогноз на тестовый период. 28 ежедневных выпусков (31.01–27.02.2026) по 48 часов, мощность каждой турбины и ВЭС, интервал P10–P90. Для каждого выпуска есть манифест: какие прогоны погоды использованы и когда они были опубликованы. Всё лежит в artifacts/submission/.

  • Защита от утечки будущего. Все данные проходят через DataStore(as_of):

    • он отдаёт только прогоны, опубликованные к моменту прогноза, и только завершившиеся часы SCADA;
    • попытка взять более поздние данные вызывает LeakageError.
  • Основная модель — ансамбль из трёх компонентов:

    • градиентный бустинг с MAE-потерей;
    • градиентный бустинг с MSE-потерей;
    • физическая кривая мощности турбин.

    Бустинг обучен на ~90 признаках из прогнозов ECMWF, ICON и GFS: ветер на разных высотах, направление, сдвиг ветра, плотность воздуха, разброс между погодными моделями и между последними прогонами ECMWF, календарь.

  • Интервал P10–P90: квантильный бустинг с конформной калибровкой (CQR).

  • AI-агент (подробнее — в разделе AI-агент):

    • 8 инструментов, режим LLM (OpenAI) и режим правил;
    • ревизия прогноза после выхода нового прогона погоды;
    • проверка фактов в тексте LLM;
    • демо-сценарии сбоя данных;
    • журналы всех 28 выпусков LLM-агента.
  • Живой режим. Прогноз на настоящее «завтра» по свежим прогнозам Open-Meteo. Планировщик на сервере каждые 15 минут проверяет, вышел ли новый прогон ECMWF, и сам запускает агента.

  • Бэктест на трёх контрольных периодах по протоколу теста, 6 моделей для сравнения, метрики MAE, RMSE, смещение, покрытие интервала.

  • Веб-интерфейс (Streamlit):

    • «Прогноз»: карточки, объяснение AI-агента с причинами уверенности, график с предыдущим прогнозом и ветром в подсказке, режимы «Февраль 2026 · тест», «Сейчас», «История» (прогноз против факта);
    • «Погода»: прогнозы четырёх моделей на момент выпуска и проверка времени их публикации;
    • «Качество прогноза»: метрики, «прогноз против факта», распределение ошибок;
    • «Данные»: загрузка своего CSV и мгновенная оценка точности;
    • «AI-агент»: схема цикла, шаги и решения, версии прогноза, живой запуск, демо сбоев;
    • плавающий чат с AI-помощником;
    • установка как приложение (PWA).
  • Развёртывание: Docker Compose — приложение, планировщик агента, Caddy с автоматическим HTTPS.

  • Проверки:

    • 79 автотестов (uv run pytest);
    • scripts/check_site.py проходит основной пользовательский сценарий на сайте.

Как это работает

                ┌──────────────────────── AI-агент (LLM или правила) ────────────────────────┐
CSV турбин ─►   │ погода ─► проверка ─► модель ─► анализ ─► публикация ─► новый прогон? ─► пересчёт │
Open-Meteo ─►   └────────────────────────────────────────────────────────────────────────────┘
                   │ все данные только через DataStore(as_of): опубликованное к моменту прогноза
                   ▼
   признаки (48 ч × ~90) ─► ансамбль + интервал P10–P90 ─► прогноз + манифест + объяснение ─► сайт
  1. Выпуск для даты D делается в D 14:00 по местному времени (UTC+6) и покрывает D+1 00:00 … D+2 23:00.

  2. DataStore выбирает самый свежий прогон ECMWF, опубликованный к этому моменту (обычно 00Z того же дня). Для GFS, ICON и ECMWF 0.25° берётся самый свежий прогноз из уже вышедших.

  3. Из прогнозов погоды строится таблица признаков: 48 целевых часов × ~90 признаков.

  4. Модель выдаёт прогноз по каждой турбине и по ВЭС с интервалом P10–P90.

  5. Агент проверяет прогноз:

    • правдоподобие;
    • согласованность с ветром;
    • сравнение с климатической нормой и прошлым выпуском;
    • уверенность.

    Затем публикует версию v1 с объяснением.

  6. Когда выходит следующий прогон ECMWF, агент пересчитывает прогноз. Если изменение существенное, публикует ревизию v2.

Результаты (бэктест)

Средняя ошибка прогноза нормированной мощности ВЭС (0–1, где 1 — номинал) по 48 часам каждого выпуска. Три контрольных периода, ~30 ежедневных выпусков каждый. Модели обучены только на данных до первого выпуска периода.

MAE

Модельфев 2025дек 2025янв 2026среднее
Основная модель (ансамбль)0.1680.1820.1560.168
ECMWF IFS → кривая мощности по анемометру турбин0.1740.2150.1630.184
ECMWF IFS → кривая, обученная на прогнозах0.1860.2110.1830.193
ECMWF 0.25° (Previous Runs) → обученная кривая0.2180.2180.2170.217
ICON (Previous Runs) → обученная кривая0.2040.2250.2250.218
GFS (Previous Runs) → обученная кривая0.2820.2340.2540.257
Климатология (среднее по месяцу и часу)0.3260.3530.3040.328

RMSE

Модельфев 2025дек 2025янв 2026среднее
Основная модель (ансамбль)0.2360.2520.2130.234
ECMWF IFS → кривая, обученная на прогнозах0.2390.2740.2310.248
ECMWF IFS → кривая мощности по анемометру турбин0.2600.3070.2420.270
Климатология (среднее по месяцу и часу)0.3610.3830.3410.362

Полные таблицы — в artifacts/reports/backtest.md.

Интервал P10–P90 (номинальное покрытие 80%): фактическое покрытие 73% (фев 2025), 77% (дек 2025), 78% (янв 2026). Небольшой недобор объясняется сезонным сдвигом между окном калибровки и периодом прогноза.

Выводы

  • Ансамбль лучше всех моделей для сравнения на каждом периоде: MAE −9% относительно лучшей из них, −49% относительно климатологии. Систематическое смещение близко к нулю.

  • Точность ограничена прогнозом погоды, а не моделью. Если подставить фактический ветер на турбине, MAE было бы 0.03–0.04. Прогноз ветра ECMWF на сутки вперёд ошибается в среднем на 2–2.5 м/с.

  • Проверено и не принято:

    • прогноз ECMWF в 4 соседних точках сетки (MAE 0.1682 против 0.1684 — в пределах шума);
    • повышенный вес свежих данных — тоже без выигрыша.

    Код оставлен как опция: neighbors.use_in_model в config/settings.yaml.

Прогноз на февраль 2026

Готовые файлы в artifacts/submission/:

ФайлСодержимое
forecast_feb2026.csvвсе 28 выпусков × 48 часов (1 344 строки): прогноз на D+1 и D+2 от каждого выпуска
forecast_feb2026_dayahead.csvпо одному значению на каждый час февраля (672 строки): прогноз, выпущенный накануне
manifests/<дата>.jsonдля каждого выпуска: момент прогноза, версия модели, использованные прогоны погоды и время их публикации, итог проверки на утечку
КолонкаОписание
issue_date, issue_time_utcдата выпуска и момент прогноза (14:00 UTC+6 = 08:00 UTC)
target_time_local, target_time_utcпрогнозируемый час (UTC+6 и UTC), начало часа
horizon_h, lead_dayгоризонт от момента прогноза в часах; сутки упреждения: 1 = D+1, 2 = D+2
p_t1, p_t2, p_farmнормированная мощность (0–1): турбина 1, турбина 2, ВЭС (среднее двух)
p_farm_q10, p_farm_q90интервал P10–P90 для ВЭС
ifs_run_time, model_versionпрогон ECMWF, по которому построен прогноз; версия модели

Модель обучена один раз, на всех фактах, известных к первому выпуску (31.01.2026 14:00 UTC+6). Данных SCADA за февраль нет, поэтому от выпуска к выпуску меняются только прогнозы погоды.

AI-агент

Агент выпускает прогноз сам, вызывая инструменты. Все числа считают инструменты (детерминированный код), а агент выбирает порядок действий, принимает решения и пишет объяснение для диспетчера.

ИнструментЧто делает
check_available_runsкакие прогоны погодных моделей уже опубликованы на текущий момент
fetch_weatherсобирает прогнозы ECMWF, ICON и GFS на 48 часов (только опубликованные)
validate_weatherпроверяет покрытие, физичность значений, согласие моделей и свежесть прогона; предлагает исключить подозрительные источники
run_forecastзапускает модель; можно исключить источники
analyze_forecastправдоподобие, согласованность с ветром, сравнение с климатической нормой и прошлым выпуском, уверенность
publish_forecastпубликует версию прогноза с объяснением (в LLM-режиме — после проверки фактов)
advance_to_next_updateпереводит время до выхода следующего прогона ECMWF
compare_with_publishedсравнивает новый расчёт с опубликованной версией и советует, нужна ли ревизия

Цикл выпуска.

  1. В 14:00 агент публикует версию v1. Это и есть прогноз для сдачи, он построен строго по данным на момент выпуска.
  2. Затем агент дожидается следующего прогона ECMWF (обычно в 19:00) и пересчитывает прогноз.
  3. Если прогноз изменился существенно (в среднем больше 3 п.п. или хотя бы на один час больше 15 п.п.), агент публикует ревизию v2 и объясняет, что изменилось.

За февраль 2026 ревизия понадобилась в 23 выпусках из 28. Журналы всех выпусков, сделанные LLM-агентом (gpt-5.6-terra, ~30 с на выпуск), лежат в artifacts/agent/<дата>/: в run.json все шаги и решения, рядом CSV каждой версии.

Режимы с одним набором инструментов.

  • LLM — OpenAI Responses API с вызовом инструментов. Модель сама решает, какой инструмент вызвать, исключать ли источник и нужна ли ревизия, и пишет объяснение. Включается ключом OPENAI_API_KEY в .env.
  • Правила — тот же цикл с решениями по порогам и объяснением по шаблону. Работает без ключа и без интернета. Если LLM недоступна или не опубликовала прогноз, агент автоматически завершает выпуск по правилам.

Проверка фактов.

  • Каждое число в объяснении LLM сверяется с результатами инструментов, с учётом единиц: доли, проценты, п.п.
  • Если в тексте есть число без источника, публикация отклоняется, и модель переписывает текст.
  • На подменённых числах проверка ловит 90% подмен.

Демо сбоев данных. На странице «AI-агент» можно выбрать один из трёх сценариев и увидеть, как агент реагирует:

  • «испорчен прогноз ICON» — агент исключает ICON и объясняет почему;
  • «пропуски в GFS» — агент исключает GFS;
  • «опоздал прогон ECMWF» — агент работает на старом прогоне и понижает уверенность.

Живой режим. windagent live строит прогноз на настоящее «завтра» по свежим прогнозам Open-Meteo. windagent live --watch — планировщик: каждые 15 минут он проверяет новые прогоны ECMWF и при появлении нового запускает агента. На сервере это отдельный контейнер scheduler. На сайте живой прогноз — режим «Сейчас» на странице «Прогноз».

Технологии

  • Python 3.12, менеджер окружения uv
  • pandas, numpy, pyarrow — обработка данных, хранение в Parquet
  • scikit-learn — градиентный бустинг (HistGradientBoostingRegressor), изотоническая регрессия для кривой мощности
  • httpx — запросы к Open-Meteo (с ограничением частоты и повторами)
  • OpenAI API (Responses API, вызов инструментов) — LLM-режим агента и чат; необязательно
  • Streamlit, Plotly — веб-интерфейс и графики
  • Docker Compose, Caddy — развёртывание, HTTPS (Let's Encrypt), PWA
  • pytest — тесты; Playwright — проверка сценария на сайте и запись демо-видео (scripts/)
  • Open-Meteo API — архивные и свежие прогнозы погоды (ECMWF IFS, ECMWF 0.25°, GFS, ICON), реанализ ERA5

Архитектура

МодульНазначение
windagent/data/scada.pyзагрузка CSV турбин, контроль качества, почасовая агрегация
windagent/data/openmeteo.py, weather.pyклиент Open-Meteo и локальный кэш прогнозов (cache/weather/)
windagent/data/store.pyDataStore(as_of): единственная точка доступа к данным, защита от утечки
windagent/protocol.pyпротокол выпусков: момент прогноза и целевые часы
windagent/features/таблица «выпуск × целевой час» и производные признаки
windagent/models/ансамбль, интервал P10–P90 (CQR), кривая мощности, модели для сравнения
windagent/eval/метрики и бэктест
windagent/forecast.pyитоговая модель, прогноз выпуска с манифестом, прогон тестового периода
windagent/agent/инструменты агента, оркестраторы (LLM и правила), проверка фактов
windagent/live.pyживой режим и планировщик
windagent/ui/, app/streamlit_app.py, app/serve.pyвеб-интерфейс; serve.py прогревает модель и данные до первого посетителя
windagent/cli.pyкомандная строка windagent
config/settings.yamlвсе параметры: координаты, модели погоды, задержки публикации, периоды
Dockerfile, docker-compose.yml, deploy/образ, сервисы app / scheduler / caddy, конфигурация Caddy и PWA, скрипт выкладки
scripts/check_site.py, scripts/record_demo.pyпроверка пользовательского сценария на сайте, запись демо-видео

Установка и запуск

Вариант 1 — uv (рекомендуется). uv сам скачает Python 3.12 и точные версии библиотек из uv.lock.

# установка uv (macOS / Linux), если его нет:
curl -LsSf https://astral.sh/uv/install.sh | sh

git clone https://github.com/BAITC-Hacks/hack-418ae9f6-steppe-overflow.git
cd hack-418ae9f6-steppe-overflow
uv sync

Вариант 2 — pip. Нужен Python 3.12.

python3.12 -m venv .venv
source .venv/bin/activate          # Windows: .venv\Scripts\activate
pip install -r requirements.txt pytest
pip install -e . --no-deps

Во втором варианте команды ниже запускаются без префикса uv run.

Вариант 3 — Docker. Ничего, кроме Docker, не нужно.

docker build -t steppewind .
docker run --rm -p 8501:8501 steppewind

Интерфейс откроется на http://localhost:8501.

LLM-режим и чат (необязательно):

cp .env.example .env

Затем впишите в .env свой OPENAI_API_KEY. Файл .env не попадает в git.

Как проверить

Всё ниже работает без интернета и без API-ключей: данные, архив погоды, модель и готовый прогноз уже лежат в репозитории.

# 1. Автотесты (79), в том числе: ни один из 28 выпусков февраля не использует данные из будущего
uv run pytest

# 2. Данные турбин и архив прогнозов погоды
uv run windagent data
uv run windagent weather status

# 3. Прогноз одного выпуска: какие прогоны погоды использованы и когда опубликованы + 48 часов
uv run windagent forecast --date 2026-02-10

# 4. Все 28 выпусков → artifacts/submission/ (~15 с); с закоммиченной моделью совпадает с файлами побайтно
uv run windagent submission

# 5. AI-агент на одной дате: шаги, решения, объяснение, ревизия (режим правил без ключа)
#    перезаписывает журнал LLM-агента в artifacts/agent/2026-02-10/ (вернуть: git checkout artifacts/agent)
uv run windagent agent --date 2026-02-10

# 6. Бэктест на трёх контрольных периодах (~2 мин) → artifacts/reports/backtest.md
uv run windagent features build
uv run windagent backtest --period all

# 7. Веб-интерфейс на http://localhost:8501
uv run python app/serve.py --server.port 8501

Дополнительно:

  • uv run windagent train — переобучить итоговую модель с нуля (~1 мин, после features build);
  • uv run windagent agent --period test — агент на всех 28 выпусках;
  • uv run windagent backtest --baselines-only — только модели для сравнения, ~10 с.

Сценарий в интерфейсе (или на https://steppewind.energy):

  1. «Прогноз» → листайте выпуски кнопками ‹ ›. Карточки, объяснение AI-агента, график с предыдущим прогнозом. «Пересчитать» строит выпуск заново и сверяет с сохранённым.
  2. Режим «История» — прогноз против фактической выработки на прошлых датах. Режим «Сейчас» — живой прогноз на завтра.
  3. «AI-агент» → выберите «Демо сбоя: испорчен прогноз ICON» → «Запустить агента». Агент сам исключит источник и объяснит решение.
  4. «Данные» → «Попробовать на примере» или загрузите CSV с фактом за февраль 2026 (формат датасета организаторов, одна или две турбины). Точность прогноза посчитается сразу.
  5. Кнопка чата внизу справа — вопросы о прогнозе (нужен ключ OpenAI на сервере).

Автоматическая проверка сценария на сайте (нужны pip install playwright и Google Chrome):

python scripts/check_site.py https://steppewind.energy --no-llm

Скрипт проходит все страницы как пользователь и печатает PASS/FAIL по 12 шагам.

Обновить архив погоды из Open-Meteo (нужен интернет; для проверки не требуется):

uv run windagent weather download --what single,previous,era5

Данные и интеграции

Данные турбин — Dataset/

Две турбины, 10-минутные записи с 11.03.2023 по 31.01.2026:

  • время (UTC+6);
  • средняя скорость ветра (м/с);
  • нормализованная активная мощность (0–1);
  • температура (°C).

Часовой пояс UTC+6 установлен сопоставлением с реанализом ERA5. Пропуски: 6.6% у турбины 1 (включая перерыв 18.05–17.07.2024) и 1.9% у турбины 2. Если у одной турбины нет данных, для ВЭС используется вторая.

Прогнозы погоды — Open-Meteo (бесплатно, без ключа)

APIЧто берёмРоль
Single Runsпрогоны ecmwf_ifs 00/06/12/18 UTC с точным временем старта, с 15.03.2024основной прогноз ветра
Previous Runsecmwf_ifs025, gfs_seamless, icon_seamless: прогнозы, выпущенные 1–3 суток назаддополнительные модели
Historical Weather (ERA5)реанализтолько анализ (проверка часового пояса); в прогнозе не используется

Задержка публикации. Прогон считается доступным через фиксированную задержку после старта: ECMWF — 7 ч, GFS — 5 ч, ICON — 4 ч (config/settings.yaml).

Previous Runs. Сравнением с прогонами ECMWF проверено, что значение «N суток назад» для часа V берётся из прогона, стартовавшего примерно за 24·N часов до V. Для каждого целевого часа используется минимальное N, прогон которого уже опубликован.

OpenAI API (необязательно)

LLM-режим агента и чат на сайте. Без ключа агент работает в режиме правил, а чат отключён.

Переменная (.env)По умолчаниюНазначение
OPENAI_API_KEY—ключ OpenAI
OPENAI_MODELgpt-5.6-terraмодель агента
OPENAI_CHAT_MODELgpt-6-lunaмодель чата
CHAT_LIMIT_PER_IP / CHAT_LIMIT_TOTAL20 / 500вопросов в чат в день: с одного адреса / всего
AGENT_LLM_LIMIT_PER_IP / AGENT_LLM_LIMIT_TOTAL3 / 40LLM-запусков агента в день с сайта

Планировщик живого режима делает не больше 8 LLM-запусков в сутки, дальше работает по правилам.

Ограничения

  • Данных SCADA за февраль 2026 нет, поэтому прогноз на тестовый период строится только по прогнозам погоды, без коррекции по свежим наблюдениям.
  • Точность упирается в прогноз ветра: ошибка ECMWF на сутки вперёд — 2–2.5 м/с. Внезапные простои и ограничения мощности модель не предсказывает, а оценка идёт по фактической выработке.
  • Отдельные прогоны ECMWF есть только с 15.03.2024, поэтому модели, использующие погоду, обучаются на ~22 месяцах. В марте–августе 2024 в архиве нет прогонов 06/18 UTC; на выпуски это не влияет, используется прогон 00 UTC.
  • Интервал P10–P90 на контрольных периодах накрывает факт в 73–78% случаев при номинале 80%.
  • Разные платформы. Журналы агента посчитаны на сервере (x86), файл сдачи — на Mac (ARM). Из-за разного округления на процессорах версия v1 в журналах на 5 датах отличается от файла сдачи в отдельных часах, меньше чем на 1 п.п. На одной платформе результаты совпадают точно.
  • Проверка фактов гарантирует, что в тексте LLM нет чисел без источника. Но она не проверяет, что число приписано правильной величине.
  • Время в интерфейсе везде UTC+6, как в данных SCADA. Официальное время Алматы с 2024 года — UTC+5.
  • Бесплатный Open-Meteo ограничен 10 000 запросов в сутки на IP; для проверки проекта интернет не нужен.

Deployed-версия

https://steppewind.energy — прогноз на февраль 2026, живой прогноз на завтра, AI-агент, погода, качество, загрузка своих данных, чат.

Развёртывание: Docker Compose на отдельном сервере — приложение, планировщик агента, Caddy с автоматическим HTTPS (Let's Encrypt). Выкладка текущего коммита — ./deploy/deploy.sh.

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

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

madeburo 32

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

  • 2026-09-23 17:41Caddy: заголовки безопасности (HSTS, nosniff, X-Frame-Options), без Server; deploy перезапускает Caddymadeburo
  • 2026-09-23 17:31README: предупреждение о перезаписи журнала агентаmadeburo
  • 2026-09-23 17:26README: финальная версия (демо, живой режим, агент, проверка сценария); scripts/check_site.pymadeburo
  • 2026-09-23 17:21Вкладка «Сейчас»: кнопка «Обновить» без обрезкиmadeburo
  • 2026-09-23 17:19Демо-видео: запись сайта с субтитрами (mp4, 75 с) и короткий GIF для README; сценарий записиmadeburo
  • 2026-09-23 17:08Погода: все погодные модели показаны по умолчаниюmadeburo
  • 2026-09-23 17:03docker-compose: планировщик без pull из реестра и без проверки веб-портаmadeburo
  • 2026-09-23 17:02Модель без изменений: соседние точки ECMWF выключены (флаг use_in_model), калибровка интервала — 60 днейmadeburo
Все коммиты (32)
  • 2026-09-23 16:45Агент: живой режим с планировщиком, проверка фактов LLM, демо сбоев данных; редизайн главнойmadeburo
  • 2026-09-23 16:16Плитка «Мощность завтра»: отклонение от нормы только за завтра (согласовано с объяснением агента)madeburo
  • 2026-09-23 16:15Журналы LLM-агента для всех 28 выпусков февраля; уточнения о платформенных расхожденияхmadeburo
  • 2026-09-23 16:07Сайт: символ на кнопке чата с подсказкой, статус системы, светлее второй цвет, прогрев при стартеmadeburo
  • 2026-09-23 16:03PWA: установка сайта как приложенияmadeburo
  • 2026-09-23 15:57Интерфейс: агент на главной, схема цикла агента, второй цвет, мобильная вёрсткаmadeburo
  • 2026-09-23 15:41Сайт: плавающий чат, проверка на своих данных, меньше отступ сверхуmadeburo
  • 2026-09-23 15:34Фирменный стиль сайта: логотип, favicon, зелёная палитра, Manrope, новые графикиmadeburo
  • 2026-09-23 15:25E7b: экран AI-агента — журнал шагов, версии прогноза, живой запуск, чат с лимитамиmadeburo
  • 2026-09-23 15:21README: сайт развёрнут на https://steppewind.energymadeburo
  • 2026-09-23 15:19deploy.sh: выкладка текущего коммита на сервер через git archive и docker composemadeburo
  • 2026-09-23 15:15Модель чата по умолчанию: gpt-6-luna (дешевле и новее gpt-5.6-luna)madeburo
  • 2026-09-23 15:14E6: AI-агент — инструменты, оркестраторы (OpenAI и правила), пересчёт при новых прогонахmadeburo
  • 2026-09-23 15:09Модели OpenAI по умолчанию: gpt-5.6-terra (агент), gpt-5.6-luna (чат)madeburo
  • 2026-09-23 15:02E7a: веб-интерфейс Streamlit и Docker-развёртываниеmadeburo
  • 2026-09-23 14:52Домен проекта: https://steppewind.energymadeburo
  • 2026-09-23 14:49gitignore: убрано упоминание внутренних документовmadeburo
  • 2026-09-23 14:47E5: прогноз на февраль 2026 с интервалами P10-P90 и манифестамиmadeburo
  • 2026-09-23 14:36Агент будет использовать OpenAI API: .env.examplemadeburo
  • 2026-09-23 14:35E4: основная модель — ансамбль градиентного бустинга и физической кривойmadeburo
  • 2026-09-23 14:19README: структура по шаблону жюри, результаты бэктеста, инструкции проверки; requirements.txtmadeburo
  • 2026-09-23 14:16E3: кривая мощности, бейзлайны, метрики и бэктест по протоколу выпусковmadeburo
  • 2026-09-23 14:15E2: архив прогнозов погоды Open-Meteo и DataStore(as_of)madeburo
  • 2026-09-23 14:12E0+E1: скелет проекта, загрузка SCADA, QC и почасовая агрегацияmadeburo
Структура репозитория (207 файлов)
.dockerignore
.env.example
.gitignore
.python-version
.streamlit/config.toml
Dataset/Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 1.csv
Dataset/Dataset HackAlemAI для участников 11.03.2023-28.02.2026 - turbine 2.csv
Dockerfile
README.md
app/assets/favicon.svg
app/assets/logo.svg
app/assets/symbol.svg
app/serve.py
app/streamlit_app.py
artifacts/.gitkeep
artifacts/agent/2026-01-31/forecast_v1.csv
artifacts/agent/2026-01-31/forecast_v2.csv
artifacts/agent/2026-01-31/run.json
artifacts/agent/2026-02-01/forecast_v1.csv
artifacts/agent/2026-02-01/run.json
artifacts/agent/2026-02-02/forecast_v1.csv
artifacts/agent/2026-02-02/forecast_v2.csv
artifacts/agent/2026-02-02/run.json
artifacts/agent/2026-02-03/forecast_v1.csv
artifacts/agent/2026-02-03/forecast_v2.csv
artifacts/agent/2026-02-03/run.json
artifacts/agent/2026-02-04/forecast_v1.csv
artifacts/agent/2026-02-04/forecast_v2.csv
artifacts/agent/2026-02-04/run.json
artifacts/agent/2026-02-05/forecast_v1.csv
artifacts/agent/2026-02-05/forecast_v2.csv
artifacts/agent/2026-02-05/run.json
artifacts/agent/2026-02-06/forecast_v1.csv
artifacts/agent/2026-02-06/forecast_v2.csv
artifacts/agent/2026-02-06/run.json
artifacts/agent/2026-02-07/forecast_v1.csv
artifacts/agent/2026-02-07/forecast_v2.csv
artifacts/agent/2026-02-07/run.json
artifacts/agent/2026-02-08/forecast_v1.csv
artifacts/agent/2026-02-08/forecast_v2.csv
artifacts/agent/2026-02-08/run.json
artifacts/agent/2026-02-09/forecast_v1.csv
artifacts/agent/2026-02-09/forecast_v2.csv
artifacts/agent/2026-02-09/run.json
artifacts/agent/2026-02-10/forecast_v1.csv
artifacts/agent/2026-02-10/forecast_v2.csv
artifacts/agent/2026-02-10/run.json
artifacts/agent/2026-02-11/forecast_v1.csv
artifacts/agent/2026-02-11/run.json
artifacts/agent/2026-02-12/forecast_v1.csv
artifacts/agent/2026-02-12/forecast_v2.csv
artifacts/agent/2026-02-12/run.json
artifacts/agent/2026-02-13/forecast_v1.csv
artifacts/agent/2026-02-13/forecast_v2.csv
artifacts/agent/2026-02-13/run.json
artifacts/agent/2026-02-14/forecast_v1.csv
artifacts/agent/2026-02-14/forecast_v2.csv
artifacts/agent/2026-02-14/run.json
artifacts/agent/2026-02-15/forecast_v1.csv
artifacts/agent/2026-02-15/forecast_v2.csv
artifacts/agent/2026-02-15/run.json
artifacts/agent/2026-02-16/forecast_v1.csv
artifacts/agent/2026-02-16/forecast_v2.csv
artifacts/agent/2026-02-16/run.json
artifacts/agent/2026-02-17/forecast_v1.csv
artifacts/agent/2026-02-17/forecast_v2.csv
artifacts/agent/2026-02-17/run.json
artifacts/agent/2026-02-18/forecast_v1.csv
artifacts/agent/2026-02-18/forecast_v2.csv
artifacts/agent/2026-02-18/run.json
artifacts/agent/2026-02-19/forecast_v1.csv
artifacts/agent/2026-02-19/forecast_v2.csv
artifacts/agent/2026-02-19/run.json
artifacts/agent/2026-02-20/forecast_v1.csv
artifacts/agent/2026-02-20/forecast_v2.csv
artifacts/agent/2026-02-20/run.json
artifacts/agent/2026-02-21/forecast_v1.csv
artifacts/agent/2026-02-21/run.json
artifacts/agent/2026-02-22/forecast_v1.csv
artifacts/agent/2026-02-22/run.json
artifacts/agent/2026-02-23/forecast_v1.csv
artifacts/agent/2026-02-23/forecast_v2.csv
artifacts/agent/2026-02-23/run.json
artifacts/agent/2026-02-24/forecast_v1.csv
artifacts/agent/2026-02-24/forecast_v2.csv
artifacts/agent/2026-02-24/run.json
artifacts/agent/2026-02-25/forecast_v1.csv
artifacts/agent/2026-02-25/forecast_v2.csv
artifacts/agent/2026-02-25/run.json
artifacts/agent/2026-02-26/forecast_v1.csv
artifacts/agent/2026-02-26/forecast_v2.csv
artifacts/agent/2026-02-26/run.json
artifacts/agent/2026-02-27/forecast_v1.csv
artifacts/agent/2026-02-27/run.json
artifacts/models/production.pkl.gz
artifacts/reports/backtest.md
artifacts/reports/backtest_preds.parquet
artifacts/submission/forecast_feb2026.csv
artifacts/submission/forecast_feb2026_dayahead.csv
artifacts/submission/manifests/2026-01-31.json
artifacts/submission/manifests/2026-02-01.json
artifacts/submission/manifests/2026-02-02.json
artifacts/submission/manifests/2026-02-03.json
artifacts/submission/manifests/2026-02-04.json
artifacts/submission/manifests/2026-02-05.json
artifacts/submission/manifests/2026-02-06.json
artifacts/submission/manifests/2026-02-07.json
artifacts/submission/manifests/2026-02-08.json
artifacts/submission/manifests/2026-02-09.json
artifacts/submission/manifests/2026-02-10.json
artifacts/submission/manifests/2026-02-11.json
artifacts/submission/manifests/2026-02-12.json
artifacts/submission/manifests/2026-02-13.json
artifacts/submission/manifests/2026-02-14.json
artifacts/submission/manifests/2026-02-15.json
artifacts/submission/manifests/2026-02-16.json
artifacts/submission/manifests/2026-02-17.json
artifacts/submission/manifests/2026-02-18.json
artifacts/submission/manifests/2026-02-19.json
artifacts/submission/manifests/2026-02-20.json
artifacts/submission/manifests/2026-02-21.json
artifacts/submission/manifests/2026-02-22.json
artifacts/submission/manifests/2026-02-23.json
artifacts/submission/manifests/2026-02-24.json
artifacts/submission/manifests/2026-02-25.json
artifacts/submission/manifests/2026-02-26.json
artifacts/submission/manifests/2026-02-27.json
cache/weather/.gitkeep
cache/weather/era5.parquet
cache/weather/previous_ecmwf_ifs025.parquet
cache/weather/previous_gfs_seamless.parquet
cache/weather/previous_icon_seamless.parquet
cache/weather/single_ecmwf_ifs.parquet
cache/weather/single_ecmwf_ifs_missing.json
cache/weather/single_ecmwf_ifs_nb_e.parquet
cache/weather/single_ecmwf_ifs_nb_e_missing.json
cache/weather/single_ecmwf_ifs_nb_ne.parquet
cache/weather/single_ecmwf_ifs_nb_ne_missing.json
cache/weather/single_ecmwf_ifs_nb_sw.parquet
cache/weather/single_ecmwf_ifs_nb_sw_missing.json
cache/weather/single_ecmwf_ifs_nb_w.parquet
cache/weather/single_ecmwf_ifs_nb_w_missing.json
config/settings.yaml
deploy/Caddyfile
deploy/deploy.sh
deploy/pwa/apple-touch-icon.png
deploy/pwa/favicon.svg
deploy/pwa/icon-192.png
deploy/pwa/icon-512.png
deploy/pwa/manifest.webmanifest
deploy/pwa/maskable-512.png
deploy/pwa/offline.html
deploy/pwa/sw.js
docker-compose.yml
docs/media/demo.gif
docs/media/demo.mp4
pyproject.toml
requirements.txt
scripts/check_site.py
scripts/record_demo.py
tests/__init__.py
tests/test_agent.py
tests/test_agent_view.py
tests/test_baselines_backtest.py
tests/test_forecast.py
tests/test_gbm.py
tests/test_live_and_faults.py
tests/test_pwa.py
tests/test_scada.py
tests/test_ui.py
tests/test_upload.py
tests/test_weather_store.py
uv.lock
windagent/__init__.py
windagent/__main__.py
windagent/agent/__init__.py
windagent/agent/factcheck.py
windagent/agent/orchestrator.py
windagent/agent/tools.py
windagent/cli.py
windagent/config.py
windagent/data/__init__.py
windagent/data/openmeteo.py
windagent/data/scada.py
windagent/data/store.py
windagent/data/weather.py
windagent/eval/__init__.py
windagent/eval/backtest.py
windagent/eval/metrics.py
windagent/features/__init__.py
windagent/features/build.py
windagent/features/engineer.py
windagent/forecast.py
windagent/live.py
windagent/models/__init__.py
windagent/models/baselines.py
windagent/models/gbm.py
windagent/models/power_curve.py
windagent/models/quantile.py
windagent/protocol.py
windagent/ui/__init__.py
windagent/ui/agent_view.py
windagent/ui/charts.py
windagent/ui/components.py
windagent/ui/data.py
windagent/ui/theme.py
windagent/ui/upload.py

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

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

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