Dmitry Beresnev
add openrouter client, promt generator, etc
bba1099
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}")