Carpeta helpers
This commit is contained in:
@@ -0,0 +1,191 @@
|
||||
<?php
|
||||
|
||||
/*
|
||||
Función encargada de comunicarse con la API de Groq
|
||||
|
||||
Recibe:
|
||||
- Un array con todos los mensajes de contexto: system, historial y mensaje actual del usuario
|
||||
|
||||
Devuelve:
|
||||
- success -> 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.'
|
||||
];
|
||||
}
|
||||
Reference in New Issue
Block a user