open-webui/backend/open_webui/retrieval/web/tavily.py

46 lines
1.2 KiB
Python
Raw Normal View History

import logging
2025-02-14 13:56:01 +00:00
from typing import Optional
import requests
2024-12-12 02:05:42 +00:00
from open_webui.retrieval.web.main import SearchResult
from open_webui.env import SRC_LOG_LEVELS
log = logging.getLogger(__name__)
log.setLevel(SRC_LOG_LEVELS["RAG"])
2025-02-14 13:56:01 +00:00
def search_tavily(
api_key: str,
query: str,
count: int,
filter_list: Optional[list[str]] = None,
# **kwargs,
) -> list[SearchResult]:
"""Search using Tavily's Search API and return the results as a list of SearchResult objects.
Args:
api_key (str): A Tavily Search API key
query (str): The query to search for
Returns:
2024-08-14 12:46:31 +00:00
list[SearchResult]: A list of search results
"""
url = "https://api.tavily.com/search"
data = {"query": query, "api_key": api_key}
2025-02-14 13:56:01 +00:00
include_domain = filter_list
response = requests.post(url, include_domain, json=data)
response.raise_for_status()
json_response = response.json()
raw_search_results = json_response.get("results", [])
return [
SearchResult(
link=result["url"],
title=result.get("title", ""),
snippet=result.get("content"),
)
for result in raw_search_results[:count]
]