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/README.md b/README.md index b2df0a7..f18ccd0 100644 --- a/README.md +++ b/README.md @@ -205,7 +205,7 @@ Example: export `TOGETHER_API_KEY="xxxxx"` | Provider | Local? | Description | |-----------|--------|-----------------------------------------------------------| | openai | Depends | Use ChatGPT API | -| deepseek-api | No | Deepseek API (non-private) | +| deepseek | No | Deepseek API (non-private) | | huggingface| No | Hugging-Face API (non-private) | | togetherAI | No | Use together AI API (non-private) | | google | No | Use google gemini API (non-private) | @@ -319,7 +319,7 @@ Clone the repository and enter the `server/`folder. ```sh git clone --depth 1 https://github.com/Fosowl/agenticSeek.git -cd agenticSeek/server/ +cd agenticSeek/llm_server/ ``` Install server specific requirements: @@ -556,4 +556,4 @@ We’re looking for developers to improve AgenticSeek! Check out open issues or > [antoineVIVIES](https://github.com/antoineVIVIES) | Taipei Time - > [steveh8758](https://github.com/steveh8758) | Taipei Time \ No newline at end of file + > [steveh8758](https://github.com/steveh8758) | Taipei Time diff --git a/sources/llm_provider.py b/sources/llm_provider.py index 08b819a..da43d95 100644 --- a/sources/llm_provider.py +++ b/sources/llm_provider.py @@ -31,12 +31,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: @@ -345,6 +345,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