diff --git a/helpers.py b/helpers.py index 94870b94..3519aca0 100644 --- a/helpers.py +++ b/helpers.py @@ -1047,12 +1047,24 @@ def evaluate_branches_batch(companies_data): if not response_str: raise APIError("Keine Antwort von OpenAI erhalten.") - # Das Ergebnis sollte direkt eine Liste von Dictionaries sein - results_list = json.loads(response_str) + response_json = json.loads(response_str) - # Validierung, ob die Antwort eine Liste ist - if not isinstance(results_list, list): - logger.error(f"KI-Antwort ist keine Liste, sondern {type(results_list)}. Breche Batch ab.") + # NEUE, INTELLIGENTE PARSING-LOGIK + results_list = None + if isinstance(response_json, list): + # Der Idealfall: Die KI hat eine Liste zurückgegeben + results_list = response_json + elif isinstance(response_json, dict): + # Der häufige Fall: Die KI hat ein Objekt zurückgegeben, das eine Liste enthält + # Wir durchsuchen das Dictionary nach dem ersten Wert, der eine Liste ist. + for key, value in response_json.items(): + if isinstance(value, list): + logger.debug(f"Antwort war ein Dictionary, aber eine Ergebnisliste unter dem Schlüssel '{key}' gefunden.") + results_list = value + break + + if results_list is None: + logger.error(f"Konnte keine Ergebnisliste in der KI-Antwort finden. Antworttyp: {type(response_json)}. Inhalt: {str(response_json)[:300]}...") return None return results_list