Discourse AI causando nuovi errori SSL e Connection Reset by Peer

Come hai scritto, inizialmente pensavo fosse un problema dello stack di rete, tuttavia le chiamate ripetute all’API OpenAI dallo stesso container funzionano bene.

Questo è anche con una build molto recente, commit del 21 febbraio.
Per dimostrarlo (a costo di bruciare token), ho preparato un rapido script per verificare lo stack di rete di OpenAI.

  • Esegue per 600 secondi (10 minuti)
  • Effettua una chiamata di completamento chat al secondo
  • Cambia il prompt per evitare la cache

Esegui all’interno del container ./launcher enter app, salva lo script seguente, rendilo eseguibile con chmod +x test_openai.sh e poi chiamalo con OPENAI_API_KEY=.... ./test_openai.sh

test_openai.sh
#!/bin/bash

# Durata dell'esecuzione
DURATION_SECS=600

# Inizializza i contatori
successful=0
unsuccessful=0
declare -A error_messages

# Funzione per calcolare la percentuale
calc_percentage() {
    local total=$(($1 + $2))
    if [ $total -eq 0 ]; then
        echo "0.00"
    else
        echo "scale=2; ($2 * 100) / $total" | bc
    fi
}

# Funzione per stampare le statistiche
print_stats() {
    local percent=$(calc_percentage $successful $unsuccessful)
    echo "-------------------"
    echo "Chiamate riuscite: $successful"
    echo "Chiamate fallite: $unsuccessful"
    echo "Tasso di fallimento: ${percent}%"
    echo "Messaggi di errore:"
    for error in "${!error_messages[@]}"; do
        echo "  - $error (${error_messages[$error]} volte)"
    done
}

end_time=$((SECONDS + DURATION_SECS))

counter=1
while [ $SECONDS -lt $end_time ]; do
    # Effettua la chiamata API con 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\": \"Usa questo numero per scegliere una risposta di una sola parola: $counter\"}]
        }" \
        --connect-timeout 5 \
        --max-time 10 \
        https://api.openai.com/v1/chat/completions 2>&1)

    # Ottieni l'ultima riga (codice di stato) e il corpo della risposta
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')

    # Verifica se la chiamata è andata a buon fine
    if [ "$http_code" = "200" ]; then
        ((successful++))
    else
        ((unsuccessful++))
        # Estrai il messaggio di errore
        error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
        if [ -z "$error_msg" ]; then
            error_msg="Errore di connessione: $body"
        fi
        # Incrementa il contatore del messaggio di errore
        ((error_messages["$error_msg"]++))
    fi

    # Stampa le statistiche correnti
    print_stats

    ((counter++))
    
    # Attendi 1 secondo prima della prossima chiamata
    sleep 1
done

Per lo script di test, il mio tasso di fallimento è stato inferiore allo 0,5%, il che è accettabile a quella scala.
Questo mi dice che il problema risiede nel software Discourse piuttosto che nel container o nello stack di rete che lo alimenta.

Se non è stato risolto con un commit recente, darò un’occhiata più approfondita.

2 Mi Piace