diff --git a/.gitignore b/.gitignore index 435f7f2..df60c42 100644 --- a/.gitignore +++ b/.gitignore @@ -6,3 +6,4 @@ __pycache__/ *.sqlite .DS_Store Thumbs.db +INFRA_PRIVATE.md diff --git a/README.md b/README.md index 902684c..40e72fc 100644 --- a/README.md +++ b/README.md @@ -7,6 +7,8 @@ Un LLM joue le rôle de MJ narrateur, un second LLM anime les PNJ. **Dashboard** → [fallout.coyoteos.ovh](https://fallout.coyoteos.ovh) (PipBoy) **Gitea** → [git.coyoteos.ovh](https://git.coyoteos.ovh) — repo `Corback/fallout-venice` +> ⚠️ Les informations de connexion (IPs, credentials, clés SSH) sont dans `INFRA_PRIVATE.md` (local uniquement, non commité). + --- ## Architecture générale @@ -14,7 +16,6 @@ Un LLM joue le rôle de MJ narrateur, un second LLM anime les PNJ. ``` ┌─────────────────────────────────────────────────────────┐ │ AMPÈRE (Oracle ARM) │ -│ 82.70.224.131 │ │ │ │ ┌──────────────┐ ┌───────────────┐ ┌────────────┐ │ │ │ run.py S1 │ │ run.py S2 │ │ PipBoy │ │ @@ -30,30 +31,16 @@ Un LLM joue le rôle de MJ narrateur, un second LLM anime les PNJ. │ │ ChromaDB :8800 — collection fallout_lore │ │ │ │ 1403 chunks : règles 2D20, lore canon, ambiance │ │ │ └────────────────────────────────────────────────────┘ │ -└────────────────────────────┬────────────────────────────┘ - │ SSH tunnel :15432 -┌────────────────────────────▼────────────────────────────┐ -│ VIGILE (OVH) 79.72.30.231 │ +└────────────────────────┬────────────────────────────────┘ + │ SSH tunnel :15432 +┌────────────────────────▼────────────────────────────────┐ +│ VIGILE (OVH) │ │ PostgreSQL — base "fallout" │ └─────────────────────────────────────────────────────────┘ ``` --- -## Infra & accès - -| Serveur | IP | Rôle | Clé SSH | -|---------|----|------|---------| -| Ampère | 82.70.224.131 | Calcul — LLM, sim, dashboard | `oracle.key` | -| Vigile | 79.72.30.231 | PostgreSQL | `vigile_backup` | - -**Tunnel DB actif sur Ampère** : `localhost:15432` → Vigile:5432 -**ChromaDB** : `localhost:8800` — API v2 uniquement (`/api/v2/...`) -**Ollama** : `localhost:11434` -**PipBoy (Docker)** accède à Ollama via `host.docker.internal:11434` - ---- - ## Stack technique | Composant | Technologie | Détail | @@ -113,7 +100,7 @@ fallout-venice/ | 3 | PASSAGE | Décor narratif | Jamais | Actuellement tous les PNJ sont animés par le **moteur Python seul**. -Le LLM PNJ sera déclenché uniquement sur **interaction joueur directe** (V2). +Le LLM PNJ sera déclenché uniquement sur **interaction joueur directe** (Phase 5). --- @@ -121,7 +108,7 @@ Le LLM PNJ sera déclenché uniquement sur **interaction joueur directe** (V2). `independance` | `nola_vieux_carre` | `baton_rouge` | `laplace` -Règles : pas de rencontres lambda/groupe. Seuls les raids de faction (faible probabilité) et le commerce PNJ-à-PNJ sont possibles. Les marchands peuvent s'y retrouver sans rencontrer de bêtes. +Règles : pas de rencontres lambda/groupe. Seuls les raids de faction (faible probabilité) et le commerce PNJ-à-PNJ sont possibles. --- @@ -145,7 +132,7 @@ Configurables depuis le PipBoy — prise en compte au **prochain jour** (hot-rel | Catégorie | Chunks | Contenu | |-----------|--------|---------| -| `regles_core` | ~934 | Règles 2D20 Fallout (avec 299 chunks migrés depuis `type` → `category`) | +| `regles_core` | ~934 | Règles 2D20 Fallout | | `regles_supplement` | 279 | Suppléments et extensions | | `lore_inspiration` | 86 | Inspiration univers Fallout | | `ambiance` | 43 | Descriptions atmosphériques | @@ -156,7 +143,7 @@ Configurables depuis le PipBoy — prise en compte au **prochain jour** (hot-rel --- -## Performances LLM mesurées (16/06/2026, Ampère ARM) +## Performances LLM mesurées (Ampère ARM) | Joueurs simultanés | Tick complet | Actions/heure | Viable tick 10min | |-------------------|-------------|---------------|-----------------| @@ -165,8 +152,6 @@ Configurables depuis le PipBoy — prise en compte au **prochain jour** (hot-rel | 10 | 1m17 | 46 | ✓ | | 50 | 3m32 | 16 | ✓ (8 timeouts) | -MJ 14b : constant ~30s indépendamment du nombre de joueurs (commence après tous les PNJ). -Cold start : ~90s si Ollama a déchargé les modèles (inactivité prolongée). **Plafond recommandé V1 : 10-15 joueurs actifs simultanés.** --- @@ -174,7 +159,7 @@ Cold start : ~90s si Ollama a déchargé les modèles (inactivité prolongée). ## Lancement des simulations ```bash -# SSH sur Ampère +# SSH sur Ampère (voir INFRA_PRIVATE.md pour la clé et l'IP) cd /home/ubuntu/fallout-venice/src/engine # Session 1 @@ -205,25 +190,7 @@ python3 lore_enricher.py --faction all # toutes python3 lore_enricher.py --list-factions # liste ``` -Valider les propositions → PipBoy onglet **ENRICHISSEMENT** -Les propositions acceptées sont indexées dans `fallout_lore_enriched` (Chroma). - ---- - -## Tests LLM - -```bash -cd /home/ubuntu/fallout-venice/tools - -# Stress test simple -python3 llm_crash_test.py --mode simultane --rounds 5 --pnj-count 2 - -# Test capacité (1 / 5 / 10 / 50 joueurs) -python3 capacity_test.py -python3 capacity_test.py --quick # sans le test 50 joueurs -``` - -Les résultats sont écrits dans `src/config/crash_results.json` et lisibles depuis le PipBoy (onglet OUTILS → Charger les résultats). +Valider les propositions → PipBoy onglet **ENRICHISSEMENT** --- @@ -237,9 +204,7 @@ Les résultats sont écrits dans `src/config/crash_results.json` et lisibles dep | `OLLAMA_URL` | `http://localhost:11434` | Endpoint Ollama | | `MODEL_MJ` | `qwen2.5:14b` | Modèle MJ narrateur | | `MODEL_PNJ` | `qwen2.5:7b` | Modèle animation PNJ | -| `DB_HOST` / `DB_PORT` | `127.0.0.1` / `15432` | PostgreSQL via tunnel SSH | -| `SIM_CONFIGS_DIR` | `/app/src/config` | Répertoire configs JSON | -| `CRASH_RESULTS_PATH` | `src/config/crash_results.json` | Sortie tests LLM | +| `DB_HOST` / `DB_PORT` | voir INFRA_PRIVATE.md | PostgreSQL via tunnel SSH | --- @@ -247,27 +212,20 @@ Les résultats sont écrits dans `src/config/crash_results.json` et lisibles dep **ChromaDB** - API v2 uniquement — `/api/v1/` retourne `{"error":"Unimplemented"}` -- Requêtes par **UUID**, pas par nom de collection (récupérer l'UUID d'abord via `GET /collections`) - La collection `fallout_vst` **n'existe pas** — c'est `fallout_lore` - 299 chunks avaient le champ `type` au lieu de `category` — corrigé en juin 2026 **Dashboard** - Le fichier actif est `/home/ubuntu/fallout-visu/app.py` (monté Docker), pas `dashboard/app.py` -- Toujours copier les deux après modification : `scp dashboard/app.py ubuntu@82.70.224.131:/home/ubuntu/fallout-visu/app.py` +- Toujours copier les deux après modification **Simulation** - `run.py` vérifie le statut DB toutes les **5 ticks** — STOP depuis PipBoy n'est pas instantané - Hot-reload config JSON au **début de chaque jour** (tick 0), pas immédiatement -- `init_pnj.py` lit `SESSION_ID` depuis l'env (plus hardcodé) **Réseau Docker** - Le container PipBoy accède à Ollama via `host.docker.internal:11434` -- Une règle iptables autorise 172.20.0.0/16 → port 11434. Si elle disparaît après reboot : - ```bash - sudo iptables -I INPUT 1 -s 172.20.0.0/16 -p tcp --dport 11434 -j ACCEPT - sudo iptables-save | sudo tee /etc/iptables/rules.v4 - ``` +- Une règle iptables autorise le subnet Docker → port 11434. Voir INFRA_PRIVATE.md si disparaît après reboot. -**Tunnel SSH DB** -- Le container PipBoy crée son propre tunnel au démarrage (clé `/ssh/vigile.key`) -- Si DB inaccessible : `docker restart fallout-visu` +**Infos de connexion** +- Voir `INFRA_PRIVATE.md` (local uniquement, dans `.gitignore`)