From 73e835afc1ae609eb632c7ddc12a5a76b20a15e5 Mon Sep 17 00:00:00 2001 From: Floke Date: Thu, 24 Apr 2025 05:59:51 +0000 Subject: [PATCH] bugfix --- brancheneinstufung.py | 103 ++++++++++++++++++++++++++++++------------ 1 file changed, 75 insertions(+), 28 deletions(-) diff --git a/brancheneinstufung.py b/brancheneinstufung.py index ca431a36..a58a38db 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -2259,42 +2259,89 @@ class DataProcessor: wiki_confirm = ""; alt_article = ""; wiki_explanation = "" - if chat_response: - match = re.match(r"Antwort: (.*)", chat_response.strip()) - if match: - answer_text = match.group(1).strip() - logging.debug(f"Zeile {row_num_in_sheet} Verifizierungsantwort: '{answer_text}'") - if answer_text.upper() == "OK": wiki_confirm = "OK" - elif answer_text.startswith("X |"): - parts = answer_text.split("|", 2) - wiki_confirm = "X" - if len(parts) > 1: detail = parts[1].strip(); - if len(parts) > 2: wiki_explanation = parts[2].split(":", 1)[1].strip() if parts[2].strip().startswith("Begründung:") else parts[2].strip() - # Anpassung: T ist Begründung, U ist Vorschlag - if detail.startswith("Alternativer Artikel:"): alt_article = detail.split(":", 1)[1].strip() - elif detail == "Kein passender Artikel gefunden": alt_article = detail - else: wiki_explanation = f"Unerwartetes X-Detail: {detail}" # Wenn Detail nicht URL/Kein gefunden, setze als Begründung - alt_article = alt_article or "" # Sicherstellen, dass alt_article ein String ist - wiki_explanation = wiki_explanation or "" # Sicherstellen, dass explanation String ist + if chat_response: # <= ZEILE 2262 + match = re.match(r"Antwort: (.*)", chat_response.strip()) # <= ZEILE 2263 + if match: # <= ZEILE 2264 + answer_text = match.group(1).strip() # <= ZEILE 2265 + logging.debug(f"Zeile {row_num_in_sheet} Verifizierungsantwort: '{answer_text}'") # <= ZEILE 2266 - else: wiki_confirm, wiki_explanation = "?", f"Unerwartetes Format: {answer_text[:100]}"; alt_article = "" - else: wiki_confirm = "?"; wiki_explanation = f"Parsing Fehler: {chat_response[:100]}"; alt_article = "" - logging.error(f"Zeile {row_num_in_sheet}: Parsing Fehler für Verifizierungsantwort: {chat_response}") - else: wiki_confirm = "Fehler"; wiki_explanation = "API Fehler oder keine Antwort"; alt_article = "" - logging.error(f"Zeile {row_num_in_sheet}: API Fehler oder keine Antwort für Verifizierungs-Prompt.") + if answer_text.upper() == "OK": # <= ZEILE 2267 + wiki_confirm = "OK" + elif answer_text.startswith("X |"): # <= ZEILE 2268 + parts = answer_text.split("|", 2) # <= ZEILE 2269 + wiki_confirm = "X" # <= ZEILE 2270 + alt_article = "" # Initialisieren (oder "" von oben nutzen) + wiki_explanation = "" # Initialisieren + + if len(parts) > 1: # <= ZEILE 2271 + detail = parts[1].strip() # <= ZEILE 2272 + # Annahme: wiki_explanation kann von parts[2] gesetzt werden + if len(parts) > 2: # <= ZEILE 2273 + # wiki_explanation = parts[2].split(":", 1)[1].strip() if parts[2].strip().startswith("Begründung:") else parts[2].strip() # Alte Logik + reason_part = parts[2].strip() # <= ZEILE 2274 + if reason_part.lower().startswith("begründung:"): # <= ZEILE 2275 + wiki_explanation = reason_part.split(":", 1)[1].strip() # <= ZEILE 2276 + else: + # Wenn es nicht mit "Begründung:" anfängt, nehmen wir den ganzen Rest als Begründung + wiki_explanation = reason_part # <= ZEILE 2277 + + # Verarbeite den Detail-Teil (parts[1]) unabhängig von len(parts)>2 + if detail.lower().startswith("alternativer artikel:"): # <= ZEILE 2274 (im Screenshot falsch eingerückt?) + alt_article = detail.split(":", 1)[1].strip() # <= ZEILE 2275 (im Screenshot falsch eingerückt?) + elif detail.lower() == "kein passender artikel gefunden": # <= ZEILE 2276 (im Screenshot falsch eingerückt?) + alt_article = detail # Der Text selbst ist der Vorschlag + else: + # Wenn der Detail-Teil weder URL noch "Kein passender Artikel" ist, behandeln wir ihn als Begründung, + # falls noch keine Begründung aus parts[2] gefunden wurde. + # Oder loggen wir es als unerwartet? Loggen ist sicherer. + logging.warning(f"Zeile {row_num_in_sheet}: Unerwartetes Detail-Format nach 'X |': '{detail}'") + # Setze es als Begründung nur, wenn parts[2] nicht existierte oder leer war? + # Vereinfacht: Wenn Detail-Teil nicht URL/Kein gefunden, füge ihn ZUR Begründung hinzu. + if wiki_explanation: wiki_explanation += f" | Unerw. Detail: {detail}" + else: wiki_explanation = f"Unerw. Detail: {detail}" + + + # ELSE für if answer_text.upper() == "OK": und elif answer_text.startswith("X |"): + # Dies wird erreicht, wenn die Antwort kein "OK" und kein "X |" Format hat. + else: # <= ZEILE 2280 + # Korrigierte Einrückung für diesen Block: muss unter das 'else:' gehören + wiki_confirm = "?" # <= ZEILE 2281 (korrekt eingerückt) + wiki_explanation = f"Unerwartetes Format: {answer_text[:100]}..." # <= ZEILE 2281 (als separate Zeile) + alt_article = "" # <= ZEILE 2281 (als separate Zeile) + # Loggen Sie den unerwarteten Fall + logging.error(f"Zeile {row_num_in_sheet}: Unerwartetes Verifizierungs-Antwortformat: '{answer_text}'.") # <= ZEILE 2282 (korrekt eingerückt) + + + # ELSE für if match: (wenn der Regex "Antwort: (.*)" nicht matchte) + else: # <= ZEILE 2284 + # Korrigierte Einrückung für diesen Block: muss unter das 'else:' gehören + wiki_confirm = "?" # <= ZEILE 2285 (korrekt eingerückt) + wiki_explanation = f"Parsing Fehler: {chat_response[:100]}..." # <= ZEILE 2285 (als separate Zeile) + alt_article = "" # <= ZEILE 2285 (als separate Zeile) + logging.error(f"Zeile {row_num_in_sheet}: Parsing Fehler für Verifizierungsantwort (Regex Match fehlgeschlagen): {chat_response}.") # <= ZEILE 2286 (korrekt eingerückt) + + + # ELSE für if chat_response: (wenn call_openai_chat None zurückgab) + else: # <= ZEILE 2284 (anderes else, gehört zu if chat_response:) + # Korrigierte Einrückung für diesen Block: muss unter das 'else:' gehören + wiki_confirm = "Fehler" # <= ZEILE 2285 (korrekt eingerückt) + wiki_explanation = "API Fehler oder keine Antwort" # <= ZEILE 2285 (als separate Zeile) + alt_article = "" # <= ZEILE 2285 (als separate Zeile) + logging.error(f"Zeile {row_num_in_sheet}: API Fehler oder keine Antwort für Verifizierungs-Prompt.") # <= ZEILE 2286 (korrekt eingerückt) # Füge Updates für S, T, U hinzu (basierend auf Spaltenbeschreibung: S=Konstistenz, T=Begründung, U=Vorschlag) - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzprüfung"] + 1)}{row_num_in_sheet}', 'values': [[wiki_confirm]]}) - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{row_num_in_sheet}', 'values': [[wiki_explanation]]}) # T ist Begründung - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{row_num_in_sheet}', 'values': [[alt_article]]}) # U ist Vorschlag + updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Wiki Konsistenzprüfung"] + 1)}{row_num_in_sheet}', 'values': [[wiki_confirm]]}) # <= ZEILE 2288 + updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Begründung Wiki Inkonsistenz"] + 1)}{row_num_in_sheet}', 'values': [[wiki_explanation]]}) # T ist Begründung <= ZEILE 2289 + updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Wiki Artikel"] + 1)}{row_num_in_sheet}', 'values': [[alt_article]]}) # U ist Vorschlag <= ZEILE 2290 # Setze AX Timestamp, wenn dieser Schritt gemacht wurde - updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]}) + updates.append({'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Wiki Verif. Timestamp"] + 1)}{row_num_in_sheet}', 'values': [[now_timestamp]]}) # <= ZEILE 2293 - # --- 4. ChatGPT Evaluationen (Branch W-Y, FSM Z-AA, MA AB-AD, Umsatz AG-AH) --- - # Dieser Block wird nur ausgeführt, wenn die GRUPPE "ChatGPT" ausgewählt ist + # --- 4. ChatGPT Evaluationen (Branch W-Y, FSM Z-AA, MA AB-AD, Umsatz AG-AH) --- + # Dieser Block wird nur ausgeführt, wenn die GRUPPE "ChatGPT" ausgewählt ist + # ... (Rest der _process_single_row Methode, wie in Teil 4/6 von 18:55 Uhr) ... if process_chatgpt: # Branch Evaluation (W-Y) ist nötig, wenn: (_is_step_processing_needed für AO ODER Inputs (Wiki/Web) wurden aktualisiert)