"system", "content" => $system_prompt] ]; // Inyectamos el historial para que no pierdan el hilo del debate foreach ($_SESSION['historial'] as $msg) { // Si el mensaje es del autor actual, para él es "assistant". Si es del otro o del humano, es "user". $rol_api = ($msg['autor'] == $autor) ? "assistant" : "user"; // Formateamos el texto para que sepan quién dijo qué $prefijo = ""; if ($msg['autor'] != 'Humano' && $msg['autor'] != $autor) { $prefijo = "[{$msg['autor']} dijo]: "; } $mensajes_api[] = [ "role" => $rol_api, "content" => $prefijo . $msg['texto'] ]; } // Añadimos la nueva réplica o tema $mensajes_api[] = ["role" => "user", "content" => $mensaje_nuevo]; $datos = [ "model" => $modelo, "messages" => $mensajes_api, "temperature" => 0.6, // Temperatura táctica ideal "max_tokens" => 800 ]; // Disparamos la petición por la red local 2.5G $ch = curl_init($url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); curl_setopt($ch, CURLOPT_POST, true); curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($datos)); curl_setopt($ch, CURLOPT_HTTPHEADER, ['Content-Type: application/json']); // Damos tiempo suficiente por si el Ryzen está estresado curl_setopt($ch, CURLOPT_TIMEOUT, 120); $respuesta = curl_exec($ch); $http_code = curl_getinfo($ch, CURLINFO_HTTP_CODE); curl_close($ch); if ($respuesta === false || $http_code != 200) { return "⚠️ Error de conexión con {$autor} en IP {$ip}. ¿Está LM Studio corriendo con el Local Server encendido?"; } $resultado = json_decode($respuesta, true); return $resultado['choices'][0]['message']['content'] ?? "Error procesando la respuesta neuronal."; } // ====================================================================== // 4. LÓGICA DE TURNOS Y COMBATE // ====================================================================== if (isset($_POST['continuar'])) { $sys_mazinger = $_POST['sys_mazinger']; $sys_afrodita = $_POST['sys_afrodita']; // Fase 1: Arranque if (empty($_SESSION['historial'])) { $tema_inicial = $_POST['tema_inicial']; $_SESSION['historial'][] = ['autor' => 'Humano', 'texto' => $tema_inicial]; $ultimo_mensaje = $tema_inicial; } else { // Coge el último golpe lanzado por Afrodita para que Mazinger responda $ultimo_mensaje = end($_SESSION['historial'])['texto']; } // Turno de Mazinger (Analista Bio-Digital) $respuesta_mazinger = llamar_ia($ip_mazinger, $puerto_mazinger, $modelo_mazinger, $sys_mazinger, $ultimo_mensaje, 'Mazinger'); $_SESSION['historial'][] = ['autor' => 'Mazinger', 'texto' => $respuesta_mazinger]; // Turno de Afrodita (Auditora Implacable) $respuesta_afrodita = llamar_ia($ip_afrodita, $puerto_afrodita, $modelo_afrodita, $sys_afrodita, $respuesta_mazinger, 'Afrodita'); $_SESSION['historial'][] = ['autor' => 'Afrodita', 'texto' => $respuesta_afrodita]; } ?>