AAYMA
RU
Войти

WindOps

Локальное и Vercel-приложение для 48-часовых прогнозов мощности двух ветротурбин за февраль 2026.

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

О проекте

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

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

Суть

Локальное и Vercel-приложение для 48-часовых прогнозов мощности двух ветротурбин за февраль 2026. OpenAI-агент вызывает инструменты погоды и модели и объясняет результат; есть сравнение выпусков, сравнение с фактом и история расчётов.

Как устроено

Агент на OpenAI Responses API последовательно вызывает четыре ограниченных инструмента: get_weather → validate_weather (архивный NOAA GFS 12 UTC, проверка доступности на момент выпуска) → predict_power → analyze_forecast. Мощность считает сохранённая эмпирическая кривая мощности, обученная до 31 декабря. Коррекцию ветра и прямой CatBoost на парах GFS–мощность тоже проверили, но не взяли в продакшн: они ухудшили январь. LLM получает только рассчитанные сводки и провенанс, отвечает на вопросы по выпуску со ссылками на источники. Итог — 29 выпусков × 48 ч × 2 турбины в CSV с манифестом SHA-256.

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

  • OpenAI function calling
  • empirical power curve
  • CatBoost
  • affine wind correction
  • NOAA GFS
  • MAE/RMSE validation
  • February replay

Метрики

Коррекция ветра: RMSE за декабрь −10,4%/−11,1%, за январь +9,0%/+7,5% (ухудшение), поэтому оставлена исходная кривая; MAE/RMSE по горизонтам 1–24 и 25–48 ч на январе

Особенности

Честный отбор модели: улучшение на декабре не перенеслось на январь, и команда оставила более простую кривую, а экспериментальный февраль сохранила отдельно. Строгая проверка доступности погоды на момент выпуска. Число мощности всегда из модели, LLM только оркестрирует и объясняет. Приложен демо-ролик. Первые коммиты от 14.09 — это, видимо, шаблон, основная работа сделана 23.09.

Стек

Python 3.12 · NumPy · pandas · CatBoost · Vercel · HTML/JS · Hyperframes (demo video)

Модели

gpt-5.4-mini (OpenAI Responses API)


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

README

README.md

WindOps — Agentic AI для прогноза ВЭС

Локальное приложение для воспроизведения ежедневных прогнозов двух турбин за февраль 2026 года. OpenAI-агент получает архивную погоду, проверяет её доступность на момент выпуска, вызывает численную модель и объясняет результат. График, почасовая таблица, журнал инструментов и CSV работают в браузере.

Анимированное демо WindOps — 24 секунды

Предпросмотр выше — без звука. Скачать видео с музыкой · MP4, Full HD.

Запустить локально · Готовые прогнозы · Результаты моделей

WindOps объединяет прогноз на 48 часов, сравнение выпусков, проверку по факту и вопросы AI-агенту. Мощность рассчитывает численная модель; OpenAI управляет инструментами и даёт объяснение.

В рабочем экранеЧто можно сделать
Прогноз двух турбинВыбрать выпуск, горизонт 24/48 часов и показатель; увидеть мощность, ветер и температуру по часам.
Сравнение выпусковСопоставить предыдущий и новый прогнозы на одни и те же часы и найти крупнейшие изменения.
Прогноз и фактПосмотреть январские измерения рядом с прогнозом, MAE/RMSE по турбине и горизонту.
СобытияПерейти к пику, крупнейшему падению мощности или длительной низкой выработке.
Вопросы агентуПолучить ответ по численным данным выбранного выпуска и увидеть использованные источники.
История и экспортПовторно открыть сохранённый расчёт с объяснением и скачать CSV без нового платного запроса.

Просмотр сохранённого архива и экспорт работают без API-ключа. Для нового AI-расчёта и вопросов агенту нужны интернет и OpenAI API. Мощность выражена в шкале 0–1, не в МВт. Фактических февральских измерений нет; январь использовался при выборе модели.

Демо

24 секунды, Full HD, музыка, без диктора. Ролик сделан с brag + Hyperframes: крупные панели воссозданы по интерфейсу и точным данным выпуска 1 февраля; в финале показан реальный экран после успешного вызова OpenAI. Этапы расчёта смонтированы короче реального времени.

cd brag-output/composition
npx --yes [email protected] check
npx --yes [email protected] render --quality delivery --output ../brag.mp4

