firecrawl.py 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041
  1. import logging
  2. from typing import Optional, List
  3. from open_webui.retrieval.web.main import SearchResult, get_filtered_results
  4. from open_webui.env import SRC_LOG_LEVELS
  5. log = logging.getLogger(__name__)
  6. log.setLevel(SRC_LOG_LEVELS["RAG"])
  7. def search_firecrawl(
  8. firecrawl_url: str,
  9. firecrawl_api_key: str,
  10. query: str,
  11. count: int,
  12. filter_list: Optional[List[str]] = None,
  13. ) -> List[SearchResult]:
  14. try:
  15. from firecrawl import FirecrawlApp
  16. firecrawl = FirecrawlApp(api_key=firecrawl_api_key, api_url=firecrawl_url)
  17. response = firecrawl.search(
  18. query=query, limit=count, ignore_invalid_urls=True, timeout=count * 3
  19. )
  20. results = response.web
  21. if filter_list:
  22. results = get_filtered_results(results, filter_list)
  23. results = [
  24. SearchResult(
  25. link=result.url,
  26. title=result.title,
  27. snippet=result.description,
  28. )
  29. for result in results[:count]
  30. ]
  31. log.info(f"External search results: {results}")
  32. return results
  33. except Exception as e:
  34. log.error(f"Error in External search: {e}")
  35. return []