Files
OPENCLAW_ARCHIVE3_17/handoffs/HANDOFF-2026-06-24-BOURSE-N8N.md
Thierry ea5dd014b6 Refonte bourse via N8N + passage modele Thinking
- openclaw.json: qwen3-vl reasoning:true, maxTokens 16384, nettoyage entrees dupliquees
- handoffs: synthese HANDOFF-2026-06-24-BOURSE-N8N.md (archi webhook N8N, config, tests)
2026-06-25 01:56:29 +02:00

117 lines
5.9 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
# HANDOFF — Refonte Bourse via N8N + passage modèle Thinking
**Date :** 2026-06-24 / 2026-06-25
**Auteur :** session OpenCode (assistant) + Thierry
**Périmètre :** suivi boursier (Orange, Total, etc.), workflow N8N, modèle vLLM
---
## 1. Contexte / problème initial
- `orange-bourse.md` était corrompu chaque semaine : le LLM l'éditait **à la main**
(cron `orange-intraday` 8×/jour) → doublons, sections vides, ordre cassé.
- Jours de bourse fermée non gérés → cours inventés ou lignes incohérentes.
- Tout en dur dans des scripts Python (`get_quote.py`, `generate_chart.py`) :
ajouter une valeur = réécrire un script.
- 2 workflows N8N "Bourse" préexistants **cassés** (IDs dupliqués, données en dur,
faux endpoint WhatsApp).
- Graphe avec axe Y non-zéro → "variations géantes pour 5 cts".
- Modèle en variante Instruct (`reasoning:false`).
## 2. Nouvelle architecture
```
Toi (WhatsApp / GUI)
│ langage naturel ("ajoute Nvidia", "zoom variations")
▼
Agent OpenClaw (Qwen3-VL Thinking)
│ interprète → appelle le webhook (curl) ou édite bourse-config.json
▼
N8N workflow "Bourse — Graphe multi-tickers (v3)" [id 4bluZIeN3TnbzIrv]
│ fetch Yahoo (multi-tickers, range/interval), gère marché fermé
▼ renvoie un PNG (QuickChart, axe Y configurable)
Agent → affiche le PNG (WhatsApp / GUI)
```
**Principe : l'agent = interlocuteur, N8N = exécutant. Plus AUCUNE donnée éditée à la main.**
## 3. Le workflow N8N (source unique du graphe)
- **Nom :** `Bourse — Graphe multi-tickers (v3)`
- **ID :** `4bluZIeN3TnbzIrv` (actif)
- **Webhook :** `POST https://n8n.airtria.pro/webhook/bourse-graphe`
- **Nodes :** Webhook → Code "Fetch + Build QuickChart" → HTTP QuickChart → Respond (binary PNG)
- **Body JSON (tout optionnel) :**
- `tickers` : ex `["ORA.PA","TTE.PA","NVDA"]` (FR = suffixe `.PA`, US = sans suffixe)
- `range` : `1d|5d|1mo|3mo|6mo|1y` (def `5d`)
- `interval` : `15m|60m|1d` (def `60m`)
- `beginAtZero` : `true` (axe Y depuis 0) | `false` (zoom serré sur les variations, `grace:"5%"`)
- `title` : titre optionnel
- **Marché fermé / ticker invalide :** renvoie un PNG "Aucune donnée" (jamais de cours inventé).
- **Point technique clé :** QuickChart nécessite `version:"4"` (Chart.js v4) dans le
payload pour que `scales.y.min:0` / `beginAtZero` soient respectés. Sans ça l'axe
ne descend pas à 0.
Exemple :
```bash
curl -s -X POST "https://n8n.airtria.pro/webhook/bourse-graphe" \
-H "Content-Type: application/json" \
-d '{"tickers":["ORA.PA","TTE.PA"],"beginAtZero":true}' \
-o /home/node/.openclaw/workspace/charts/bourse.png
```
## 4. Fichiers / config modifiés
| Fichier | Changement |
|---|---|
| `workspace/bourse-config.json` | **NOUVEAU** : watchlist + défauts + aliases (source de vérité éditable par l'agent) |
| `workspace/AGENTS.md` | Section BOURSE réécrite (pilotage N8N), anciennes hard-constraints supprimées |
| `workspace/TOOLS.md` | Sections 3 et 6 réécrites (webhook N8N, scripts marqués obsolètes) |
| `openclaw.json` | `qwen3-vl` → `reasoning:true`, `maxTokens` 8192→16384, suppression entrée doublon `qwen3-vl-thinking` et ref orpheline `vllm/qwen3.6` |
| Crons (SQLite) | `orange-cloture` (40 17 * * 1-5) → appelle le webhook N8N + envoie PNG WhatsApp ; `orange-intraday`/`orange-ouverture`/`orange-chart-update` **désactivés** |
| N8N | 2 workflows bourse cassés supprimés (`rJswndMIRj7R7uQ6`, `w30bBJXQFgRV6RMB`) |
| Cache modèle (SQLite) | `agent_model_catalogs` + `model_capability_cache` purgés (entrées qwen3-vl périmées) → régénérés au restart |
**Archivé (récupérable) :** `workspace/_archive-bourse-20260624/`
(get_quote.py, generate_chart.py, clean_bourse_md.py, orange-bourse.md + backups, SVG/PNG de test).
**Backups DB :** `state/openclaw.sqlite.bak-pre-bourse-refonte-*`, `*-pre-catalog-purge-*`.
## 5. Modèle vLLM (Thinking)
- vLLM sert `Qwen/Qwen3-VL-30B-A3B-Thinking-FP8` sous `--served-model-name=qwen3-vl`
(nom inchangé → zéro reconfig réseau côté OpenClaw).
- Flags clés : `--reasoning-parser=qwen3`, `--enable-auto-tool-choice`,
`--tool-call-parser=hermes`, sampling `temp=0.6 top_p=0.95 top_k=20`.
- Côté OpenClaw : entrée `qwen3-vl` = `reasoning:true`, `maxTokens:16384`, `contextWindow:65536`.
- **GUI** expose un menu REASONING (Off/Minimal/Low/Medium/High). Défaut conseillé : **Medium**.
High pour conception/debug de workflows ; Low/Medium pour les graphes courants.
- Le mode Thinking est plus lent (~17-21 tok/s) mais plus juste sur le tool-calling.
- **Max tokens GUI** : monter le défaut de session de 800 → ~8192 (réglage côté navigateur,
pas de défaut serveur dans cette version).
## 6. Validations effectuées (tests réels)
- ORA seul, ORA+TTE, ORA+TTE+NVDA (1 mois) → PNG corrects, axe à 0.
- `beginAtZero:false` → zoom serré (ex ORA 16,65–17,10 €) : micro-variations visibles.
- Ticker invalide → PNG "Aucune donnée".
- Agent (Thinking) a appelé le webhook de façon autonome avec les bons tickers
(`ORA.PA`,`TTE.PA`) → exécution N8N `671723` ✅, livré WhatsApp + GUI.
- Après restart : sélecteur GUI propre (plus d'entrée fantôme), agent liste OK.
## 7. Reste à faire / vérifs
- [ ] Régler le max tokens GUI à ~8192 (navigateur).
- [ ] Tester "2 graphes séparés zoomés" (Orange / Total) → doit faire 2 appels `beginAtZero:false`.
- [ ] Surveiller le 1er cron `orange-cloture` réel (lenteur Thinking vs timeouts).
- [ ] Anthropic = **non cotée en bourse** (pas de ticker) — le dire si demandé.
- [ ] Si besoin, monter `OPENCLAW_CRON_JOB_TIMEOUT_MS` si le Thinking déborde.
## 8. Notes opérationnelles
- Modifier le comportement du graphe = éditer le node JS du workflow `4bluZIeN3TnbzIrv`
via MCP `n8n-mcp` ou l'API n8n (le tool MCP `update_workflow`/`activate` est buggé
sur cette version → préférer l'API REST n8n directe : `PUT /workflows/{id}` puis
`POST /workflows/{id}/activate`).
- Ne JAMAIS rééditer `orange-bourse.md` (mort, archivé).