38 lines
1.3 KiB
Plaintext
38 lines
1.3 KiB
Plaintext
# 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
|