From bf4269e2fe0f9e2dbccd0f2aa368c9224d1bd3a8 Mon Sep 17 00:00:00 2001 From: Kevin Bruton Date: Fri, 26 Sep 2025 20:49:34 +0200 Subject: [PATCH] feat: add openrouter api credentials --- ERROR_HANDLING_GUIDE.md | 5 +++++ README.md | 5 +++++ tradingagents/dataflows/interface.py | 31 ++++++++++++++++++--------- tradingagents/graph/trading_graph.py | 32 ++++++++++++++++++++++++++-- 4 files changed, 61 insertions(+), 12 deletions(-) diff --git a/ERROR_HANDLING_GUIDE.md b/ERROR_HANDLING_GUIDE.md index 7f4eb470..38ac36c6 100644 --- a/ERROR_HANDLING_GUIDE.md +++ b/ERROR_HANDLING_GUIDE.md @@ -86,6 +86,11 @@ export OPENAI_API_KEY=your_openai_key_here export GOOGLE_API_KEY=your_google_api_key_here ``` +### For OpenRouter +```bash +export OPENROUTER_API_KEY=your_openrouter_api_key_here +``` + ## Error Handling Flow 1. **Agent Tool Called** → Online LLM function invoked diff --git a/README.md b/README.md index cac18691..03a05480 100644 --- a/README.md +++ b/README.md @@ -124,6 +124,11 @@ You will need the OpenAI API for all the agents. export OPENAI_API_KEY=$YOUR_OPENAI_API_KEY ``` +If you plan to use OpenRouter as your LLM provider, you'll also need: +```bash +export OPENROUTER_API_KEY=$YOUR_OPENROUTER_API_KEY +``` + ### CLI Usage You can also try out the CLI directly by running: diff --git a/tradingagents/dataflows/interface.py b/tradingagents/dataflows/interface.py index 68ddd881..fe98f556 100644 --- a/tradingagents/dataflows/interface.py +++ b/tradingagents/dataflows/interface.py @@ -817,24 +817,35 @@ def _call_llm_api(prompt, config): raise ValueError(error_msg) from e else: - # Use OpenAI (default) + # Use OpenAI-compatible providers (OpenAI, OpenRouter, Ollama) import os from openai import OpenAI, AuthenticationError, RateLimitError, NotFoundError - # Check if API key is available - api_key = os.getenv("OPENAI_API_KEY") - if not api_key: - raise ValueError( - "❌ OPENAI_API_KEY environment variable is not set.\n" - "Please set your OpenAI API key:\n" - "export OPENAI_API_KEY=your_key_here" - ) + # Check if API key is available based on provider + if provider.lower() == "openrouter": + api_key = os.getenv("OPENROUTER_API_KEY") + if not api_key: + raise ValueError( + "❌ OPENROUTER_API_KEY environment variable is not set.\n" + "Please set your OpenRouter API key:\n" + "export OPENROUTER_API_KEY=your_openrouter_key_here\n" + "Get your key from: https://openrouter.ai/keys" + ) + else: + # Default to OpenAI + api_key = os.getenv("OPENAI_API_KEY") + if not api_key: + raise ValueError( + "❌ OPENAI_API_KEY environment variable is not set.\n" + "Please set your OpenAI API key:\n" + "export OPENAI_API_KEY=your_key_here" + ) model = config["quick_think_llm"] valid_models = _get_valid_models("openai") try: - client = OpenAI(base_url=config["backend_url"]) + client = OpenAI(base_url=config["backend_url"], api_key=api_key) response = client.chat.completions.create( model=model, messages=[ diff --git a/tradingagents/graph/trading_graph.py b/tradingagents/graph/trading_graph.py index 80a29e53..18a4fe50 100644 --- a/tradingagents/graph/trading_graph.py +++ b/tradingagents/graph/trading_graph.py @@ -59,8 +59,36 @@ class TradingAgentsGraph: # Initialize LLMs if self.config["llm_provider"].lower() == "openai" or self.config["llm_provider"] == "ollama" or self.config["llm_provider"] == "openrouter": - self.deep_thinking_llm = ChatOpenAI(model=self.config["deep_think_llm"], base_url=self.config["backend_url"]) - self.quick_thinking_llm = ChatOpenAI(model=self.config["quick_think_llm"], base_url=self.config["backend_url"]) + # Handle API key based on provider + api_key = None + if self.config["llm_provider"].lower() == "openrouter": + api_key = os.getenv("OPENROUTER_API_KEY") + if not api_key: + raise ValueError( + "❌ OPENROUTER_API_KEY environment variable is not set.\n" + "Please set your OpenRouter API key:\n" + "export OPENROUTER_API_KEY=your_openrouter_key_here\n" + "Get your key from: https://openrouter.ai/keys" + ) + elif self.config["llm_provider"].lower() == "openai": + api_key = os.getenv("OPENAI_API_KEY") + if not api_key: + raise ValueError( + "❌ OPENAI_API_KEY environment variable is not set.\n" + "Please set your OpenAI API key:\n" + "export OPENAI_API_KEY=your_openai_key_here" + ) + + self.deep_thinking_llm = ChatOpenAI( + model=self.config["deep_think_llm"], + base_url=self.config["backend_url"], + api_key=api_key + ) + self.quick_thinking_llm = ChatOpenAI( + model=self.config["quick_think_llm"], + base_url=self.config["backend_url"], + api_key=api_key + ) elif self.config["llm_provider"].lower() == "anthropic": self.deep_thinking_llm = ChatAnthropic(model=self.config["deep_think_llm"], base_url=self.config["backend_url"]) self.quick_thinking_llm = ChatAnthropic(model=self.config["quick_think_llm"], base_url=self.config["backend_url"])