diff --git a/helpers.py b/helpers.py index 4818bc5c..ba2b8fd9 100644 --- a/helpers.py +++ b/helpers.py @@ -37,7 +37,7 @@ import requests from bs4 import BeautifulSoup import pandas as pd import openai -#from openai.error import AuthenticationError, OpenAIError, RateLimitError, APIError, Timeout, InvalidRequestError, ServiceUnavailableError +from openai.error import AuthenticationError, OpenAIError, RateLimitError, APIError, Timeout, InvalidRequestError, ServiceUnavailableError from config import (Config, BRANCH_MAPPING_FILE, URL_CHECK_MARKER, USER_AGENTS, LOG_DIR) # Optionale Bibliotheken @@ -759,22 +759,20 @@ def initialize_target_schema(): @retry_on_failure def call_openai_chat(prompt, temperature=0.3, model=None, response_format_json=False): """ - Zentrale Funktion fuer OpenAI Chat API Aufrufe (aktualisiert für openai>1.0). + Zentrale Funktion fuer OpenAI Chat API Aufrufe (kompatibel mit openai v0.x). """ logger = logging.getLogger(__name__) api_key = Config.API_KEYS.get('openai') if not api_key: logger.error("Fehler: OpenAI API Key nicht konfiguriert.") - raise openai.AuthenticationError("OpenAI API Key nicht konfiguriert.") + raise AuthenticationError("OpenAI API Key nicht konfiguriert.") # Nutzt die alte Fehlerklasse if not prompt or not isinstance(prompt, str) or not prompt.strip(): logger.error("Fehler: Leerer Prompt fuer OpenAI.") raise ValueError("Leerer Prompt fuer OpenAI.") current_model = model if model else getattr(Config, 'TOKEN_MODEL', 'gpt-4o') - - # NEU: Der Client muss instanziiert werden - client = openai.OpenAI(api_key=api_key) + openai.api_key = api_key # API-Key wird global für das Modul gesetzt try: request_payload = { @@ -782,21 +780,24 @@ def call_openai_chat(prompt, temperature=0.3, model=None, response_format_json=F "messages": [{"role": "user", "content": prompt}], "temperature": temperature } - + + # Hinweis: Der Parameter 'response_format_json' hat in v0.x keine direkte Entsprechung. + # Die Anforderung für JSON muss im Prompt selbst enthalten sein, was in den aufrufenden + # Funktionen wie evaluate_branche_chatgpt bereits der Fall ist. if response_format_json: - logger.debug("Fordere JSON-Output von der OpenAI API an.") - request_payload["response_format"] = {"type": "json_object"} + logger.debug("JSON-Output via Prompt angefordert (v0.x Kompatibilitätsmodus).") - # NEU: Der Aufruf erfolgt über das client-Objekt - response = client.chat.completions.create(**request_payload) + # Der Aufruf erfolgt über die statische Methode ChatCompletion.create + response = openai.ChatCompletion.create(**request_payload) - result = response.choices[0].message.content.strip() + result = response['choices'][0]['message']['content'].strip() return result - # NEU: Angepasste Fehlerbehandlung für die neue Bibliothek - except openai.APIError as e: + # Die Fehlerbehandlung hier fängt allgemeine Fehler ab, spezifische Fehler + # werden vom @retry_on_failure Decorator behandelt. + except APIError as e: # Nutzt die alte Fehlerklasse logger.error(f"OpenAI API Fehler: {e}") - raise e # Erneut auslösen für den @retry_on_failure Decorator + raise e # Erneut auslösen für den Decorator except Exception as e: logger.error(f"Unerwarteter Fehler beim OpenAI-Aufruf: {e}") raise e