Como usted escribió, originalmente pensé que se trataba de un problema de la pila de red; sin embargo, las llamadas repetidas a la API de OpenAI desde el mismo contenedor funcionan bien.
Esto también es con una compilación muy reciente, commits hasta el 21 de febrero.
Para demostrar esto (a costa de consumir tokens), preparé un script rápido para verificar la pila de red de OpenAI.
- Se ejecuta durante 600 segundos (10 minutos)
- Realiza una llamada de finalización de chat por segundo
- Cambia el prompt para evitar la caché
Ejecute dentro del contenedor ./launcher enter app, guarde el siguiente script, hágalo ejecutable con chmod +x test_openai.sh y luego llámelo con OPENAI_API_KEY=.... ./test_openai.sh
test_openai.sh
#!/bin/bash
# Duración de la ejecución
DURATION_SECS=600
# Inicializar contadores
successful=0
unsuccessful=0
declare -A error_messages
# Función para calcular el porcentaje
calc_percentage() {
local total=$(($1 + $2))
if [ $total -eq 0 ]; then
echo "0.00"
else
echo "scale=2; ($2 * 100) / $total" | bc
fi
}
# Función para imprimir estadísticas
print_stats() {
local percent=$(calc_percentage $successful $unsuccessful)
echo "-------------------"
echo "Llamadas exitosas: $successful"
echo "Llamadas fallidas: $unsuccessful"
echo "Tasa de fallos: ${percent}%"
echo "Mensajes de error:"
for error in "${!error_messages[@]}"; do
echo " - $error (${error_messages[$error]} veces)"
done
}
end_time=$((SECONDS + DURATION_SECS))
counter=1
while [ $SECONDS -lt $end_time ]; do
# Realizar la llamada a la API con tiempo de espera
response=$(curl -s -w "\n%{http_code}" \
-X POST \
-H "Content-Type: application/json" \
-H "Authorization: Bearer $OPENAI_API_KEY" \
-d "{
\"model\": \"gpt-4o-mini\",
\"messages\": [{\"role\": \"user\", \"content\": \"Use this number to choose a one word response: $counter\"}]
}" \
--connect-timeout 5 \
--max-time 10 \
https://api.openai.com/v1/chat/completions 2>&1)
# Obtener la última línea (código de estado) y el cuerpo de la respuesta
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
# Verificar si la llamada fue exitosa
if [ "$http_code" = "200" ]; then
((successful++))
else
((unsuccessful++))
# Extraer mensaje de error
error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
if [ -z "$error_msg" ]; then
error_msg="Connection error: $body"
fi
# Incrementar el contador del mensaje de error
((error_messages["$error_msg"]++))
fi
# Imprimir estadísticas actuales
print_stats
((counter++))
# Esperar 1 segundo antes de la próxima llamada
sleep 1
done
Para el script de prueba, mi tasa de fallos fue inferior al 0.5%, lo cual es aceptable a esa escala.
Esto me dice que el problema reside en el software Discourse y no en el contenedor o la pila de red que lo impulsa.
Si no se ha solucionado con una confirmación reciente, lo investigaré más a fondo.