external.py 1.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  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.post(
  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. json={
  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. results = [
  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. log.info(f"External search results: {results}")
  40. return results
  41. except Exception as e:
  42. log.error(f"Error in External search: {e}")
  43. return []