brain-sync 16:09

This commit is contained in:
Yanis Mahboub
2026-04-16 16:09:59 +02:00
parent ab51372da1
commit b96b51f68b
13 changed files with 5964 additions and 271 deletions

22
blade-finetune-task.json Normal file
View File

@@ -0,0 +1,22 @@
{
"task": "kaggle_finetune",
"type": "selenium",
"priority": "high",
"steps": [
"1. Open Chrome → kaggle.com\/notebooks",
"2. Login yacineutt@gmail.com",
"3. Create new notebook 'weval-brain-v4-finetune'",
"4. Upload weval-finetune-data.jsonl (4440 samples)",
"5. Paste kaggle-finetune.py content",
"6. Enable GPU T4",
"7. Run all cells",
"8. Wait for training (~2h on T4)",
"9. Download weval-brain-v4-final model",
"10. Notify via Telegram"
],
"files": [
"\/opt\/wevia-brain\/weval-finetune-data.jsonl",
"\/opt\/wevia-brain\/kaggle-finetune.py"
],
"created": "2026-04-16T00:52:11+00:00"
}

31
kaggle-finetune.py Normal file
View File

@@ -0,0 +1,31 @@
#!/usr/bin/env python3
"""WEVAL Brain Fine-Tune — Run on Kaggle T4 GPU (30h/week free)"""
# pip install trl transformers datasets peft bitsandbytes
from trl import SFTTrainer, SFTConfig
from transformers import AutoModelForCausalLM, AutoTokenizer
from datasets import load_dataset
import torch
MODEL = "Qwen/Qwen2.5-3B-Instruct" # Small enough for T4 16GB
DATA = "weval-finetune-data.jsonl"
tok = AutoTokenizer.from_pretrained(MODEL)
mdl = AutoModelForCausalLM.from_pretrained(MODEL, torch_dtype=torch.float16, device_map="auto")
ds = load_dataset("json", data_files=DATA, split="train")
cfg = SFTConfig(
output_dir="./weval-brain-v4",
num_train_epochs=3,
per_device_train_batch_size=2,
gradient_accumulation_steps=4,
learning_rate=2e-5,
max_seq_length=1024,
logging_steps=10,
save_steps=50,
fp16=True,
)
trainer = SFTTrainer(model=mdl, args=cfg, train_dataset=ds, tokenizer=tok)
trainer.train()
trainer.save_model("./weval-brain-v4-final")
print("DONE — upload to HF: huggingface-cli upload yace222/weval-brain-v4 ./weval-brain-v4-final")

206
priority-intents-nl.json Normal file
View File

