fix(analyzer): eliminate double SERP.query() call per company analysis

_analyze_company_safe called SERP.query() then passed the company name
to analyze_company() which called SERP.query() again — doubling API
usage. Now analyze_company() accepts an optional patents param so callers
can pass pre-fetched results through.
This commit is contained in:
2026-03-24 14:16:49 -04:00
parent fa564e5e1e
commit d387bbbdf3
+6 -4
View File
@@ -23,7 +23,7 @@ class CompanyAnalyzer:
""" """
self.llm_analyzer = LLMAnalyzer(api_key=openrouter_api_key) self.llm_analyzer = LLMAnalyzer(api_key=openrouter_api_key)
def analyze_company(self, company_name: str) -> str: def analyze_company(self, company_name: str, patents: "Patents | None" = None) -> str:
"""Analyze a company's performance based on their patent portfolio. """Analyze a company's performance based on their patent portfolio.
This is the main entry point that orchestrates the full pipeline: This is the main entry point that orchestrates the full pipeline:
@@ -35,12 +35,14 @@ class CompanyAnalyzer:
Args: Args:
company_name: Name of the company to analyze company_name: Name of the company to analyze
patents: Optional pre-fetched Patents result to avoid duplicate API calls
Returns: Returns:
Comprehensive analysis of company's innovation and performance outlook Comprehensive analysis of company's innovation and performance outlook
""" """
print(f"Retrieving patents for {company_name}...") if patents is None:
patents = SERP.query(company_name) print(f"Retrieving patents for {company_name}...")
patents = SERP.query(company_name)
if not patents.patents: if not patents.patents:
return f"No patents found for {company_name}" return f"No patents found for {company_name}"
@@ -126,7 +128,7 @@ class CompanyAnalyzer:
patents = SERP.query(company_name) patents = SERP.query(company_name)
patent_count = len(patents.patents) if patents.patents else 0 patent_count = len(patents.patents) if patents.patents else 0
analysis = self.analyze_company(company_name) analysis = self.analyze_company(company_name, patents=patents)
# Check if analysis indicates failure # Check if analysis indicates failure
if analysis.startswith("No patents found") or analysis.startswith( if analysis.startswith("No patents found") or analysis.startswith(