Files
html/api/wevia-redis-llm.php
2026-04-14 18:20:01 +02:00

43 lines
1.4 KiB
PHP

<?php
/**
* WEVIA Redis LLM — Non-blocking LLM calls via Redis queue
* Usage: include this file, then call wevia_llm($message, $system_prompt)
* Returns response in ~5-15s WITHOUT blocking FPM workers
*/
function wevia_llm($message, $system = 'Tu es WEVIA, IA souveraine de WEVAL Consulting.', $max_tokens = 1000) {
$redis = new Redis();
if (!$redis->connect('127.0.0.1', 6379, 2)) {
return ['status' => 'error', 'response' => 'Redis connection failed', 'provider' => 'error'];
}
$task_id = uniqid('llm_', true);
$task = json_encode([
'id' => $task_id,
'messages' => [
['role' => 'system', 'content' => $system],
['role' => 'user', 'content' => $message]
],
'max_tokens' => $max_tokens,
'ts' => time()
]);
// Push to queue
$redis->lPush('wevia:llm:queue', $task);
// Poll for result (non-blocking sleep, releases CPU)
$key = "wevia:llm:result:$task_id";
$max_wait = 20; // seconds
$start = time();
while (time() - $start < $max_wait) {
$result = $redis->get($key);
if ($result) {
$redis->del($key);
return json_decode($result, true);
}
usleep(200000); // 200ms sleep — FPM worker sleeps, doesn't consume CPU
}
return ['status' => 'error', 'response' => 'Timeout waiting for LLM response', 'provider' => 'timeout'];
}