Files
Brancheneinstufung2/company-explorer/backend/scripts/debug_single_company.py
Floke bdcb414053 feat(opener): Optimiere Atomic Opener für Prägnanz und Direktheit [2ff88f42]
Überarbeite den Prompt für die Generierung der Atomic Opener.
Die Opener werden nun auf genau zwei Sätze begrenzt, um Prägnanz zu gewährleisten.
Der Ton ist faktenbasierter und leitet direkter zu den operativen Herausforderungen über,
anstatt generische Lobhudelei zu verwenden.
2026-02-23 13:55:32 +00:00

95 lines
4.1 KiB
Python

import os
import sys
import argparse
import logging
from typing import Any # Hinzugefügt
# Add the company-explorer directory to the Python path
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '..', '..')))
from backend.database import get_db, Company, Industry, Persona # Added Industry and Persona for full context
from backend.services.classification import ClassificationService
from backend.lib.logging_setup import setup_logging
# --- CONFIGURATION ---
# Setup logging to be very verbose for this script
setup_logging()
logger = logging.getLogger(__name__)
logger.setLevel(logging.DEBUG)
def run_debug_analysis(company_identifier: Any, is_id: bool):
"""
Runs the full classification and enrichment process for a single company
in the foreground and prints detailed results.
"""
logger.info(f"--- Starting Interactive Debug for Company: {company_identifier} (by {'ID' if is_id else 'Name'}) ---")
db_session = next(get_db())
try:
# 1. Fetch the company
if is_id:
company = db_session.query(Company).filter(Company.id == company_identifier).first()
else:
company = db_session.query(Company).filter(Company.name == company_identifier).first()
if not company:
logger.error(f"Company with {'ID' if is_id else 'Name'} {company_identifier} not found.")
# If by name, suggest similar names
if not is_id:
all_company_names = db_session.query(Company.name).limit(20).all()
print("\nAvailable Company Names (first 20):")
for (name,) in all_company_names:
print(f"- {name}")
return
logger.info(f"Found Company: {company.name} (ID: {company.id})")
# --- PRE-ANALYSIS STATE ---
print("\n--- METRICS BEFORE ---")
print(f"Calculated: {company.calculated_metric_value} {company.calculated_metric_unit}")
print(f"Standardized: {company.standardized_metric_value} {company.standardized_metric_unit}")
print(f"Opener 1 (Infra): {company.ai_opener}")
print(f"Opener 2 (Ops): {company.ai_opener_secondary}")
print("----------------------\n")
# 2. Instantiate the service
classifier = ClassificationService()
# 3. RUN THE CORE LOGIC
# This will now print all the detailed logs we added
updated_company = classifier.classify_company_potential(company, db_session)
# --- POST-ANALYSIS STATE ---
print("\n--- METRICS AFTER ---")
print(f"Industry (AI): {updated_company.industry_ai}")
print(f"Metric Source: {updated_company.metric_source}")
print(f"Proof Text: {updated_company.metric_proof_text}")
print(f"Calculated: {updated_company.calculated_metric_value} {updated_company.calculated_metric_unit}")
print(f"Standardized: {updated_company.standardized_metric_value} {updated_company.standardized_metric_unit}")
print(f"\nOpener 1 (Infra): {updated_company.ai_opener}")
print(f"Opener 2 (Ops): {updated_company.ai_opener_secondary}")
print("---------------------")
logger.info(f"--- Interactive Debug Finished for Company: {company.name} (ID: {company.id}) ---")
except Exception as e:
logger.error(f"An error occurred during analysis: {e}", exc_info=True)
finally:
db_session.close()
if __name__ == "__main__":
parser = argparse.ArgumentParser(description="Run a single company analysis for debugging.")
parser.add_argument("--id", type=int, help="The ID of the company to analyze.")
parser.add_argument("--company-name", type=str, help="The name of the company to analyze.")
args = parser.parse_args()
if args.id and args.company_name:
parser.error("Please provide either --id or --company-name, not both.")
elif args.id:
run_debug_analysis(args.id, is_id=True)
elif args.company_name:
run_debug_analysis(args.company_name, is_id=False)
else:
parser.error("Please provide either --id or --company-name.")