Discourse AI вызывает новые ошибки SSL и Connection Reset by Peer

Как вы и написали, изначально я думал, что это проблема сетевого стека, однако повторные вызовы API OpenAI из того же контейнера работают безупречно.

Это также относится к очень свежей сборке с коммитами от 21 февраля.

Чтобы доказать это (ценой сжигания токенов), я быстро написал скрипт для проверки сетевого стека OpenAI.

  • Работает 600 секунд (10 минут)
  • Выполняет один вызов завершения чата в секунду
  • Меняет промпт, чтобы избежать кэширования

Запустите внутри контейнера ./launcher enter app, сохраните приведенный ниже скрипт, сделайте его исполняемым с помощью chmod +x test_openai.sh, а затем выполните его командой OPENAI_API_KEY=.... ./test_openai.sh.

test_openai.sh
#!/bin/bash

# Длительность выполнения
DURATION_SECS=600

# Инициализация счетчиков
successful=0
unsuccessful=0
declare -A error_messages

# Функция для расчета процента
calc_percentage() {
    local total=$(($1 + $2))
    if [ $total -eq 0 ]; then
        echo "0.00"
    else
        echo "scale=2; ($2 * 100) / $total" | bc
    fi
}

# Функция для вывода статистики
print_stats() {
    local percent=$(calc_percentage $successful $unsuccessful)
    echo "-------------------"
    echo "Успешных вызовов: $successful"
    echo "Неудачных вызовов: $unsuccessful"
    echo "Коэффициент неудач: ${percent}%"
    echo "Сообщения об ошибках:"
    for error in "${!error_messages[@]}"; do
        echo "  - $error (${error_messages[$error]} раз(а))"
    done
}

end_time=$((SECONDS + DURATION_SECS))

counter=1
while [ $SECONDS -lt $end_time ]; do
    # Выполнение вызова API с таймаутом
    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\": \"Используйте это число, чтобы выбрать ответ из одного слова: $counter\"}]
        }" \
        --connect-timeout 5 \
        --max-time 10 \
        https://api.openai.com/v1/chat/completions 2>&1)

    # Получение последней строки (код состояния) и тела ответа
    http_code=$(echo "$response" | tail -n1)
    body=$(echo "$response" | sed '$d')

    # Проверка успешности вызова
    if [ "$http_code" = "200" ]; then
        ((successful++))
    else
        ((unsuccessful++))
        # Извлечение сообщения об ошибке
        error_msg=$(echo "$body" | grep -o '"message":"[^"]*"' | cut -d'"' -f4)
        if [ -z "$error_msg" ]; then
            error_msg="Ошибка подключения: $body"
        fi
        # Увеличение счетчика сообщений об ошибках
        ((error_messages["$error_msg"]++))
    fi

    # Вывод текущей статистики
    print_stats

    ((counter++))
    
    # Пауза в 1 секунду перед следующим вызовом
    sleep 1
done

В ходе тестирования моего скрипта коэффициент неудач составил менее 0,5%, что приемлемо при таком масштабе.

Это говорит о том, что проблема кроется в программном обеспечении Discourse, а не в контейнере или сетевом стеке, на которых оно работает.

Если это не будет исправлено в последнем коммите, я продолжу расследование.

2 лайка