From bb7a1419d8100d3e98aef84201dcacb00dcffda9 Mon Sep 17 00:00:00 2001 From: Floke Date: Mon, 30 Jun 2025 11:54:52 +0000 Subject: [PATCH] bugfix --- helpers.py | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) diff --git a/helpers.py b/helpers.py index 4e5fc4e6..f0b65adf 100644 --- a/helpers.py +++ b/helpers.py @@ -723,7 +723,95 @@ def load_target_schema(csv_filepath=BRANCH_MAPPING_FILE): if len(row) >= 3 and row[2].strip().upper() in ["X", "FOKUS", "JA", "TRUE", "1"]: focus_branches_set.add(target_branch) logger.debug(f" -> Fokusbranche gefunden: '{target_branch}'") + except FileNotFoundError:def load_target_schema(csv_filepath=BRANCH_MAPPING_FILE): + """ + Lädt das Ziel-Branchenschema aus der definierten CSV-Datei. + Gibt True bei Erfolg zurück, False bei einem Fehler. + """ + logger = logging.getLogger(__name__) + from config import TARGET_SCHEMA_STRING, ALLOWED_TARGET_BRANCHES, FOCUS_TARGET_BRANCHES, FOCUS_BRANCHES_PROMPT_PART + + allowed_branches_set = set() + focus_branches_set = set() + line_count = 0 + + logger.info(f"Lade Ziel-Schema und Fokus-Branchen aus '{csv_filepath}'...") + + try: + with open(csv_filepath, "r", encoding="utf-8-sig") as f: + reader = csv.reader(f, delimiter=';') + try: + # Header lesen und überspringen + header_row = next(reader) + logger.debug(f"Ueberspringe Header-Zeile im Schema: {header_row}") + except StopIteration: + logger.warning(f"Schema-Datei '{csv_filepath}' ist leer oder hat keinen Header.") + globals()['TARGET_SCHEMA_STRING'] = "Ziel-Branchenschema nicht verfuegbar (Datei leer)." + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "" + globals()['ALLOWED_TARGET_BRANCHES'] = [] + return False + + # Iteriere über die verbleibenden Zeilen im Reader + for row_num, row in enumerate(reader, 1): + line_count = row_num + # Überspringe leere Zeilen oder Zeilen mit zu wenigen Spalten + if not row or len(row) < 2: + logger.debug(f"Zeile {row_num} im Schema wird übersprungen (leer oder zu wenige Spalten).") + continue + + # Lese die Zielbranche aus der ZWEITEN Spalte (Index 1) + target_branch = row[1].strip() + if target_branch: + allowed_branches_set.add(target_branch) + # Prüfe optional die DRITTE Spalte (Index 2) für Fokus-Marker + if len(row) >= 3 and row[2].strip().upper() in ["X", "FOKUS", "JA", "TRUE", "1"]: + focus_branches_set.add(target_branch) + logger.debug(f" -> Fokusbranche gefunden: '{target_branch}'") except FileNotFoundError: + logger.critical(f"FEHLER: Schema-Datei '{csv_filepath}' nicht gefunden.") + globals()['TARGET_SCHEMA_STRING'] = "Ziel-Branchenschema nicht verfuegbar (Datei nicht gefunden)." + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "" + globals()['ALLOWED_TARGET_BRANCHES'] = [] + return False + except Exception as e: + logger.critical(f"FEHLER beim Laden des Ziel-Schemas aus '{csv_filepath}' (Zeile {line_count}): {e}") + globals()['TARGET_SCHEMA_STRING'] = "Ziel-Branchenschema nicht verfuegbar (Fehler beim Lesen)." + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "" + globals()['ALLOWED_TARGET_BRANCHES'] = [] + return False + + # Update der globalen Variablen + globals()['ALLOWED_TARGET_BRANCHES'] = sorted(list(allowed_branches_set), key=str.lower) + globals()['FOCUS_TARGET_BRANCHES'] = sorted(list(focus_branches_set), key=str.lower) + + if not ALLOWED_TARGET_BRANCHES: + logger.warning("Keine gueltigen Zielbranchen im Schema gefunden. Branchenbewertung ist nicht moeglich.") + globals()['TARGET_SCHEMA_STRING'] = "Ziel-Branchenschema nicht verfuegbar (Keine gueltigen Branchen in Datei gefunden)." + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "" + return False + + logger.info(f"Ziel-Schema geladen: {len(ALLOWED_TARGET_BRANCHES)} eindeutige Zielbranchen, davon {len(FOCUS_TARGET_BRANCHES)} Fokusbranchen.") + + # Der Rest der Funktion, der den Prompt-String zusammenbaut, bleibt unverändert... + schema_lines = ["Ziel-Branchenschema: Folgende Branchenbereiche sind gueltig (Kurzformen):"] + schema_lines.extend(f"- {branch}" for branch in ALLOWED_TARGET_BRANCHES) + schema_lines.append("\nBitte ordne das Unternehmen ausschliesslich in einen dieser Bereiche ein. Gib NUR den exakten Kurznamen der Branche zurueck (keine Praefixe oder zusaetzliche Erklaerungen ausser im 'Begruendung'-Feld).") + schema_lines.append("Antworte ausschliesslich im folgenden Format (keine Einleitung, kein Schlusssatz):") + schema_lines.append("Branche: ") + schema_lines.append("Konfidenz: ") + schema_lines.append("Uebereinstimmung: ") + schema_lines.append("Begruendung: ") + globals()['TARGET_SCHEMA_STRING'] = "\n".join(schema_lines) + + if FOCUS_TARGET_BRANCHES: + focus_prompt_lines = ["\nZusätzlicher Hinweis: Wenn die Wahl zwischen mehreren passenden Branchen besteht, priorisiere bitte, wenn möglich, eine der folgenden Fokusbranchen:"] + focus_prompt_lines.extend(f"- {branch}" for branch in FOCUS_TARGET_BRANCHES) + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "\n".join(focus_prompt_lines) + else: + globals()['FOCUS_BRANCHES_PROMPT_PART'] = "" + logger.info("Keine Fokusbranchen im Schema definiert.") + + return True logger.critical(f"FEHLER: Schema-Datei '{csv_filepath}' nicht gefunden.") globals()['TARGET_SCHEMA_STRING'] = "Ziel-Branchenschema nicht verfuegbar (Datei nicht gefunden)." globals()['FOCUS_BRANCHES_PROMPT_PART'] = ""