Resultats Test — Ulias-Org v0.8.0
Date : 13/02/2026
Duree : ~3h
Plan : propositions/13-02-2026-14-00-plan-test-ulias-org.md
Resume executif
Le core flow fonctionne (message → routing → agent → tools → result → traduction FR) mais est severement limite par la performance LLM (Ollama qwen3:8b sur RTX 3090). Chaque appel LLM prend 30-60s et Ollama deadlock regulierement sous charge, bloquant tout le systeme.
Corrections appliquees pendant les tests
Fix 1: PostgREST UPDATE sans WHERE clause (CRITIQUE)
- Probleme :
dbUpdate() et dbDeleteTool() passaient les query params via le champ query de connectors-api, mais celui-ci les ignore pour PATCH/DELETE (seulement GET)
- Fix : Inline query params dans le path (
rest/v1/table?id=eq.xxx)
- Commit :
6f9a9e0, pipeline #1021 SUCCESS
- Fichier :
packages/server/src/tools/client.ts
Fix 2: Nettoyage 142 objectives zombies
- 142 objectives stuck en "pending" (jamais executees) → batch update en "failed" via PostgREST
Fix 3: Scheduler desactive temporairement
- Le scheduler (health_check 5min + disk_usage 1h) floodait la queue LLM
- Commit :
778d8a8 - ENABLE_SCHEDULER: "false", pipeline #1022 SUCCESS
- A REACTIVER apres resolution des problemes LLM
Phase 1 : Diagnostic — DONE
| Problem |
Cause |
Fix |
| 142 objectives en "pending" |
dbUpdate sans WHERE + LLM timeout + scheduler flood |
Fix code + nettoyage DB |
| PostgREST UPDATE sans WHERE (code 21000) |
connectors-api ignore query params pour non-GET |
Inline params dans path |
| Ollama deadlock |
Jobs accumules, VRAM saturee |
Restart Ollama |
| Scheduler flood |
3+ LLM calls/5min sans throttling |
Desactive temporairement |
Phase 2 : Endpoints REST — 6 PASS / 3 FAIL
API Key : ck_live_nu6kdBCw9uF6lLevRHMArCxaSpskioDi1fh2uSSK-fPE_ghB (cle connectors-api)
| Test |
Endpoint |
Resultat |
Note |
| 2.1 |
GET /health |
PASS |
v0.8.0, healthy |
| 2.2 |
GET /api/status |
PASS |
31 agents, 8 teams |
| 2.3 |
GET /api/teams |
PASS |
8 teams |
| 2.4 |
GET /api/agents |
PASS |
31 agents |
| 2.5 |
GET /api/capabilities |
PASS |
Reponse complete |
| 2.6 |
GET /api/objectives |
PASS |
50+ objectives |
| 2.7 |
GET /api/objectives/:id |
PASS |
Detail complet |
| 2.8 |
GET /api/objectives/active |
PASS |
Filtre ok |
| 2.9 |
GET /api/decisions |
PASS |
Vide (normal) |
| 2.10 |
GET /api/profile |
PASS |
Profil vide |
| 2.11 |
PUT /api/profile |
FAIL |
Colonne preferences inexistante dans ceo_profile |
| 2.12 |
GET /api/suggestions |
PASS |
Vide (profil vide) |
| 2.13 |
GET /api/scheduler/jobs |
PASS |
3 jobs |
| 2.14 |
GET /api/feedback/:agent |
PASS |
Stats vides |
| 2.15 |
POST /api/feedback |
FAIL |
user_id = "cklive" (tronque, pas UUID valide) |
| 2.16 |
GET /api/agents/:name |
FAIL |
404 - endpoint non implemente |
| 2.17 |
PATCH /api/agents/:name/prompt |
NON TESTE |
Endpoint probablement absent |
| 2.18 |
DELETE /api/agents/:name/prompt |
NON TESTE |
Endpoint probablement absent |
Bugs identifies Phase 2
- Profile PUT (2.11) : Table
ceo_profile Supabase n'a pas de colonne preferences. Le PUT tente d'ecrire un champ inexistant.
- Feedback POST (2.15) : Le
user_id est derive de apiKey.slice(0, 8) = "ck_live_" qui n'est pas un UUID valide. L'INSERT echoue avec invalid input syntax for type uuid.
- Agent GET (2.16) : L'endpoint
GET /api/agents/:name retourne 404. Non implemente.
Phase 3 : WebSocket & Flow principal — PASS (avec lenteur)
Test 3.1-3.2 : Connexion + Auth
- PASS : Connexion WS OK, auth avec apiKey OK
userId = "ck_live_" (tronque)
Test 3.3 : Message simple (docker ps)
- PASS : Flow complet objective_created → routing → thinking → tool_call → tool_result → complete → objective_completed
- Temps total : ~210s
Timings detailles
| Etape |
Temps |
Note |
| Auth |
0s |
OK |
| Objective created |
0.2s |
OK |
| Routing |
30.7s |
LLM routing timeout 30s → fallback keywords |
| Thinking iter 1 |
33.4s |
Agent demarre |
| Tool call (dockerPs) |
62.9s |
~30s pour 1er appel LLM agent |
| Tool result |
63.9s |
Docker PS execute en 1s |
| Thinking iter 2 |
63.9s |
OK |
| Complete (output) |
120.9s |
~57s pour 2eme appel LLM |
| Translation |
~170s |
~50s pour traduire en FR |
| Objective completed |
~210s |
Total |
Problemes constates
- LLM routing TOUJOURS en fallback : Le timeout de 30s est trop court pour la premiere inference (model loading). Meme avec le modele charge, le routing LLM prend souvent >30s.
- Chaque appel LLM agent : 30-60s : qwen3:8b avec tools+context prend 30-60s par iteration sur RTX 3090.
- Traduction ajoute ~50s : Un 3eme appel LLM pour traduire.
- Total ~3.5 min pour une question simple : Trop lent pour un usage interactif.
Phase 4 : Test par agent — 3 PASS / 2 FAIL
| Test |
Agent demande |
Agent route |
Resultat |
Temps |
| 4.1 monitor |
monitor |
monitor |
PASS |
~210s |
| 4.2 explorer |
explorer |
explorer |
PASS |
113s |
| 4.4 infra |
infra |
explorer |
PASS |
91s |
| 4.5 coder |
coder |
gitlab-dev |
FAIL |
80s |
| 4.6 auditor |
auditor |
explorer |
FAIL |
128s (timeout) |
Observations Phase 4
- Keyword routing imprecis : Presque tout est route vers
explorer/research. Le fallback par mots-cles ne distingue pas bien les agents.
- gitlab-dev agent : Erreur sur tentative d'acces au bare repo git.
- Timeouts frequents : La 2eme ou 3eme iteration LLM timeout souvent.
Phase 5 : Scheduler — DESACTIVE (non teste)
Le scheduler a ete desactive pour permettre les tests. A reactiver apres ameliorations LLM.
Constat initial : Le scheduler creait des objectives toutes les 5 min (health_check) et 1h (disk_usage) qui generaient chacune 3+ appels LLM, saturant la queue et causant des deadlocks Ollama.
Phases 6-8 : NON TESTEES
Non testees faute de temps et a cause des problemes de performance LLM qui rendent les tests interactifs tres lents.
Problemes racines identifies
1. Performance LLM insuffisante (CRITIQUE)
- qwen3:8b avec tools sur RTX 3090 : 30-60s par appel
- 3 appels minimum par message (routing + agent + traduction) = 1.5-3 min
- OLLAMA_NUM_PARALLEL=5 mais les requetes concurrentes se partagent la VRAM
- Ollama deadlock sous charge : crash/freeze apres accumulation de jobs concurrents
2. Routing LLM timeout trop court (30s)
- Le routing LLM (interpreter) a un timeout de 30s
- Premiere inference apres loading model : souvent >30s
- Resultat : TOUJOURS fallback sur keyword routing (confidence 0.6)
- Le routing par keywords est imprecis (presque tout → explorer)
3. userId invalide
apiKey.slice(0,8) = "ck_live_" n'est pas un UUID
- Casse les INSERT/UPDATE sur tables avec
user_id uuid
- Feedback POST et potentiellement d'autres operations
4. Schema DB incomplet
- Table
ceo_profile : colonne preferences manquante
- Endpoints de gestion prompts non implementes (404)
5. Ollama instabilite
- Deux instances (GPU0 port 11434, GPU1 port 11435)
- GPU1 (RTX 2070S, 8GB) ne peut pas charger qwen3:8b (11GB VRAM) completement
- Jobs envoyes a ollama-gpu1 echouent ou bloquent
- Ollama freeze/crash sous charge concurrente
Recommandations (par priorite)
HAUTE - Performance LLM
- Desactiver ollama-gpu1 dans l'orchestrateur (RTX 2070S trop petite pour qwen3:8b)
- Reduire OLLAMA_NUM_PARALLEL a 1-2 pour eviter les deadlocks
- Augmenter le routing timeout a 90s ou pre-charger le modele
- Envisager un modele plus petit pour le routing (qwen3:4b suffirait)
- Ajouter un circuit breaker dans ulias-org pour ne pas accumuler les jobs LLM
HAUTE - Bugs code
- Fixer le userId : utiliser l'UUID user de connectors-api au lieu de apiKey.slice(0,8)
- Ajouter colonne
preferences dans ceo_profile Supabase
- Implementer les endpoints prompts (GET/PATCH/DELETE agent prompt)
MOYENNE - Scheduler
- Ajouter un guard "skip if busy" : ne pas creer de nouvel objectif si le precedent du meme job est encore in_progress
- Augmenter l'intervalle health_check de 5min a 15-30min
- Reactiver une fois les problemes LLM resolus
BASSE - UX
- Optimiser les appels LLM : skip la traduction si le profil est en anglais ou si la reponse est deja en FR
- Streaming : renvoyer les events plus granulaires (tokens) pour feedback utilisateur
- Cache LLM : cache le routing pour les questions similaires
Ce qui fonctionne bien
- Architecture globale saine (Elysia + WS + Director + Agents + Tools)
- Intergation connectors-api OK (SSH, Docker, Supabase)
- Events WS temps reel OK (objective_created, routing, thinking, tool_call, tool_result, complete)
- Traduction FR fonctionne (quand le LLM repond)
- DB persistence OK (objectives tracees correctement)
- Correction dbUpdate/dbDelete fonctionne (objectives passent par le cycle complet)
- 15 endpoints REST fonctionnels sur 18
Actions a ne pas oublier
- [ ] Reactiver le scheduler (
ENABLE_SCHEDULER: "true" dans conf.prod.gouroubleu.yml) apres fix perf LLM
- [ ] Supprimer la scheduled task
OllamaServe sur win11 : schtasks /Delete /TN OllamaServe /F
- [ ] Nettoyer les jobs "generating" orphelins dans l'orchestrateur