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}") | |