foundationagents--openmanus
55 行
1.9 KiB
Python
55 行
1.9 KiB
Python
from typing import List
|
|
|
|
from baidusearch.baidusearch import search
|
|
|
|
from app.tool.search.base import SearchItem, WebSearchEngine
|
|
|
|
|
|
class BaiduSearchEngine(WebSearchEngine):
|
|
def perform_search(
|
|
self, query: str, num_results: int = 10, *args, **kwargs
|
|
) -> List[SearchItem]:
|
|
"""
|
|
Baidu search engine.
|
|
|
|
Returns results formatted according to SearchItem model.
|
|
"""
|
|
raw_results = search(query, num_results=num_results)
|
|
|
|
# Convert raw results to SearchItem format
|
|
results = []
|
|
for i, item in enumerate(raw_results):
|
|
if isinstance(item, str):
|
|
# If it's just a URL
|
|
results.append(
|
|
SearchItem(title=f"Baidu Result {i+1}", url=item, description=None)
|
|
)
|
|
elif isinstance(item, dict):
|
|
# If it's a dictionary with details
|
|
results.append(
|
|
SearchItem(
|
|
title=item.get("title", f"Baidu Result {i+1}"),
|
|
url=item.get("url", ""),
|
|
description=item.get("abstract", None),
|
|
)
|
|
)
|
|
else:
|
|
# Try to get attributes directly
|
|
try:
|
|
results.append(
|
|
SearchItem(
|
|
title=getattr(item, "title", f"Baidu Result {i+1}"),
|
|
url=getattr(item, "url", ""),
|
|
description=getattr(item, "abstract", None),
|
|
)
|
|
)
|
|
except Exception:
|
|
# Fallback to a basic result
|
|
results.append(
|
|
SearchItem(
|
|
title=f"Baidu Result {i+1}", url=str(item), description=None
|
|
)
|
|
)
|
|
|
|
return results
|