О проекте
Команда: AI-Dostar
Кейс HackAlem.ai: Логистика — Электрокомплект · ekt.kz
Стадия: Доведённый продукт
Задача кейса: Автоматический расчёт заказов поставщикам для пополнения склада, с утверждением менеджером
Суть
Инструмент для закупщика, который превращает Excel-выгрузки IEK и Systeme Electric в рекомендации заказа поставщику с объяснением расчёта. Менеджер правит количества и утверждает заказ, затем экспортирует его в XLSX/CSV.
Как устроено
Адаптеры собирают 8 таблиц Parquet из Excel-выгрузок: продажи, остатки, MOQ, сезонность, товар в пути. Движок выделяет регулярный спрос: исключает разовые накладные, компенсирует спрос в месяцы дефицита, строит сезонный прогноз с трендом. Прогноз делает статистический метод либо модель градиентного бустинга. Заказ рассчитывается с учётом склада, поставок в пути, срока поставки, уровня сервиса и кратности упаковки. Ассистент на ChatGPT по строгой JSON-схеме только определяет намерение и фильтр, а числа в ответе формирует само приложение.
Ключевые решения
- Gradient Boosting
- seasonal forecast with trend
- one-off detection
- stockout demand compensation
- safety stock / service level
- MOQ rounding
- JSON-schema intent parsing
- temporal evaluation
Особенности
Работает на реальных данных партнёра (248 875 строк накладных, 3 667 товаров). Есть сравнение с расчётом менеджера SE и сценарии, где по очереди отключается каждый из пяти факторов спроса. LLM не пишет чисел, а только выбирает намерение и фильтр, поэтому ответы опираются на расчёт. Есть исполненный ML-ноутбук и отчёт о проверке системы.
Стек
Python · Streamlit · Parquet · Docker Compose · Jupyter · pytest
Модели
OpenAI ChatGPT (gpt-4o-*)
Проект создан за 5 часов на финале хакатона HackAlem.ai (23 сентября 2026, Астана). Код — BAITC-Hacks/hack-1404e13c-ai-dostar.
README
README.mdПомощник закупщика, который показывает, сколько заказать и почему.
Кейс «Электрокомплект» · HackAlem · IEK & Systeme Electric
Запуск · Деплой · Возможности · ML · Демо · Проверки системы · Документация
Закупка начинается с понимания спроса
Большая продажа может оказаться разовым проектом. Низкие продажи — следствием пустого склада. Сезонный рост легко перепутать с постоянным, а уже заказанный товар — не учесть в новой закупке.
AI-Dostar превращает Excel-выгрузки в проверяемую рекомендацию: выделяет регулярный спрос, оценивает влияние дефицита, строит прогноз и рассчитывает заказ с учётом склада, поставок в пути и кратности упаковки. Менеджер видит факторы расчёта, вносит правки и утверждает итог.
Рекомендация → объяснение → решение менеджера → файл заказа. Отправка поставщику остаётся за человеком.
На реальных данных партнёра
| Строк накладных | Товаров в каталоге | Поставщиков | Строк расчёта менеджера SE |
|---|---|---|---|
| 248 875 | 3 667 | 2 | 497 |
Дата расчёта по умолчанию — последняя продажа в наборе, 22 сентября 2026 года. Это историческая выгрузка, не подключение к живому складу.
Шесть экранов, один процесс закупки
| Экран | Что получает менеджер |
|---|---|
| Заказ | Рекомендации по поставщику, фильтры, срочность, правка количества с причиной, утверждение и экспорт. |
| Товар | Историю всего каталога, разовые продажи и дефицит на графике, прогноз, кратность и объяснение расчёта. |
| Проверки | Семь сценариев: все факторы, отключение каждого из пяти факторов и дополнительный товар в пути. |
| Сравнение с менеджером | Средние фактические продажи и регулярный спрос за 12 полных месяцев рядом с расчётом SE. |
| Разовые заказы | Конкретные накладные: исходный объём, типичное количество, исключённая часть и причина. |
| Ассистент | Рекомендации по заказу, поиск обычными словами, новинки, угасающий спрос и кандидатов на замену товара. |
В боковой панели настраиваются метод прогноза, сроки поставки, период пересмотра, уровень сервиса, рост категорий и факторы спроса. Новый расчёт запускается кнопкой «Рассчитать».
🤖 «Спросить ассистента» — над всеми вкладками
После расчёта первой на странице стоит панель «Спросить ассистента»: поле для вопроса своими словами, кнопка «Спросить» и готовые примеры-кнопки («Какие позиции IEK заказать в первую очередь и почему?», «Почему по трубе гибкой Ø50 такой большой заказ?», «Дай сводку по заказу Systeme Electric», «Что сделать с этим заказом?», «Какие товары выходят из ассортимента…»). ChatGPT понимает вопрос и выбирает намерение и фильтр по строгой JSON-схеме; ответ и все количества формирует приложение из текущего расчёта — модель не пишет чисел. Под ответом — источник и таблица строк заказа, на которых он основан. После правки количества или пересчёта старый ответ скрывается. Без ключа вопрос разбирается по правилам.
«Покажи критичные УЗО у IEK, где был дефицит» — ассистент превращает запрос в фильтр по рассчитанному заказу. Кандидаты «старая модель → новая» остаются гипотезами для проверки: похожее название не подтверждает замену. Методика ассистента.
Версии (docs/RELEASE.md):
v1.1.0— рабочая версия (запуск через Docker, панель «Спросить ассистента» над вкладками, ответы ассистента из данных расчёта, ML-ноутбук, наглядный ML-гайд и отчёт о проверке системы).v1.0.0— первая готовая версия.
Быстрый запуск
🐳 Docker — рекомендуемый способ
Нужны только Git и Docker (Docker Desktop на Windows/macOS или Docker Engine + Compose v2.24+ на Linux). Python ставить не нужно.
git clone https://github.com/BAITC-Hacks/hack-1404e13c-ai-dostar.git
cd hack-1404e13c-ai-dostar
docker compose up --build
Откройте localhost:8501 и нажмите «Рассчитать». Первая сборка занимает несколько минут: в образ ставятся зависимости, из datasets/ собираются таблицы и обучается ML-модель. Следующие запуски — docker compose up (сразу), остановка — Ctrl+C или docker compose down.
| Нужно | Как |
|---|---|
| ChatGPT для ассистента | Положить рядом .env по образцу .env.example (OPENAI_API_KEY=...) и запустить docker compose up. Ключ передаётся как переменная окружения и не попадает в образ. Без .env всё работает, ассистент — по правилам |
| Быстрее собрать без ML | docker compose build --build-arg TRAIN_ML=0 && docker compose up — статистический метод доступен, ML нет |
| Другой порт | В docker-compose.yml заменить "8501:8501" на, например, "8080:8501" |
| Работа в фоне | docker compose up -d --build, логи — docker compose logs -f |
| Сбросить утверждения | docker compose down -v (утверждения хранятся в томе approvals и переживают перезапуск) |
Обновить после git pull | docker compose up --build |
Нужно ~3 ГБ свободного места на диске для образа.
Без Docker · Python 3.12+
Команды выполняются из корня репозитория; OpenAI API-ключ для расчёта и интерфейса не требуется.
Windows · PowerShell
git clone https://github.com/BAITC-Hacks/hack-1404e13c-ai-dostar.git
cd hack-1404e13c-ai-dostar
python -m venv .venv
.venv\Scripts\python.exe -m pip install -r requirements.txt
.venv\Scripts\python.exe -m app.adapters.build --raw datasets
.venv\Scripts\python.exe -m streamlit run app/ui/app.py
Откройте localhost:8501 и нажмите «Рассчитать». Статистический метод доступен сразу после сборки данных.
Linux / macOS без Docker
git clone https://github.com/BAITC-Hacks/hack-1404e13c-ai-dostar.git
cd hack-1404e13c-ai-dostar
python3 -m venv .venv
.venv/bin/python -m pip install -r requirements.txt
.venv/bin/python -m app.adapters.build --raw datasets
.venv/bin/python -m streamlit run app/ui/app.py
Используйте Python 3.12 или новее. В последующих командах заменяйте .venv\Scripts\python.exe на .venv/bin/python.
Исходные книги лежат в datasets/IEK и datasets/Systeme electric. Сборка создаёт восемь таблиц Parquet в data/clean/. Рабочий интерфейс использует реальные данные; при отсутствии таблиц показывает инструкцию по сборке. Для собственных распакованных архивов можно указать --raw data/raw.
Деплой в интернет
Streamlit Community Cloud — ссылка для демонстрации
Понадобятся GitHub-аккаунт с доступом к этому репозиторию и Streamlit Community Cloud. Публикуйте ветку main (или тег рабочей версии v1.1.0).
1. Подготовьте стартовый файл. Облако устанавливает requirements.txt, но не выполняет команду сборки Excel автоматически. data/clean/ и data/models/ исключены из Git, поэтому одного запуска app/ui/app.py на чистом сервере недостаточно.
Создайте streamlit_app.py в корне репозитория со следующим содержимым. Это пример для добавления перед деплоем; готового файла в текущей версии нет.
import os
import runpy
import subprocess
import sys
from pathlib import Path
import streamlit as st
ROOT = Path(__file__).resolve().parent
@st.cache_resource(show_spinner="Подготовка данных для демонстрации…")
def prepare(build_ml: bool):
subprocess.run(
[sys.executable, "-m", "app.adapters.build", "--raw", "datasets"],
cwd=ROOT, check=True,
)
if build_ml:
subprocess.run(
[sys.executable, "-m", "app.ml.train"], cwd=ROOT, check=True,
)
return True
prepare(os.environ.get("BUILD_ML", "0") == "1")
runpy.run_path(str(ROOT / "app/ui/app.py"), run_name="__main__")
Подготовка кешируется между сессиями и повторными запусками страницы в одном процессе. После перезапуска сервера данные собираются заново. При обновлении Excel в datasets/ перезагрузите приложение через Reboot, чтобы очистить кеш подготовки.
Проверьте запуск локально и отправьте новый файл в ветку деплоя:
.venv\Scripts\python.exe -m streamlit run streamlit_app.py
# После проверки остановите сервер сочетанием Ctrl+C.
git add streamlit_app.py
git commit -m "deploy: add Streamlit Cloud entrypoint"
git push origin main
2. Создайте приложение. В Community Cloud нажмите Create app, подключите GitHub и заполните:
| Поле | Значение |
|---|---|
| Repository | BAITC-Hacks/hack-1404e13c-ai-dostar или ваш fork |
| Branch | main |
| Main file path | streamlit_app.py |
| Advanced settings → Python version | 3.12 |
| App URL | Свободное имя, например ai-dostar-demo |
При необходимости предоставьте Streamlit доступ к репозиторию организации. После Deploy сервис выдаст HTTPS-ссылку вида https://<выбранное-имя>.streamlit.app. Подробности полей — в официальной инструкции Streamlit.
3. Настройте ИИ и ML. Для первого запуска достаточно статистического метода без API-ключа. В Advanced settings → Secrets можно задать:
COPILOT_ENABLED = "0"
BUILD_ML = "0"
Чтобы включить ИИ, замените настройки на следующие и подставьте свой ключ непосредственно в панели облака:
OPENAI_API_KEY = "ваш-ключ"
OPENAI_MODEL = "gpt-4o-mini"
COPILOT_ENABLED = "1"
BUILD_ML = "0"
Параметры задаются на верхнем уровне TOML, без секции [openai]: приложение читает переменные окружения, а Streamlit экспортирует в них корневые значения Secrets. Не добавляйте ключ в стартовый файл или Git. См. управление секретами Streamlit.
Для ML установите BUILD_ML = "1" и перезагрузите приложение. Стартовый файл обучит модель в том же окружении и на тех же таблицах, где она будет использоваться. Обучение увеличивает время старта и потребление ресурсов; после перезапуска процесса оно повторяется. Если облако завершает процесс из-за нехватки памяти, верните BUILD_ML = "0" и используйте статистический метод либо сервер с большими ресурсами. При BUILD_ML = "0" выбирайте статистику: наличие актуальной ML-модели не гарантируется.
4. Проверьте опубликованную версию. Откройте ссылку, нажмите «Рассчитать», проверьте вкладки «Товар» и «Ассистент», затем утверждение и скачивание тестового заказа. Ошибки установки, чтения Excel и обучения смотрите в логах приложения. Изменения опубликованной ветки подхватываются облаком; после обновления данных делайте Reboot.
Данные и сохранение заказов на сервере
Текущая версия рассчитана на совместное демо: авторизации и разделения заказов по пользователям нет, файл data/state/approvals.json общий для посетителей одного экземпляра приложения. Выбирайте доступ к приложению с учётом того, кому можно видеть выгрузки и менять утверждения.
Не используйте локальный диск Community Cloud как единственное хранилище утверждений: сохраняйте экспортированные заказы отдельно. Для постоянной работы нужны контроль доступа и устойчивое хранилище состояния. На собственном сервере сохраняйте data/state/ на постоянном диске и запускайте один экземпляр приложения, пока состояние хранится в JSON.
Два метода прогноза
| Статистический · по умолчанию | ML · включается отдельно | |
|---|---|---|
| Основа | Регулярный спрос, сезонность и устойчивый тренд | Общий градиентный бустинг для товаров IEK и SE |
| Признаки | База по полным месяцам и сезонная история | Лаги, скользящие средние, календарь, характеристики товара и статистический прогноз |
| Запуск | Сразу после подготовки данных | После локального обучения |
| Разбор результата | Факторы и семь сценариев во вкладке «Проверки» | Месячные прогнозы и отчёт временной проверки |
Обучить ML-модель
Наглядный разбор: как модель учится на CPU, графики, узлы деревьев и Gym · Jupyter notebook · готовая HTML-страница.
.venv\Scripts\python.exe -m app.ml.train
В Docker модель обучается автоматически при сборке образа (TRAIN_ML=1 по умолчанию). Выберите «Метод прогноза → ML — обученный бустинг», затем «Рассчитать». Обучение — отдельный шаг; оно не требуется для статистического режима.
Артефакты сохраняются локально в data/models/. После изменения данных или версии scikit-learn модель нужно переобучить. Для горизонта дальше третьего месяца используется явно отмеченный статистический прогноз. Семь сценариев отключения факторов относятся к статистическому методу.
Измеренный результат
В сохранённом эксперименте модель обучена по август 2026 года: 86 094 примера, 2 523 товара. По отчёту эксперимента, средняя нормированная абсолютная ошибка на 20 507 проверочных примерах снизилась:
| Статистический метод | ML | Снижение ошибки |
|---|---|---|
| 0,9389 | 0,7849 | 16,41% |
Это снижение ошибки, а не процент точности. Метрика нормирует ошибку на предыдущий средний объём каждого товара. Проверочные горизонты частично пересекаются; результат не является независимым внешним испытанием. По объёмно-взвешенной метрике WAPE группа IEK / штуки ухудшилась: 33,72% → 35,93%. Поэтому улучшение не заявляется для каждого товара. Процедура и ограничения — в методике ML.
Как получается заказ
flowchart LR
A["Excel партнёра"] --> B["Адаптеры · 8 таблиц"]
B --> C["Разовые продажи и дефицит"]
C --> D{"Метод прогноза"}
D --> E["Сезонность и тренд"]
D --> F["Обученный бустинг"]
E --> G["Запас · склад · в пути · кратность"]
F --> G
G --> H["Проверка менеджера"]
H --> I["Утверждённый XLSX / CSV"]
Горизонт = срок поставки + период пересмотра
Потребность = прогноз на горизонт + страховой запас
Заказ = max(0, потребность − свободный остаток − поставки в пределах горизонта)
Итоговая рекомендация округляется вверх до кратности поставщика.
Алгоритмы и параметры
- Разовые продажи: строка выше
median + 5 × 1.4826 × MAD(при MAD = 0 — выше10 × median) и больше 30% месячного объёма. Сопоставимый опт в трёх разных месяцах сохраняется. Разовая строка уменьшается до типичного объёма; сам факт продажи остаётся в истории. Для единичной продажи предусмотрен отдельный порог по категории. - Дефицит: оценка потерянного спроса опирается минимум на два полных месяца с положительным начальным остатком. Учитываются сезонность и наблюдавшаяся часть месяца.
- Статистика: сезонный профиль SKU смешивается с профилями группы и компании; устойчивый тренд ограничен диапазоном
0.8–1.25, рост категории задаётся отдельно. - Страховой запас:
z × σ_daily × √lead_time; робастная оценка разброса —IQR / 1.349, с резервной оценкой при нулевом IQR. - ML:
HistGradientBoostingRegressor; целевые значения — наблюдавшиеся продажи за вычетом разового избытка в месяцах с положительным начальным остатком. Восстановленный спрос не выдаётся за известную целевую величину. Исторический страховой запас не является доверительным интервалом ML.
Подробности: спрос · статистический прогноз · ML.
Покажите ценность за три минуты
| Пример из данных | Что демонстрирует |
|---|---|
Петля LOOP · IEK 130200305_ | Из продажи 210 000 шт. исключается разовый избыток 209 990 шт., сохраняется типичный объём 10 шт. |
Установочная коробка · SE 030200192_ | Повторяющиеся крупные продажи 36–90 тыс. сохраняются как регулярный опт. |
Труба Ø50 · IEK 130300792_ | В статистическом сценарии рекомендация 16 350 м; без компенсации дефицита — 14 500 м, без сезонности — 9 250 м. |
| Дополнительные 100 м в пути | Для той же трубы рекомендация снижается 16 350 → 16 250 м. |
Числа приведены для контрольного статистического расчёта на 22.09.2026 с параметрами по умолчанию; при смене метода или параметров результат изменится. Последовательность экранов и тайминг — в сценарии демонстрации.
Решение остаётся у менеджера
- Проверить рекомендации и предупреждения по данным.
- Изменить количество при необходимости — с обязательной причиной. Нулевое количество сохраняется как исключение из заказа.
- Утвердить весь заказ выбранного поставщика, включая скрытые фильтрами строки.
- Скачать XLSX или CSV с кодом 1С, артикулом, количеством, складом и обоснованием.
Экспорт включает только утверждённые положительные строки и перечитывает состояние при скачивании. Изменённый расчёт требует нового утверждения. Причина менеджера попадает в файл; значения, похожие на Excel-формулы, экранируются.
При оценочных остатках требуется отметка о сверке со складом. Отдельные проблемы входных данных требуют пояснения по строке либо исключения позиции. Приложение не отправляет заказы автоматически.
ИИ-объяснения без самостоятельного изменения чисел
Copilot объясняет готовый расчёт и делает сводку по итоговым количествам менеджера. Он не прогнозирует спрос и не утверждает заказ: модель выбирает идентификаторы фактов, а приложение формирует предложения из проверенного каталога. В «Спросить ассистента» модель только понимает вопрос и выбирает данные, ответ собирает приложение. Произвольный текст модели с числами не показывается нигде. Без ключа, при ошибке API или неполных данных используется шаблон.
Для включения скопируйте .env.example в .env и заполните OPENAI_API_KEY (в Docker файл подхватывается docker compose up автоматически). Настройка OPENAI_MODEL задаёт текстовую модель; текущий вариант по умолчанию в коде — gpt-4o-mini. COPILOT_ENABLED=0 включает постоянный шаблонный режим. Ключи не коммитятся.
Проверка и воспроизводимость
После подготовки данных:
.venv\Scripts\python.exe -m pytest -q
| Набор | Что проверяется |
|---|---|
test_adapters.py, test_demand.py | Контракты таблиц, разовые продажи, регулярный опт и восстановление спроса. |
test_acceptance.py | Влияние склада и поставок, сезонность, кратность, некорректные данные и устойчивость заказа. |
test_ml.py | Признаки, временные границы, артефакт модели и интеграция ML. |
test_copilot.py | Проверенные факты, ответы неверного формата и резервные объяснения без платных вызовов. |
test_assistant.py | Поиск по заказу, рекомендации и признаки жизненного цикла ассортимента. |
test_product.py, test_ui.py, test_ui_real.py | Правки, обязательная причина, утверждение, отзыв, экспорт и восстановление в новой сессии. |
Проверки на реальных данных требуют data/clean; без него часть тестов пропускается. Тесты утверждений используют изолированные временные файлы. Результаты обучения — в ml-evaluation.json; история проверок команды — в team-memory.md.
Если что-то не запускается
| Ситуация | Что сделать |
|---|---|
docker compose ругается на env_file / required | Обновить Docker Compose до v2.24+ (Docker Desktop последней версии) или создать пустой .env. |
Docker: no space left on device | Освободить ~3 ГБ; в Docker Desktop → Troubleshoot → Clean / Purge data (удаляет все образы). |
| Порт 8501 занят | Остановить другой Streamlit или сменить порт в docker-compose.yml. |
| Нет подготовленных данных (без Docker) | Запустить python -m app.adapters.build --raw datasets через Python из .venv. |
| ML-модель отсутствует или устарела | Выполнить python -m app.ml.train либо выбрать статистический метод. |
| ИИ показывает шаблон | Проверить .env и COPILOT_ENABLED; расчёт заказа работает независимо от API. |
| Утверждение недоступно | Проверить причины правок, предупреждения по строкам и отметку сверки остатков. |
| Ошибка доступа к временной папке pytest на Windows | Добавить --basetemp=.pytest_cache/local-run-1, выбрав новую папку для прогона. |
После git pull осталось старое поведение | Перезапустить Streamlit; при изменении зависимостей повторить установку requirements.txt. |
Дополнительный браузерный прогон: scripts/ui_browser_smoke.py. Требует отдельно установленного Playwright и Microsoft Edge; инструкции есть в файле.
Границы текущего MVP
| Ограничение | Как оно отражено в продукте |
|---|---|
| Остаток IEK оценочный, поступления неизвестны | Предупреждение, флаг проверки и подтверждение сверки со складом. |
| Нет точных периодов отсутствия товара | Восстановленный спрос обозначается как оценка. |
| Отчёт SE расходится с накладными | Накладные задают уровень спроса; расхождение описано в методике. |
| Реальные сроки поставки не подтверждены | Менеджер задаёт сроки в параметрах. |
| Короткая история и неодинаковое качество ML по группам | Показаны метрики и ограничения, статистический метод остаётся доступным. |
| Утверждения хранятся в локальном JSON | Сессии одного процесса защищены блокировкой; несколько серверных реплик требуют общего хранилища. |
Экономия денег и снижение дефицита не измерены в промышленной эксплуатации. Следующие шаги — получить фактические остатки, подтвердить сроки поставки и проверить прогноз на новых месяцах. План развития.
Документация и команда
app/
├── adapters/ Excel → таблицы единого контракта
├── engine/ Разовые продажи, спрос, прогноз и пополнение
├── ml/ Обучение и применение бустинга
├── ui/ Streamlit и сохранение утверждений
├── copilot.py Объяснения на проверенных фактах
├── assistant.py Поиск и рекомендации по заказу
├── export.py XLSX / CSV
├── pipeline.py Единый запуск расчёта
└── schema.py Контракты и параметры
datasets/ Исходные данные партнёра (Excel + CSV-копии)
docs/ Методики, демо, проверки и память команды
notebooks/ Разбор ML-модели (ipynb + HTML)
scripts/ Проверка системы, браузерный прогон, xlsx → csv
tests/ Модульные и интеграционные проверки
Dockerfile Образ: зависимости, сборка данных, обучение ML
docker-compose.yml Запуск: docker compose up --build
data/clean/, data/models/, data/state/ и .env — локальные данные и настройки, исключённые из Git. CSV-копии в datasets/*_CSV вспомогательные: pipeline читает исходные Excel.
| Зона команды | Ответственность |
|---|---|
| Человек 1 · Спрос | Разовые продажи, месячный ряд и оценка спроса при дефиците. |
| Человек 2 · Расчёт | Контракты, прогноз, пополнение, обоснования и приёмка. |
| Человек 3 · Продукт | Интерфейс, утверждение, экспорт и демонстрация. |
| Документ | Что внутри |
|---|---|
| docs/RELEASE.md | Заметки к версиям v1.1.0 (рабочая) и v1.0.0: что входит, как запущено и проверено |
| docs/system-verification.md | Полная проверка на реальных данных: Excel → таблицы → оба метода прогноза → утверждение → CSV/XLSX, браузер (desktop и mobile), notebook; доказательства в docs/verification/ |
| docs/ml-visual-guide.md | Как обучается бустинг на CPU: кривая обучения, важность признаков, дерево, остатки, примеры прогнозов (docs/assets/ml/) |
| notebooks/01_demand_model_walkthrough.ipynb | Пошаговый разбор ML-модели; HTML-версия открывается без Python. Зависимости: pip install -r requirements-notebooks.txt, запуск: python scripts/run_ml_notebook.py |
| docs/methodology-demand.md · forecast · ml · assistant | Методики: разовые продажи и дефицит, прогноз и заказ, ML, ассистент и жизненный цикл |
| docs/demo.md | Сценарий показа на 3 минуты |
| docs/architecture.md · docs/tasks.md · docs/team-memory.md · docs/completion-plan.md | Архитектура MVP, распределение задач, память команды, план развития |
Полная проверка системы одной командой: python scripts/verify_real_system.py (пересобирает таблицы, переобучает ML, сверяет прогнозы, утверждение и экспорт в изолированном хранилище).
AI-Dostar · От истории продаж — к обоснованному заказу.
Авторы коммитов
История коммитов
- 2026-09-23 17:57Record passing final Docker test suiteValiCoder
- 2026-09-23 17:57release: рабочая версия AI-Dostar v1.1.0adilzhankad
- 2026-09-23 17:57Merge main Docker work and document verified containerValiCoder
- 2026-09-23 17:55Merge latest assistant layout from main into Docker branchValiCoder
- 2026-09-23 17:54docker: run the app with docker compose up --buildadilzhankad
- 2026-09-23 17:54docs: explain internet deployment with Streamlit Community CloudBekesh Dastan
- 2026-09-23 17:51Merge main fixes and build tested Linux Docker imageValiCoder
- 2026-09-23 17:44merge: ml/demand-forecast into main; assistant panel on top; READMEadilzhankad
Все коммиты (43)
- 2026-09-23 17:33fix: ground assistant answers and invalidate stale order resultsBekesh Dastan
- 2026-09-23 17:29Merge latest assistant and prove integrated real-data systemValiCoder
- 2026-09-23 17:25release: готовая версия AI-Dostar v1.0.0adilzhankad
- 2026-09-23 17:24Merge main updates and verify real-data pipelines, ML and UIValiCoder
- 2026-09-23 17:15assistant: free-form «Спросить ассистента» with grounded answers; guard LLM pair verdictsadilzhankad
- 2026-09-23 17:11docs(ml): add executed demand notebook and CPU training visual guideValiCoder
- 2026-09-23 17:09docs: showcase AI-Dostar with visual README and ML resultsBekesh Dastan
- 2026-09-23 17:01assistant: natural-language order search, assortment lifecycle, recommendationsadilzhankad
- 2026-09-23 16:49ml: train demand forecaster with temporal evaluation and UI integrationValiCoder
- 2026-09-23 16:30calc: flag invalid inputs, pack and one-off source in rationale (tasks 2.2, 2.3)adilzhankad
- 2026-09-23 16:23fix: resolve ordering workflow and copilot review findingsBekesh Dastan
- 2026-09-23 16:14ui: complete real-data purchasing workflow and integration testsValiCoder
- 2026-09-23 15:58data: fix misnamed IEK workbooks in datasets; docs point to working real-data buildadilzhankad
- 2026-09-23 15:57docs: record UI integration review and verified defectsBekesh Dastan
- 2026-09-23 15:56docs: record review of copilot and acceptance changesBekesh Dastan
- 2026-09-23 15:52docs: update team handoff with completed UIValiCoder
- 2026-09-23 15:48ui: build purchasing workflow and demoValiCoder
- 2026-09-23 15:42calc: copilot explanations, must-have acceptance tests, progress notesadilzhankad
- 2026-09-23 15:40docs: detail demand implementation and team handoffBekesh Dastan
- 2026-09-23 15:33demand: document one-off and stockout methodology (task 1.5)Bekesh Dastan
- 2026-09-23 15:31demand: expose typical quantities in one-off report (task 1.4)Bekesh Dastan
- 2026-09-23 15:29demand: verify one-offs and stockout estimates (task 1.3)Bekesh Dastan
- 2026-09-23 15:25demand: compensate monthly stockout demand (task 1.2)Bekesh Dastan
- 2026-09-23 15:24added datasets and converted to csvValiCoder
- 2026-09-23 15:22calc: one-off acceptance test now passes; update progressadilzhankad
- 2026-09-23 15:21calc: seasonal forecast with sustained trend (task 2.1)adilzhankad
- 2026-09-23 15:20demand: detect one-off invoice linesBekesh Dastan
- 2026-09-23 15:13Merge branch 'main' of https://github.com/BAITC-Hacks/hack-1404e13c-ai-dostarValiCoder
- 2026-09-23 15:13Dataset reformatted from xlsx to csvValiCoder
- 2026-09-23 15:09Record project progress in team memoryadilzhankad
- 2026-09-23 15:08calc: engine skeleton with working stubs (task 2.0)adilzhankad
- 2026-09-23 15:02Add team task split and record decisions in team memoryadilzhankad
- 2026-09-23 14:54Add data contract and IEK/SE adaptersadilzhankad
- 2026-09-23 14:38Use Git-backed Markdown for team memoryadilzhankad
- 2026-09-23 14:17Set up shared Codex team memoryadilzhankad
Структура репозитория (115 файлов)
.codex/config.toml .dockerignore .env.example .gitignore AGENTS.md Dockerfile README.md app/__init__.py app/adapters/__init__.py app/adapters/build.py app/adapters/common.py app/adapters/iek.py app/adapters/se.py app/assistant.py app/copilot.py app/engine/__init__.py app/engine/demand.py app/engine/explain.py app/engine/forecast.py app/engine/lifecycle.py app/engine/oneoffs.py app/engine/replenish.py app/export.py app/ml/__init__.py app/ml/model.py app/ml/train.py app/mock.py app/pipeline.py app/schema.py app/ui/app.py app/ui/state.py app/ui/tab_assistant.py datasets/IEK/MOQ ИЭК.xlsx datasets/IEK/Динамика продаж_2025-2026.xlsx datasets/IEK/Ежемесячные остатки продукции за последние 2 года ИЭК.xlsx datasets/IEK/Ежемесячные продажи в количественном выражении за последние 2 года.xlsx datasets/IEK/Путь ИЭК 22.09.2026.xlsx datasets/IEK/Сезонность ИЭК.xlsx datasets/IEK_CSV/MOQ ИЭК.csv datasets/IEK_CSV/Динамика продаж_2025-2026.csv datasets/IEK_CSV/Ежемесячные остатки продукции за последние 2 года ИЭК.csv datasets/IEK_CSV/Ежемесячные продажи в количественном выражении за последние 2 года.csv datasets/IEK_CSV/Путь ИЭК 22.09.2026.csv datasets/IEK_CSV/Сезонность ИЭК.csv datasets/Systeme electric/MOQ SystemElectric.xlsx datasets/Systeme electric/Динамика продаж_Syseme Electric_2025-2026.xlsx datasets/Systeme electric/Ежемесячные остатки SystemElectric 2024-2026.xlsx datasets/Systeme electric/Ежемесячные продажи в кол-м выражении SystemElectric 2024-2026.xlsx datasets/Systeme electric/Сезонность SystemElectric 2024-2026.xlsx datasets/Systeme electric/Товар в пути_SystemElectric на 22.09.2026.xlsx datasets/Systeme electric_CSV/MOQ SystemElectric.csv datasets/Systeme electric_CSV/Динамика продаж_Syseme Electric_2025-2026.csv datasets/Systeme electric_CSV/Ежемесячные остатки SystemElectric 2024-2026.csv datasets/Systeme electric_CSV/Ежемесячные продажи в кол-м выражении SystemElectric 2024-2026__Лист1.csv datasets/Systeme electric_CSV/Ежемесячные продажи в кол-м выражении SystemElectric 2024-2026__Лист_1.csv datasets/Systeme electric_CSV/Сезонность SystemElectric 2024-2026.csv datasets/Systeme electric_CSV/Товар в пути_SystemElectric на 22.09.2026__TDSheet.csv datasets/Systeme electric_CSV/Товар в пути_SystemElectric на 22.09.2026__Лист1.csv docker-compose.yml docs/RELEASE.md docs/architecture.md docs/assets/ml/diagnostics.json docs/assets/ml/feature_importance.csv docs/assets/ml/feature_importance.png docs/assets/ml/forecast_examples.png docs/assets/ml/holdout_predictions.csv docs/assets/ml/learning_curve.csv docs/assets/ml/learning_curve.png docs/assets/ml/production_tree.png docs/assets/ml/production_tree_nodes.csv docs/assets/ml/residuals.png docs/assets/ml/run-summary.md docs/assets/readme-hero.svg docs/completion-plan.md docs/demo.md docs/methodology-assistant.md docs/methodology-demand.md docs/methodology-forecast.md docs/methodology-ml.md docs/ml-evaluation.json docs/ml-visual-guide.md docs/system-verification.md docs/tasks.md docs/team-memory.md docs/verification/browser-ml.txt docs/verification/browser-statistical.txt docs/verification/ml-assistant-desktop.png docs/verification/ml-order-desktop.png docs/verification/ml-order-mobile.png docs/verification/pytest.txt docs/verification/pytest.xml docs/verification/real-system.json docs/verification/real-system.txt docs/verification/source-sha256.json docs/verification/statistical-order-desktop.png docs/verification/test-summary.json notebooks/01_demand_model_walkthrough.html notebooks/01_demand_model_walkthrough.ipynb notebooks/01_demand_model_walkthrough.py requirements-notebooks.txt requirements.txt scripts/excel_to_csv.py scripts/run_ml_notebook.py scripts/ui_browser_smoke.py scripts/verify_real_system.py tests/conftest.py tests/test_acceptance.py tests/test_adapters.py tests/test_assistant.py tests/test_copilot.py tests/test_demand.py tests/test_ml.py tests/test_product.py tests/test_ui.py tests/test_ui_real.py
Ветки (2)
Обсуждение 0 комментариев
Войдите, чтобы комментироватьПока нет комментариев — будьте первым.