Spaces:
Runtime error
Runtime error
import requests | |
from config import get_api_keys | |
import logging | |
from functools import lru_cache | |
logger = logging.getLogger(__name__) | |
api_keys = get_api_keys() | |
def internet_search(query, search_type="web", num_results=20): | |
logger.info(f"Performing internet search for query: {query}, type: {search_type}") | |
url = f"https://api.search.brave.com/res/v1/{'web' if search_type == 'web' else 'news'}/search" | |
headers = { | |
"Accept": "application/json", | |
"Accept-Encoding": "gzip", | |
"X-Subscription-Token": api_keys["BRAVE_API_KEY"] | |
} | |
params = {"q": query} | |
response = requests.get(url, headers=headers, params=params) | |
if response.status_code != 200: | |
logger.error(f"Failed to fetch search results. Status code: {response.status_code}") | |
return [] | |
search_data = response.json()["web"]["results"] if search_type == "web" else response.json()["results"] | |
processed_results = [ | |
{ | |
"title": item["title"], | |
"snippet": item["extra_snippets"][0], | |
"last_updated": item.get("age", ""), | |
"url":item.get("url", "") | |
} | |
for item in search_data | |
if item.get("extra_snippets") | |
][:num_results] | |
logger.info(f"Retrieved {len(processed_results)} search results") | |
return processed_results | |
def cached_internet_search(query: str): | |
logger.info(f"Performing cached internet search for query: {query}") | |
return internet_search(query, search_type="news") | |
def analyze_data(query, data_type="news"): | |
logger.info(f"Analyzing {data_type} for query: {query}") | |
if data_type == "news": | |
data = cached_internet_search(query) | |
prompt_generator = generate_news_prompt | |
system_prompt = NEWS_ASSISTANT_PROMPT | |
else: | |
data = internet_search(query, search_type="web") | |
prompt_generator = generate_search_prompt | |
system_prompt = SEARCH_ASSISTANT_PROMPT | |
if not data: | |
logger.error(f"Failed to fetch {data_type} data") | |
return None | |
prompt = prompt_generator(query, data) | |
messages = [ | |
{"role": "system", "content": system_prompt}, | |
{"role": "user", "content": prompt} | |
] | |
logger.info(f"{data_type.capitalize()} analysis completed") | |
return messages,data | |
def search_assistant_api(query, data_type, model="openai/gpt-4o-mini"): | |
logger.info(f"Received {data_type} assistant query: {query}") | |
messages, search_data = analyze_data(query, data_type) | |
if not messages: | |
logger.error(f"Failed to fetch {data_type} data") | |
raise HTTPException(status_code=500, detail=f"Failed to fetch {data_type} data") | |
def process_response(): | |
logger.info(f"Generating response using LLM: {messages}") | |
full_response = "" | |
for content in chat_with_llama_stream(messages, model=model): | |
full_response += content | |
yield content | |
logger.info(f"Completed {data_type} assistant response for query: {query}") | |
logger.info(f"LLM Response: {full_response}") | |
yield "<json><ref>"+ json.dumps(search_data)+"</ref></json>" | |
return process_response |