AI investment decision support for Morocco - 5 LLM agents, OpenStreetMap + HCP data, live SSE streaming, national-press radar (hackathon project)
# InvestMap Maroc
Aide à la décision d'investissement au Maroc, sur **données réelles**. Deux couches qui se parlent :
- **Invest (micro)** — pour un porteur de projet : 5 agents IA analysent une opportunité locale.
Commerces voisins via **OpenStreetMap** (réel), signal de demande (modèle démographique HCP),
puis raisonnement LLM pour le matching, les démarches administratives et le score de succès.
Le résultat est diffusé en direct via **SSE** pendant l'analyse.
- **Radar (macro)** — pour une institution (CRI) : les grands projets nationaux sont extraits en
continu de la **presse nationale** (recherche web **Tavily** + extraction LLM + géocodage
Nominatim), affichés sur une carte du Maroc avec leur **source**.
**Lien micro ↔ macro :** pendant l'analyse Invest, le pipeline cherche le grand projet national
réel le plus proche de l'investisseur (depuis le cache Radar) et l'injecte dans le score (Agent 5).
## Architecture
```
frontend (racine du repo) backend/
index.html main.py FastAPI + CORS
*.jsx (React via Babel CDN) pipeline.py orchestrateur SSE (5 agents Invest)
server.js (Node http, :3000) agents/invest/ agent1..5
data.js / personalize.js agents/radar/ agent6 (Tavily), agent7 (LLM+géocodage)
core/llm.py client LLM (NVIDIA, sinon OpenRouter)
core/tavily.py recherche web
api/routes/ /api/analyze, /api/stream, /api/projects
data/…cache.json dernier run Radar réel (filet de sécurité)
```
## Lancer le projet (2 processus)
**1. Backend** (port 8000) :
```bash
cd backend
pip install -r requirements.txt
uvicorn main:app --port 8000
```
**2. Frontend** (port 3000) :
```bash
node server.js
# puis ouvrir
localhost
```
## Configuration — `backend/.env`
```
AGENT_MODE=live # 'live' = vraies API ; 'mock' = données factices
NVIDIA_API_KEY=nvapi-... # LLM (recommandé) — sinon OPENROUTER_API_KEY
OPENROUTER_API_KEY=sk-or-... # LLM de repli …