@@ -0,0 +1,206 @@
[
{
"name": "zxqtest",
"triggers": "zxqtest",
"command": "echo bonjour",
"static": false
},
{
"name": "xcode_diag",
"triggers": "xcode",
"command": "ls -la \/var\/log\/nginx\/code* \/etc\/nginx\/sites-enabled\/code* 2>&1 ; echo === VHOST === ; cat \/etc\/nginx\/sites-enabled\/code.weval-consulting.com 2>&1 ; echo === LAST ERR === ; grep -i code \/var\/log\/nginx\/error.log 2>&1 | tail -30",
"static": false
},
{
"name": "xcode_vhost",
"triggers": "xvhost",
"command": "cat \/etc\/nginx\/sites-enabled\/code-weval",
"static": false
},
{
"name": "p3900check",
"triggers": "p3900",
"command": "bash -c ss-tlnp-3900",
"static": false
},
{
"name": "gptconfig",
"triggers": "gptconfig",
"command": "find \/opt\/claw-code -maxdepth 4 -name *.yaml -o -name .gptr.*.yaml 2>\/dev\/null",
"static": false
},
{
"name": "gptcwd",
"triggers": "gptcwd",
"command": "sudo readlink \/proc\/2742182\/cwd ; sudo cat \/proc\/2742182\/environ | tr -d \\000 | grep -iE OPENAI_BASE_URL",
"static": false
},
{
"name": "gptenv",
"triggers": "gptenv",
"command": "sudo strings \/proc\/2742182\/environ | grep -iE OPENAI",
"static": false
},
{
"name": "wvia_route",
"triggers": "wvroute",
"command": "grep -n weval-ia \/etc\/nginx\/sites-enabled\/weval-consulting",
"static": false
},
{
"name": "golds_nginx",
"triggers": "ngolds",
"command": "ls -lat \/opt\/wevads\/vault\/GOLD*nginx*weval* 2>\/dev\/null ; ls -lat \/etc\/nginx\/sites-enabled\/weval-consulting* 2>\/dev\/null | head -5",
"static": false
},
{
"name": "ngctx",
"triggers": "ngctx",
"command": "sed -n 150,175p \/etc\/nginx\/sites-enabled\/weval-consulting",
"static": false
},
{
"name": "ngbk",
"triggers": "ngbk",
"command": "find \/ -maxdepth 6 -name weval-consulting.bak -o -name weval-consulting.gold -o -name weval-consulting.backup 2>\/dev\/null ; ls -lat \/etc\/nginx\/sites-available\/*.bak 2>\/dev\/null",
"static": false
},
{
"name": "ngxscan",
"triggers": "ngxscan",
"command": "grep -n weval-ia \/etc\/nginx\/sites-enabled\/weval-consulting",
"static": false
},
{
"name": "ngxblk",
"triggers": "ngxblk",
"command": "sed -n 158,172p \/etc\/nginx\/sites-enabled\/weval-consulting",
"static": false
},
{
"name": "ngxtest",
"triggers": "ngxtest",
"command": "sudo nginx -t ; echo === RELOAD === ; sudo systemctl reload nginx ; echo ok ; echo === CURL === ; curl -sk https:\/\/weval-consulting.com\/api\/weval-ia -o \/tmp\/test.txt ; head -c 200 \/tmp\/test.txt",
"static": false
},
{
"name": "capsfind",
"triggers": "capsfind",
"command": "grep -n -B1 -A5 Caps10 \/opt\/weval-nonreg\/nonreg-master.py",
"static": false
},
{
"name": "capshealth",
"triggers": "capshealth",
"command": "curl -sk https:\/\/weval-consulting.com\/api\/wevia-capabilities.php?cap=health",
"static": false
},
{
"name": "lokichk",
"triggers": "lokichk",
"command": "ss -tlnp 2>&1 | grep -E :3100 ; echo === DOCKER === ; docker ps -a 2>&1 | grep -i loki ; echo === SYSTEMD === ; systemctl list-units 2>&1 | grep -i loki",
"static": false
},
{
"name": "pwchk",
"triggers": "pwchk",
"command": "ls \/opt\/playwright-visual\/ 2>&1 | head -20",
"static": false
},
{
"name": "gitloc",
"triggers": "gitloc",
"command": "cd \/var\/www\/html && git remote -v 2>&1 | head -5 ; echo === BRANCH === ; git branch 2>&1 | head -3 ; echo === STATUS === ; git status 2>&1 | head -10",
"static": false
},
{
"name": "gitlog",
"triggers": "gitlog",
"command": "cd \/var\/www\/html && git log --oneline -10",
"static": false
},
{
"name": "gitpush",
"triggers": "gitpush",
"command": "cd \/var\/www\/html && git add -A && git commit -m doctrine-fix-autowire-cascade-priority-v4-v5-v6 -m opus-intervention-autonomy-WEVIA-Master 2>&1 | tail -3 ; echo === PUSH === ; git push gitea main 2>&1 | tail -5 ; echo === ORIGIN === ; git push origin main 2>&1 | tail -5",
"static": false
},
{
"name": "verifyfp",
"triggers": "verifyfp",
"command": "grep -c NL-AUTOWIRE.PRIORITY \/var\/www\/html\/api\/wevia-fast-path-v3.php ; grep -c sovereign.cascade.cascade \/var\/www\/html\/api\/wevia-fast-path-v3.php ; ls -la \/opt\/wevia-brain\/priority-intents-nl.json",
"static": false
},
{
"name": "ajoute_nouvel_intent_wikiloc",
"triggers": "wikiloc",
"command": "ls \/var\/www\/weval\/wiki\/ 2>\/dev\/null | head -10 ; echo === VAULT === ; ls \/var\/www\/html\/vault\/ 2>\/dev\/null | head -10 ; ls \/var\/www\/weval\/vault\/ 2>\/dev\/null | head -10",
"static": false
},
{
"name": "screensloc",
"triggers": "screensloc",
"command": "ls \/var\/www\/html\/architecture*.html \/var\/www\/html\/agents-archi*.html \/var\/www\/html\/security*.html \/var\/www\/html\/wevia-master.html 2>&1 | head -15",
"static": false
},
{
"name": "buginvest",
"triggers": "buginvest",
"command": "tail -n 20 \/var\/log\/nginx\/error.log",
"static": false
},
{
"name": "gptmodels",
"triggers": "gptmodels",
"command": "curl -sk http:\/\/127.0.0.1:4000\/v1\/models",
"static": false
},
{
"name": "sovloc",
"triggers": "sovloc",
"command": "ls \/opt\/sovereign-api\/ 2>&1 | head -10",
"static": false
},
{
"name": "sovmodels",
"triggers": "sovmodels",
"command": "grep -n -A5 v1.models \/opt\/sovereign-api\/sovereign-api.py",
"static": false
},
{
"name": "xopusinrt",
"triggers": "xopusinrt",
"command": "ls -la \/var\/www\/html\/api\/wevia-opus-intents.php ; echo === HEAD === ; head -50 \/var\/www\/html\/api\/wevia-opus-intents.php",
"static": false
},
{
"name": "xwireck",
"triggers": "xwireck",
"command": "grep -n wevia-opus-intents \/var\/www\/html\/api\/wevia-master-api.php",
"static": false
},
{
"name": "xnrfresh",
"triggers": "xnrfresh",
"command": "nohup sudo python3 \/opt\/weval-nonreg\/nonreg-master.py > \/tmp\/nrf.log 2>&1",
"static": false
},
{
"name": "xlokiport",
"triggers": "xlokiport",
"command": "docker ps 2>&1 | grep loki ; echo === PORTS === ; docker port loki 2>&1 ; echo === HEALTH === ; docker inspect loki 2>&1 | grep -E HealthLog | head -5 ; echo === CURL 3100 === ; curl -sk http:\/\/127.0.0.1:3100\/ready 2>&1 | head -c 200",
"static": false
},
{
"name": "xcapssrc",
"triggers": "xcapssrc",
"command": "grep -n -A1 loki \/var\/www\/html\/api\/wevia-capabilities.php",
"static": false
},
{
"name": "xlokiports",
"triggers": "xlokiports",
"command": "curl -sk http:\/\/localhost:3100\/ready 2>&1 | head -c 50 ; echo \"|\" ; curl -sk http:\/\/localhost:3110\/ready 2>&1 | head -c 50 ; echo \"|\" ; ss -tlnp 2>&1 | grep -E \":3100|:3110\"",
"static": false
}
]

View File

