Discourse AI verursacht neue SSL- und Connection Reset by Peer-Fehler

Wie Sie schrieben, dachte ich ursprünglich, es handelte sich um ein Problem mit dem Netzwerk-Stack. Wiederholte OpenAI API-Aufrufe aus demselben Container funktionieren jedoch einwandfrei.

Dies geschieht auch mit einem sehr aktuellen Build, Commits vom 21. Februar.

Um dies zu beweisen (auf Kosten von Token-Verbrauch), habe ich ein schnelles Skript erstellt, um den OpenAI-Netzwerk-Stack zu testen.

  • Läuft 600 Sekunden (10 Minuten)
  • Führt einen Chat-Abschlussaufruf pro Sekunde durch
  • Ändert den Prompt, um den Cache zu vermeiden

Führen Sie es im Container aus: ./launcher enter app, speichern Sie das folgende Skript, machen Sie es mit chmod +x test_openai.sh ausführbar und rufen Sie es dann mit OPENAI_API_KEY=.... ./test_openai.sh auf.

test_openai.sh
#!/bin/bash

# Dauer der Ausführung
DURATION_SECS=600

# Zähler initialisieren
successful=0
unsuccessful=0
declare -A error_messages

# Funktion zur Berechnung des Prozentsatzes
calc_percentage() {
    local total=$(($1 + $2))
    if [ $total -eq 0 ]; then
        echo "0.00"
    else
        echo "scale=2; ($2 * 100) / $total" | bc
    fi
}

# Funktion zur Anzeige der Statistiken
print_stats() {
    local percent=$(calc_percentage $successful $unsuccessful)
    echo "-------------------"
    echo "Erfolgreiche Aufrufe: $successful"
    echo "Fehlgeschlagene Aufrufe: $unsuccessful"
    echo "Fehlerrate: ${percent}%"
    echo "Fehlermeldungen:"
    for error in "${!error_messages[@]}"; do
        echo "  - $error (${error_messages[$error]} Mal)"
    done
}

end_time=$((SECONDS + DURATION_SECS))

counter=1
while [ $SECONDS -lt $end_time ]; do
    # API-Aufruf mit Timeout durchführen
    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)

    # Letzte Zeile (Statuscode) und Antwortkörper abrufen
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')

    # Prüfen, ob der Aufruf erfolgreich war
    if [ "$http_code" = "200" ]; then
        ((successful++))
    else
        ((unsuccessful++))
        # Fehlermeldung extrahieren
        error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
        if [ -z "$error_msg" ]; then
            error_msg="Connection error: $body"
        fi
        # Fehlermeldungszähler erhöhen
        ((error_messages["$error_msg"]++))
    fi

    # Aktuelle Statistiken anzeigen
    print_stats

    ((counter++))
    
    # 1 Sekunde bis zum nächsten Aufruf warten
    sleep 1
done

Bei dem Testskript lag meine Fehlerrate unter 0,5 %, was in dieser Größenordnung akzeptabel ist.

Das deutet darauf hin, dass das Problem bei der Discourse-Software liegt und nicht beim Container oder dem dahinterliegenden Netzwerk-Stack.

Wenn es nicht mit einem aktuellen Commit behoben wurde, werde ich es mir genauer ansehen.

2 „Gefällt mir“