pocketflow/cookbook/pocketflow-tool-search/tools/parser.py

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": []
}