brain-sync 16:09
This commit is contained in:
22
blade-finetune-task.json
Normal file
22
blade-finetune-task.json
Normal 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
31
kaggle-finetune.py
Normal 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
206
priority-intents-nl.json
Normal 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
|
||||||
|
}
|
||||||
|
]
|
||||||
@@ -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
|
|
||||||
@@ -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 ;
|
|
||||||
}
|
|
||||||
@@ -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; }
|
|
||||||
}
|
|
||||||
13
sovereign-hosting-plan.json
Normal file
13
sovereign-hosting-plan.json
Normal 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"
|
||||||
|
}
|
||||||
50
sovereign-reduction-plan.json
Normal file
50
sovereign-reduction-plan.json
Normal 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
577
tools-catalog.json
Normal 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
170
tools/html-builder.php
Executable 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
4816
weval-finetune-data.jsonl
Normal file
File diff suppressed because it is too large
Load Diff
78
wevia-sovereign-cascade.json
Normal file
78
wevia-sovereign-cascade.json
Normal 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
Reference in New Issue
Block a user