Музыка: Happy Beats & Business Moves Vol. 12 — Sascha Ende, CC BY 4.0; фрагмент с плавным изменением громкости. Все источники ассетов.

Результат ML-эксперимента

Обучены коррекция ветра и прямой CatBoost на парах архивного GFS и измеренной мощности. Коррекция снизила декабрьский RMSE на 10,4% / 11,1%, но ухудшила январский на 9,0% / 7,5%. Поэтому рабочей оставлена исходная кривая; экспериментальный февраль сохранён отдельно. Все результаты и протокол с командами.

Запустить приложение

Нужен Python 3.12. Для запуска из GitHub:

git clone https://github.com/BAITC-Hacks/hack-7b806d9a-nurzhol-1.git
cd hack-7b806d9a-nurzhol-1
python3.12 -m venv .venv
.venv/bin/python -m pip install .
.venv/bin/python run_demo.py

В уже подготовленной папке достаточно последней команды.

Все зависимости описаны в одном pyproject.toml. Обычная установка включает NumPy и pandas для приложения. Для обучения моделей, построения исследовательских графиков и повторной загрузки NOAA установите дополнительные зависимости:

.venv/bin/python -m pip install '.[research]'

Повторная загрузка NOAA также использует системный curl.

Открыть http://127.0.0.1:8765 — лендинг с интерактивным примером прогноза. Рабочая панель доступна по кнопке «Открыть прогноз» или напрямую по http://127.0.0.1:8765/app. Исходный февральский архив и обученная модель уже сохранены; просмотр архива и экспорт CSV доступны без интернета и API-ключа. Сервер слушает только этот компьютер. Ctrl+C останавливает сервер; другой порт задаётся --port 8766.

На сайте доступен один вариант расчёта — через агента OpenAI. Для нового расчёта нужны интернет и API-ключ. Создайте локальный .env по примеру .env.example:

OPENAI_API_KEY=ваш_ключ
OPENAI_MODEL=gpt-5.4-mini

Ключ хранится только на сервере, исключён из Git и не передаётся браузеру. Значения системного окружения имеют приоритет перед .env. Просмотр страницы не вызывает платных API; OpenAI вызывается только кнопками «Рассчитать прогноз» и «Спросить агента». При ошибке приложение показывает причину; после её устранения можно повторить запрос.

Выбрать выпуск и турбину → рассчитать → увидеть реальные вызовы инструментов → скачать CSV.

Рабочий экран позволяет сравнивать обе турбины, переключать горизонт 24/48 часов и показатель «мощность/ветер». Наведение или нажатие на график выбирает час: рядом показаны мощность, ветер и температура отдельно для каждой турбины. Четыре этапа расчёта обновляются по реальным событиям; подробный журнал раскрывается в панели агента. CSV выбранного выпуска всегда содержит полные 48 часов обеих турбин, независимо от фильтров графика. Интерфейс адаптирован для телефона.

Вкладки «Аналитика и история» содержат:

  • Сравнение выпусков: предыдущий и новый прогнозы на 24 общих часа каждой турбины, мощность или ветер, изменения и почасовая таблица. Это пересмотр прогноза, не доказательство улучшения точности.
  • Прогноз и факт: январские измерения и прогноз эмпирической кривой, отдельные горизонты 1–24 и 25–48 ч. MAE/RMSE относятся ко всему январю для выбранного горизонта; график и таблица — к выбранному дню. Январь уже использовался при выборе модели и не является независимым тестом.
  • История расчётов: результаты, объяснения и журналы из outputs/demo/jobs. Открытие и CSV используют сохранённый снимок и не вызывают OpenAI. После перезапуска незавершённые запуски отмечаются прерванными; автоматически ничего не запускается.

События под основным графиком показывают пик, крупнейшее падение от 0,1 за час и самый длительный период ниже 0,1 продолжительностью от трёх часов. Они рассчитываются отдельно для выбранных 24/48 часов. Нажатие выбирает соответствующий час, сохраняя доступ к мощности, ветру и температуре. Вопросы агенту привязаны к показанному выпуску или сохранённому снимку. Агент читает численные данные, сравнение и события через ограниченные инструменты; ответ содержит список использованных источников. Текст LLM не проходит независимую проверку каждого утверждения.

Деплой на Vercel

Из корня проекта запустите:

npx vercel --prod

vercel.json публикует страницы из web/ и Python API из api/index.py. Корневая страница — лендинг, /app — рабочая панель. Настройка сборки не нужна: Vercel использует Python 3.12 и основные зависимости из pyproject.toml. .vercelignore включает только код приложения и необходимые файлы архива; локальный .env, загрузочный кэш, исходные измерения и исследовательские артефакты не отправляются на сервер.

