STABLE - Objektorientiertes Schema-Handling

- MAJOR REFACTOR: Globale Variablen für Branchenschema komplett entfernt. Das Schema wird nun in der `DataProcessor`-Instanz gehalten.
- FIX: Kritischer Prompt-Fehler endgültig behoben. `evaluate_branche_chatgpt` erhält das Schema nun als explizites Argument, was Scope-Probleme beseitigt.
- Das Projekt ist nun in einem stabilen, logisch konsistenten und lauffähigen Zustand für die Bestandsanreicherung. Die Grundlage für neue Features ist gelegt.
This commit is contained in:
2025-07-01 14:47:42 +00:00
parent 9a56cc9504
commit 2857570e89

View File

@@ -70,31 +70,24 @@ class DataProcessor:
self.sheet_handler = sheet_handler self.sheet_handler = sheet_handler
self.wiki_scraper = wiki_scraper self.wiki_scraper = wiki_scraper
self.model = None self.model = None
self.imputer = None self.imputer = None
self._expected_features = None self._expected_features = None
self.is_setup_complete = False self.is_setup_complete = False
self.schema_data = None # NEUES Attribut
self.logger.info("DataProcessor-Instanz erstellt. Bereit für Setup.") self.logger.info("DataProcessor-Instanz erstellt. Bereit für Setup.")
def setup(self): def setup(self):
"""
Führt die notwendigen Initialisierungen durch, die von externen Konfigurationen abhängen.
Muss nach Config.load_api_keys() aufgerufen werden.
"""
self.logger.info("Führe DataProcessor-Setup durch...") self.logger.info("Führe DataProcessor-Setup durch...")
# Lade das Branchenschema explizit. # Lade das Branchenschema und speichere es in der Instanz
schema_loaded = initialize_target_schema() self.schema_data = initialize_target_schema()
if not schema_loaded: if not self.schema_data:
self.logger.error("Setup fehlgeschlagen: Branchenschema konnte nicht geladen werden.") self.logger.error("Setup fehlgeschlagen: Branchenschema konnte nicht geladen werden.")
self.is_setup_complete = False self.is_setup_complete = False
return False return False
# Lade das ML-Modell.
self._load_ml_model(MODEL_FILE, IMPUTER_FILE) self._load_ml_model(MODEL_FILE, IMPUTER_FILE)
# Überprüfen, ob das Modell geladen wurde, ist optional, da _load_ml_model bereits loggt.
self.is_setup_complete = True self.is_setup_complete = True
self.logger.info("DataProcessor-Setup erfolgreich abgeschlossen.") self.logger.info("DataProcessor-Setup erfolgreich abgeschlossen.")
return True return True
@@ -196,13 +189,7 @@ class DataProcessor:
return True return True
return False return False
def _process_single_row( def _process_single_row(self, row_num_in_sheet, row_data, steps_to_run, force_reeval=False, clear_x_flag=False):
self,
row_num_in_sheet,
row_data,
steps_to_run,
force_reeval=False,
clear_x_flag=False):
""" """
Verarbeitet die Daten fuer eine einzelne Zeile im Sheet. Fuehrt ausgewaehlte Verarbeitet die Daten fuer eine einzelne Zeile im Sheet. Fuehrt ausgewaehlte
Anreicherungs- und Analyseprozesse durch. Anreicherungs- und Analyseprozesse durch.
@@ -495,16 +482,16 @@ class DataProcessor:
f"Zeile {row_num_in_sheet}: Fuehre CHATGPT Evaluationen & Plausi aus (Grund: {grund_message_chat})...") f"Zeile {row_num_in_sheet}: Fuehre CHATGPT Evaluationen & Plausi aus (Grund: {grund_message_chat})...")
# 3a. Branchen-Einstufung # 3a. Branchen-Einstufung
self.logger.info( self.logger.info(f" Zeile {row_num_in_sheet}: Starte Branchen-Einstufung ueber ChatGPT...")
f" Zeile {row_num_in_sheet}: Starte Branchen-Einstufung ueber ChatGPT...") try:
try: branch_result = evaluate_branche_chatgpt(
branch_result = evaluate_branche_chatgpt( crm_branche,
crm_branche, crm_beschreibung,
crm_beschreibung, final_wiki_data.get('branche', 'k.A.'),
final_wiki_data.get('branche', 'k.A.'), final_wiki_data.get('categories', 'k.A.'),
final_wiki_data.get('categories', 'k.A.'), website_summary,
website_summary schema_data=self.schema_data # NEU: Schema als Argument übergeben
) )
updates.append( updates.append(
{ {
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Branche"] + 1)}{row_num_in_sheet}', 'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["Chat Vorschlag Branche"] + 1)}{row_num_in_sheet}',