70 lines
4.8 KiB
PHP
70 lines
4.8 KiB
PHP
<?php
|
|
// WEVIA Brain Orchestrator v1 — Intelligent Multi-Agent Dispatch
|
|
// Analyses intent → selects best agents → dispatches → aggregates
|
|
|
|
function wevia_orchestrate($q) {
|
|
$q_lower = mb_strtolower(trim($q));
|
|
$agents_used = [];
|
|
$results = [];
|
|
|
|
// STEP 1: Intent Classification (regex-based, fast)
|
|
$intents = [];
|
|
if (preg_match('/(code|script|python|php|api|fonction|class|develop|cree.*app|build|program|html|css|react|node)/', $q_lower)) $intents[] = 'code';
|
|
if (preg_match('/(serveur|docker|disk|nginx|apache|port|infra|deploy|config|restart|service)/', $q_lower)) $intents[] = 'infra';
|
|
if (preg_match('/(securit|scan|vuln|audit|owasp|pentest|firewall|ssl)/', $q_lower)) $intents[] = 'security';
|
|
if (preg_match('/(test|nonreg|playwright|qualit|qa|bug|regression|l99)/', $q_lower)) $intents[] = 'testing';
|
|
if (preg_match('/(ethica|hcp|pharma|medecin|contact|scrape|enrichi)/', $q_lower)) $intents[] = 'data';
|
|
if (preg_match('/(recherche|veille|trend|analyse.*march|benchmark|compare)/', $q_lower)) $intents[] = 'research';
|
|
if (preg_match('/(projet|sprint|roadmap|planning|backlog|ticket)/', $q_lower)) $intents[] = 'project';
|
|
if (preg_match('/(consensus|strateg|decision|avis|vote)/', $q_lower)) $intents[] = 'consensus';
|
|
if (preg_match('/(monitor|status|health|uptime|alerte)/', $q_lower)) $intents[] = 'monitor';
|
|
if (preg_match('/(email|mail|redige|lettre|message)/', $q_lower)) $intents[] = 'compose';
|
|
if (preg_match('/(tradui|translate|anglais|arabe)/', $q_lower)) $intents[] = 'translate';
|
|
if (preg_match('/(pdf|rapport|document|facture|schema|diagramme|mermaid)/', $q_lower)) $intents[] = 'generate';
|
|
if (preg_match('/(cherche|google|search|trouve|web|actualit)/', $q_lower)) $intents[] = 'search';
|
|
if (preg_match('/(ux|design|ui|mockup|wireframe|page.*qualit)/', $q_lower)) $intents[] = 'ux';
|
|
if (preg_match('/(agent|orchestre|multi.*agent|dispatch|pipeline|workflow)/', $q_lower)) $intents[] = 'orchestrate';
|
|
if (preg_match('/(git|push|commit|branch|merge|deploy)/', $q_lower)) $intents[] = 'devops';
|
|
if (preg_match('/(explique|pourquoi|comment|architecture|raisonne|analyse)/', $q_lower)) $intents[] = 'reasoning';
|
|
|
|
if (empty($intents)) $intents[] = 'chat';
|
|
|
|
// STEP 2: Agent Selection based on intents
|
|
$agent_map = [
|
|
'code' => ['engine'=>'Cerebras/Qwen3-235B', 'handler'=>'cerebras', 'agents'=>['WEVCODE','executor']],
|
|
'infra' => ['engine'=>'WEVIA-Exec', 'handler'=>'exec', 'agents'=>['WEDROID','Guardian','Watchdog']],
|
|
'security' => ['engine'=>'Nuclei', 'handler'=>'exec', 'agents'=>['Nuclei','AEGIS','security-reviewer']],
|
|
'testing' => ['engine'=>'L99/Playwright', 'handler'=>'exec', 'agents'=>['L99_BRAIN','qa-tester','test-engineer']],
|
|
'data' => ['engine'=>'Ethica/PG', 'handler'=>'ethica', 'agents'=>['Ethica_Scraper','analyst']],
|
|
'research' => ['engine'=>'DeerFlow', 'handler'=>'deerflow', 'agents'=>['DeerFlow','scientist','explore']],
|
|
'project' => ['engine'=>'Paperclip', 'handler'=>'paperclip', 'agents'=>['CEO','planner','qa-tester']],
|
|
'consensus' => ['engine'=>'Consensus/MoA', 'handler'=>'consensus', 'agents'=>['Manager','critic','verifier']],
|
|
'monitor' => ['engine'=>'Director/Kuma', 'handler'=>'monitor', 'agents'=>['Director','Watchdog','KILO']],
|
|
'compose' => ['engine'=>'Cerebras', 'handler'=>'cerebras', 'agents'=>['writer','document-specialist']],
|
|
'translate' => ['engine'=>'Cerebras+Mistral', 'handler'=>'cerebras', 'agents'=>['writer']],
|
|
'generate' => ['engine'=>'Cerebras+Mermaid', 'handler'=>'cerebras', 'agents'=>['designer','architect']],
|
|
'search' => ['engine'=>'SearXNG', 'handler'=>'searxng', 'agents'=>['DeerFlow','explore']],
|
|
'ux' => ['engine'=>'Playwright+UX-Agent', 'handler'=>'ux', 'agents'=>['designer','UX_AGENT']],
|
|
'orchestrate'=> ['engine'=>'Cerebras+MultiAgent', 'handler'=>'cerebras', 'agents'=>['orchestration','planner']],
|
|
'devops' => ['engine'=>'WEVIA-Exec', 'handler'=>'exec', 'agents'=>['git-master','executor','deploy']],
|
|
'reasoning' => ['engine'=>'Cerebras/Qwen3-235B', 'handler'=>'cerebras', 'agents'=>['architect','analyst','scientist']],
|
|
'chat' => ['engine'=>'Groq/Llama-3.3', 'handler'=>'groq', 'agents'=>['WEVIA_PUBLIC']],
|
|
];
|
|
|
|
// STEP 3: Build dispatch plan
|
|
$plan = [];
|
|
foreach ($intents as $intent) {
|
|
if (isset($agent_map[$intent])) {
|
|
$plan[] = $agent_map[$intent];
|
|
$agents_used = array_merge($agents_used, $agent_map[$intent]['agents']);
|
|
}
|
|
}
|
|
|
|
return [
|
|
'intents' => $intents,
|
|
'agents' => array_unique($agents_used),
|
|
'engines' => array_column($plan, 'engine'),
|
|
'plan' => $plan
|
|
];
|
|
}
|