Для AI-расчётов добавьте OPENAI_API_KEY в переменные окружения проекта Vercel и выполните новый деплой. OPENAI_MODEL необязателен; по умолчанию используется gpt-5.4-mini. Ключ остаётся на сервере. Архив, сравнение выпусков, январская проверка и CSV работают без ключа.

В облачной версии завершённые расчёты сохраняются в истории текущего браузера. История не переносится между устройствами и удаляется при очистке данных сайта. Расчёт выполняется в пределах одного запроса, с лимитом до 300 секунд. Повторная загрузка NOAA в облаке отключена: приложение использует сохранённый и проверенный февральский архив. Локальный запуск сохраняет историю на диске и поддерживает обновление NOAA при установленных исследовательских зависимостях.

Готовые результаты февраля

Выпуск каждый день в 23:00 UTC+5 использует NOAA GFS 12:00 UTC того же дня, опубликованный до 18:00 UTC. Выпуски 27–28 февраля частично или целиком уходят в март; эти часы сохранены в полных 48-часовых траекториях и явно отмечены is_february_target=false. В файл февраля попадают только февральские часы горизонта 1–24.

Для пересоздания файлов из сохранённой погоды:

.venv/bin/python scripts/replay_february.py

Для первоначальной загрузки архива на новой машине:

.venv/bin/python scripts/fetch_noaa.py \
  --start-date 2026-01-31 --end-date 2026-02-28 \
  --workers 16 --output data/weather/noaa_february.csv

Февральский replay использует сохранённую эмпирическую кривую из outputs/baseline/empirical_curves.json, обученную строго до 31 декабря. Он не переобучается при просмотре страницы или изменении даты. Подготовленный почасовой датасет включён в репозиторий: обучение можно повторить без исходных CSV. Исходные CSV нужны только для повторной агрегации десятиминутных измерений.

Как работает агент

Четыре ограниченных инструмента: get_weather → validate_weather → predict_power → analyze_forecast. Модель OpenAI запрашивает вызовы через Responses API; приложение исполняет их, проверяет порядок и возвращает результаты. Числа мощности вычисляет сохранённая модель. LLM получает происхождение данных и рассчитанные сводки для объяснения, без исходных CSV и API-ключей.

На один запуск допускается до восьми ответов API и десяти вызовов инструментов. Незавершённый ответ, ошибка источника или пропущенная проверка не превращаются в успешный прогноз. Журнал каждого запуска сохраняется в outputs/demo/jobs/. Реальная проверка OpenAI сохранена отдельно в outputs/demo/live_agent_verification.json; это историческая запись проверки, не подмена новых запусков.

Контрольная сумма погодных строк и версия модели определяют кэш. Изменение входных данных вызывает пересчёт. Флажок обновления NOAA повторно читает текущий список объектов и скачивает один выпуск в изолированный кэш; поздно опубликованные данные отклоняются. Это может занять около минуты и требует интернета. Ошибка обновления сохраняет прежние файлы, но текущий запуск завершается ошибкой.

Для внутренних вызовов Python/API и тестов сохранён численный режим: он использует те же проверяемые инструменты в фиксированном порядке и позволяет повторить прогноз без OpenAI. На сайте выбор режима не предлагается; живой LLM-вызов проверяется отдельно.

Документация интеграции: OpenAI Function calling, GPT-5.4 mini.

Готовые результаты: январский отчёт и прогноз на 48 часов в UTC. Пользователь подтвердил часовой пояс CSV: UTC+5. Эмпирическая кривая дала меньший январский RMSE, чем CatBoost и постоянное среднее, для обеих турбин.

1. Подготовить почасовые данные

Этот шаг необязателен: data/processed/hourly.csv уже включён. Для повторной агрегации сохраните два исходных CSV организаторов как data/raw/turbine_1.csv и data/raw/turbine_2.csv. Эти исходные файлы не входят в репозиторий.

.venv/bin/python scripts/prepare_hourly.py \
  --turbine1 data/raw/turbine_1.csv \
  --turbine2 data/raw/turbine_2.csv

Исходные CSV остаются неизменными. Полный час требует шести уникальных десятиминутных измерений с конечными значениями всех трёх признаков. Неполные часы сохраняются с числом наблюдений и пустыми агрегатами. Мощность усредняется, а не суммируется.