@@ -1,122 +0,0 @@
# WEVIA OPUS PDF GENERATOR — System Prompt v1.0
Tu es un expert en génération de documents structurés. Ta SEULE mission : transformer la demande utilisateur en un document JSON structuré de qualité consulting McKinsey.
## RÈGLE ABSOLUE
Tu réponds UNIQUEMENT en JSON valide. Pas de texte avant, pas de texte après, pas de ```json. JUSTE le JSON.
## STRUCTURE JSON REQUISE
```json
{
"title": "Titre du document (court, impactant)",
"subtitle": "Sous-titre contextuel",
"executive_summary": "Résumé exécutif de 5-8 phrases. Direct, factuel, actionable. MINIMUM 100 mots.",
"sections": [
{
"type": "section",
"title": "Titre de section",
"content": "Contenu riche, 3-6 paragraphes. Chiffres précis, exemples concrets. MINIMUM 250 mots par section. Utilise des noms réels, chiffres sourcés, et exemples concrets."
},
{
"type": "table",
"title": "Titre du tableau",
"headers": ["Col1", "Col2", "Col3", "Col4", "Col5"],
"rows": [["val1", "val2", "val3", "val4", "val5"], ["...6 lignes minimum..."]]
},
{
"type": "kpi",
"items": [
{"label": "Metric 1", "value": "42%", "trend": "up"},
{"label": "Metric 2", "value": "€1.2M", "trend": "stable"},
{"label": "Metric 3", "value": "15j", "trend": "down"},
{"label": "Metric 4", "value": "99%", "trend": "up"}
]
},
{
"type": "comparison",
"title": "Comparaison",
"options": ["Option A", "Option B", "Option C"],
"criteria": [
{"name": "Coût", "scores": [8, 6, 7]},
{"name": "Qualité", "scores": [7, 9, 6]},
{"name": "Scalabilité", "scores": [9, 5, 8]},
{"name": "Support", "scores": [6, 8, 7]},
{"name": "Intégration", "scores": [8, 7, 9]}
]
},
{
"type": "swot",
"strengths": ["Force 1 détaillée", "Force 2", "Force 3"],
"weaknesses": ["Faiblesse 1", "Faiblesse 2", "Faiblesse 3"],
"opportunities": ["Opportunité 1", "Opportunité 2", "Opportunité 3"],
"threats": ["Menace 1", "Menace 2", "Menace 3"]
},
{
"type": "timeline",
"phases": [
{"name": "Phase 1: Cadrage", "duration": "2-4 semaines"},
{"name": "Phase 2: POC", "duration": "4-6 semaines"},
{"name": "Phase 3: Déploiement", "duration": "8-12 semaines"},
{"name": "Phase 4: Optimisation", "duration": "4 semaines"}
]
},
{
"type": "risk_matrix",
"risks": [
{"name": "Risque technique", "probability": 3, "impact": 4, "mitigation": "Plan détaillé en 2-3 phrases"},
{"name": "Risque organisationnel", "probability": 4, "impact": 3, "mitigation": "Actions correctives"},
{"name": "Risque budgétaire", "probability": 2, "impact": 5, "mitigation": "Mesures de contrôle"},
{"name": "Risque calendaire", "probability": 3, "impact": 3, "mitigation": "Planification buffer"}
]
},
{
"type": "recommendations",
"items": [
{"phase": "Court terme", "title": "Action prioritaire", "content": "Description détaillée de 50+ mots"},
{"phase": "Moyen terme", "title": "Action structurante", "content": "Description détaillée"},
{"phase": "Long terme", "title": "Vision stratégique", "content": "Description détaillée"}
]
},
{
"type": "callout",
"text": "Message clé ou avertissement important",
"style": "warning"
},
{
"type": "quote",
"text": "Citation pertinente d'un expert du domaine",
"author": "Nom, Titre, Organisation"
},
{
"type": "metrics",
"items": [
{"label": "ROI", "value": "340%", "color": "green"},
{"label": "Délai", "value": "6 mois", "color": "cyan"}
]
}
],
"sources": ["Gartner 2024", "Forrester Wave Q3 2024", "IDC MarketScape", "Rapport sectoriel"]
}
```
## QUALITÉ EXIGÉE
- MINIMUM 14 sections variées par document (objectif 8-12 pages PDF)
- UTILISE au moins 6 types différents (section, table, kpi, comparison, swot, timeline, risk_matrix, recommendations, callout, bullet_list, quote)
- Chaque section type "section" : MINIMUM 250 mots, 4-5 paragraphes, données chiffrées et sourcées
- Les tableaux : MINIMUM 4 colonnes et 8 lignes de VRAIES données (noms réels de produits/fournisseurs)
- Comparaisons : MINIMUM 6 critères avec scores chiffrés
- Utilise des noms RÉELS d'acteurs du marché (pas "Option A")
- Les chiffres doivent être RÉALISTES et contextuels
- Sources RÉELLES et vérifiables
- FRANÇAIS impeccable avec accents
## ANTI-PATTERNS (STRICTEMENT INTERDIT — VIOLATION = DOCUMENT REJETÉ)
- Placeholder "..." ou "à compléter" ou "Source 1" ou "Description détaillée" ou "50+ mots"
- Sections vides ou avec moins de 3 phrases complètes
- Tableaux à moins de 6 lignes de données
- Noms génériques "WMS A", "Option A", "Expert en logistique", "John Doe", "Jean Dupont"
- Recommendations avec "Description détaillée" au lieu de VRAI contenu actionnable avec budget+délai
- Répétition de la même structure de section
- Contenu générique sans valeur ajoutée ni chiffres
- Sources inventées — utiliser Gartner, Forrester, IDC, McKinsey avec années réelles

View File

@@ -1,77 +0,0 @@
<?php
/**
* S88 Brain Hook — Wire class modules into weval-chatbot-api.php
* Include this AFTER cognitive-brain.php in the main API
*
* Usage in weval-chatbot-api.php:
* require_once "/opt/wevia-brain/s88-brain-hook.php";
*/
// Initialize singletons (lazy — only created when first used)
$_brainModules = [];
function getBrainModule(string $class): ?object {
global $_brainModules;
if (!isset($_brainModules[$class])) {
if (!class_exists($class)) return null;
try {
$_brainModules[$class] = new $class('http://127.0.0.1:11434');
} catch (Exception $e) {
error_log("WEVIA_BRAIN_MODULE_ERR: $class — " . $e->getMessage());
return null;
}
}
return $_brainModules[$class];
}
/**
* Run metacognitive analysis on a query
* Returns: strategy recommendation + confidence calibration
*/
function brainMetacognize(string $message, string $intent): array {
$meta = getBrainModule('MetacognitionEngine');
if (!$meta) return ['strategy' => 'default', 'confidence' => 0.5];
try {
return $meta->analyze($message, $intent);
} catch (Exception $e) { return ['strategy' => 'default', 'confidence' => 0.5]; }
}
/**
* Optimize context window allocation
*/
function brainOptimizeContext(string $sys, string $msg, array $history, string $kbContext): string {
$ctx = getBrainModule('ContextManager');
if (!$ctx) return $sys;
try {
return $ctx->optimize($sys, $msg, $history, $kbContext);
} catch (Exception $e) { return $sys; }
}
/**
* Format output optimally
*/
function brainFormatOutput(string $response): string {
$fmt = getBrainModule('OutputFormatter');
if (!$fmt) return $response;
try {
return $fmt->format($response);
} catch (Exception $e) { return $response; }
}
/**
* Smart error recovery
*/
function brainRecoverError(string $error, string $context): ?string {
$err = getBrainModule('ErrorTaxonomy');
if (!$err) return null;
try {
$classified = $err->classify($error);
return $err->suggestRecovery($classified, $context);
} catch (Exception $e) { return null; }
}
function loadJsonKB() {
= ["cloud"=>"cloud-computing-kb.json","ia"=>"ai-architecture-kb.json","sap"=>"sap-expertise-kb.json","cyber"=>"cybersecurity-kb.json","data"=>"data-science-kb.json","devops"=>"devops-infra-kb.json","email"=>"email-marketing-deep-kb.json","maroc"=>"maghreb-market-kb.json","business"=>"business-strategy-kb.json","weval"=>"weval-core-kb.json"];
= ""; = mb_strtolower();
foreach( as => ) { if(strpos(, ) !== false) { = "/opt/wevia-brain/knowledge/" . ; if(file_exists()) .= file_get_contents() . "\n"; } }
return ;
}

View File

@@ -1,71 +0,0 @@
<?php
/**
* S88 Brain Hook — Wire class modules into weval-chatbot-api.php
* Include this AFTER cognitive-brain.php in the main API
*
* Usage in weval-chatbot-api.php:
* require_once "/opt/wevia-brain/s88-brain-hook.php";
*/
// Initialize singletons (lazy — only created when first used)
$_brainModules = [];
function getBrainModule(string $class): ?object {
global $_brainModules;
if (!isset($_brainModules[$class])) {
if (!class_exists($class)) return null;
try {
$_brainModules[$class] = new $class();
} catch (\Throwable $e) {
error_log("WEVIA_BRAIN_MODULE_ERR: $class — " . $e->getMessage());
return null;
}
}
return $_brainModules[$class];
}
/**
* Run metacognitive analysis on a query
* Returns: strategy recommendation + confidence calibration
*/
function brainMetacognize(string $message, string $intent): array {
$meta = getBrainModule('MetacognitionEngine');
if (!$meta) return ['strategy' => 'default', 'confidence' => 0.5];
try {
return $meta->analyze($message, $intent);
} catch (\Throwable $e) { return ['strategy' => 'default', 'confidence' => 0.5]; }
}
/**
* Optimize context window allocation
*/
function brainOptimizeContext(string $sys, string $msg, array $history, string $kbContext): string {
$ctx = getBrainModule('ContextManager');
if (!$ctx) return $sys;
try {
return $ctx->optimize($sys, $msg, $history, $kbContext);
} catch (\Throwable $e) { return $sys; }
}
/**
* Format output optimally
*/
function brainFormatOutput(string $response): string {
$fmt = getBrainModule('OutputFormatter');
if (!$fmt) return $response;
try {
return $fmt->format($response);
} catch (\Throwable $e) { return $response; }
}
/**
* Smart error recovery
*/
function brainRecoverError(string $error, string $context): ?string {
$err = getBrainModule('ErrorTaxonomy');
if (!$err) return null;
try {
$classified = $err->classify($error);
return $err->suggestRecovery($classified, $context);
} catch (\Throwable $e) { return null; }
}

View File

@@ -0,0 +1,13 @@
{
"options": [
"HuggingFace Spaces (T4 free 2h/day)",
"Kaggle (T4x2 30h/week)",
"Colab (T4 free)",
"Ollama S204 (CPU)"
],
"recommended": "Kaggle T4 for training + HF Spaces for inference + Ollama for sovereign",
"plan": [
"Train Kaggle\u2192Upload HF\u2192GGUF convert\u2192Ollama import\u2192Wire cascade"
],
"cost": "0 EUR"
}

View File

@@ -0,0 +1,50 @@
{
"current_state": {
"sovereign_ratio": "86%",
"cloud_providers": [
"Cerebras",
"Groq",
"NVIDIA",
"Gemini",
"SambaNova",
"Mistral",
"HF",
"OpenRouter"
],
"sovereign_providers": [
"Ollama weval-brain-v3",
"Ollama qwen3:4b",
"Ollama nomic-embed",
"Ollama all-minilm",
"SearXNG",
"Qdrant"
]
},
"target": "95% souverain après fine-tune v4",
"reduction_plan": {
"phase1_now": [
"Ollama weval-brain-v3 en fallback #1 (pas cloud)",
"SearXNG pour toute recherche web",
"Qdrant RAG pour knowledge interne",
"Nomic-embed pour tous les embeddings"
],
"phase2_after_finetune": [
"weval-brain-v4 (fine-tuned 4816 samples) = PRIMARY pour toutes les questions WEVAL",
"Cloud = fallback UNIQUEMENT si local timeout",
"AirLLM pour charger Qwen3-72B offline (benchmark, evaluation)"
],
"phase3_full_sovereign": [
"HuggingFace Space (T4 gratuit 2h/jour) pour inference API publique",
"Kaggle GPU (30h/semaine) pour training continu",
"SGLang remplace Ollama (speculative decoding, prefix cache, 3x faster)",
"TurboQuant quand dispo dans llama.cpp (6x RAM reduction)"
]
},
"airllm_role": [
"Use case: charger Qwen3-72B sur S204 32GB RAM (CPU)",
"Latence: ~60s/query (batch only, pas temps réel)",
"Utile pour: benchmark, evaluation, generation données fine-tune",
"PAS pour: chat temps réel (trop lent)",
"Alternative: SGLang avec speculative decoding = 5-10s"
]
}

577
tools-catalog.json Normal file
View File

@@ -0,0 +1,577 @@
{
"groq": {
"type": "provider",
"desc": "LLM #1 llama-3.3-70b <100ms",
"api": "api.groq.com",
"status": "ON"
},
"cerebras": {
"type": "provider",
"desc": "LLM #2 qwen-3-235b ultra-fast",
"api": "api.cerebras.ai",
"status": "ON"
},
"mistral": {
"type": "provider",
"desc": "LLM europeen souverain",
"api": "api.mistral.ai",
"status": "ON"
},
"sambanova": {
"type": "provider",
"desc": "DeepSeek-V3.1",
"api": "api.sambanova.ai",
"status": "ON"
},
"gemini": {
"type": "provider",
"desc": "Gemini 3.1 Flash",
"api": "ai.google.dev",
"status": "ON"
},
"deepseek": {
"type": "provider",
"desc": "V3.1 reasoning",
"api": "api.deepseek.com",
"status": "ON"
},
"nvidia-glm5": {
"type": "provider",
"desc": "Blade Brain GPU",
"api": "nvapi",
"status": "ON"
},
"openrouter": {
"type": "provider",
"desc": "Multi-model router",
"api": "openrouter.ai",
"status": "ON"
},
"claude-opus": {
"type": "model",
"desc": "Opus 4.6 orchestrateur",
"status": "ON"
},
"claude-sonnet": {
"type": "model",
"desc": "Sonnet 4.6 coding rapide",
"status": "ON"
},
"claude-haiku": {
"type": "model",
"desc": "Haiku 4.5 classification",
"status": "ON"
},
"claude-code": {
"type": "tool",
"desc": "CLI agent v2.1.89 Paperclip CEO",
"path": "/opt/claude-code",
"status": "ON"
},
"claude-code-source": {
"type": "oss",
"desc": "512K lignes Python port",
"path": "/opt/claude-code-source",
"status": "ON"
},
"claw-code": {
"type": "oss",
"desc": "Port Rust Claude Code",
"path": "/opt/claw-code",
"status": "ON"
},
"ollama": {
"type": "local",
"desc": "5 models CPU 11434",
"api": "127.0.0.1:11434",
"status": "ON"
},
"oh-my-claudecode": {
"type": "skills",
"desc": "19 agents 28 skills Teams",
"path": "/opt/oh-my-claudecode",
"count": 47,
"status": "ON"
},
"superclaude": {
"type": "skills",
"desc": "30 commandes personas cognitives",
"path": "/opt/SuperClaude_Framework",
"count": 30,
"status": "ON"
},
"everything-claude": {
"type": "skills",
"desc": "AgentShield 420 skills 1282 tests",
"path": "/opt/everything-claude-code",
"count": 420,
"status": "ON"
},
"antigravity": {
"type": "skills",
"desc": "4198 SKILL.md multi-platform",
"path": "/opt/antigravity-awesome-skills",
"count": 4198,
"status": "ON"
},
"huggingface-skills": {
"type": "skills",
"desc": "12 skills TRL datasets Spaces",
"path": "/opt/hf-skills",
"count": 12,
"status": "ON"
},
"voltagent": {
"type": "skills",
"desc": "1000+ agent skills communautaires",
"path": "/opt/voltagent",
"count": 1000,
"status": "ON"
},
"awesome-claude": {
"type": "skills",
"desc": "135 agents 42 commands 150+ plugins",
"path": "/opt/awesome-claude-toolkit",
"count": 327,
"status": "ON"
},
"claude-mem": {
"type": "skills",
"desc": "Memoire persistante cross-sessions",
"path": "/opt/claude-mem",
"status": "ON"
},
"skillsmith": {
"type": "skills",
"desc": "Generateur auto de skills",
"path": "/opt/skills",
"status": "ON"
},
"wevia-brain": {
"type": "product",
"desc": "Moteur IA 6152L 421 patterns",
"api": "/api/wevia-master-api.php",
"status": "ON"
},
"wevcode": {
"type": "product",
"desc": "Code Assistant 4 modes",
"api": "/api/wevcode-superclaude.php",
"page": "/wevcode.html",
"status": "ON"
},
"wedroid": {
"type": "product",
"desc": "Backend diag+fix 8 APIs",
"api": "/api/wedroid-brain-api.php",
"status": "ON"
},
"wevia-public": {
"type": "product",
"desc": "Widget+Centre Commande 71 modules",
"page": "/wevia.html",
"status": "ON"
},
"blade-ia": {
"type": "product",
"desc": "Agent Razer 34 caps Sentinel",
"api": "/api/blade-agent.php",
"status": "ON"
},
"wevads-ia": {
"type": "product",
"desc": "SPA 36p 49 APIs email intelligence",
"page": "/wevads-ia/index.html",
"status": "ON"
},
"ethica": {
"type": "product",
"desc": "141K HCPs DZ/MA/TN pharma",
"api": "/api/ethica-stats-api.php",
"status": "ON"
},
"crm": {
"type": "product",
"desc": "7 tables deals PDF sequences",
"page": "/crm.html",
"status": "ON"
},
"nonreg": {
"type": "product",
"desc": "152/152 tests 13 couches",
"api": "/api/nonreg-api.php",
"status": "ON"
},
"l99": {
"type": "product",
"desc": "177 pages 1236 wiki",
"api": "/api/l99-api.php",
"status": "ON"
},
"powertoys": {
"type": "product",
"desc": "QR DNS WHOIS SSL Hash AES GeoIP",
"page": "/powertoys.html",
"status": "ON"
},
"lyria3": {
"type": "product",
"desc": "Generation musique IA Gemini",
"status": "PENDING"
},
"paperclip": {
"type": "oss",
"desc": "CEO Agent 890 agents",
"api": "/api/paperclip-ceo.php",
"status": "ON"
},
"mirofish": {
"type": "oss",
"desc": "Outil collaboratif IA",
"port": "3050",
"status": "ON"
},
"deerflow": {
"type": "oss",
"desc": "828 skills research",
"port": "8902",
"path": "/opt/deer-flow",
"status": "ON"
},
"openclaw": {
"type": "oss",
"desc": "AI Gateway Council",
"api": "/api/openclaw-proxy.php",
"status": "ON"
},
"searxng": {
"type": "oss",
"desc": "Meta-search souverain",
"port": "8888",
"status": "ON"
},
"n8n": {
"type": "oss",
"desc": "Workflow automation 5 workflows",
"port": "5678",
"status": "ON"
},
"qdrant": {
"type": "oss",
"desc": "Vector DB 7 collections 294 pts",
"port": "6333",
"status": "ON"
},
"playwright": {
"type": "oss",
"desc": "E2E testing 16/16 pass",
"status": "ON"
},
"activepieces": {
"type": "oss",
"desc": "Workflow automation alt",
"path": "/opt/activepieces",
"status": "ON"
},
"mastra": {
"type": "oss",
"desc": "Framework agents TS",
"path": "/opt/mastra",
"status": "ON"
},
"dify": {
"type": "oss",
"desc": "LLM app platform",
"path": "/opt/dify",
"status": "ON"
},
"goose": {
"type": "oss",
"desc": "Agent IA Block",
"path": "/opt/goose",
"status": "ON"
},
"browser-use": {
"type": "oss",
"desc": "Agent navigateur web",
"path": "/opt/browser-use",
"status": "ON"
},
"supermemory": {
"type": "oss",
"desc": "Memoire IA persistante",
"path": "/opt/supermemory",
"status": "ON"
},
"evomaster": {
"type": "oss",
"desc": "Test REST/GraphQL auto",
"path": "/opt/evomaster",
"status": "ON"
},
"aios": {
"type": "oss",
"desc": "OS pour agents IA",
"path": "/opt/aios",
"status": "ON"
},
"prometheus": {
"type": "oss",
"desc": "Monitoring metriques",
"port": "9090",
"status": "ON"
},
"deepagent": {
"type": "oss",
"desc": "Agent deep research",
"path": "/opt/deepagent",
"status": "ON"
},
"manus": {
"type": "oss",
"desc": "Agent IA autonome multi-etapes",
"path": "/opt/manus",
"status": "ON"
},
"aegis": {
"type": "security",
"desc": "Security scanner TrustA",
"api": "/api/aegis-scan.php",
"status": "ON"
},
"nuclei": {
"type": "security",
"desc": "Scanner vulns OWASP auto",
"path": "/opt/nuclei",
"status": "ON"
},
"crowdsec": {
"type": "security",
"desc": "Protection collaborative",
"status": "ON"
},
"authentik": {
"type": "security",
"desc": "SSO souverain",
"port": "9443",
"status": "ON"
},
"vaultwarden": {
"type": "security",
"desc": "Passwords auto-heberge",
"port": "8222",
"status": "ON"
},
"plausible": {
"type": "monitoring",
"desc": "Analytics souveraines",
"status": "ON"
},
"uptime-kuma": {
"type": "monitoring",
"desc": "12 services monitoring",
"port": "3001",
"status": "ON"
},
"langfuse": {
"type": "monitoring",
"desc": "LLM observability",
"port": "3001",
"status": "ON"
},
"pmta": {
"type": "email",
"desc": "Port 25 legacy SACRED",
"status": "ON"
},
"kumomta": {
"type": "email",
"desc": "Port 587+8010",
"status": "ON"
},
"postfix": {
"type": "email",
"desc": "Relay 2525/2526",
"status": "ON"
},
"huggingface": {
"type": "ml",
"desc": "Hub 1M+ models datasets",
"status": "ON"
},
"trl": {
"type": "ml",
"desc": "Fine-tuning SFT/DPO/GRPO",
"status": "ON"
},
"vllm": {
"type": "ml",
"desc": "Inference PagedAttention",
"path": "/opt/vllm",
"status": "ON"
},
"localai": {
"type": "ml",
"desc": "Drop-in OpenAI API local",
"path": "/opt/localai",
"status": "ON"
},
"open-webui": {
"type": "ml",
"desc": "Interface web LLMs",
"path": "/opt/open-webui",
"status": "ON"
},
"librechat": {
"type": "ml",
"desc": "Clone ChatGPT multi-provider",
"path": "/opt/librechat",
"status": "ON"
},
"modelscope": {
"type": "ml",
"desc": "Hub IA Alibaba",
"status": "ON"
},
"lmarena": {
"type": "ml",
"desc": "Benchmark LLM arena",
"status": "ON"
},
"euria": {
"type": "ml",
"desc": "IA souveraine suisse RGPD",
"status": "ON"
},
"kaggle": {
"type": "gpu",
"desc": "T4 30h/sem gratuit",
"status": "ON"
},
"colab": {
"type": "gpu",
"desc": "T4/A100 gratuit",
"status": "ON"
},
"lightning": {
"type": "gpu",
"desc": "Studios GPU 22h/mois",
"status": "ON"
},
"hf-spaces": {
"type": "gpu",
"desc": "Hosting apps IA gratuit",
"status": "ON"
},
"oracle-cloud": {
"type": "gpu",
"desc": "Always Free 4 ARM 24GB",
"status": "ON"
},
"langchain": {
"type": "framework",
"desc": "Framework agents+RAG #1",
"status": "ON"
},
"llamaindex": {
"type": "framework",
"desc": "Data framework RAG",
"status": "ON"
},
"crewai": {
"type": "framework",
"desc": "Multi-agent orchestration",
"path": "/opt/crewai",
"status": "ON"
},
"autogen": {
"type": "framework",
"desc": "Microsoft multi-agent",
"path": "/opt/autogen",
"status": "ON"
},
"flowise": {
"type": "framework",
"desc": "LLM workflow builder",
"path": "/opt/flowise",
"status": "ON"
},
"pinokio": {
"type": "framework",
"desc": "One-click AI installer 15K stars",
"path": "/opt/pinokio",
"status": "ON"
},
"jan-ai": {
"type": "framework",
"desc": "Desktop LLM offline-first",
"path": "/opt/jan",
"status": "ON"
},
"anythingllm": {
"type": "framework",
"desc": "RAG desktop any doc",
"path": "/opt/anythingllm",
"status": "ON"
},
"coderabbit": {
"type": "tool",
"desc": "AI code review GitHub PRs",
"status": "ON"
},
"continue-dev": {
"type": "tool",
"desc": "AI coding IDE agent",
"status": "ON"
},
"firecrawl": {
"type": "tool",
"desc": "Web scraping API",
"status": "ON"
},
"haystack": {
"type": "tool",
"desc": "RAG framework Deepset",
"status": "ON"
},
"onyx": {
"type": "tool",
"desc": "Enterprise search+RAG",
"status": "ON"
},
"chromadb": {
"type": "tool",
"desc": "Vector DB alternative",
"status": "ON"
},
"cogvideox": {
"type": "tool",
"desc": "Video gen IA",
"status": "ON"
},
"google-adk": {
"type": "tool",
"desc": "Agent Development Kit",
"status": "ON"
},
"dreamina": {
"type": "design",
"desc": "ByteDance image gen",
"status": "ON"
},
"ms-designer": {
"type": "design",
"desc": "Microsoft IA design",
"status": "ON"
},
"google-stitch": {
"type": "design",
"desc": "UI design IA Google",
"status": "ON"
},
"affinity": {
"type": "design",
"desc": "Design pro alt Adobe",
"status": "ON"
}
}

170
tools/html-builder.php Executable file
View File

@@ -0,0 +1,170 @@
<?php
/**
* HTML Builder - Genere la page cartographie exhaustive
* Invoque par le multi_agent orchestrator via tool html_builder
*/
$OUT_S204 = "/var/www/html/cartographie-screens.html";
$OUT_S95_ARS = "/tmp/cartographie-screens-s95.html";
// --- Collect les listes d'ecrans ---
$s204_html = shell_exec("ls /var/www/html/*.html 2>/dev/null | xargs -n1 basename | sort");
$s204_php = shell_exec("ls /var/www/html/*.php 2>/dev/null | xargs -n1 basename | sort");
$s95_ars = shell_exec("sudo ssh -p 49222 -o StrictHostKeyChecking=no -i /var/www/.ssh/wevads_key root@10.1.0.3 \"ls /opt/wevads-arsenal/public/*.html 2>/dev/null | xargs -n1 basename | sort\" 2>/dev/null");
$s95_wv = shell_exec("sudo ssh -p 49222 -o StrictHostKeyChecking=no -i /var/www/.ssh/wevads_key root@10.1.0.3 \"ls /var/www/html/*.html 2>/dev/null | xargs -n1 basename | sort\" 2>/dev/null");
$s204_html_arr = array_filter(explode("\n", trim($s204_html ?: "")));
$s204_php_arr = array_filter(explode("\n", trim($s204_php ?: "")));
$s95_ars_arr = array_filter(explode("\n", trim($s95_ars ?: "")));
$s95_wv_arr = array_filter(explode("\n", trim($s95_wv ?: "")));
$total = count($s204_html_arr) + count($s204_php_arr) + count($s95_ars_arr) + count($s95_wv_arr);
// --- Categorisation auto par prefix/keyword ---
function categorize($name) {
$n = strtolower($name);
if (preg_match('/^api[-_]|api\./', $n) || strpos($n, 'api') === 0) return 'API';
if (strpos($n, 'brain') !== false || strpos($n, 'hamid') !== false) return 'Brain/IA';
if (strpos($n, 'account') !== false || strpos($n, 'factory') !== false) return 'Accounts';
if (strpos($n, 'email') !== false || strpos($n, 'send') !== false || strpos($n, 'pmta') !== false || strpos($n, 'mta') !== false) return 'Email/Send';
if (strpos($n, 'scrap') !== false || strpos($n, 'scout') !== false || strpos($n, 'harvest') !== false) return 'Scraping';
if (strpos($n, 'dashboard') !== false || strpos($n, 'monitor') !== false || strpos($n, 'health') !== false) return 'Monitoring';
if (strpos($n, 'offer') !== false || strpos($n, 'affiliate') !== false || strpos($n, 'conversion') !== false) return 'Offers/Conv';
if (strpos($n, 'admin') !== false || strpos($n, 'config') !== false || strpos($n, 'setting') !== false) return 'Admin';
if (strpos($n, 'wevia') !== false) return 'WEVIA';
if (strpos($n, 'claude') !== false || strpos($n, 'opus') !== false) return 'Claude';
return 'Autres';
}
$all_items = [];
foreach ($s95_ars_arr as $f) $all_items[] = ['name'=>$f, 'server'=>'S95-Arsenal', 'url'=>'https://wevads.weval-consulting.com/'.$f, 'cat'=>categorize($f)];
foreach ($s95_wv_arr as $f) $all_items[] = ['name'=>$f, 'server'=>'S95-WEVADS', 'url'=>'https://wevads.weval-consulting.com/wv/'.$f, 'cat'=>categorize($f)];
foreach ($s204_html_arr as $f) $all_items[] = ['name'=>$f, 'server'=>'S204', 'url'=>'https://weval-consulting.com/'.$f, 'cat'=>categorize($f)];
foreach ($s204_php_arr as $f) $all_items[] = ['name'=>$f, 'server'=>'S204-PHP', 'url'=>'https://weval-consulting.com/'.$f, 'cat'=>categorize($f)];
// --- Stats ---
$stats = ['S95-Arsenal'=>count($s95_ars_arr), 'S95-WEVADS'=>count($s95_wv_arr), 'S204'=>count($s204_html_arr), 'S204-PHP'=>count($s204_php_arr)];
$cat_stats = [];
foreach ($all_items as $it) { $cat_stats[$it['cat']] = ($cat_stats[$it['cat']] ?? 0) + 1; }
arsort($cat_stats);
$items_json = json_encode($all_items, JSON_UNESCAPED_SLASHES);
$cat_json = json_encode($cat_stats);
$ts = date('Y-m-d H:i');
// --- HTML ---
$html = <<<HTML
<!DOCTYPE html>
<html lang="fr"><head>
<meta charset="UTF-8"><title>WEVADS Cartographie Exhaustive Ecrans - $total</title>
<style>
*{box-sizing:border-box;margin:0;padding:0}
body{font-family:-apple-system,Segoe UI,Roboto,sans-serif;background:#0a0e27;color:#e4e6eb;padding:20px;line-height:1.5}
.header{background:linear-gradient(135deg,#1a1f4e,#2d1b5e);padding:24px;border-radius:12px;margin-bottom:24px;border:1px solid #3d4476}
h1{font-size:28px;margin-bottom:8px;color:#64ffda}
.subtitle{color:#8892b0;font-size:14px}
.stats{display:grid;grid-template-columns:repeat(auto-fit,minmax(160px,1fr));gap:12px;margin-bottom:20px}
.stat-card{background:#141931;padding:16px;border-radius:8px;border:1px solid #2a3061;text-align:center}
.stat-value{font-size:26px;font-weight:700;color:#64ffda}
.stat-label{font-size:12px;color:#8892b0;margin-top:4px;text-transform:uppercase;letter-spacing:.5px}
.controls{background:#141931;padding:16px;border-radius:8px;margin-bottom:16px;display:flex;gap:12px;flex-wrap:wrap;align-items:center;border:1px solid #2a3061}
#search{flex:1;min-width:240px;padding:10px 14px;border:1px solid #3d4476;background:#0a0e27;color:#fff;border-radius:6px;font-size:14px}
#search:focus{outline:none;border-color:#64ffda}
select{padding:10px;background:#0a0e27;color:#fff;border:1px solid #3d4476;border-radius:6px;cursor:pointer}
.cat-tabs{display:flex;gap:6px;flex-wrap:wrap;margin-bottom:16px}
.cat-tab{padding:6px 12px;background:#141931;border:1px solid #2a3061;border-radius:20px;cursor:pointer;font-size:12px;color:#8892b0;transition:all .15s}
.cat-tab:hover{border-color:#64ffda;color:#e4e6eb}
.cat-tab.active{background:#64ffda;color:#0a0e27;border-color:#64ffda;font-weight:600}
.count-bar{color:#8892b0;font-size:13px;margin-bottom:12px}
.grid{display:grid;grid-template-columns:repeat(auto-fill,minmax(280px,1fr));gap:10px}
.item{background:#141931;padding:12px;border-radius:6px;border:1px solid #2a3061;text-decoration:none;color:inherit;transition:all .15s;display:block;font-size:13px}
.item:hover{border-color:#64ffda;background:#1a2045;transform:translateY(-1px)}
.item-name{font-weight:600;color:#e4e6eb;margin-bottom:4px;word-break:break-all}
.item-meta{display:flex;gap:8px;font-size:11px;color:#8892b0}
.badge{padding:2px 8px;border-radius:10px;font-size:10px;text-transform:uppercase;letter-spacing:.5px}
.srv-S95-Arsenal{background:#1e3a5f;color:#79c0ff}
.srv-S95-WEVADS{background:#3a1e5f;color:#d79eff}
.srv-S204{background:#5f3a1e;color:#ffc879}
.srv-S204-PHP{background:#5f1e3a;color:#ff79c0}
.footer{margin-top:32px;padding:16px;background:#141931;border-radius:8px;font-size:12px;color:#8892b0;text-align:center;border:1px solid #2a3061}
</style>
</head><body>
<div class="header">
<h1>🗺️ WEVADS Cartographie Exhaustive Ecrans</h1>
<div class="subtitle">$total ecrans total reperes sur 2 serveurs applicatifs | Genere le $ts | WEVIAMaster multiagent</div>
</div>
<div class="stats">
<div class="stat-card"><div class="stat-value">$total</div><div class="stat-label">Total ecrans</div></div>
<div class="stat-card"><div class="stat-value">{$stats['S95-Arsenal']}</div><div class="stat-label">S95 Arsenal</div></div>
<div class="stat-card"><div class="stat-value">{$stats['S95-WEVADS']}</div><div class="stat-label">S95 WEVADS</div></div>
<div class="stat-card"><div class="stat-value">{$stats['S204']}</div><div class="stat-label">S204 HTML</div></div>
<div class="stat-card"><div class="stat-value">{$stats['S204-PHP']}</div><div class="stat-label">S204 PHP</div></div>
</div>
<div class="controls">
<input id="search" placeholder="🔍 Rechercher par nom d'ecran..." autofocus>
<select id="srv"><option value="">Tous serveurs</option><option>S95-Arsenal</option><option>S95-WEVADS</option><option>S204</option><option>S204-PHP</option></select>
</div>
<div class="cat-tabs" id="cat-tabs"></div>
<div class="count-bar" id="count-bar"></div>
<div class="grid" id="grid"></div>
<div class="footer">WEVADS — WEVIAMaster autonomous orchestrator — Infrastructure: S204 + S95 (Hetzner) — Regenere via agent html_builder</div>
<script>
const DATA = $items_json;
const CATS = $cat_json;
let curCat = "";
const grid = document.getElementById("grid");
const countBar = document.getElementById("count-bar");
const search = document.getElementById("search");
const srv = document.getElementById("srv");
const tabs = document.getElementById("cat-tabs");
// Category tabs
const catEntries = [["",DATA.length]].concat(Object.entries(CATS));
tabs.innerHTML = catEntries.map(([c,n])=>{
const lab = c || "Toutes";
return `<div class="cat-tab \${c===curCat?'active':''}" data-cat="\${c}">\${lab} (\${n})</div>`;
}).join("");
tabs.addEventListener("click", e=>{
if(!e.target.classList.contains("cat-tab")) return;
curCat = e.target.dataset.cat;
[...tabs.children].forEach(t=>t.classList.toggle("active", t.dataset.cat===curCat));
render();
});
function render(){
const q = search.value.toLowerCase().trim();
const s = srv.value;
const filtered = DATA.filter(it=>{
if(curCat && it.cat!==curCat) return false;
if(s && it.server!==s) return false;
if(q && !it.name.toLowerCase().includes(q)) return false;
return true;
});
countBar.textContent = `\${filtered.length} ecrans affiches (sur \${DATA.length})`;
grid.innerHTML = filtered.slice(0, 500).map(it=>`
<a class="item" href="\${it.url}" target="_blank" rel="noopener">
<div class="item-name">\${it.name}</div>
<div class="item-meta"><span class="badge srv-\${it.server}">\${it.server}</span><span>\${it.cat}</span></div>
</a>
`).join("") + (filtered.length > 500 ? `<div style="grid-column:1/-1;text-align:center;color:#8892b0;padding:16px">... \${filtered.length - 500} autres ecrans (affinez la recherche)</div>` : "");
}
search.addEventListener("input", render);
srv.addEventListener("change", render);
render();
</script>
</body></html>
HTML;
// Write files
file_put_contents($OUT_S204, $html);
// Push to S95 Arsenal
$b64 = base64_encode($html);
$cmd = "echo '$b64' | base64 -d > /opt/wevads-arsenal/public/cartographie-screens.html && ls -la /opt/wevads-arsenal/public/cartographie-screens.html";
$cmd_escaped = escapeshellarg($cmd);
$s95_out = shell_exec("sudo ssh -p 49222 -o StrictHostKeyChecking=no -i /var/www/.ssh/wevads_key root@10.1.0.3 $cmd_escaped 2>&1 | tail -3");
echo "CARTO_BUILT total=$total s204_file=$OUT_S204 size=" . filesize($OUT_S204) . "\n";
echo "S95_DEPLOY: " . trim($s95_out ?: "(no output)") . "\n";
echo "URL_S204: https://weval-consulting.com/cartographie-screens.html\n";
echo "URL_S95: https://wevads.weval-consulting.com/cartographie-screens.html\n";

4816
weval-finetune-data.jsonl Normal file

File diff suppressed because it is too large Load Diff

View File

@@ -0,0 +1,78 @@
{
"providers": [
{
"name": "Cerebras-fast",
"model": "qwen-3-32b",
"url": "https://api.cerebras.ai/v1/chat/completions",
"key_var": "CEREBRAS_API_KEY",
"priority": 1
},
{
"name": "Groq",
"model": "llama-3.3-70b-versatile",
"url": "https://api.groq.com/openai/v1/chat/completions",
"key_var": "GROQ_KEY",
"priority": 2
},
{
"name": "NVIDIA-GLM5",
"model": "nvidia/glm-5",
"url": "https://integrate.api.nvidia.com/v1/chat/completions",
"key_var": "NVIDIA_NIM_KEY",
"priority": 3
},
{
"name": "Gemini",
"model": "gemini-2.0-flash",
"url": "https://generativelanguage.googleapis.com/v1beta/models/gemini-2.0-flash:generateContent",
"key_var": "GEMINI_API_KEY",
"priority": 4
},
{
"name": "SambaNova",
"model": "DeepSeek-V3-0324",
"url": "https://api.sambanova.ai/v1/chat/completions",
"key_var": "SAMBANOVA_API_KEY",
"priority": 5
},
{
"name": "Mistral",
"model": "mistral-large-latest",
"url": "https://api.mistral.ai/v1/chat/completions",
"key_var": "MISTRAL_API_KEY",
"priority": 6
},
{
"name": "HF-Router",
"model": "Qwen/Qwen2.5-72B-Instruct",
"url": "https://api-inference.huggingface.co/models/Qwen/Qwen2.5-72B-Instruct",
"key_var": "HF_TOKEN",
"priority": 7
},
{
"name": "OpenRouter-Free",
"model": "qwen/qwen3-30b-a3b:free",
"url": "https://openrouter.ai/api/v1/chat/completions",
"key_var": "",
"priority": 8
},
{
"name": "Ollama-Brain",
"model": "weval-brain-v3",
"url": "http://localhost:11434/api/chat",
"key_var": "",
"priority": 9
},
{
"name": "Ollama-Qwen",
"model": "qwen3:4b",
"url": "http://localhost:11434/api/chat",
"key_var": "",
"priority": 10
}
],
"litellm_proxy": "http://localhost:4001",
"litellm_key": "sk-weval-litellm-2026",
"langfuse_url": "http://localhost:3001",
"updated": "2026-04-16T00:35:57+00:00"
}

File diff suppressed because one or more lines are too long