'http://127.0.0.1:11434', 'db_host' => '127.0.0.1', 'db_name' => 'wevia_db', 'db_user' => 'postgres' ]); switch ($action) { case 'chat': $message = $input['message'] ?? ''; if (!$message) die(json_encode(['error' => 'Empty message'])); $result = $orchestrator->process($message, [ 'session_id' => $input['session'] ?? 'api', 'capability' => $input['capability'] ?? 'normal', 'model' => $input['model'] ?? null, 'temperature' => $input['temperature'] ?? 0.7, 'max_tokens' => $input['max_tokens'] ?? 4096 ]); echo json_encode($result, JSON_UNESCAPED_UNICODE | JSON_PRETTY_PRINT); break; case 'models': // List available Ollama models $ch = curl_init('http://127.0.0.1:11434/api/tags'); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 5]); $raw = curl_exec($ch); curl_close($ch); $data = json_decode($raw, true); $models = []; foreach (($data['models'] ?? []) as $m) { $models[] = [ 'name' => $m['name'], 'size_gb' => round($m['size'] / 1e9, 1), 'modified' => $m['modified_at'] ?? '' ]; } echo json_encode(['models' => $models, 'count' => count($models)]); break; case 'kb_stats': try { $pdo = new PDO("pgsql:host=127.0.0.1;dbname=wevia_db", "postgres", ""); $rag = new RAGEngine($pdo); echo json_encode($rag->getStats()); } catch (\Exception $e) { echo json_encode(['error' => $e->getMessage()]); } break; case 'kb_ingest': $text = $input['text'] ?? ''; $source = $input['source'] ?? 'api'; $category = $input['category'] ?? 'general'; if (!$text) die(json_encode(['error' => 'Empty text'])); try { $pdo = new PDO("pgsql:host=127.0.0.1;dbname=wevia_db", "postgres", ""); $rag = new RAGEngine($pdo); $chunks = $rag->ingest($text, $source, $category); echo json_encode(['success' => true, 'chunks_created' => $chunks]); } catch (\Exception $e) { echo json_encode(['error' => $e->getMessage()]); } break; case 'health': $checks = []; // Ollama $ch = curl_init('http://127.0.0.1:11434/api/tags'); curl_setopt_array($ch, [CURLOPT_RETURNTRANSFER => true, CURLOPT_TIMEOUT => 3]); $raw = curl_exec($ch); $code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); $checks['ollama'] = $code === 200; // GPU $gpu = trim(shell_exec("nvidia-smi --query-gpu=memory.used,memory.total --format=csv,noheader 2>/dev/null")); $checks['gpu'] = !empty($gpu); $checks['gpu_info'] = $gpu; // DB try { $pdo = new PDO("pgsql:host=127.0.0.1;dbname=wevia_db", "postgres", ""); $checks['database'] = true; } catch (\Exception $e) { $checks['database'] = false; } // Disk $disk = trim(shell_exec("df -h / | tail -1 | awk '{print \$5}'")); $checks['disk_usage'] = $disk; $checks['brain_modules'] = count(glob(__DIR__ . '/*.php')); $checks['kb_files'] = count(glob(__DIR__ . '/../knowledge/*.json')); echo json_encode([ 'status' => 'operational', 'checks' => $checks, 'timestamp' => date('c') ], JSON_PRETTY_PRINT); break; case 'metrics': echo json_encode($orchestrator->getMetrics()); break; default: echo json_encode([ 'error' => 'Unknown action', 'available' => ['chat', 'models', 'kb_stats', 'kb_ingest', 'health', 'metrics'] ]); }