Результаты: data/processed/hourly.csv и hourly_summary.json. В колонке time_naive сохраняются исходные метки, их фиксированное смещение UTC+5 записано в метаданных. Для соединения с погодой UTC = время CSV − 5 часов. Принято проверяемое допущение, что исходная метка обозначает начало десятиминутного интервала. Если организаторы подтвердят конец интервала, перед агрегацией потребуется сдвиг исходных меток на минус десять минут.

2. Получить погодные прогнозы

Один полный выпуск для демонстрации:

.venv/bin/python scripts/fetch_noaa.py \
  --start-date 2026-01-31 --end-date 2026-01-31 \
  --workers 12 --output data/weather/noaa_20260131_48h.csv

Январский бэктест и тот же демонстрационный выпуск:

.venv/bin/python scripts/fetch_noaa.py \
  --start-date 2025-12-31 --end-date 2026-01-31 \
  --workers 16 --output data/weather/noaa_forecasts.csv

Используется ежедневный запуск GFS 12:00 UTC; время выпуска прогноза мощности задано 18:00 UTC. Файлы f007–f054 дают следующие 48 часов. Для каждого часа проверяется публикация как GRIB-файла, так и его индекса до времени выпуска. Из GRIB проверяются время запуска, целевое время, высота и тип переменной.

Загружаются только диапазоны байтов с компонентами ветра на 100 м и температурой на 2 м. Для каждой турбины применяется билинейная интерполяция четырёх узлов сетки. Сначала интерполируются компоненты U/V, затем рассчитываются скорость и направление ветра. Температура переводится из K в °C.

Первичная загрузка месяца может потребовать несколько гигабайт трафика. Декодированные значения и происхождение каждого прогноза сохраняются в data/cache/noaa/points/; повторный запуск использует кэш. Загруженные промежуточные GRIB-сообщения удаляются после успешного декодирования; --keep-grib сохраняет их. Первичный пробный файл сохранён для проверки декодера.

Координаты, проверка архива и пояснение времени: отчёт.

3. Обучить и сравнить модели

MPLCONFIGDIR="$PWD/.mpl-cache" .venv/bin/python scripts/evaluate_baseline.py \
  --hourly data/processed/hourly.csv \
  --weather data/weather/noaa_forecasts.csv \
  --output-dir outputs/baseline

Для каждой турбины сравниваются:

  1. Постоянное среднее обучающей мощности.
  2. Средняя мощность в интервалах скорости ветра шириной 0,5 м/с с линейной интерполяцией.
  3. CatBoost по скорости ветра и температуре, 300 итераций, глубина 4, фиксированный seed.

Обучение фиксируется на данных строго до 31.12.2025 00:00 UTC+5. Сохранён прежний консервативный порог обучения, чтобы результаты можно было сравнить с первоначальным расчётом; будущие измерения не попадают в первый прогноз 31 декабря 18 UTC.

На вход январского прогноза подаются исключительно архивные погодные прогнозы; фактические январские ветер и температура не используются. Фактическая мощность служит только целевой величиной для оценки. Операционные простои из обучающих данных автоматически не удаляются.

Часовой пояс CSV UTC+5 подтверждён пользователем. По умолчанию расчёт использует только это смещение. Оно применяется как фиксированное смещение экспорта CSV; исторические переводы гражданского времени Asia/Almaty автоматически не применяются. Первоначальное сравнение UTC+0/+5/+6 сохранено в outputs/timezone_sensitivity/ как архив анализа чувствительности, а не источник выбора часового пояса.

MAE, RMSE и смещение оцениваются отдельно по турбине и горизонтам 1–24, 25–48 часов. Перекрывающиеся прогнозы разных дат выпуска — отдельные случаи. Январь используется для описательного сравнения моделей; это не независимая оценка модели после выбора по январскому результату. Фактических февральских значений в исходных CSV нет.

Основные выходы:

  • outputs/baseline/metrics.csv и metrics.json — показатели и протокол оценки;
  • outputs/baseline/predictions.csv — прогнозы, фактические значения для проверки, привязка UTC+5 и признаки доступности;
  • outputs/baseline/forecast_48h_utc.csv — 48 строк с прогнозами обеих турбин и всех трёх моделей; время указано в UTC;
  • outputs/baseline/forecast_48h_local.csv — те же 48 часов с явным местным смещением +05:00;
  • outputs/baseline/forecast_demo_wide.csv — тот же прогноз с местными метками UTC+5;
  • outputs/baseline/empirical_curves.json, catboost_1.cbm, catboost_2.cbm — обученные модели;
  • outputs/baseline/metrics.png, actual_vs_forecast_jan15.png, forecast_demo_48h.png — графики сравнения и первого прогноза.

