external.py 1.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. import logging
  2. from typing import Optional, List
  3. import requests
  4. from open_webui.retrieval.web.main import SearchResult, get_filtered_results
  5. from open_webui.env import SRC_LOG_LEVELS
  6. log = logging.getLogger(__name__)
  7. log.setLevel(SRC_LOG_LEVELS["RAG"])
  8. def search_external(
  9. external_url: str,
  10. external_api_key: str,
  11. query: str,
  12. count: int,
  13. filter_list: Optional[List[str]] = None,
  14. ) -> List[SearchResult]:
  15. try:
  16. response = requests.get(
  17. external_url,
  18. headers={
  19. "User-Agent": "Open WebUI (https://github.com/open-webui/open-webui) RAG Bot",
  20. "Authorization": f"Bearer {external_api_key}",
  21. },
  22. params={
  23. "query": query,
  24. "count": count,
  25. }
  26. )
  27. response.raise_for_status()
  28. results = response.json()
  29. if filter_list:
  30. results = get_filtered_results(results, filter_list)
  31. return [
  32. SearchResult(
  33. link=result.get("link"),
  34. title=result.get("title"),
  35. snippet=result.get("snippet"),
  36. )
  37. for result in results[:count]
  38. ]
  39. except Exception as e:
  40. log.error(f"Error in External search: {e}")
  41. return []