diff --git a/.env.example b/.env.example index 1f342b1..069f23c 100644 --- a/.env.example +++ b/.env.example @@ -1,3 +1,4 @@ SEARXNG_BASE_URL="http://127.0.0.1:8080" OPENAI_API_KEY='xxxxx' -DEEPSEEK_API_KEY='xxxxx' \ No newline at end of file +DEEPSEEK_API_KEY='xxxxx' +OPENROUTER_API_KEY='xxxxx' \ No newline at end of file diff --git a/sources/llm_provider.py b/sources/llm_provider.py index d12cc72..7884bb5 100644 --- a/sources/llm_provider.py +++ b/sources/llm_provider.py @@ -32,12 +32,12 @@ class Provider: "deepseek": self.deepseek_fn, "together": self.together_fn, "dsk_deepseek": self.dsk_deepseek, - "test": self.test_fn, - "anthropic": self.anthropic_fn + "openrouter": self.openrouter_fn, + "test": self.test_fn } self.logger = Logger("provider.log") self.api_key = None - self.unsafe_providers = ["openai", "deepseek", "dsk_deepseek", "together", "google", "anthropic"] + self.unsafe_providers = ["openai", "deepseek", "dsk_deepseek", "together", "google", "openrouter"] if self.provider_name not in self.available_providers: raise ValueError(f"Unknown provider: {provider_name}") if self.provider_name in self.unsafe_providers and self.is_local == False: @@ -346,6 +346,29 @@ class Provider: raise Exception(f"An error occurred: {str(e)}") from e return thought + def openrouter_fn(self, history, verbose=False): + """ + Use OpenRouter API to generate text. + """ + client = OpenAI(api_key=self.api_key, base_url="https://openrouter.ai/api/v1") + if self.is_local: + # This case should ideally not be reached if unsafe_providers is set correctly + # and is_local is False in config for openrouter + raise Exception("OpenRouter is not available for local use. Change config.ini") + try: + response = client.chat.completions.create( + model=self.model, + messages=history, + ) + if response is None: + raise Exception("OpenRouter response is empty.") + thought = response.choices[0].message.content + if verbose: + print(thought) + return thought + except Exception as e: + raise Exception(f"OpenRouter API error: {str(e)}") from e + def dsk_deepseek(self, history, verbose=False): """ Use: xtekky/deepseek4free