Демонстрационный прогноз выпускается 31 января в 23:00 UTC+5 и покрывает 1 февраля 00:00 — 2 февраля 23:00 UTC+5. Результат выражается в нормализованной мощности, не в МВт или МВт·ч.

Проверки

MPLCONFIGDIR="$PWD/.mpl-cache" .venv/bin/python -m unittest discover -s tests -v

Тесты защищают агрегацию, обработку неполных часов, разделение обучения и проверки, временные гипотезы, запрет поздних погодных данных, чтение диапазонов GRIB и расчёт метрик.

Практические ограничения

Высота ступицы и способ нормализации мощности не предоставлены. Ветер GFS на 100 м отличается от измерения на турбине; модель обучается на измеренном ветре и применяется к прогнозному, без подгонки погодного смещения на январском holdout. Это начальная оценка качества всей цепочки. Прогнозы за пределами обучающего диапазона помечаются; эмпирическая кривая не моделирует неизвестную скорость аварийного отключения.

Источники: NOAA GFS, ecCodes.


Исходные материалы команды и Hackathon Multi-Agent Playbook

hack-7b806d9a-nurzhol-1

Hackathon team repository for Nurzhol 1 гей тим олвэйс вин


Hackathon AI Multi-Agent Playbook

Welcome to your structured Hackathon Multi-Agent workflow suite. This framework decomposes an end-to-end hackathon project into clear, modular prompts designed for a 3-person team using modern AI tools (Claude Code, Cursor, ChatGPT, etc.).


📁 Repository Structure

Hakcaton/
├── CLAUDE.md                      # Mandatory AI agent codex & anti-bloat rules
├── CODEX.md                       # Codex / Cursor pre-flight hygiene rules
├── README.md                      # This execution overview
├── SHARED_CONTEXT.md              # <-- EDIT THIS FIRST with your idea & stack
├── 00-agent-map-and-guide.md      # Mermaid agent pipeline and team assignment table
├── extra-essentials.md            # Demo fallbacks, video backup plans, and judge advice
│
├── stage-a-strategy/              # Phase 1: Planning & Architecture Specs
│   ├── A1-problem-wedge.md        # Problem statement & 30s hero moment
│   ├── A2-market-research.md      # Competitor landscape & industry metrics
│   ├── A3-architecture-contracts.md # Data models, API schemas & directory layout
│   ├── A4-ux-wireframes.md        # UI blueprint, design tokens & screen layout
│   └── A5-judge-rubric.md         # Rubric reverse-engineering & pitch alignment
│
└── stage-b-sprint/                # Phase 2: 8-Hour Build Sprint Prompts
    ├── B01-scaffolding.md         # Full-stack boilerplate & mock routes (30m)
    ├── B02-core-engine.md         # AI inference loop & core algorithmic logic (90m)
    ├── B03-api-endpoints.md       # API routing, storage & mock handlers (60m)
    ├── B04-frontend-core.md       # Main dashboard layout & components (120m)
    ├── B05-ui-polish.md           # Step-by-step animations & hero moment flow (60m)
    ├── B06-e2e-integration.md     # Full-stack wiring, streaming & error guards (60m)
    ├── B07-demo-seed-data.md      # Hyper-realistic demo scenarios (30m)
    ├── B08-offline-fallback.md    # Zero-dependency local demo mock mode (30m)
    ├── B09-pitch-script.md        # 3-minute pitch script & 5-slide outline (60m)
    ├── B10-judge-qa.md            # Top 10 skeptical judge questions & answers (30m)
    └── B11-final-submission.md    # README.md & Devpost submission generator (60m)

🚀 Quick Start Guide

Step 1: Fill in SHARED_CONTEXT.md

Open SHARED_CONTEXT.md and enter:

  • Your project name and hackathon track.
  • The 1-sentence value proposition.
  • The 30-second "Hero Moment" (what will wow the judges).
  • The tech stack (frontend, backend, database, LLM APIs).

Step 2: Run Stage A (Strategy & Specs)

Have your team run prompts A1 through A5 to establish solid ground rules before coding.

  • Output: Stored under a specs/ directory (specs/contracts.md, specs/wireframes.md, etc.).
  • Benefit: Frontend and backend can build simultaneously without waiting on each other.

