# Runtime for the Streamlit dashboard:  streamlit run app.py
#
# The installable package and the CLI / LangGraph path are declared in pyproject.toml
# (`pip install -e ".[ui,dev]"`). This file is the smaller, dashboard-only set.

# --- UI ---
streamlit>=1.36
plotly>=5.22
pandas>=2.1
numpy>=1.26

# --- config + models ---
pydantic>=2.7.0
pydantic-settings>=2.3.0
pyyaml>=6.0
python-dotenv>=1.0.0

# --- COSMOS access ---
# requests is the HTTP client behind EVERY COSMOS call (cosmos/client.py) and tenacity is its
# retry policy. requests is a module-level import, so without it the dashboard fails on
# import — not at the first request.
requests>=2.31.0
tenacity>=8.3.0

# --- competitor data ---
# openpyxl reads the comparison workbook (competitor_sheet.py). Imported lazily, but on the
# DEFAULT path: COMPETITOR_SHEET_ONLY=true routes every covered SKU through it.
openpyxl>=3.1.0
# Per-ASIN Buy Box scrape, used when a SKU falls outside the sheet's coverage.
apify-client>=1.8.0

# --- LLM narrative (optional) ---
# Nothing the engine decides depends on this: with no OPENAI_API_KEY, or if the import fails,
# llm.py falls back to a deterministic template and the recommendation is identical.
# `langchain-openai` is the real import — `openai` alone does not enable it, it is only a
# transitive dependency of this package.
langchain-openai>=0.2.0
