Go to file
Elshat c632aa41a2 fix: Node proxy on 3000 → Python dashboard on 8000
run is Node-based, so we need a Node entrypoint. server.js:
1) pip install -r requirements.txt (idempotent, --break-system-packages)
2) spawn python3 -m src.dashboard.run on PORT 8000
3) http proxy 3000 → 8000
This makes the dashboard visible at /proxy/3000/.
2026-09-24 10:31:45 +00:00
config v2: Python MVP — price pipeline + analytics + FastAPI dashboard + digest + tests 2026-09-24 07:07:32 +00:00
data feat: product search + potato/onion/carrot/beet in demo + demo-data banner + /api/products 2026-09-24 07:35:39 +00:00
design-system v1 - Price Agent: дашборд агро-данных (валюты+погода), ИИ-аналитик, чат 2026-09-24 05:25:39 +00:00
src feat: product search + potato/onion/carrot/beet in demo + demo-data banner + /api/products 2026-09-24 07:35:39 +00:00
.env.example v2: Python MVP — price pipeline + analytics + FastAPI dashboard + digest + tests 2026-09-24 07:07:32 +00:00
.gitignore v2: Python MVP — price pipeline + analytics + FastAPI dashboard + digest + tests 2026-09-24 07:07:32 +00:00
.vibe42-design.json v1 - Price Agent: дашборд агро-данных (валюты+погода), ИИ-аналитик, чат 2026-09-24 05:25:39 +00:00
agent.js v1 - Price Agent: дашборд агро-данных (валюты+погода), ИИ-аналитик, чат 2026-09-24 05:25:39 +00:00
AGENTS.md v1 - Price Agent: дашборд агро-данных (валюты+погода), ИИ-аналитик, чат 2026-09-24 05:25:39 +00:00
data.json v2: Python MVP — price pipeline + analytics + FastAPI dashboard + digest + tests 2026-09-24 07:07:32 +00:00
design.md v1 - Price Agent: дашборд агро-данных (валюты+погода), ИИ-аналитик, чат 2026-09-24 05:25:39 +00:00
index.html fix: index.html redirects to Python dashboard (port 3000) 2026-09-24 09:14:03 +00:00
index.legacy.html fix: index.html redirects to Python dashboard (port 3000) 2026-09-24 09:14:03 +00:00
package-lock.json fix: Node proxy on 3000 → Python dashboard on 8000 2026-09-24 10:31:45 +00:00
package.json fix: Node proxy on 3000 → Python dashboard on 8000 2026-09-24 10:31:45 +00:00
README.md feat: Excel export (in-browser SheetJS on /countries + CLI makexlsx report) + README 2026-09-24 07:15:28 +00:00
requirements.txt feat: manual CSV/HTML upload for sources without public API (Arbuz/Sharyn) 2026-09-24 07:13:33 +00:00
screenshot-20260924-113732.png fix: fallback-данные для Предпросмотра (белый экран) 2026-09-24 06:39:10 +00:00
server.js fix: Node proxy on 3000 → Python dashboard on 8000 2026-09-24 10:31:45 +00:00

chto-ty-takoe-na-baze-kakih — AgroMarket Price Agent

MVP ИИ-агента, который ежедневно собирает открытые агро-цены (KZ/TJ/UZ/RU), нормализует и категоризирует их, строит аналитику и отдаёт дашборд + дайджест.

Стек

  • Python 3.12, SQLite (переносимо на PostgreSQL), APScheduler, FastAPI + Plotly
  • ИИ (LLM) — только выписывает число из фрагмента источника, сверка посимвольно
  • Каждая цена — со ссылкой на источник и датой сбора

Запуск

python3 -m pip install -r requirements.txt
export $(grep -v '^#' .env | xargs)   # секреты в .env
python3 -m src.dashboard.run           # дашборд на $PORT (дефолт 8000)
python3 -m src.scheduler --once        # один прогон пайплайна + дайджест
python3 -m src.scheduler --daemon      # демон (ежедневно 07:30)
python3 -m src.demo_data               # синтетические данные (60 дней)
python3 -m src.export_excel            # отчёт в data/agromarket_report.xlsx
python3 -m pytest src/tests -q         # тесты

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

  • На странице Источники — форма ручной загрузки CSV/HTML (Arbuz.kz, Sharyn и аналоги без API). Запись идёт через тот же пайплайн; низкая уверенность → очередь на проверку.
  • На странице Страны — кнопка «Скачать в Excel» (SheetJS, выгрузка раскладок прямо из браузера).
  • CLI-отчёт python3 -m src.export_excel кладёт .xlsx (динамика по товарам + раскладки + алерты) в data/ — скачивается из вкладки Файлы.

Структура

  • src/pipeline/ — fetch, extract, normalize, categorize, validate, llm_extract, raw, orchestrator
  • src/analytics/ — dynamics, spreads/arbitrage, seasonality, anomalies, alerts, forecast
  • src/dashboard/ — FastAPI: overview, products, product, countries, alerts, quality, sources
  • src/ — db.py (SQL), config.py, taxonomy.py, models.py, cache.py, scheduler.py, digest.py, demo_data.py
  • config/ — taxonomy.yaml, synonyms.yaml, sources.yaml

Принципы (железо)

  1. Искренность: LLM не выдумывает цены — только цитирует число из фрагмента, затем строковая сверка. Не прошло — запись отбрасывается (не в карантин).
  2. Корректность: «нет данных» ≠ «цена 0». Подозрительные значения — в карантин, не в аналитику. Ниже порога (floor по категории) → quarantine.
  3. Легальность: tier-3 / новые источники — legal_status: pending_review (выключены по умолчанию). Никакого обходa captcha/роботов; честный User-Agent, robots.txt, rate-limit, кеш.
  4. Идентичность: повторный запуск не дублирует записи (ключ по source+region+product+price_type+as_of+фрагмент+snapshot).

Ограничения MVP

  • КЗ-официальные источники (stat.gov.kz/uz/tj) недоступны из run-контейнера (DNS) — только заглушки-адаптеры; нужен прогон из сети с доступом.
  • Arbuz.kz / Sharyn — нет публичного API → pending_review + ручной CSV-дамп.
  • Прогнозы — базовые (seasonal naive, SARIMA) с честным доверительным интервалом и меткой «низкая уверенность».
  • Модель арбитража (груз/тариф/комиссия) — предположения, помечены в UI как «assumptions».