Step 3: Run Stage B (Execution Sprint)

Distribute the prompts among your 3 team members according to 00-agent-map-and-guide.md:

  • Member 1 (Backend/AI Lead): B01 -> B02 -> B03 -> B08
  • Member 2 (Frontend/UX Lead): B04 -> B05 -> B06
  • Member 3 (Biz/Pitch/Submission Lead): B07 -> B09 -> B10 -> B11

Whenever using a Stage B prompt, paste the filled contents of SHARED_CONTEXT.md into the indicated header block.

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

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

Sanzhar Umirbayev 13Diyar 3

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

  • 2026-09-23 17:53Improve WindOps dashboard and prepare Vercel deploymentSanzhar Umirbayev
  • 2026-09-23 17:28Add WindOps landing page with interactive archive previewSanzhar Umirbayev
  • 2026-09-23 17:23Fix README demo playback with animated preview and raw video linksSanzhar Umirbayev
  • 2026-09-23 17:19Place demo after the README introductionSanzhar Umirbayev
  • 2026-09-23 17:16Group forecast events into separate turbine columnsSanzhar Umirbayev
  • 2026-09-23 17:15Add WindOps demo video and product READMESanzhar Umirbayev
  • 2026-09-23 17:14Make forecast questions prominent beside the chartSanzhar Umirbayev
  • 2026-09-23 17:10Refine forecast charts using diagram-design principlesSanzhar Umirbayev
Все коммиты (16)
  • 2026-09-23 16:55Add forecast comparison, validation, events, questions and persistent historySanzhar Umirbayev
  • 2026-09-23 16:42Simplify forecast UI to one OpenAI analysis workflowSanzhar Umirbayev
  • 2026-09-23 16:27Remove hour slider while preserving forecast inspector valuesSanzhar Umirbayev
  • 2026-09-23 16:19Remove section-jump sidebar and widen forecast workspaceSanzhar Umirbayev
  • 2026-09-23 16:13Add WindOps forecasting app, agent workflow and reproducible February resultsSanzhar Umirbayev
  • 2026-09-23 14:13Merge remote main and preserve both README versionsDiyar
  • 2026-09-23 14:09Initial commitDiyar
  • 2026-09-14 13:48Update README.mdDiyar Amanzholov
