true/false - content -> respuesta del modelo - error -> mensaje de error en caso de fallo */ function consultarChatbot($mensajes) { /* DATA Arma el cuerpo JSON que será enviado a la API model: - Modelo de IA a utilizar messages: - Conversación completa temperature: - Nivel de creatividad - Mientras mas bajo, más preciso y menos inventa */ $data = [ 'model' => 'llama-3.1-8b-instant', 'messages' => $mensajes, 'temperature' => 0.2 ]; /* HEADERS HTTP Content-Type: - Indicamos que enviamos JSON Authorization: - Token Bearer con la API KEY - Se obtiene desde el archivo .env cargado en $_ENV */ $headers = [ 'Content-Type: application/json', 'Authorization: Bearer ' . $_ENV['GROQ_API_KEY'] ]; /* INICIALIZAR CURL cURL permite realizar solicitudes HTTP desde PHP */ $ch = curl_init(); /* CONFIGURACIÓN CURL CURLOPT_URL - Endpoint oficial de Groq CURLOPT_RETURNTRANSFER - Hace que la respuesta se devuelva como string - Si no estuviera, la imprimiría directamente CURLOPT_POST - Indicamos que la petición será POST CURLOPT_HTTPHEADER - Enviamos headers HTTP CURLOPT_POSTFIELDS - Enviamos el body JSON */ curl_setopt_array($ch, [ CURLOPT_URL => 'https://api.groq.com/openai/v1/chat/completions', CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_HTTPHEADER => $headers, CURLOPT_POSTFIELDS => json_encode($data) ]); /* EJECUTAR CONSULTA - Se realiza la petición HTTP a Groq */ $response = curl_exec($ch); /* ERROR CURL Detecta errores de conexión reales */ if (curl_errno($ch)) { $error = curl_error($ch); curl_close($ch); return [ 'success' => false, 'error' => $error ]; } /* HTTP STATUS CODE Obtenemos el código HTTP de la respuesta */ $httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE); /* CERRAR cURL Liberamos recursos */ curl_close($ch); /* RATE LIMIT Groq limita la cantidad de tokens por minuto 429 = demasiadas consultas o contexto muy grande */ if ($httpCode === 429) { return [ 'success' => false, 'error' => 'Límite temporal alcanzado. Esperá unos segundos.' ]; } /* OTROS ERRORES HTTP Si la respuesta no fue 200, devolvemos error (200 -> OK) */ if ($httpCode !== 200) { return [ 'success' => false, 'error' => "HTTP ERROR {$httpCode}: {$response}" ]; } /* DECODIFICAR JSON Convertimos la respuesta JSON de Groq en array PHP */ $resultado = json_decode($response, true); /* RESPUESTA FINAL choices[0]['message']['content'] Es donde Groq devuelve el texto generado */ return [ 'success' => true, 'content' => $resultado['choices'][0]['message']['content'] ?? 'Sin respuesta.' ]; }