О проекте
Команда: 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.mdWindOps — Agentic AI для прогноза ВЭС
Локальное приложение для воспроизведения ежедневных прогнозов двух турбин за февраль 2026 года. OpenAI-агент получает архивную погоду, проверяет её доступность на момент выпуска, вызывает численную модель и объясняет результат. График, почасовая таблица, журнал инструментов и CSV работают в браузере.
Предпросмотр выше — без звука. Скачать видео с музыкой · 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. Этапы расчёта смонтированы короче реального времени.
- Скачать видео с музыкой, анимированный предпросмотр, обложка, текст для публикации.
- Редактируемая композиция и сценарий.
- Для повторного рендера нужны Node.js 22+ и FFmpeg; они не нужны для запуска WindOps:
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 при установленных исследовательских зависимостях.
Готовые результаты февраля
- Все 48-часовые прогнозы: 29 ежедневных выпусков × 48 часов × 2 турбины = 2 784 строки.
- Февраль на сутки вперёд: 1 344 строки, по 672 уникальных часа на турбину.
- Манифест: версия модели, отпечатки погоды, SHA-256 экспортов.
Выпуск каждый день в 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
Для каждой турбины сравниваются:
- Постоянное среднее обучающей мощности.
- Средняя мощность в интервалах скорости ветра шириной 0,5 м/с с линейной интерполяцией.
- 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. Это начальная оценка качества всей цепочки. Прогнозы за пределами обучающего диапазона помечаются; эмпирическая кривая не моделирует неизвестную скорость аварийного отключения.
Исходные материалы команды и 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.
Авторы коммитов
История коммитов
- 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
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.
