Spaces:
Sleeping
A newer version of the Streamlit SDK is available: 1.59.1
title: Market Performance Sentinel (Demo)
emoji: π§¬
colorFrom: indigo
colorTo: purple
sdk: streamlit
sdk_version: 1.39.0
app_file: app.py
pinned: false
license: mit
short_description: Multi-agent LangGraph chatbot for market analytics.
Market Performance Sentinel β Demo
A multi-agent LangGraph chatbot that answers natural-language questions about pharma market performance β built around a supervisor + specialised agents architecture.
This Space runs on 100% fictional data. All company names, product names, and metric values are synthetic and were generated procedurally for demonstration purposes. The fictional company in the demo is NovaPharma and its products (NOVACOR, NOVAGLU, etc.) do not exist.
What this demo showcases
The chatbot answers questions like:
- "What's the market share of the top 3 products in France for the Growth Hormone market?"
- "In LATAM, which country has the biggest QTR-QoQ value change in the Hypothyroid market in 25Q3?"
- "Which cluster is leading the change in APAC for the Anti-EGFR market?"
- "What are the clusters for the Injectable Platform in APAC?"
It is not a Retrieval-Augmented-Generation chatbot β it is a multi-agent system where each agent has a specific responsibility:
ββββββββββββββββββ
β query_analyzer β β LLM classifies intent
βββββββββ¬βββββββββ
βββββββββββββββΌββββββββββββββββ
data_retrieval parameter_info out_of_scope
β β β
βΌ βΌ β
ββββββββββββββββββ βββββββββββββββββββββ
β data_extractionβ β data_knowledge ββ β LLM-assisted filter parsing,
β (SQL query) β β (param tables) ββ fuzzy parameter lookup
ββββββββββ¬ββββββββ ββββββββββ¬βββββββββββ
β (optional) β β
βΌ β β
ββββββββββββββββββ β β
β leading_countryβ β β β deterministic country
β (delta calc) β β β delta calculation
ββββββββββ¬ββββββββ β β
β β β
βΌ βΌ βΌ
ββββββββββββββββββββββββββββββββ
β generate_response β β LLM synthesises final
β (LLM synthesis + fallback) β business-friendly answer
ββββββββββββββββββββββββββββββββ
| Node | Role |
|---|---|
query_analyzer |
LLM classifies user intent: data_retrieval, parameter_info, both, or out_of_scope. |
data_extraction |
LLM parses filters (region, period, product, market, β¦) from the user query, then issues a targeted SQL query β no full-table scan. |
data_knowledge |
Keyword-scored lookup into the parameter tables (clusters, markets, country-region mapping). |
leading_country |
Deterministic, no-LLM calculation that reconstructs prior-period deltas and ranks countries by contribution. |
generate_response |
LLM synthesises a natural-language answer from extracted data + filters + conversation history; falls back to a deterministic CSV-formatted answer if the LLM is unavailable. |
Tech stack
- Streamlit for the UI
- LangGraph for the agent graph
- Hugging Face Inference Providers (
InferenceClient) for the LLM calls β free serverless tier - SQLite (single-file
demo.sqlite) as the metrics store β pre-seeded with synthetic data - Python 3.10+
Configuration
The Space needs one secret:
| Secret | Where to set it | Notes |
|---|---|---|
HF_TOKEN |
Space β Settings β Variables and secrets | A free Hugging Face read token works fine. |
Optional environment variables:
| Variable | Default | Description |
|---|---|---|
HF_MODEL |
meta-llama/Llama-3.3-70B-Instruct |
Model used for all LLM calls. Any OpenAI-compatible chat model on HF Inference Providers will work. |
HF_PROVIDER |
auto |
HF inference provider routing (auto, hf-inference, together, β¦). |
Running locally
pip install -r requirements.txt
python seed_data.py # creates demo.sqlite (one-off; idempotent)
export HF_TOKEN=hf_xxx # Linux/macOS
# $env:HF_TOKEN = "hf_xxx" # Windows PowerShell
streamlit run app.py
Disclaimer
This is a demonstration project. The data, products, and company branding are entirely fictional. Numbers were generated procedurally and have no relationship to any real-world pharmaceutical market.
License
MIT