Como você escreveu, inicialmente pensei que fosse um problema na pilha de rede, no entanto, chamadas repetidas da API OpenAI do próprio contêiner funcionam bem.
Isso também é com uma compilação muito recente, commits de 21 de fevereiro.
Para provar isso (ao custo de consumir tokens), criei um script rápido para verificar a pilha de rede da OpenAI.
- Executa por 600 segundos (10 minutos)
- Faz uma chamada de conclusão de chat por segundo
- Altera o prompt para evitar cache
Execute dentro do contêiner ./launcher enter app, salve o script abaixo, torne-o executável com chmod +x test_openai.sh e, em seguida, chame-o com OPENAI_API_KEY=.... ./test_openai.sh
test_openai.sh
#!/bin/bash
# Duração para executar
DURATION_SECS=600
# Inicializar contadores
successful=0
unsuccessful=0
declare -A error_messages
# Função para calcular porcentagem
calc_percentage() {
local total=$(($1 + $2))
if [ $total -eq 0 ]; then
echo "0.00"
else
echo "scale=2; ($2 * 100) / $total" | bc
fi
}
# Função para imprimir estatísticas
print_stats() {
local percent=$(calc_percentage $successful $unsuccessful)
echo "-------------------"
echo "Chamadas bem-sucedidas: $successful"
echo "Chamadas com falha: $unsuccessful"
echo "Taxa de falha: ${percent}%"
echo "Mensagens de erro:"
for error in "${!error_messages[@]}"; do
echo " - $error (${error_messages[$error]} vezes)"
done
}
end_time=$((SECONDS + DURATION_SECS))
counter=1
while [ $SECONDS -lt $end_time ]; do
# Fazer a chamada da API com 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\": \"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)
# Obter a última linha (código de status) e o corpo da resposta
http_code=$(echo "$response" | tail -n1)
body=$(echo "$response" | sed '$d')
# Verificar se a chamada foi bem-sucedida
if [ "$http_code" = "200" ]; then
((successful++))
else
((unsuccessful++))
# Extrair mensagem de erro
error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
if [ -z "$error_msg" ]; then
error_msg="Connection error: $body"
fi
# Incrementar contador de mensagem de erro
((error_messages["$error_msg"]++))
fi
# Imprimir estatísticas atuais
print_stats
((counter++))
# Esperar 1 segundo antes da próxima chamada
sleep 1
done
Para o script de teste, minha taxa de falha foi inferior a 0,5%, o que é aceitável nessa escala.
Isso me diz que o problema está no software Discourse e não no contêiner ou na pilha de rede que o alimenta.
Se não foi corrigido com um commit recente, darei uma olhada mais a fundo.