diff --git a/helpers.py b/helpers.py index a3d469d5..b9c4f2b1 100644 --- a/helpers.py +++ b/helpers.py @@ -733,15 +733,17 @@ def initialize_target_schema(): # ============================================================================== @retry_on_failure -def call_openai_chat(prompt, temperature=0.3, model=None): +def call_openai_chat(prompt, temperature=0.3, model=None, response_format_json=False): """ Zentrale Funktion fuer OpenAI Chat API Aufrufe. Wird von anderen globalen Helfern oder DataProcessor Methoden aufgerufen. + NEU: Unterstützt explizite Anforderung des JSON-Formats. Args: prompt (str): Der Prompt-Text an die API. temperature (float, optional): Die Temperatur fuer die Textgenerierung. Defaults to 0.3. model (str, optional): Das zu verwendende OpenAI Modell. Defaults to Config.TOKEN_MODEL. + response_format_json (bool, optional): Wenn True, wird die API um eine JSON-Antwort gebeten. Defaults to False. Returns: str: Der bereinigte Antwortstring von der API. @@ -756,18 +758,24 @@ def call_openai_chat(prompt, temperature=0.3, model=None): logger.error("Fehler: Leerer Prompt fuer OpenAI.") raise ValueError("Leerer Prompt fuer OpenAI.") - current_model = model if model else getattr(Config, 'TOKEN_MODEL', 'gpt-3.5-turbo') + current_model = model if model else getattr(Config, 'TOKEN_MODEL', 'gpt-4o') try: - # Optional: Token-Zählung für Debugging - # prompt_tokens = token_count(prompt, model=current_model) - # logger.debug(f"Sende Prompt an OpenAI ({current_model}, geschaetzt {prompt_tokens} Tokens)...") + # Baue die Anfrage-Payload dynamisch auf + request_payload = { + "model": current_model, + "messages": [{"role": "user", "content": prompt}], + "temperature": temperature + } + + # Füge den response_format Parameter hinzu, wenn er benötigt wird + if response_format_json: + logger.debug("Fordere JSON-Output von der OpenAI API an.") + request_payload["response_format"] = {"type": "json_object"} + # Hinweis: GPT-4o, GPT-4-Turbo und GPT-3.5-Turbo-Modelle unterstützen diesen Modus. - response = openai.ChatCompletion.create( - model=current_model, - messages=[{"role": "user", "content": prompt}], - temperature=temperature - ) + # Führe den API-Call mit dem dynamischen Payload aus + response = openai.ChatCompletion.create(**request_payload) if not response or not hasattr(response, 'choices') or not response.choices: logger.error(f"OpenAI Call erfolgreich, aber keine Choices in der Antwort erhalten. Response: {str(response)[:200]}...")