@@ -79,7 +79,11 @@ def from_env(cls, **overrides: Any) -> "Config":
7979
8080 def _detect_provider (self ):
8181 """Auto-detect provider from environment variables."""
82- if os .getenv ("OPENAI_API_KEY" ):
82+ if os .getenv ("OPENROUTER_API_KEY" ):
83+ self .provider = "openrouter"
84+ self .api_key = os .getenv ("OPENROUTER_API_KEY" )
85+ self .base_url = "https://openrouter.ai/api/v1"
86+ elif os .getenv ("OPENAI_API_KEY" ):
8387 self .provider = "openai"
8488 self .api_key = os .getenv ("OPENAI_API_KEY" )
8589 elif os .getenv ("ANTHROPIC_API_KEY" ):
@@ -100,6 +104,7 @@ def _default_model(self, provider: str | None = None) -> str:
100104 "openai" : "gpt-4o-mini" ,
101105 "anthropic" : "claude-3-5-haiku-latest" ,
102106 "google" : "gemini-2.5-flash-lite" ,
107+ "openrouter" : "google/gemini-2.0-flash-exp:free" ,
103108 "ollama" : "llama3.2" ,
104109 }
105110 return defaults .get (provider or self .provider , "gpt-4o-mini" )
@@ -114,7 +119,7 @@ def validate(self) -> None:
114119 Raises:
115120 ValueError: If any configuration value is invalid.
116121 """
117- VALID_PROVIDERS = {"openai" , "anthropic" , "google" , "ollama" }
122+ VALID_PROVIDERS = {"openai" , "anthropic" , "google" , "openrouter" , " ollama" }
118123 VALID_FORMATS = {"markdown" , "html" , "text" , "json" , "pdf" }
119124 VALID_SEARCH_PROVIDERS = {"duckduckgo" , "brave" , "searxng" }
120125
0 commit comments