diff --git a/brancheneinstufung.py b/brancheneinstufung.py index 4364c7f7..c2d5c96b 100644 --- a/brancheneinstufung.py +++ b/brancheneinstufung.py @@ -107,9 +107,7 @@ def process_wiki_batch(main_sheet, data, start_row, end_row): """ Batch-Prozess für Wikipedia-Verifizierung (Wiki-Modus): - Verarbeitet alle Zeilen von start_row bis end_row in Gruppen (Batchgröße = Config.BATCH_SIZE). - - Für jeden Batch wird ein aggregierter Prompt erstellt und an ChatGPT geschickt. - - Die Aggregat-Ergebnisse werden zeilenweise in Spalte S (Wiki-Validierung), T (alternativer Wiki-Artikel), - U (Wiki-Erklärung) und V–Y (Platzhalter) geschrieben. + - Ergebnisse werden in den Spalten S bis Y geschrieben. """ batch_size = Config.BATCH_SIZE batches = [] @@ -135,12 +133,14 @@ def process_wiki_batch(main_sheet, data, start_row, end_row): _process_batch(main_sheet, batches, row_numbers) debug_print("Wiki batch processing completed.") + def process_website_batch(main_sheet, data, start_row, end_row): """ Batch-Prozess für Website-Scraping (Website-Modus): - - Für jede Zeile von start_row bis end_row wird, falls eine CRM-Website vorhanden ist, - get_website_raw aufgerufen, um den Rohtext abzurufen, und summarize_website_content zur Zusammenfassung. - - Die Ergebnisse werden in Spalte AR (Website Rohtext) und AS (Website Zusammenfassung) geschrieben. + - Für jede Zeile von start_row bis end_row werden Website-Rohtext (get_website_raw) und + Zusammenfassung (summarize_website_content) abgerufen. + - Ergebnisse werden in Spalte AR (Rohtext) und AS (Zusammenfassung) geschrieben. + - Am Ende jeder Zeile wird der Zeitstempel (Spalte AO) und Version (Spalte AP) gesetzt. """ for i in range(start_row, end_row + 1): row = data[i - 1] @@ -153,19 +153,24 @@ def process_website_batch(main_sheet, data, start_row, end_row): try: main_sheet.update(values=[[raw_text]], range_name=f"AR{i}") main_sheet.update(values=[[summary]], range_name=f"AS{i}") - debug_print(f"Zeile {i}: Website-Daten aktualisiert.") + current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + main_sheet.update(values=[[current_timestamp]], range_name=f"AO{i}") + main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{i}") + debug_print(f"Zeile {i}: Website-Daten aktualisiert | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}") except Exception as e: debug_print(f"Fehler beim Updaten der Website-Daten in Zeile {i}: {e}") time.sleep(Config.RETRY_DELAY) debug_print("Website batch processing completed.") + def process_branch_batch(main_sheet, data, start_row, end_row): """ Batch-Prozess für Brancheneinschätzung (Branch-Modus): - - Für jede Zeile von start_row bis end_row werden die relevanten Felder für die Brancheneinschätzung ausgelesen. - - Es werden evaluate_branche_chatgpt aufgerufen, die das Branchenergebnis als Dictionary zurückgibt. - - Die Ergebnisse werden in Spalte W (Chat Vorschlag Branche), X (Chat Konsistenz Branche) - und Y (Chat Begründung Abweichung Branche) geschrieben. + - Für jede Zeile von start_row bis end_row werden relevante Felder ausgelesen und + evaluate_branche_chatgpt aufgerufen. + - Das Ergebnis (Dictionary mit "branch", "consistency", "justification") wird in + Spalte W (Branch), X (Konsistenz) und Y (Begründung) geschrieben. + - Für jede verarbeitete Zeile werden zudem der Zeitstempel (Spalte AO) und Version (Spalte AP) gesetzt. """ for i in range(start_row, end_row + 1): row = data[i - 1] @@ -173,25 +178,30 @@ def process_branch_batch(main_sheet, data, start_row, end_row): beschreibung = row[7] if len(row) > 7 else "" wiki_branche = row[14] if len(row) > 14 else "" wiki_kategorien = row[17] if len(row) > 17 else "" - # Website Zusammenfassung aus Spalte AS (Index 45, wenn vorhanden) website_summary = row[44] if len(row) > 44 else "" result = evaluate_branche_chatgpt(crm_branche, beschreibung, wiki_branche, wiki_kategorien, website_summary) try: main_sheet.update(values=[[result["branch"]]], range_name=f"W{i}") main_sheet.update(values=[[result["consistency"]]], range_name=f"X{i}") main_sheet.update(values=[[result["justification"]]], range_name=f"Y{i}") - debug_print(f"Zeile {i}: Branch-Einschätzung aktualisiert: {result}") + current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + main_sheet.update(values=[[current_timestamp]], range_name=f"AO{i}") + main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{i}") + debug_print(f"Zeile {i}: Branch-Einschätzung aktualisiert: {result} | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}") except Exception as e: debug_print(f"Fehler beim Updaten der Branch-Daten in Zeile {i}: {e}") time.sleep(Config.RETRY_DELAY) debug_print("Branch batch processing completed.") + def run_dispatcher(mode, row_limit=None): """ Dispatcher-Funktion: - - Ermittelt aus dem Google Sheet ab Zeile 7 die erste Zeile, in der in Spalte AO (Index 41) kein Zeitstempel steht. - - Legt den zu verarbeitenden Bereich fest: ab diesem Startpunkt werden row_limit Zeilen (falls angegeben) verarbeitet. - - Basierend auf dem Modus-Parameter (wiki, website, branch, combined) werden die entsprechenden Batch-Prozesse gestartet. + - Ermittelt ab Zeile 7 die erste Zeile, in der in Spalte AO (Index 41) kein Zeitstempel steht. + - Legt den zu verarbeitenden Bereich fest: Ab diesem Startpunkt werden row_limit Zeilen (falls angegeben) + verarbeitet. + - Basierend auf dem mode-Parameter ("wiki", "website", "branch", "combined") werden die entsprechenden + Batch-Prozesse gestartet. """ debug_print(f"Starte Dispatcher im Modus '{mode}' mit row_limit={row_limit}.") gc = gspread.authorize(ServiceAccountCredentials.from_json_keyfile_name( @@ -749,7 +759,8 @@ def _process_batch(main_sheet, batches, row_numbers): """ Hilfsfunktion: Bearbeitet einen Batch, indem ein aggregierter Prompt erstellt und die aggregierte Antwort zeilenweise den entsprechenden Zeilennummern zugeordnet wird. - Die Ergebnisse werden in Spalten S bis Y geschrieben. + Die Ergebnisse werden in den Spalten S bis Y geschrieben, und anschließend wird + für jede Zeile der aktuelle Zeitstempel (Spalte AO) sowie die Versionsnummer (Spalte AP) eingetragen. """ aggregated_prompt = ( "Du bist ein Experte in der Verifizierung von Wikipedia-Artikeln für Unternehmen. " @@ -816,7 +827,11 @@ def _process_batch(main_sheet, batches, row_numbers): main_sheet.update(values=[[alt_article]], range_name=f"T{current_row}") main_sheet.update(values=[[wiki_explanation]], range_name=f"U{current_row}") main_sheet.update(values=[["", "", "", ""]], range_name=f"V{current_row}:Y{current_row}") - debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer}") + # Neu: Setze Zeitstempel in Spalte AO und Version in Spalte AP + current_timestamp = datetime.now().strftime("%Y-%m-%d %H:%M:%S") + main_sheet.update(values=[[current_timestamp]], range_name=f"AO{current_row}") + main_sheet.update(values=[[Config.VERSION]], range_name=f"AP{current_row}") + debug_print(f"Zeile {current_row} verifiziert: Antwort: {answer} | Zeitstempel: {current_timestamp}, Version: {Config.VERSION}") except Exception as e: debug_print(f"Fehler beim Updaten der Zeile {current_row}: {e}") time.sleep(Config.RETRY_DELAY)