Spaces:
Runtime error
Runtime error
import logging | |
import time | |
import requests | |
import json | |
import os | |
from api.finnhub.financial_news_requester import fetch_comp_financial_news | |
from api.openrouter.prompt_generator import PromptGenerator | |
class OpenRouterClient: | |
def __init__(self, model: str = "tngtech/deepseek-r1t2-chimera:free", api_key: str | None = None): | |
self._api_key = api_key or os.getenv("OPENROUTER_API_KEY") | |
if not self._api_key: | |
raise ValueError("OpenRouter API key is required") | |
self._api_url = "https://openrouter.ai/api/v1/chat/completions" | |
self.model = model | |
def chat(self, user_message: str, role: str = "user") -> str: | |
""" | |
Sends a message to the OpenRouter API and returns the response. | |
Raises RuntimeError for HTTP errors and ValueError for unexpected response formats. | |
Args: | |
user_message (str): The message to send to the model. | |
Returns: | |
str: The response from the model. | |
Raises: | |
RuntimeError: If the API request fails. | |
ValueError: If the response format is unexpected. | |
""" | |
headers = { | |
"Authorization": f"Bearer {self._api_key}", | |
"Content-Type": "application/json" | |
} | |
payload = { | |
"model": self.model, | |
"messages": [ | |
{ | |
"role": role, | |
"content": user_message | |
} | |
] | |
} | |
try: | |
response = requests.post( | |
url=self._api_url, | |
headers=headers, | |
data=json.dumps(payload), | |
timeout=10 | |
) | |
response.raise_for_status() | |
except requests.exceptions.RequestException as e: | |
logging.error(f"OpenRouter request error: {e}") | |
raise RuntimeError(f"Request error: {e}") | |
response_json = response.json() | |
try: | |
return response_json["choices"][0]["message"]["content"] | |
except (KeyError, IndexError): | |
logging.error(f"Unexpected response format: {response_json}") | |
raise ValueError(f"Unexpected response format: {response_json}") | |
if __name__ == "__main__": | |
sample_news = fetch_comp_financial_news(ticker='NVDA', date_from='2025-08-04', date_to='2025-08-05') | |
print(sample_news) | |
print(len(sample_news)) | |
# Example usage | |
client = OpenRouterClient() | |
try: | |
for news in sample_news: | |
start_time = time.perf_counter() | |
prompt = PromptGenerator.format_prompt(news) | |
print(f"Prompt: {prompt}") | |
response = client.chat(prompt) | |
print(f"Response: {response}") | |
elapsed = time.perf_counter() - start_time | |
print(f"Processing time: {elapsed:.2f} seconds") | |
except (RuntimeError, ValueError) as e: | |
print(f"Error: {e}") | |