70 lines
1.8 KiB
Python
70 lines
1.8 KiB
Python
from typing import Dict, List
|
|
from utils.call_llm import call_llm
|
|
|
|
def analyze_results(query: str, results: List[Dict]) -> Dict:
|
|
"""Analyze search results using LLM
|
|
|
|
Args:
|
|
query (str): Original search query
|
|
results (List[Dict]): Search results to analyze
|
|
|
|
Returns:
|
|
Dict: Analysis including summary and key points
|
|
"""
|
|
# Format results for prompt
|
|
formatted_results = []
|
|
for i, result in enumerate(results, 1):
|
|
formatted_results.append(f"""
|
|
Result {i}:
|
|
Title: {result['title']}
|
|
Snippet: {result['snippet']}
|
|
URL: {result['link']}
|
|
""")
|
|
|
|
prompt = f"""
|
|
Analyze these search results for the query: "{query}"
|
|
|
|
{'\n'.join(formatted_results)}
|
|
|
|
Please provide:
|
|
1. A concise summary of the findings (2-3 sentences)
|
|
2. Key points or facts (up to 5 bullet points)
|
|
3. Suggested follow-up queries (2-3)
|
|
|
|
Output in YAML format:
|
|
```yaml
|
|
summary: >
|
|
brief summary here
|
|
key_points:
|
|
- point 1
|
|
- point 2
|
|
follow_up_queries:
|
|
- query 1
|
|
- query 2
|
|
```
|
|
"""
|
|
|
|
try:
|
|
response = call_llm(prompt)
|
|
# Extract YAML between code fences
|
|
yaml_str = response.split("```yaml")[1].split("```")[0].strip()
|
|
|
|
import yaml
|
|
analysis = yaml.safe_load(yaml_str)
|
|
|
|
# Validate required fields
|
|
assert "summary" in analysis
|
|
assert "key_points" in analysis
|
|
assert "follow_up_queries" in analysis
|
|
assert isinstance(analysis["key_points"], list)
|
|
assert isinstance(analysis["follow_up_queries"], list)
|
|
|
|
return analysis
|
|
|
|
except Exception as e:
|
|
print(f"Error analyzing results: {str(e)}")
|
|
return {
|
|
"summary": "Error analyzing results",
|
|
"key_points": [],
|
|
"follow_up_queries": []
|
|
} |