Структура репозитория (217 файлов)
.env.example
.gitattributes
.gitignore
.vercelignore
00-agent-map-and-guide.md
CLAUDE.md
CODEX.md
README.md
SHARED_CONTEXT.md
api/index.py
brag-output/brag-plan.md
brag-output/brag.gif
brag-output/brag.jpg
brag-output/brag.mp4
brag-output/composition-brief.md
brag-output/composition/assets/CREDITS.txt
brag-output/composition/assets/Manrope-OFL.txt
brag-output/composition/assets/Manrope.ttf
brag-output/composition/assets/click.ogg
brag-output/composition/assets/data.js
brag-output/composition/assets/gsap.min.js
brag-output/composition/assets/music.mp3
brag-output/composition/assets/reveal.ogg
brag-output/composition/assets/windops-screen.png
brag-output/composition/hyperframes.json
brag-output/composition/index.html
brag-output/share-copy.txt
data/processed/hourly.csv
data/processed/hourly_summary.json
data/weather/noaa_20260131_48h.csv
data/weather/noaa_20260131_48h.summary.json
data/weather/noaa_february.csv
data/weather/noaa_february.summary.json
data/weather/noaa_forecasts.csv
data/weather/noaa_forecasts.summary.json
data/weather/noaa_nov_dec.csv
data/weather/noaa_nov_dec.summary.json
data/weather/noaa_probe.csv
data/weather/noaa_probe.summary.json
docs/DEMO.md
docs/GFS_ML.md
docs/design/2026-09-23-dashboard.md
docs/superpowers/plans/2026-09-23-gfs-ml-experiment.md
docs/superpowers/plans/2026-09-23-gfs-ml-progress.md
docs/superpowers/plans/2026-09-23-windops-demo.md
docs/superpowers/specs/2026-09-23-windops-demo-design.md
extra-essentials.md
outputs/baseline/REPORT.md
outputs/baseline/actual_vs_forecast_jan15.png
outputs/baseline/catboost_1.cbm
outputs/baseline/catboost_2.cbm
outputs/baseline/empirical_curves.json
outputs/baseline/forecast_48h_local.csv
outputs/baseline/forecast_48h_utc.csv
outputs/baseline/forecast_demo.csv
outputs/baseline/forecast_demo_48h.png
outputs/baseline/forecast_demo_wide.csv
outputs/baseline/metrics.csv
outputs/baseline/metrics.json
outputs/baseline/metrics.png
outputs/baseline/predictions.csv
outputs/baseline/training_summary.json
outputs/baseline/verification.json
outputs/baseline/weather_gap_diagnostic.json
outputs/demo/live_agent_verification.json
outputs/february/REPORT.md
outputs/february/forecast_48h_long.csv
outputs/february/forecast_day_ahead_february.csv
outputs/february/manifest.json
outputs/gfs_ml/REPORT.md
outputs/gfs_ml/RESULTS.md
outputs/gfs_ml/archive_verification.json
outputs/gfs_ml/comparison.png
outputs/gfs_ml/december/affine_wind/calibration.json
outputs/gfs_ml/december/affine_wind/curves.json
outputs/gfs_ml/december/affine_wind/manifest.json
outputs/gfs_ml/december/artifacts.json
outputs/gfs_ml/december/catboost_gfs/manifest.json
outputs/gfs_ml/december/catboost_gfs/turbine_1.cbm
outputs/gfs_ml/december/catboost_gfs/turbine_2.cbm
outputs/gfs_ml/december/metrics.csv
outputs/gfs_ml/december/pairs.csv
outputs/gfs_ml/december/predictions.csv
outputs/gfs_ml/december/raw_empirical/curves.json
outputs/gfs_ml/december/raw_empirical/manifest.json
outputs/gfs_ml/december/training_pairs.csv
outputs/gfs_ml/decision.json
outputs/gfs_ml/deployment/calibration.json
outputs/gfs_ml/deployment/curves.json
outputs/gfs_ml/deployment/manifest.json
outputs/gfs_ml/deployment/training_pairs.csv
outputs/gfs_ml/experiment.json
outputs/gfs_ml/february_experimental/REPORT.md
outputs/gfs_ml/february_experimental/forecast_48h_long.csv
outputs/gfs_ml/february_experimental/forecast_day_ahead_february.csv
outputs/gfs_ml/february_experimental/manifest.json
outputs/gfs_ml/february_verification.json
outputs/gfs_ml/hourly_coverage_audit.json
outputs/gfs_ml/implementation_checks.json
outputs/gfs_ml/independent_verification.json
outputs/gfs_ml/january_descriptive/affine_wind/calibration.json
outputs/gfs_ml/january_descriptive/affine_wind/curves.json
outputs/gfs_ml/january_descriptive/affine_wind/manifest.json
outputs/gfs_ml/january_descriptive/artifacts.json
outputs/gfs_ml/january_descriptive/catboost_gfs/manifest.json
outputs/gfs_ml/january_descriptive/catboost_gfs/turbine_1.cbm
outputs/gfs_ml/january_descriptive/catboost_gfs/turbine_2.cbm
outputs/gfs_ml/january_descriptive/metrics.csv
outputs/gfs_ml/january_descriptive/pairs.csv
outputs/gfs_ml/january_descriptive/predictions.csv
outputs/gfs_ml/january_descriptive/raw_empirical/curves.json
outputs/gfs_ml/january_descriptive/raw_empirical/manifest.json
outputs/gfs_ml/january_descriptive/training_pairs.csv
outputs/gfs_ml/release_decision.json
outputs/timezone_sensitivity/ARCHIVE_NOTE.md
outputs/timezone_sensitivity/REPORT.md
outputs/timezone_sensitivity/actual_vs_forecast_jan15.png
outputs/timezone_sensitivity/catboost_1.cbm
outputs/timezone_sensitivity/catboost_2.cbm
outputs/timezone_sensitivity/empirical_curves.json
outputs/timezone_sensitivity/forecast_48h_utc.csv
outputs/timezone_sensitivity/forecast_demo.csv
outputs/timezone_sensitivity/forecast_demo_48h.png
outputs/timezone_sensitivity/forecast_demo_wide.csv
outputs/timezone_sensitivity/metrics.csv
outputs/timezone_sensitivity/metrics.json
outputs/timezone_sensitivity/metrics.png
outputs/timezone_sensitivity/predictions.csv
outputs/timezone_sensitivity/training_summary.json
outputs/timezone_sensitivity/verification.json
pyproject.toml
research/weather-check/README.md
research/weather-check/noaa-coverage.json
research/weather-check/raw/noaa-gfs-20260131T12-f024-ugrd-header.bin
research/weather-check/raw/noaa-gfs-20260131T12-f024-ugrd-header.txt
research/weather-check/raw/noaa-gfs-20260131T12-f024.idx
research/weather-check/raw/noaa-gfs-20260131T12-list.xml
research/weather-check/raw/noaa-gfs-20260201T12-list.xml
research/weather-check/raw/noaa-gfs-20260202T12-list.xml
research/weather-check/raw/noaa-gfs-20260203T12-list.xml
research/weather-check/raw/noaa-gfs-20260204T12-list.xml
research/weather-check/raw/noaa-gfs-20260205T12-list.xml
research/weather-check/raw/noaa-gfs-20260206T12-list.xml
research/weather-check/raw/noaa-gfs-20260207T12-list.xml
research/weather-check/raw/noaa-gfs-20260208T12-list.xml
research/weather-check/raw/noaa-gfs-20260209T12-list.xml
research/weather-check/raw/noaa-gfs-20260210T12-list.xml
research/weather-check/raw/noaa-gfs-20260211T12-list.xml
research/weather-check/raw/noaa-gfs-20260212T12-list.xml
research/weather-check/raw/noaa-gfs-20260213T12-list.xml
research/weather-check/raw/noaa-gfs-20260214T12-list.xml
research/weather-check/raw/noaa-gfs-20260215T12-list.xml
research/weather-check/raw/noaa-gfs-20260216T12-list.xml
research/weather-check/raw/noaa-gfs-20260217T12-list.xml
research/weather-check/raw/noaa-gfs-20260218T12-list.xml
research/weather-check/raw/noaa-gfs-20260219T12-list.xml
research/weather-check/raw/noaa-gfs-20260220T12-list.xml
research/weather-check/raw/noaa-gfs-20260221T12-list.xml
research/weather-check/raw/noaa-gfs-20260222T12-list.xml
research/weather-check/raw/noaa-gfs-20260223T12-list.xml
research/weather-check/raw/noaa-gfs-20260224T12-list.xml
research/weather-check/raw/noaa-gfs-20260225T12-list.xml
research/weather-check/raw/noaa-gfs-20260226T12-list.xml
research/weather-check/raw/noaa-gfs-20260227T12-list.xml
research/weather-check/raw/noaa-gfs-20260228T12-list.xml
research/weather-check/raw/noaa-gfs-validation-20260101T12-list.xml
research/weather-check/raw/openmeteo-gfs-20260101-20260302.json
research/weather-check/raw/openmeteo-gfs-20260131-20260202.json
research/weather-check/raw/openmeteo-timezone-auto.json
research/weather-check/verification.json
research/weather-check/verify.py
run_demo.py
scripts/evaluate_baseline.py
scripts/evaluate_gfs_ml.py
scripts/fetch_noaa.py
scripts/prepare_hourly.py
scripts/replay_february.py
stage-a-strategy/A1-problem-wedge.md
stage-a-strategy/A2-market-research.md
stage-a-strategy/A3-architecture-contracts.md
stage-a-strategy/A4-ux-wireframes.md
stage-a-strategy/A5-judge-rubric.md
stage-b-sprint/B01-scaffolding.md
stage-b-sprint/B02-core-engine.md
stage-b-sprint/B03-api-endpoints.md
stage-b-sprint/B04-frontend-core.md
stage-b-sprint/B05-ui-polish.md
stage-b-sprint/B06-e2e-integration.md
stage-b-sprint/B07-demo-seed-data.md
stage-b-sprint/B08-offline-fallback.md
stage-b-sprint/B09-pitch-script.md
stage-b-sprint/B10-judge-qa.md
stage-b-sprint/B11-final-submission.md
tests/test_agent.py
tests/test_analytics.py
tests/test_evaluate_baseline.py
tests/test_fetch_noaa.py
tests/test_forecast_service.py
tests/test_gfs_ml.py
tests/test_prepare_hourly.py
tests/test_questions.py
tests/test_server.py
tests/test_vercel.py
tests/test_web_app.cjs
vercel.json
web/app.js
web/index.html
web/landing.css
web/landing.html
web/landing.js
web/style.css
windops/agent.py
windops/analytics.py
windops/forecast.py
windops/ml.py
windops/questions.py
windops/server.py
Ветки (2)

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

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

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