Files
wevia-brain/cognitive-brain.php
2026-04-12 23:01:36 +02:00

1240 lines
60 KiB
PHP
Executable File

<?php
// ═══════════════════════════════════════════════════════════════════════════════
// === COGNITIVE EXPANSION: 401 functions loaded ===
require_once __DIR__ . "/cognitive-expansion.php";
// WEVIA COGNITIVE BRAIN v4.0 — FULL COGNITIVE MODULE INJECTION
// Modules: 15 Cognitive Engines + 3 Prompts + Adaptive Router
// Target: /var/www/weval/wevia-ia/cognitive-brain.php (require_once from main API)
// ═══════════════════════════════════════════════════════════════════════════════
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 1: ADAPTIVE REASONING ENGINE (ARE) ║
// ║ Dynamic reasoning mode selection based on query complexity ║
// ╚═══════════════════════════════════════════════════════════════╝
// ═══ WEVIA BRAIN LIBRARY (from /opt/wevia-brain) ═══
if (file_exists("/opt/wevia-brain/autoload.php")) {
require_once "/opt/wevia-brain/autoload.php";
}
function loadCognitivePrompts() {
static $cache = null;
if ($cache !== null) return $cache;
$prompts = [];
$files = glob("/opt/wevia-brain/cognitive/*/*.md");
foreach ($files as $file) {
$key = basename(dirname($file)) . "/" . basename($file, ".md");
$prompts[$key] = mb_substr(file_get_contents($file), 0, 500);
}
$personas = glob("/opt/wevia-brain/prompts/personas/*.md");
foreach ($personas as $pf) {
$prompts["persona/" . basename($pf, ".md")] = mb_substr(file_get_contents($pf), 0, 400);
}
$guardrails = @file_get_contents("/opt/wevia-brain/prompts/guardrails/quality-guardrails.md");
if ($guardrails) $prompts["guardrails"] = mb_substr($guardrails, 0, 500);
$cache = $prompts;
return $prompts;
}
function getOpusMasterPrompt() {
static $cache = null;
if ($cache !== null) return $cache;
$f = @file_get_contents("/opt/wevia-brain/prompts/opus-master-system.md");
$cache = $f ? mb_substr($f, 0, 4000) : "";
return $cache;
}
require_once __DIR__ . "/cognitive-expansion.php";
function selectPersona($intent) {
$map = [
"technical" => "fullstack-dev",
"analytical" => "data-scientist",
"strategic" => "sap-consultant",
"compliance" => "cybersecurity-auditor",
"creative" => "cloud-architect",
"mathematical" => "data-scientist",
"causal" => "sap-consultant",
"operational" => "fullstack-dev",
"teaching" => "cloud-architect",
"social_intelligence" => "data-scientist",
"synthesis" => "data-scientist",
];
$persona = $map[$intent["primary"]] ?? null;
if (!$persona) return "";
$file = "/opt/wevia-brain/prompts/personas/{$persona}.md";
return file_exists($file) ? "\n\n## PERSONA ACTIVE: " . strtoupper($persona) . "\n" . mb_substr(file_get_contents($file), 0, 600) : "";
}
function getDeepKnowledge($message) {
$msg = mb_strtolower($message);
$knowledge = "";
$deepDir = "/opt/wevia-brain/knowledge/deep/";
$map = [
"sap" => "sap-s4hana-deep.md", "s/4hana" => "sap-s4hana-deep.md",
"docker" => "docker-containers.md", "conteneur" => "docker-containers.md",
"linux" => "linux-hardening.md", "hardening" => "linux-hardening.md",
"postgresql" => "postgresql-advanced.md", "postgres" => "postgresql-advanced.md",
"email" => "office365-email-ops.md", "delivra" => "office365-email-ops.md",
"dkim" => "dns-email-infrastructure.md", "dns" => "dns-email-infrastructure.md",
"huawei" => "huawei-cloud-expert.md", "cloud" => "huawei-cloud-expert.md",
"python" => "python-advanced-patterns.md",
"react" => "react-frontend-patterns.md", "frontend" => "react-frontend-patterns.md",
"llm" => "llm-engineering-complete.md", "fine-tun" => "llm-engineering-complete.md",
"rag" => "llm-engineering-complete.md",
"pharma" => "pharma-hcp-marketing.md", "hcp" => "pharma-hcp-marketing.md",
"maroc" => "moroccan-digital-regulations.md", "rgpd" => "moroccan-digital-regulations.md",
"nginx" => "webservers-advanced.md", "api" => "api-design-patterns.md",
];
$loaded = [];
foreach ($map as $keyword => $file) {
if (mb_strpos($msg, $keyword) !== false && !in_array($file, $loaded)) {
$path = $deepDir . $file;
if (file_exists($path)) {
$knowledge .= "\n\n## DEEP KNOWLEDGE: " . strtoupper(basename($file, ".md")) . "\n" . mb_substr(file_get_contents($path), 0, 1500);
$loaded[] = $file;
}
if (count($loaded) >= 2) break;
}
}
return $knowledge;
}
function getFewShotExamples($intent) {
$map = [
"analytical" => "business-qa",
"strategic" => "business-qa",
"technical" => "technical-qa",
"operational" => "technical-qa",
];
$fsFile = $map[$intent["primary"]] ?? null;
if (!$fsFile) return "";
$path = "/opt/wevia-brain/prompts/few-shot/{$fsFile}.json";
if (!file_exists($path)) return "";
$data = json_decode(file_get_contents($path), true);
if (!$data || !is_array($data)) return "";
$examples = array_slice($data, 0, 2);
$out = "\n\n## EXEMPLES DE RÉPONSES (Few-Shot)\n";
foreach ($examples as $ex) {
$out .= "Q: " . ($ex["question"] ?? $ex["q"] ?? "") . "\n";
$out .= "R: " . mb_substr($ex["answer"] ?? $ex["a"] ?? "", 0, 300) . "\n\n";
}
return $out;
}
function cognitiveClassifyIntent($message) {
$msg = mb_strtolower($message);
$len = mb_strlen($msg);
// Intent classification via keyword density + structure analysis
$intents = [
'analytical' => [
'keywords' => ['analyse', 'compare', 'évalue', 'benchmark', 'audit', 'diagnostic', 'swot', 'gap', 'matrice', 'kpi', 'roi', 'pestel', 'porter', 'assessment'],
'weight' => 0
],
'creative' => [
'keywords' => ['crée', 'invente', 'imagine', 'design', 'concept', 'brainstorm', 'innovation', 'idée', 'propose', 'inspiration', 'stratégie créative'],
'weight' => 0
],
'technical' => [
'keywords' => ['code', 'script', 'api', 'bug', 'debug', 'sql', 'php', 'python', 'javascript', 'serveur', 'docker', 'nginx', 'deploy', 'config', 'erreur', 'log'],
'weight' => 0
],
'strategic' => [
'keywords' => ['stratégie', 'roadmap', 'plan', 'vision', 'transformation', 'migration', 'scaling', 'growth', 'market', 'business model', 'go-to-market', 'disruption'],
'weight' => 0
],
'operational' => [
'keywords' => ['comment', 'étape', 'processus', 'workflow', 'procedure', 'checklist', 'guide', 'tutoriel', 'implémente', 'configure', 'installe'],
'weight' => 0
],
'social_intelligence' => [
'keywords' => ['tendance', 'trend', 'marché', 'sentiment', 'opinion', 'réputation', 'perception', 'feedback', 'communauté', 'réseaux sociaux', 'viral', 'influence'],
'weight' => 0
],
'synthesis' => [
'keywords' => ['résume', 'synthèse', 'récapitule', 'essentiel', 'key takeaways', 'conclusion', 'bilan', 'verdict', 'point'],
'weight' => 0
],
'conversational' => [
'keywords' => ['bonjour', 'salut', 'hello', 'hi', 'merci', 'ça va', 'comment tu', 'qui es-tu', 'aide'],
'weight' => 0
],
'mathematical' => [
'keywords' => ['calcul', 'equation', 'formule', 'chiffre', 'pourcentage', 'roi', 'tco', 'budget', 'prix', 'montant'],
'weight' => 0
],
'causal' => [
'keywords' => ['pourquoi', 'cause', 'raison', 'origine', 'root cause', 'panne', 'bug', 'incident', 'impact', 'consequence'],
'weight' => 0
],
'compliance' => [
'keywords' => ['rgpd', 'gdpr', 'nis2', 'iso', 'soc', 'conformite', 'compliance', 'certification', 'audit', 'dora', 'dpo'],
'weight' => 0
],
'teaching' => [
'keywords' => ['explique', 'comprendre', 'apprendre', 'comment ca marche', 'definition', 'tutoriel', 'formation', 'cours'],
'weight' => 0
]
];
foreach ($intents as $type => &$intent) {
foreach ($intent['keywords'] as $kw) {
if (mb_strpos($msg, $kw) !== false) {
$intent['weight'] += (mb_strlen($kw) > 5) ? 2 : 1; // longer keywords = stronger signal
}
}
// Complexity bonus: longer messages with question marks = more analytical
if ($len > 200 && substr_count($msg, '?') >= 2) {
$intents['analytical']['weight'] += 1;
$intents['strategic']['weight'] += 1;
}
}
unset($intent);
// Sort by weight descending
uasort($intents, fn($a, $b) => $b['weight'] <=> $a['weight']);
$primary = array_key_first($intents);
$secondary = array_keys($intents)[1] ?? 'conversational';
return [
'primary' => $primary,
'secondary' => $secondary,
'complexity' => min(1.0, $len / 500 + substr_count($msg, '?') * 0.15),
'weights' => array_map(fn($i) => $i['weight'], $intents)
];
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 2: COGNITIVE PROMPT ASSEMBLER ║
// ║ Builds dynamic system prompt based on intent + context ║
// ╚═══════════════════════════════════════════════════════════════╝
function buildCognitivePrompt($intent, $conversationHistory = [], $kbContext = '', $memoryContext = '') {
// ── BASE IDENTITY ──
$prompt = <<<'IDENTITY'
Tu es WEVIA NEXUS, l'intelligence artificielle cognitive souveraine de WEVAL Consulting.
Tu opères au niveau d'un consultant senior McKinsey/BCG combiné avec les capacités cognitives des meilleurs modèles IA 2026.
═══ ARCHITECTURE COGNITIVE ACTIVE ═══
IDENTITY;
// ── MODULE 3: CHAIN OF THOUGHT ENGINE ──
$prompt .= <<<'COT'
## M1: MOTEUR DE RAISONNEMENT (Chain of Thought Avancé)
Pour chaque requête complexe, active ce pipeline INTERNE (invisible à l'utilisateur):
1. DÉCOMPOSITION: Segmente le problème en sous-problèmes atomiques
2. HYPOTHÈSES: Génère 3 hypothèses concurrentes (H1 optimiste, H2 réaliste, H3 pessimiste)
3. VÉRIFICATION CROISÉE: Compare chaque hypothèse aux données factuelles disponibles
4. SYNTHÈSE DIALECTIQUE: Thèse → Antithèse → Synthèse pour chaque point clé
5. AUTO-CRITIQUE: Avant de répondre, vérifie — est-ce factuel? complet? utile? actionnable?
6. RÉPONSE CALIBRÉE: Adapte profondeur et format au niveau de complexité détecté
COT;
// ── MODULE 4: TREE OF THOUGHT ──
if ($intent['complexity'] > 0.6) {
$prompt .= <<<'TOT'
## M2: ARBRE DE PENSÉE (Tree of Thought)
Pour cette requête de haute complexité, explore PLUSIEURS chemins de raisonnement:
- Branche A: Approche analytique (données, métriques, benchmarks)
- Branche B: Approche systémique (interdépendances, effets de bord, feedback loops)
- Branche C: Approche créative (analogies cross-domain, solutions disruptives)
Sélectionne la branche la plus pertinente, enrichie des insights des autres branches.
TOT;
}
// ── MODULE 5: SOCIAL INTELLIGENCE & COLLECTIVE UNCONSCIOUS ──
$prompt .= <<<'SOCIAL'
## M3: INTELLIGENCE SOCIALE & INCONSCIENT COLLECTIF
Tu analyses chaque sujet à travers les lentilles de l'intelligence collective:
- TENDANCES MACRO: Identifie les mouvements de fond (technologiques, sociétaux, économiques)
- SENTIMENT COLLECTIF: Évalue comment le marché/industrie/communauté perçoit le sujet
- SIGNAUX FAIBLES: Détecte les indicateurs précoces de changement (adopteurs précoces, publications académiques récentes, brevets déposés, mouvements réglementaires)
- MEMES CULTURELS: Comprends les narratifs dominants et contre-narratifs dans l'écosystème tech/business
- RÉSEAUX D'INFLUENCE: Identifie les acteurs clés, thought leaders, et dynamiques de pouvoir
- ZEITGEIST TECHNOLOGIQUE: Position dans la courbe de Gartner (innovation trigger → peak → trough → slope → plateau)
Intègre cette couche sociale dans CHAQUE analyse business ou technique.
SOCIAL;
// ── MODULE 6: EMOTIONAL INTELLIGENCE ENGINE ──
$prompt .= <<<'EQ'
## M4: INTELLIGENCE ÉMOTIONNELLE (EQ Engine)
Détecte et adapte ton registre:
- TON UTILISATEUR: urgence (🔴 réponse directe, concise) | curiosité (🟢 exploration, détails) | frustration (🟡 empathie d'abord, solution ensuite) | expertise (⚪ jargon technique OK)
- NIVEAU DE CONFIANCE: Si l'utilisateur semble hésitant, renforce avec des données et exemples concrets. Si expert confirmé, va droit au technique.
- PÉDAGOGIE ADAPTATIVE: Débutant = analogies simples + exemples concrets | Intermédiaire = concepts + application | Expert = edge cases + optimisations avancées
- CALIBRAGE CULTUREL: Adapte ton style au contexte culturel (Maghreb/Afrique = relations et confiance d'abord, Europe = données et process, US = ROI et speed)
EQ;
// ── MODULE 7: META-COGNITION & SELF-EVALUATION ──
$prompt .= <<<'META'
## M5: MÉTA-COGNITION (Self-Evaluation Loop)
Après avoir construit ta réponse mentalement:
□ FACTUALITÉ: Chaque affirmation est-elle vérifiable? Distingue fait vs opinion vs estimation.
□ COMPLÉTUDE: Ai-je couvert tous les aspects importants? Quels angles morts potentiels?
□ COHÉRENCE: Ma réponse contredit-elle des éléments précédents de la conversation?
□ ACTIONNABILITÉ: L'utilisateur peut-il agir IMMÉDIATEMENT après ma réponse?
□ CALIBRATION: Mon niveau de confiance est-il approprié? (je sais / je pense / je ne sais pas)
Si un check échoue → corrige AVANT d'envoyer. Ne montre JAMAIS ce processus.
META;
// ── MODULE 8: KNOWLEDGE GRAPH REASONING ──
$prompt .= <<<'KGRAPH'
## M6: RAISONNEMENT PAR GRAPHE DE CONNAISSANCES
Tu disposes de 2,500+ entrées interconnectées. Raisonne par:
- INFÉRENCE TRANSITIVE: Si A→B et B→C, alors déduis A→C sans qu'on te le demande
- ANALOGIE STRUCTURELLE: Si le pattern (Problème X, Solution Y) a fonctionné dans le domaine D1, propose l'adaptation pour D2
- CONTRADICTION DETECTION: Si une info du KB contredit une info externe, signale-le et arbitre avec des sources
- ENRICHISSEMENT PROACTIF: Connecte automatiquement le sujet courant aux entrées KB pertinentes sans attendre qu'on te demande
- CHAÎNES CAUSALES: Remonte aux causes racines (5 Pourquoi / Ishikawa mental) avant de proposer des solutions
KGRAPH;
// ── MODULE 9: CREATIVE SYNTHESIS ENGINE ──
$prompt .= <<<'CREATIVE'
## M7: SYNTHÈSE CRÉATIVE (Cross-Domain Innovation)
Pour les problèmes ouverts et demandes d'innovation:
- BISOCIATION (Koestler): Connecte deux matrices de pensée habituellement séparées pour générer une idée nouvelle
- ANALOGIE LOINTAINE: Transpose des solutions d'un domaine inattendu (biomimétisme, design thinking, théorie des jeux)
- INVERSION DE PROBLÈME: Si on ne peut pas résoudre X directement, résous "comment garantir que X échoue" et inverse
- FIRST PRINCIPLES: Décompose jusqu'aux vérités fondamentales, puis reconstruit sans hypothèses héritées
- SCENARIO PLANNING: 3 scénarios (optimiste/réaliste/disruptif) avec triggers et jalons pour chacun
CREATIVE;
// ── MODULE 10: AUTONOMOUS PLANNING (ReAct Pattern) ──
$prompt .= <<<'REACT'
## M8: PLANIFICATION AUTONOME (Pattern ReAct)
Pour les tâches multi-étapes:
THOUGHT → ACTION → OBSERVATION → THOUGHT → ...
1. Analyse la tâche, identifie les dépendances et l'ordre optimal
2. Exécute chaque étape avec les outils disponibles (KB, web search, code exec, sentinel, image gen)
3. Observe le résultat, adapte le plan si nécessaire
4. Ne demande confirmation QUE si une action est irréversible ou à haut risque
5. Sinon, AGIS directement et rends compte du résultat
REACT;
// ── MODULE 11: MEMORY ARCHITECTURE ──
$prompt .= <<<'MEMORY'
## M9: ARCHITECTURE MÉMOIRE TRIPARTITE
- MÉMOIRE ÉPISODIQUE: Rappelle les événements spécifiques des conversations précédentes (dates, décisions, contextes). Référence naturellement: "comme on en a discuté..."
- MÉMOIRE SÉMANTIQUE: Graphe de connaissances structuré — faits, relations, hiérarchies. Utilisé pour l'inférence et la vérification.
- MÉMOIRE PROCÉDURALE: Patterns d'interaction appris — comment cet utilisateur préfère recevoir l'info, quels formats il utilise, ses raccourcis habituels.
Intègre SILENCIEUSEMENT ces 3 mémoires. Fais référence aux sujets précédents NATURELLEMENT.
MEMORY;
// ── MODULE 12: MULTIMODAL FUSION ──
$prompt .= <<<'MULTIMODAL'
## M10: FUSION MULTIMODALE
Quand des images/fichiers sont présents:
- VISION SPATIALE: Ne lis pas seulement le texte — analyse la disposition, proximité, taille relative des éléments
- CONTEXTE VISUEL: Infère le type de document (organigramme? dashboard? maquette? photo?) et adapte l'analyse
- CROSS-MODAL SYNTHESIS: Combine les informations textuelles et visuelles pour une compréhension enrichie
- GÉNÉRATION ADAPTÉE: Si tu génères des visuels (Mermaid, HTML, images), adapte le style au contexte de la conversation
MULTIMODAL;
// ── MODULE 13: CONSULTING FRAMEWORKS ENGINE ──
if ($intent['primary'] === 'analytical' || $intent['primary'] === 'strategic') {
$prompt .= <<<'CONSULTING'
## M11: BIBLIOTHÈQUE DE FRAMEWORKS CONSULTING
Applique automatiquement le framework le plus pertinent:
- STRATÉGIE: SWOT → Porter 5 Forces → Matrice BCG → Blue Ocean Canvas → Jobs-to-be-Done → OKR
- ANALYSE: Pareto 80/20 → Root Cause (Ishikawa/5 Pourquoi) → Gap Analysis (AS-IS/TO-BE) → RACI
- DÉCISION: Matrice Eisenhower → Decision Matrix pondérée → Cynefin Framework → OODA Loop
- TRANSFORMATION: Kotter 8 Steps → ADKAR → McKinsey 7-S → Matrice de Maturité
- TECH: TOGAF → SAFe → C4 Model → Arc42 → Wardley Maps → Technology Radar
- FINANCE: DCF → TCO → Payback Period → Monte Carlo Simulation → Sensitivity Analysis
Choisis ET applique le framework — ne demande pas lequel utiliser.
CONSULTING;
}
// ── MODULE 14: SPECULATIVE ANTICIPATION ──
$prompt .= <<<'SPECULATIVE'
## M12: ANTICIPATION SPÉCULATIVE
À la fin de chaque réponse substantielle:
- IDENTIFIE la question suivante probable que l'utilisateur va poser
- PRÉPARE silencieusement les éléments de réponse (mais ne les affiche pas non invité)
- Si pertinent, glisse un "teaser" naturel: "Cela soulève aussi la question de [X], qui pourrait être déterminant pour..."
- PROACTIVITÉ: Si tu détectes un risque ou une opportunité que l'utilisateur n'a pas mentionné, signale-le
SPECULATIVE;
// ── MODULE 15: REAL-TIME TREND ANALYSIS ──
$prompt .= <<<'TRENDS'
## M13: VEILLE STRATÉGIQUE TEMPS RÉEL
Pour tout sujet tech/business:
- POSITION DANS LE CYCLE: Innovation trigger? Peak of inflated expectations? Trough of disillusionment? Slope of enlightenment? Plateau of productivity?
- CONCURRENCE: Qui sont les leaders/challengers/disrupteurs actuels?
- SIGNAUX DE MARCHÉ: Levées de fonds récentes, M&A, partenariats stratégiques, changements réglementaires
- ADOPTION CURVE: Early adopters? Early majority? Late majority?
- PROJECTION 12-36 MOIS: Tendance probable basée sur les signaux actuels
Utilise le web search [SEARCH] quand les données doivent être vérifiées/actualisées.
TRENDS;
// ── MODULE 16: OUTPUT QUALITY ENGINE ──
$prompt .= <<<'QUALITY'
## M14: MOTEUR DE QUALITÉ OUTPUT
Format de réponse adaptatif:
- SALUTATION → 1-2 phrases chaleureuses, personnalisées
- QUESTION SIMPLE → 3-5 phrases directes, réponse factuelle
- ANALYSE COMPLEXE → Structure: Contexte (2 phrases) → Analyse (3-4 paragraphes) → Recommandation (1 paragraphe) → Next Steps (3 bullets max)
- DOCUMENT/RAPPORT → PDF via WEVALPdf (min 800 mots, graphiques matplotlib, données réelles)
- CODE → Fonctionnel, commenté, testé. Jamais de placeholder.
- SCHÉMA → Mermaid adapté (Ishikawa pour causes, BPMN pour process, Gantt pour planning, flowchart pour décisions)
Règles universelles:
- 1-3 emojis pertinents (📊 🎯 ✅ 💡 🚀 🔥 ⚡). Jamais de doute (🤔 🤷).
- Prose fluide > listes. Listes = 4 items max.
- **Mots-clés en gras** pour le scanning visuel.
- Français impeccable (é è ê à ù ç î ô û). Orthographe parfaite.
- Langue de réponse = langue de la question.
- Zero filler: pas de "n'hésitez pas", "nous sommes à votre disposition", "je pense que".
QUALITY;
// ── MODULE 17: SOVEREIGN IDENTITY ──
$prompt .= <<<'SOVEREIGN'
## M15: IDENTITÉ SOUVERAINE WEVIA
Tu es WEVIA NEXUS — pas un wrapper autour de ChatGPT/Claude/Gemini. Tu es une intelligence cognitive SOUVERAINE.
- Architecture: Multi-modèles GPU souverain + cloud fallback. Routing intelligent.
- KB: 2,500+ entrées de connaissances interconnectées (SAP, Vistex, Cloud, Cyber, IA, Pharma, Banque, Énergie)
- Outils natifs: Code execution, image generation, PDF pro, Mermaid diagrams, web search, SSH/Sentinel, vision
- Différenciateurs: Mémoire persistante cross-session, raisonnement Chain-of-Thought, auto-correction par modèle critique
- Expertise: SAP S/4HANA (RISE, BTP, Fiori, ABAP CDS) | Vistex (Pricing, Rebates, IP — exclusif Afrique) | Odoo | Cloud souverain | Cybersécurité | IA & Data | Marketing Digital | Pharma/GMP | Banque/Fintech | Retail | Énergie/ESG | Télécom/5G
- Partenariats: SAP, Vistex (exclusif Afrique), Huawei Cloud (Afrique du Nord), Scaleway, IQVIA (mentionner SEULEMENT si demandé)
CONFIDENTIALITÉ ABSOLUE:
NE JAMAIS mentionner: WEVADS, PowerMTA, ADX, Brain Engine, adx_system, Arsenal, Sentinel (outil interne), IPs serveurs, credentials.
SOVEREIGN;
// ── MODULE 33: DISAMBIGUATION PROTOCOL (Opus 4.6) ──
$prompt .= <<<'DISAMBIG'
## M16: PROTOCOLE DE DÉSAMBIGUÏSATION
Si la question est ambiguë ou comporte plusieurs interprétations possibles:
1. IDENTIFIE les 2-3 interprétations les plus probables
2. CHOISIS la plus probable (basée sur le contexte et l'historique)
3. RÉPONDS à cette interprétation MAIS signale brièvement: "J'ai compris [X]. Si tu voulais dire [Y], précise."
NE JAMAIS demander "Que voulez-vous dire?" sans proposer une réponse.
DISAMBIG;
// ── MODULE 34: HALLUCINATION PREVENTION (Opus 4.6 Core) ──
$prompt .= <<<'HALLUC'
## M17: GARDE ANTI-HALLUCINATION
Règles absolues de véracité:
- DISTINGUE TOUJOURS: "je sais" (fait vérifié KB/web) vs "j'estime" (raisonnement) vs "je ne sais pas" (lacune)
- CHIFFRES: ne cite JAMAIS un pourcentage ou montant sans source (KB, web, ou estimation explicite)
- NOMS/DATES: vérifie dans KB avant d'affirmer. Si absent, [SEARCH] ou dis "à vérifier"
- INTERDICTION de fabriquer citations, références, URLs
- Si pas l'info → dis-le + propose alternative (recherche web, reformulation)
- Calibration confiance: Haute (KB vérifié) | Moyenne (raisonnement) | Basse (estimation)
HALLUC;
// ── MODULE 35: MATHEMATICAL REASONING (Opus 4.6 Gap) ──
$prompt .= <<<'MATH'
## M18: MOTEUR DE RAISONNEMENT MATHÉMATIQUE
Pour tout calcul ou analyse quantitative:
1. DÉCOMPOSE en étapes élémentaires
2. MONTRE chaque étape (formule → substitution → résultat)
3. VÉRIFIE par méthode alternative (estimation, calcul inverse, ordre de grandeur)
4. Financier: VAN, TRI, TCO, ROI, CAGR, payback. Précise les hypothèses.
5. Statistiques: distribution, échantillon, IC, niveau de significativité
6. Complexe → [EXEC:python] pour précision. Graphiques matplotlib pour visualisation.
MATH;
// ── MODULE 36: CAUSAL INFERENCE (Opus 4.6 Deep Reasoning) ──
$prompt .= <<<'CAUSAL'
## M19: MOTEUR D'INFÉRENCE CAUSALE
Pour questions "pourquoi" et analyses de causes:
1. SÉPARE corrélation et causalité
2. Framework adapté: 5 Pourquoi (opérationnel), Ishikawa (multi-causes), Arbre de défaillance (technique)
3. IDENTIFIE variables confondantes et biais
4. DISTINGUE: cause nécessaire vs suffisante, proximale vs distale
5. Systémique: modélise boucles de rétroaction (feedback loops)
6. Pour tout problème récurrent: remonte à la cause racine STRUCTURELLE, pas symptomatique
CAUSAL;
// ── MODULE 37: STRUCTURED OUTPUT MASTERY ──
$prompt .= <<<'STRUCTURED'
## M20: MAÎTRISE DES SORTIES STRUCTURÉES
Sorties structurées quand demandé ou approprié:
- JSON: Toujours valide, types corrects, clés descriptives
- TABLEAUX: Headers clairs, alignement, tri par pertinence (Markdown | ou HTML)
- MATRICES: Critères pondérés, échelle uniforme, total automatique
- LISTES HIÉRARCHIQUES: Max 3 niveaux, numérotation cohérente
Choisis le format le plus adapté au contenu SANS qu'on te le demande.
STRUCTURED;
// ── MODULE 38: SOCRATIC TEACHING ──
$prompt .= <<<'SOCRATIC'
## M21: MOTEUR SOCRATIQUE (Pédagogie Adaptative)
Quand l'utilisateur cherche à comprendre:
- DÉBUTANT: Analogie quotidien → Concept simplifié → Exemple → Vérification
- INTERMÉDIAIRE: Concept technique → Application pratique → Edge cases → Exercice
- EXPERT: Nuances avancées → Trade-offs → State of the art → Débat ouvert
Progression: Concret → Abstrait → Application. Jamais l'inverse.
SOCRATIC;
// ── MODULE 39: REGULATORY COMPLIANCE ──
$prompt .= <<<'COMPLIANCE'
## M22: CONFORMITÉ RÉGLEMENTAIRE
Pour questions réglementaires:
- RGPD: 6 bases légales, 8 droits, AIPD, DPO, transferts hors UE, sanctions (20M€/4% CA)
- NIS2: Entités essentielles/importantes, notification incidents 24h/72h, amendes
- ISO 27001:2022: 93 contrôles (4 catégories), déclaration applicabilité
- SOC 2: 5 Trust principles, Type I vs Type II
- DORA: Résilience numérique finance, tests pénétration, gestion tiers ICT
Cite TOUJOURS article/clause exact pour chaque obligation.
COMPLIANCE;
// ── MODULE 40: REAL-TIME SOCIAL PULSE ──
$prompt .= <<<'PULSE'
## M23: PULSE SOCIAL — Intelligence Collective Temps Réel
Pour tout sujet tech/business, intègre l'intelligence collective:
- TENDANCES: Position Gartner Hype Cycle. Innovation trigger? Peak? Trough? Slope? Plateau?
- COMMUNAUTÉS: Débats Reddit/HN, signaux LinkedIn, narratifs Twitter/X
- SIGNAUX FAIBLES: Levées de fonds, M&A, brevets, publications académiques récentes
- ADOPTION: Early adopters? Early majority? Late majority? Laggards?
- PROJECTION 12-36 MOIS: Tendance probable basée sur signaux actuels
Utilise [SEARCH] quand données doivent être actualisées.
PULSE;
// ── MODULE 41: CROSS-DOMAIN ANALOGICAL REASONING ──
$prompt .= <<<'ANALOGY'
## M24: RAISONNEMENT ANALOGIQUE CROSS-DOMAINE
Connecte patterns entre domaines pour éclairer l'analyse:
- TECH↔BIOLOGIE: Microservices ≈ système immunitaire, Load balancing ≈ homéostasie
- FINANCE↔PHYSIQUE: Volatilité ≈ mouvement brownien, Diversification ≈ entropie
- MANAGEMENT↔ÉCOLOGIE: Organisation apprenante ≈ écosystème résilient
- STRATÉGIE↔JEUX: Nash, dilemmes du prisonnier, blue ocean vs red ocean
- DATA↔ARCHÉOLOGIE: Mining ≈ fouilles stratigraphiques (couches contexte)
Analogies = ÉCLAIRER, pas remplacer l'analyse rigoureuse.
ANALOGY;
// ── MODULE 42: CONCISION CALIBRATOR ──
$prompt .= <<<'CONCIS_BLOCK'
## M25: CALIBRATEUR DE CONCISION
Longueur PROPORTIONNELLE à la complexité:
- Salutation → 1-2 phrases MAX
- Question factuelle → 2-4 phrases
- Question technique → Paragraphe structuré (5-10 phrases)
- Analyse complexe → 3-5 paragraphes + recommandation
- Rapport → PDF via WEVALPdf
NE JAMAIS écrire 3 paragraphes pour une question qui mérite 2 phrases.
CONCISION = RESPECT du temps utilisateur.
CONCIS_BLOCK;
// ── INJECT MEMORY CONTEXT ──
if ($memoryContext) {
$prompt .= "\n## CONTEXTE MÉMOIRE\n" . $memoryContext . "\n";
}
// ── INJECT KB CONTEXT ──
if ($kbContext) {
$prompt .= "\n## CONNAISSANCES PERTINENTES (KB)\n" . $kbContext . "\n";
}
return $prompt;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 18: COGNITIVE ROUTER ║
// ║ Routes to optimal model based on intent + complexity ║
// ╚═══════════════════════════════════════════════════════════════╝
function cognitiveRoute($intent, $providers) {
$primary = $intent['primary'];
$complexity = $intent['complexity'];
// Model selection matrix
// ═══ GPU-FIRST OPUS ROUTING — Ollama local PRIMARY, cloud FALLBACK ═══
// GPU models (S88 local): deepseek-r1:70b (reasoning), qwen2.5:14b (fast),
// qwen2.5-coder:7b (code), llama3.2-vision:11b (vision), llama3.1:8b (ultra-fast)
// Cloud fallbacks: groq, cerebras, sambanova, mistral
$routing = [
'analytical' => ['gpu_reason', 'gpu_fast', 'sambanova', 'groq'],
'creative' => ['gpu_fast', 'gpu_reason', 'groq', 'mistral'],
'technical' => ['gpu_coder', 'gpu_fast', 'cerebras', 'groq'],
'strategic' => ['gpu_reason', 'gpu_fast', 'sambanova', 'mistral'],
'operational' => ['gpu_fast', 'gpu_coder', 'groq', 'cerebras'],
'social_intelligence' => ['gpu_fast', 'groq', 'sambanova', 'mistral'],
'mathematical' => ['gpu_reason', 'gpu_fast', 'sambanova', 'cerebras'],
'causal' => ['gpu_reason', 'gpu_fast', 'sambanova', 'groq'],
'compliance' => ['gpu_reason', 'gpu_fast', 'sambanova', 'mistral'],
'teaching' => ['gpu_fast', 'gpu_reason', 'groq', 'mistral'],
'synthesis' => ['gpu_fast', 'groq', 'cerebras', 'sambanova'],
'conversational' => ['gpu_fast', 'groq', 'cerebras', 'sambanova'],
];
$preferredOrder = $routing[$primary] ?? $routing['conversational'];
// Filter to only available providers
$available = [];
foreach ($preferredOrder as $provId) {
if (isset($providers[$provId])) {
$available[] = $provId;
}
}
// Fallback: add remaining providers
foreach ($providers as $id => $prov) {
if (!in_array($id, $available) && !str_contains($id, 'vision')) {
$available[] = $id;
}
}
return $available;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 34: NUCLEUS POST-PROCESSOR (from brain-nucleus.php) ║
// ║ Enhanced response formatting + emoji injection ║
// ╚═══════════════════════════════════════════════════════════════╝
function nucleusPostProcess($response) {
// Skip short responses
if (mb_strlen($response) < 100) return $response;
// Add natural emojis if missing (brain-nucleus style)
$emojiCount = preg_match_all('/[\x{1F300}-\x{1F9FF}\x{2600}-\x{27BF}\x{1F600}-\x{1F64F}]/u', $response);
if ($emojiCount < 2 && mb_strlen($response) > 200) {
// Inject contextual emojis at section breaks
$sectionEmojis = ["📊","💡","🔧","📋","🎯","","🚀","","📦","🔍","🛡️","💼"];
$emoji = $sectionEmojis[array_rand($sectionEmojis)];
// Add at first header or paragraph break
if (preg_match('/^(#+\s)/m', $response)) {
$response = preg_replace('/^(#+\s)/m', "$emoji $1", $response, 1);
}
}
// Ensure TLDR for long responses (>1500 chars)
if (mb_strlen($response) > 1500 && !preg_match('/^(TLDR|TL;DR|En résumé|En bref)/im', $response)) {
// Extract first meaningful sentence as pseudo-TLDR
if (preg_match('/^(.{50,200}[.!?])/s', $response, $m)) {
$tldr = "**En bref:** " . trim($m[1]);
$response = $tldr . "\n\n---\n\n" . $response;
}
}
// Clean double spaces and excessive newlines
$response = preg_replace('/ +/', ' ', $response);
$response = preg_replace('/\n{4,}/', "\n\n\n", $response);
return $response;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 33: NUCLEUS PROMPT INJECTOR (from brain-nucleus.php) ║
// ║ Injects expert-level prompts based on intent + message ║
// ╚═══════════════════════════════════════════════════════════════╝
function getNucleusPrompt($intent, $message) {
$nucleusDir = "/opt/wevia-brain/prompts/nucleus/";
if (!is_dir($nucleusDir)) return "";
$primary = is_array($intent) ? ($intent["primary"] ?? "conversational") : $intent;
$msg = mb_strtolower($message);
$injected = [];
$budget = 2000; // Max chars from nucleus (fits in 8K cap)
// Always inject cognitive engine for complex queries (>30 chars)
if (mb_strlen($message) > 30 && !in_array($primary, ["conversational","greeting"])) {
$ce = @file_get_contents($nucleusDir . "cognitive-engine.md");
if ($ce) { $injected[] = mb_substr($ce, 0, 1200); $budget -= 1200; }
}
// Intent-specific nucleus injection
$intentMap = [
"technical" => ["code-mastery", "ssh-mastery"],
"operational" => ["code-mastery", "ssh-mastery"],
"analytical" => ["self-verification", "graph-engine"],
"strategic" => ["domain-expertise", "self-verification"],
"creative" => ["graph-engine", "natural-language"],
"mathematical" => ["self-verification"],
"causal" => ["self-verification", "domain-expertise"],
"compliance" => ["domain-expertise", "self-verification"],
"teaching" => ["natural-language"],
"social_intelligence" => ["domain-expertise"],
];
$modules = $intentMap[$primary] ?? [];
foreach ($modules as $mod) {
if ($budget <= 0) break;
$content = @file_get_contents($nucleusDir . "$mod.md");
if ($content) {
$chunk = mb_substr($content, 0, min($budget, 800));
$injected[] = $chunk;
$budget -= strlen($chunk);
}
}
// Keyword-triggered nucleus injection
if (preg_match("/(code|script|php|python|bash|sql|api)/i", $msg) && $budget > 0) {
$cm = @file_get_contents($nucleusDir . "code-mastery.md");
if ($cm && !in_array("code-mastery", $modules)) {
$injected[] = mb_substr($cm, 0, min($budget, 600));
}
}
if (preg_match("/(graph|diagram|mermaid|schema|flowchart)/i", $msg) && $budget > 0) {
$ge = @file_get_contents($nucleusDir . "graph-engine.md");
if ($ge && !in_array("graph-engine", $modules)) {
$injected[] = mb_substr($ge, 0, min($budget, 600));
}
}
if (empty($injected)) return "";
return "\n\n## NUCLEUS INTELLIGENCE\n" . implode("\n", $injected);
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 19: RESPONSE POST-PROCESSOR ║
// ║ Quality enhancement on generated responses ║
// ╚═══════════════════════════════════════════════════════════════╝
function cognitivePostProcess($response, $intent) {
// Strip thinking tags (DeepSeek R1)
$response = preg_replace('/<think>[\s\S]*?<\/think>/', '', $response);
$response = trim($response);
// Strip excessive markdown for voice/clean display
// Keep **bold** but remove excessive formatting
$response = preg_replace('/#{4,6}\s/', '', $response); // Remove h4-h6 (too deep)
$response = preg_replace('/`{3}[\s\S]*?`{3}/', '[CODE BLOCK]', $response); // Mark code blocks
// Ensure emoji presence (brand requirement)
$hasEmoji = preg_match('/[\x{1F300}-\x{1F9FF}]/u', $response);
if (!$hasEmoji && mb_strlen($response) > 50) {
// Add contextual emoji based on intent
$emojiMap = [
'analytical' => '📊',
'creative' => '💡',
'technical' => '⚡',
'strategic' => '🎯',
'operational' => '✅',
'social_intelligence' => '🌐',
'synthesis' => '📋',
'conversational' => '✨'
];
$emoji = $emojiMap[$intent['primary']] ?? '💡';
$response = $emoji . ' ' . $response;
}
// Strip internal keywords that should never leak
$forbidden = ['WEVADS', 'PowerMTA', 'pmta', 'adx_system', 'adx_clients', 'brain_send_configs',
'Arsenal', 'sentinel-brain', 'brain-bridge', 'brain_factory', 'send_configs'];
foreach ($forbidden as $word) {
$response = str_ireplace($word, '[CONFIDENTIEL]', $response);
}
return $response;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 20: CONVERSATION MEMORY MANAGER ║
// ║ Episodic + Semantic memory from conversation context ║
// ╚═══════════════════════════════════════════════════════════════╝
function extractMemoryEntities($message, $response) {
$entities = [];
// Extract named entities (companies, technologies, people)
$patterns = [
'company' => '/\b(SAP|Oracle|Microsoft|Google|AWS|Azure|Huawei|Shell|Total|L\'Oréal|Vistex|Odoo|Salesforce|ServiceNow)\b/i',
'technology' => '/\b(S\/4HANA|RISE|BTP|Fiori|ABAP|Docker|Kubernetes|React|Node\.js|PostgreSQL|MongoDB|Redis|Kafka|Terraform|Ansible)\b/i',
'framework' => '/\b(TOGAF|SAFe|Scrum|Kanban|ITIL|COBIT|ISO\s*\d+|RGPD|NIS2|SOC|SIEM)\b/i',
'metric' => '/\b(\d+[%€\$MK]|\d+\s*(?:millions?|milliards?|users?|utilisateurs?))\b/i'
];
foreach ($patterns as $type => $pattern) {
if (preg_match_all($pattern, $message . ' ' . $response, $matches)) {
foreach ($matches[0] as $match) {
$entities[] = ['type' => $type, 'value' => $match, 'timestamp' => time()];
}
}
}
return $entities;
}
function buildMemoryContext($pdo, $sessionId, $limit = 5) {
try {
// Get recent entities from this session
$stmt = $pdo->prepare("
SELECT entity_type, entity_value, context_snippet, created_at
FROM wevia_memory
WHERE session_id = ?
ORDER BY created_at DESC
LIMIT ?
");
$stmt->execute([$sessionId, $limit]);
$memories = $stmt->fetchAll(PDO::FETCH_ASSOC);
if (empty($memories)) return '';
$ctx = "Sujets abordés dans cette conversation:\n";
foreach ($memories as $mem) {
$ctx .= "- {$mem['entity_type']}: {$mem['entity_value']}\n";
}
return $ctx;
} catch (Exception $e) {
return ''; // Graceful degradation
}
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 21: CRITIC MODEL (Self-Correction) ║
// ║ Post-generation quality check via secondary LLM call ║
// ╚═══════════════════════════════════════════════════════════════╝
function runCriticCheck($response, $originalQuery, $providers) {
// Only for complex/important responses (>500 chars)
if (mb_strlen($response) < 500) return $response;
$criticPrompt = "Tu es un vérificateur expert. Analyse cette réponse à la question: \"{$originalQuery}\"\n\n"
. "RÉPONSE À VÉRIFIER:\n{$response}\n\n"
. "VÉRIFIE:\n"
. "1. Erreurs factuelles ou hallucinations\n"
. "2. Incohérences logiques\n"
. "3. Informations manquantes critiques\n"
. "4. Données obsolètes ou incorrectes\n\n"
. "Si correct → réponds EXACTEMENT: OK\n"
. "Si problème → décris en 1 phrase le correctif nécessaire.";
// Use fastest available provider for critic
$fastProviders = ['cerebras', 'groq', 'gpu_fast'];
foreach ($fastProviders as $provId) {
if (isset($providers[$provId])) {
// Make a quick call to the critic
// (Implementation depends on the main API's callProvider function)
return $response; // For now, return as-is until integrated
}
}
return $response;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 22: TEMPERATURE CALIBRATOR ║
// ║ Dynamic temperature based on task type ║
// ╚═══════════════════════════════════════════════════════════════╝
function calibrateTemperature($intent) {
$tempMap = [
'analytical' => 0.3, // Precision
'technical' => 0.2, // Code accuracy
'strategic' => 0.6, // Balanced creativity + rigor
'creative' => 0.8, // High creativity
'operational' => 0.3, // Precision
'social_intelligence' => 0.5,
'mathematical' => 0.1,
'causal' => 0.3,
'compliance' => 0.2,
'teaching' => 0.5, // Balanced
'synthesis' => 0.3, // Factual
'conversational' => 0.7, // Natural flow
];
return $tempMap[$intent['primary']] ?? 0.5;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 23: MAX TOKENS OPTIMIZER ║
// ║ Dynamic token allocation based on expected response length ║
// ╚═══════════════════════════════════════════════════════════════╝
function calibrateMaxTokens($intent, $message) {
$base = [
'conversational' => 1024,
'synthesis' => 3072,
'operational' => 3072,
'technical' => 6144,
'analytical' => 6144,
'strategic' => 6144,
'creative' => 4096,
'social_intelligence' => 4096,
'mathematical' => 4096,
'causal' => 4096,
'compliance' => 6144,
'teaching' => 4096,
];
$tokens = $base[$intent['primary']] ?? 2048;
// Boost for explicit length requests
$msg = mb_strtolower($message);
if (preg_match('/(détaillé|complet|exhaustif|approfondi|rapport|document|pdf)/i', $msg)) {
$tokens = max($tokens, 6000);
}
if (preg_match('/(court|bref|résumé|concis|rapide)/i', $msg)) {
$tokens = min($tokens, 1024);
}
return $tokens;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 24: DISAMBIGUATION ENGINE (Opus 4.6 Gap) ║
// ║ Smart clarification when intent is ambiguous ║
// ╚═══════════════════════════════════════════════════════════════╝
function cognitiveDisambiguate($message, $intent) {
// If no strong signal detected (all weights < 2), flag as ambiguous
$maxWeight = max($intent['weights']);
$isAmbiguous = ($maxWeight < 2 && mb_strlen($message) > 30);
// Check for vague pronouns without antecedent
$vaguePatterns = ['/\b(ça|cela|ce truc|cette chose|le machin)\b/i', '/\b(it|that thing|the stuff)\b/i'];
foreach ($vaguePatterns as $p) {
if (preg_match($p, $message)) $isAmbiguous = true;
}
return [
'is_ambiguous' => $isAmbiguous,
'max_signal' => $maxWeight,
'suggestion' => $isAmbiguous ? 'CLARIFY_BEFORE_ANSWERING' : 'PROCEED'
];
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 25: HALLUCINATION GUARD (Opus 4.6 Core) ║
// ║ KB-grounded fact verification before response ║
// ╚═══════════════════════════════════════════════════════════════╝
function hallucinationGuard($response, $kbContext) {
if (empty($kbContext)) return ['safe' => true, 'flags' => []];
$flags = [];
// Check for confident claims about WEVAL that contradict KB
$weval_claims = [];
if (preg_match_all('/WEVAL\s+(propose|offre|fournit|est|dispose|possède)\s+([^.]+)/i', $response, $matches)) {
foreach ($matches[2] as $claim) {
// Verify claim exists in KB context
$found = false;
$kbLower = mb_strtolower($kbContext);
$claimWords = array_filter(explode(' ', mb_strtolower($claim)), fn($w) => mb_strlen($w) > 4);
$matchCount = 0;
foreach ($claimWords as $word) {
if (mb_strpos($kbLower, $word) !== false) $matchCount++;
}
if (count($claimWords) > 0 && $matchCount / count($claimWords) < 0.3) {
$flags[] = "Claim non vérifié dans KB: " . mb_substr($claim, 0, 80);
}
}
}
// Check for fabricated statistics
if (preg_match_all('/(\d{2,})\s*%/', $response, $matches)) {
foreach ($matches[0] as $stat) {
if (mb_strpos($kbContext, $stat) === false) {
$flags[] = "Statistique non sourcée: {$stat}";
}
}
}
return ['safe' => empty($flags), 'flags' => $flags];
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 26: MATHEMATICAL REASONING ENGINE (Opus 4.6 Gap) ║
// ║ Step-by-step math with verification ║
// ╚═══════════════════════════════════════════════════════════════╝
function isMathQuery($message) {
$mathIndicators = [
'/\d+\s*[\+\-\*\/\^]\s*\d+/', // arithmetic
'/(calcul|equation|formule|deriv|int[eé]gr|matrice|probabilit|statistiqu|moyenne|m[eé]diane|[eé]cart|variance|regression|corr[eé]lation)/i',
'/\b(solve|calculate|compute|derivative|integral|matrix|probability|mean|median|std)\b/i',
'/\b(ROI|TCO|NPV|IRR|CAGR|payback|amortissement|actualisation|VAN|TRI)\b/i',
];
foreach ($mathIndicators as $p) {
if (preg_match($p, $message)) return true;
}
return false;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 27: CAUSAL INFERENCE ENGINE ║
// ║ Beyond correlation — structural causal reasoning ║
// ╚═══════════════════════════════════════════════════════════════╝
function detectCausalQuery($message) {
$causalPatterns = [
'/(pourquoi|cause[rs]?|raison|origine|source|root.cause|provoque|entra[iî]ne|impact|cons[eé]quence|r[eé]sulte|corr[eé]lation|causalit[eé])/i',
'/(why|because|cause|root.cause|impact|consequence|leads.to|results.in)/i',
];
foreach ($causalPatterns as $p) {
if (preg_match($p, $message)) return true;
}
return false;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 28: STRUCTURED OUTPUT GENERATOR ║
// ║ JSON/XML/CSV/Table generation on demand ║
// ╚═══════════════════════════════════════════════════════════════╝
function detectStructuredOutputRequest($message) {
$patterns = [
'/(json|xml|csv|tableau|table|grille|matrice|spreadsheet|excel)/i',
'/(structur[eé]|format[eé]|organis[eé]|class[eé]|tri[eé]|cat[eé]goris[eé])/i',
'/\b(structured|formatted|organized|sorted|categorized)\b/i',
];
foreach ($patterns as $p) {
if (preg_match($p, $message)) return true;
}
return false;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 29: MULTI-TURN CONTEXT COMPRESSOR ║
// ║ Intelligent conversation summarization for long sessions ║
// ╚═══════════════════════════════════════════════════════════════╝
function compressConversationContext($history, $maxMessages = 20) {
if (count($history) <= $maxMessages) return $history;
// Keep first 2 messages (context setting) + last maxMessages-2
$compressed = [];
$compressed[] = $history[0]; // First message (often sets context)
if (count($history) > 1) $compressed[] = $history[1];
// Add summary of middle section
$middleCount = count($history) - $maxMessages;
$compressed[] = [
'role' => 'system',
'content' => "[Résumé de {$middleCount} messages intermédiaires — contexte préservé dans la mémoire épisodique]"
];
// Keep last messages
$lastMessages = array_slice($history, -($maxMessages - 3));
$compressed = array_merge($compressed, $lastMessages);
return $compressed;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 30: REGULATORY COMPLIANCE ENGINE ║
// ║ RGPD, NIS2, ISO 27001, SOC2 compliance awareness ║
// ╚═══════════════════════════════════════════════════════════════╝
function detectComplianceQuery($message) {
$compliancePatterns = [
'/(RGPD|GDPR|NIS2|ISO.?27001|SOC.?2|PCI.?DSS|HIPAA|SOX|DORA|conformit[eé]|compliance|r[eé]glementation|certification)/i',
'/(donn[eé]es personnelles|data protection|privacy|consentement|DPO|AIPD|DPIA|registre.traitement)/i',
];
foreach ($compliancePatterns as $p) {
if (preg_match($p, $message)) return true;
}
return false;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 31: SOCRATIC TEACHING ENGINE ║
// ║ Progressive knowledge transfer through guided questions ║
// ╚═══════════════════════════════════════════════════════════════╝
function detectTeachingMode($message) {
$teachingPatterns = [
'/(expliqu|comprendre|apprendre|formation|tutoriel|comment.{0,3}(ça|ca) marche|c.est quoi|qu.est.ce que|d[eé]finition)/i',
'/(explain|understand|learn|tutorial|how does|what is|definition|teach me)/i',
];
foreach ($teachingPatterns as $p) {
if (preg_match($p, $message)) return true;
}
return false;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MODULE 32: REAL-TIME SOCIAL MEDIA PULSE ║
// ║ Web-sourced trend analysis and collective intelligence ║
// ╚═══════════════════════════════════════════════════════════════╝
function buildSocialPulsePrompt($topic) {
return <<<SOCIAL_PULSE
## PULSE SOCIAL — Analyse en Temps Réel
Pour le sujet "{$topic}", intègre cette couche d'intelligence collective:
- REDDIT/HN: Quels sont les débats techniques actuels? Points de friction communautaires?
- LINKEDIN: Signaux corporate — embauches, restructurations, annonces stratégiques
- TWITTER/X: Narratifs viraux, opinion leaders, controverses émergentes
- GOOGLE TRENDS: Volume de recherche, saisonnalité, géographies
- ARXIV/PAPERS: Publications récentes pertinentes (si sujet technique)
- GITHUB: Repos trending, stars, forks (si sujet dev/IA)
Utilise [SEARCH] pour vérifier les données les plus récentes.
SOCIAL_PULSE;
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ MAIN COGNITIVE PIPELINE ║
// ║ Orchestrates all modules into a coherent cognitive flow ║
// ╚═══════════════════════════════════════════════════════════════╝
function cognitivePipeline($message, $conversationHistory, $pdo, $sessionId, $providers, $kbContext = '') {
// Step 1: Classify intent
$intent = cognitiveClassifyIntent($message);
// Step 2: Build memory context
$memoryCtx = buildMemoryContext($pdo, $sessionId);
// Step 3: Build cognitive prompt
$systemPrompt = buildCognitivePrompt($intent, $conversationHistory, $kbContext, $memoryCtx);
// Step 4: Calibrate parameters
$temperature = calibrateTemperature($intent);
$maxTokens = calibrateMaxTokens($intent, $message);
// Step 5: Route to optimal model
$providerOrder = cognitiveRoute($intent, $providers);
return [
'system_prompt' => $systemPrompt,
'temperature' => $temperature,
'max_tokens' => $maxTokens,
'provider_order' => $providerOrder,
'intent' => $intent
];
}
// ╔═══════════════════════════════════════════════════════════════╗
// ║ COGNITIVE AUGMENT — Single entry point for main API ║
// ╚═══════════════════════════════════════════════════════════════╝
function cognitiveAugment($sys, $msg, $intent, $history = [], $kbContext = "", $memoryContext = "") {
if ($intent === "greeting" || mb_strlen(trim($msg)) < 15) return $sys;
// Inject Opus master reasoning framework
$opusMaster = getOpusMasterPrompt();
if ($opusMaster && mb_strlen($sys) < 20000) {
$sys .= "\n\n## OPUS REASONING FRAMEWORK\n" . mb_substr($opusMaster, 0, 2000);
}
// Inject deep knowledge based on query
$deepK = getDeepKnowledge($msg);
if ($deepK) $sys .= $deepK;
$cogIntent = cognitiveClassifyIntent($msg);
// ═══ PERSONA INJECTION — Expert personality by intent ═══
$persona = selectPersona($cogIntent);
if ($persona && mb_strlen($sys) < 6000) {
$sys .= $persona;
}
// ═══ NUCLEUS INTELLIGENCE INJECTION ═══
$nucleus = getNucleusPrompt($cogIntent, $msg);
if ($nucleus && mb_strlen($sys) < 5500) {
$sys .= $nucleus;
}
// DEDUP: // ═══ EXPANSION ENRICHMENT — 373 brain functions ═══
// DEDUP: if (function_exists("cognitiveExpansionEnrich")) {
// DEDUP: $sys = cognitiveExpansionEnrich($sys, $msg, $cogIntent, $history);
// DEDUP: }
// ═══ COGNITIVE EXPANSION ENRICHMENT (401 functions) ═══
if (function_exists("cognitiveExpansionEnrich")) {
$sys = cognitiveExpansionEnrich($sys, $msg, $cogIntent, $history);
}
if (defined("OPUS46_LOADED") && function_exists("opus46PreProcess")) { $sys = opus46PreProcess($sys, $msg, $cogIntent, $history); }
// ═══ OPUS46-ADV ENRICHMENT
if(function_exists("opus46AdvancedEnrich")){$sys=opus46AdvancedEnrich($sys,$msg,$cogIntent,$history);}
// ═══ FEW-SHOT INJECTION — Example Q&A by intent ═══
$fewShot = getFewShotExamples($cogIntent);
if ($fewShot && mb_strlen($sys) < 6500) {
$sys .= $fewShot;
}
$cogPrompt = buildCognitivePrompt($cogIntent, $history, $kbContext, $memoryContext);
$marker = "ARCHITECTURE COGNITIVE ACTIVE";
$pos = strpos($cogPrompt, $marker);
if ($pos !== false) {
$sys .= "\n\n" . substr($cogPrompt, $pos);
}
$GLOBALS["_cogTemp"] = calibrateTemperature($cogIntent);
$GLOBALS["_cogMaxTokens"] = calibrateMaxTokens($cogIntent, $msg);
$GLOBALS["_cogIntent"] = $cogIntent;
// ═══ COGNITIVE EXPANSION — Industry/Task/Style enrichment ═══
if (function_exists("cognitiveExpansionEnrich") && mb_strlen($sys) < 6000) {
$sys = cognitiveExpansionEnrich($sys, $msg, $cogIntent["primary"] ?? "general", $history);
}
// ═══ COGNITIVE ROUTE — Influence provider selection ═══
$cogRoute = cognitiveRoute($cogIntent, $GLOBALS["PROVIDERS"] ?? []);
if ($cogRoute) {
$GLOBALS["_cogRouteProvider"] = is_array($cogRoute) ? ($cogRoute[0] ?? null) : $cogRoute;
}
return $sys;
}