Discourse AI causando novos erros de SSL e Connection Reset by Peer

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.

2 curtidas