Spaces:
Sleeping
Sleeping
import requests | |
from dotenv import load_dotenv | |
import os | |
# Load environment variables from .env file | |
load_dotenv() | |
# Get API keys from environment variables | |
YOU_COM_API_KEY = os.getenv('YOU_API_KEY') | |
TAVILY_API_KEY = os.getenv('TAVILY_API_KEY') | |
PERPLEXITY_API_KEY = os.getenv('PPLX_API_KEY') | |
BRAVE_API_KEY = os.getenv('BRAVESEARCH_API_KEY') | |
def query_you_com(query): | |
headers = {"X-API-Key": YOU_COM_API_KEY} | |
params = {"query": query} | |
try: | |
response = requests.get( | |
"https://api.ydc-index.io/rag", # Verify the correctness of the API endpoint | |
params=params, | |
headers=headers, | |
) | |
response.raise_for_status() # Raises an HTTPError if the response code was unsuccessful | |
resp = response.json() | |
return resp['answer'] | |
except requests.exceptions.HTTPError as http_err: | |
return f"HTTP error occurred: {http_err}" | |
except Exception as err: | |
return f"An error occurred: {err}" | |
def query_tavily(query): | |
payload = { | |
"api_key": TAVILY_API_KEY, | |
"query": query, | |
"search_depth": "basic", | |
"include_answer": True, | |
"include_images": False, | |
"include_raw_content": False, | |
"max_results": 1, | |
"include_domains": [], | |
"exclude_domains": [] | |
} | |
response = requests.post("https://api.tavily.com/search", json=payload) | |
if response.status_code == 200: | |
resp = response.json() | |
return resp['answer'] | |
else: | |
return f"Request failed with status code: {response.status_code}" | |
def query_perplexity(query): | |
url = 'https://api.perplexity.ai/chat/completions' | |
headers = { | |
'Accept': 'application/json', | |
'Content-Type': 'application/json', | |
'Authorization': f'Bearer {PERPLEXITY_API_KEY}' | |
} | |
data = { | |
"model": "llama-3-sonar-large-32k-online", | |
"stream": False, | |
"max_tokens": 1024, | |
"frequency_penalty": 1, | |
"temperature": 0.0, | |
"messages": [ | |
{ | |
"role": "system", | |
"content": "Be precise and concise in your responses." | |
}, | |
{ | |
"role": "user", | |
"content": query | |
} | |
] | |
} | |
response = requests.post(url, headers=headers, json=data) | |
if response.status_code == 200: | |
result = response.json() | |
return result['choices'][0]['message']['content'] | |
else: | |
return f"Request failed with status code: {response.status_code}" | |
# def query_brave(query): | |
# headers = {"X-API-Key": BRAVE_API_KEY} | |
# params = { | |
# "q": query, | |
# "count": 1, | |
# "summary": True | |
# } | |
# response = requests.get("https://api.search.brave.com/res/v1/web/search", params=params, headers=headers) | |
# if response.status_code == 200: | |
# return response.json().get("summary", "No summary available.") | |
# else: | |
# return f"Request failed with status code: {response}" | |
# def brave_search_summarization(query): | |
# # Endpoint for web search with summary | |
# web_search_url = "https://api.search.brave.com/res/v1/web/search" | |
# summarizer_url = "https://api.search.brave.com/res/v1/summarizer/search" | |
# # Headers for the requests | |
# headers = { | |
# "Accept": "application/json", | |
# "Accept-Encoding": "gzip", | |
# "X-Subscription-Token": BRAVE_API_KEY | |
# } | |
# # Parameters for the initial web search request | |
# web_search_params = { | |
# "q": query, | |
# "summary": 1 | |
# } | |
# # Make the initial request to the web search endpoint | |
# web_search_response = requests.get(web_search_url, headers=headers, params=web_search_params) | |
# # Check if the request was successful | |
# if web_search_response.status_code != 200: | |
# raise Exception(f"Web search request failed with status code {web_search_response.status_code}") | |
# web_search_data = web_search_response.json() | |
# # Extract the summarizer key from the response | |
# summarizer_key = web_search_data.get('summarizer', {}).get('key') | |
# if not summarizer_key: | |
# raise Exception("No summarizer key found in the web search response") | |
# # Parameters for the summarizer request | |
# summarizer_params = { | |
# "key": summarizer_key, | |
# "entity_info": 1 | |
# } | |
# # Make the request to the summarizer endpoint | |
# summarizer_response = requests.get(summarizer_url, headers=headers, params=summarizer_params) | |
# # Check if the request was successful | |
# if summarizer_response.status_code != 200: | |
# raise Exception(f"Summarizer request failed with status code {summarizer_response.status_code}") | |
# summarizer_data = summarizer_response.json() | |
# # Return the summarized content | |
# return summarizer_data | |
def ProcessQuestion(question, model): | |
if model == "You.com": | |
return query_you_com(question) | |
elif model == "Tavily.com": | |
return query_tavily(question) | |
elif model == "Perplexity.ai": | |
return query_perplexity(question) | |
elif model == "Brave.com": | |
return query_brave(question) | |
else: | |
return "Model not supported" | |