Feature - Dedicated FSM Pitch Generation Mode
- FEATURE: Neuer Modus `fsm_pitch` in `brancheneinstufung.py` und `data_processor.py` implementiert. - Dieser Modus durchläuft das gesamte Sheet und generiert gezielt nur die fehlenden, personalisierten FSM-Pitch-Sätze. - Die Methode ist für die Ausführung als Hintergrundprozess optimiert.
This commit is contained in:
@@ -1023,10 +1023,94 @@ class DataProcessor:
|
||||
|
||||
self.logger.info(f"Re-Evaluierung abgeschlossen. {processed_count_actual} Zeilen verarbeitet.")
|
||||
|
||||
def process_fsm_pitch_generation(self, start_sheet_row=None, end_sheet_row=None, limit=None):
|
||||
"""
|
||||
Generiert FSM-Pitches für alle Zeilen, bei denen dieser fehlt, aber die
|
||||
notwendigen Daten vorhanden sind.
|
||||
"""
|
||||
self.logger.info(f"Starte Modus 'fsm_pitch'. Bereich: {start_sheet_row or 'Start'}-{end_sheet_row or 'Ende'}, Limit: {limit or 'Unbegrenzt'}")
|
||||
|
||||
if not self.sheet_handler.load_data():
|
||||
self.logger.error("Fehler beim Laden der Daten für FSM-Pitch-Generierung.")
|
||||
return
|
||||
|
||||
all_data = self.sheet_handler.get_all_data_with_headers()
|
||||
header_rows = self.sheet_handler._header_rows
|
||||
|
||||
effective_start = start_sheet_row if start_sheet_row is not None else header_rows + 1
|
||||
effective_end = end_sheet_row if end_sheet_row is not None else len(all_data)
|
||||
|
||||
tasks = []
|
||||
# Sammle alle Zeilen, die für die Verarbeitung in Frage kommen
|
||||
for i in range(effective_start - 1, effective_end):
|
||||
if limit is not None and len(tasks) >= limit:
|
||||
self.logger.info(f"Limit von {limit} zu verarbeitenden Zeilen erreicht. Stoppe das Sammeln von Tasks.")
|
||||
break
|
||||
|
||||
row_data = all_data[i]
|
||||
fsm_pitch = self._get_cell_value_safe(row_data, "FSM Pitch").strip()
|
||||
|
||||
# Bedingung: Pitch fehlt, aber Name und Branche sind vorhanden
|
||||
if not fsm_pitch:
|
||||
company_name = self._get_cell_value_safe(row_data, "CRM Name").strip()
|
||||
branche = self._get_cell_value_safe(row_data, "Chat Vorschlag Branche").strip() or self._get_cell_value_safe(row_data, "CRM Branche").strip()
|
||||
|
||||
if company_name and branche:
|
||||
tasks.append({'row_num': i + 1, 'data': row_data})
|
||||
|
||||
if not tasks:
|
||||
self.logger.info("Keine Zeilen gefunden, die eine FSM-Pitch-Generierung erfordern.")
|
||||
return
|
||||
|
||||
self.logger.info(f"{len(tasks)} Zeilen für FSM-Pitch-Generierung identifiziert. Starte Verarbeitung...")
|
||||
|
||||
all_sheet_updates = []
|
||||
processed_count = 0
|
||||
|
||||
for task in tasks:
|
||||
row_num = task['row_num']
|
||||
row_data = task['data']
|
||||
|
||||
self.logger.debug(f"Verarbeite FSM-Pitch für Zeile {row_num}...")
|
||||
|
||||
try:
|
||||
# Extrahiere alle notwendigen Daten für den Pitch
|
||||
company_name = self._get_cell_value_safe(row_data, "CRM Name")
|
||||
branche = self._get_cell_value_safe(row_data, "Chat Vorschlag Branche") or self._get_cell_value_safe(row_data, "CRM Branche")
|
||||
website_summary = self._get_cell_value_safe(row_data, "Website Zusammenfassung")
|
||||
wiki_absatz = self._get_cell_value_safe(row_data, "Wiki Absatz")
|
||||
final_ma_val = self._get_cell_value_safe(row_data, "Finaler Mitarbeiter (Wiki>CRM)")
|
||||
crm_techniker_val = self._get_cell_value_safe(row_data, "CRM Anzahl Techniker")
|
||||
|
||||
fsm_pitch_text = generate_fsm_argument(
|
||||
company_name, branche, website_summary, wiki_absatz, final_ma_val, crm_techniker_val
|
||||
)
|
||||
|
||||
all_sheet_updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}',
|
||||
'values': [[fsm_pitch_text]]
|
||||
})
|
||||
processed_count += 1
|
||||
except Exception as e:
|
||||
self.logger.error(f"FEHLER bei FSM-Pitch-Generierung für Zeile {row_num}: {e}")
|
||||
all_sheet_updates.append({
|
||||
'range': f'{self.sheet_handler._get_col_letter(COLUMN_MAP["FSM Pitch"] + 1)}{row_num}',
|
||||
'values': [['k.A. (Fehler bei Generierung)']]
|
||||
})
|
||||
|
||||
if all_sheet_updates:
|
||||
self.logger.info(f"Sende Batch-Update für {processed_count} generierte FSM-Pitches...")
|
||||
self.sheet_handler.batch_update_cells(all_sheet_updates)
|
||||
|
||||
self.logger.info(f"FSM-Pitch-Generierung abgeschlossen. {processed_count} Pitches erstellt.")
|
||||
|
||||
|
||||
|
||||
# ==========================================================================
|
||||
# === Batch Processing Methods ===========================================
|
||||
# ==========================================================================
|
||||
|
||||
|
||||
@retry_on_failure
|
||||
def _process_verification_openai_batch(self, batch_data):
|
||||
"""
|
||||
|
||||
Reference in New Issue
Block a user