# 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