Fehler bei leeren choices-Arrays in Azure OpenAI Streaming-Antworten

SPDX-FileCopyrightText: 2025 Land Baden-Württemberg <InnoLab@stm.bwl.de> SPDX-License-Identifier: MPL-2.0

Fehler

Als User habe ich einen Fehler(Bug) gefunden, der behoben werden muss. Dazu liefere ich in dieser Vorlage bei allen kursiv beschriebenen Fragen/Unterpunkten alle relevanten Informationen für die Entwicklenden mit.

Bugbeschreibung

Bei Verwendung der Azure OpenAI Api (streaming) werden teilweise (als erster chunk) leere choices-Arrays gesendet welche einen Fehler im chat Microservices auslösen. Dadurch kann ein via Azure OpenAI gehostetes Modell nicht erfolgreich genutzt werden.

Reproduzierbarkeit

Erwartetes Verhalten

Das Modell mit der OpenAI kompatiblen API kann direkt verwendet werden.

Fehlermeldung

ERROR - chat_registry - run_chat_completion_json_stream: Error while processing chat input with model: <src.chat.chat_completion.OpenAIChatCompletion object at 0x7ffffc908290>: list index out of range

Priorität

gering

Umgebung

  • Branch: main
  • Version: 1.0.0
  • Azure OpenAI kompatible API

Zusätzlicher Inhalt

Beispiel Streaming Response mit leerem choice Array:

ChatCompletionChunk(id='', choices=[], created=0, model='', object='', service_tier=None, system_fingerprint=None, usage=None, prompt_filter_results=[{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'jailbreak': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}])

Verwendetes Modell / API:

Problemstelle im Code:

  • Microservice: chat

  • Datei: src/chat/chat_completion.py

  • Methode: _extract_text_and_finish_reason

  • Link zum code

  • Beispiel fix: Chunks mit leerem choices Array werden übersprungen, wird dann von der aufrufende Methode _postprocess_stream gefiltert. Der Fix funktioniert bei mir und damit kann der Azure AI Api Endpoint im chat soweit problemlos verwendet werden.

     if not chunk.choices or len(chunk.choices) == 0:
                return None, None

Falls gewünscht kann ich gern einen MR für den Fix oder einen komplexeren Fix bereitstellen bzw. vorbereiten.

Edited by Lennart Gastler
To upload designs, you'll need to enable LFS and have an admin enable hashed storage. More information