Comme vous l’avez écrit, j’ai d’abord pensé qu’il s’agissait d’un problème de pile réseau, mais les appels répétés à l’API OpenAI depuis le conteneur lui-même fonctionnent bien.
Ceci est également avec une version très récente, des commits datant du 21 février.
Pour le prouver (au prix de la consommation de tokens), j’ai élaboré un script rapide pour vérifier la pile réseau OpenAI.
- S’exécute pendant 600 secondes (10 minutes)
- Effectue un appel de complétion de chat par seconde
- Change l’invite pour éviter le cache
Exécutez à l’intérieur du conteneur ./launcher enter app, enregistrez le script ci-dessous, rendez-le exécutable avec chmod +x test_openai.sh et appelez-le ensuite avec OPENAI_API_KEY=.... ./test_openai.sh
test_openai.sh
#!/bin/bash
# Durée d'exécution
DURATION_SECS=600
# Initialiser les compteurs
successful=0
unsuccessful=0
declare -A error_messages
# Fonction pour calculer le pourcentage
calc_percentage() {
local total=$(($1 + $2))
if [ $total -eq 0 ]; then
echo "0.00"
else
echo "scale=2; ($2 * 100) / $total" | bc
fi
}
# Fonction pour afficher les statistiques
print_stats() {
local percent=$(calc_percentage $successful $unsuccessful)
echo "-------------------"
echo "Appels réussis : $successful"
echo "Appels échoués : $unsuccessful"
echo "Taux d'échec : ${percent}%"
echo "Messages d'erreur :"
for error in "${!error_messages[@]}"; do
echo " - $error (${error_messages[$error]} fois)"
done
}
end_time=$((SECONDS + DURATION_SECS))
counter=1
while [ $SECONDS -lt $end_time ]; do
# Effectuer l'appel API avec timeout
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\": \"Utilise ce nombre pour choisir une réponse en un mot : $counter\"}]
}" \
--connect-timeout 5 \
--max-time 10 \
https://api.openai.com/v1/chat/completions 2>&1)
# Obtenir la dernière ligne (code de statut) et le corps de la réponse
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
# Vérifier si l'appel a réussi
if [ "$http_code" = "200" ]; then
((successful++))
else
((unsuccessful++))
# Extraire le message d'erreur
error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
if [ -z "$error_msg" ]; then
error_msg="Erreur de connexion : $body"
fi
# Incrémenter le compteur de message d'erreur
((error_messages["$error_msg"]++))
fi
# Afficher les statistiques actuelles
print_stats
((counter++))
# Attendre 1 seconde avant le prochain appel
sleep 1
done
Pour le script de test, mon taux d’échec était inférieur à 0,5 %, ce qui est acceptable à cette échelle.
Cela me dit que le problème réside dans le logiciel Discourse plutôt que dans le conteneur ou la pile réseau qui l’alimente.
S’il n’a pas été corrigé avec un commit récent, je vais y regarder de plus près.