From e2b55c1c5b5793c7a3ba2ee16b646c4dc12f3272 Mon Sep 17 00:00:00 2001 From: Yue Pan <79363355+dcloud347@users.noreply.github.com> Date: Tue, 3 Jun 2025 20:58:28 +0100 Subject: [PATCH 1/2] Add support for DeepSeek API in dependencies and service layers --- example.env | 1 + prometheus/app/dependencies.py | 1 + prometheus/app/services/llm_service.py | 14 +++++++++++++- tests/app/services/test_llm_service.py | 15 +++++++++++++++ 4 files changed, 30 insertions(+), 1 deletion(-) diff --git a/example.env b/example.env index c20ab69e..8895d9bd 100644 --- a/example.env +++ b/example.env @@ -21,6 +21,7 @@ PROMETHEUS_ANTHROPIC_API_KEY=anthropic_api_key PROMETHEUS_GEMINI_API_KEY=gemini_api_key PROMETHEUS_OPENAI_API_KEY=openai_api_key PROMETHEUS_OPENROUTER_API_KEY=openrouter_api_key +PROMETHEUS_DEEPSEEK_API_KEY=deepseek_api_key # GitHub settings PROMETHEUS_GITHUB_ACCESS_TOKEN=github_access_token diff --git a/prometheus/app/dependencies.py b/prometheus/app/dependencies.py index 0ac6bad1..d482a8fe 100644 --- a/prometheus/app/dependencies.py +++ b/prometheus/app/dependencies.py @@ -41,6 +41,7 @@ def initialize_services() -> ServiceCoordinator: getattr(settings, "ANTHROPIC_API_KEY", None), getattr(settings, "GEMINI_API_KEY", None), getattr(settings, "OPENROUTER_API_KEY", None), + getattr(settings, "DEEPSEEK_API_KEY", None), ) knowledge_graph_service = KnowledgeGraphService( neo4j_service, diff --git a/prometheus/app/services/llm_service.py b/prometheus/app/services/llm_service.py index 6d99d4e9..16fd1063 100644 --- a/prometheus/app/services/llm_service.py +++ b/prometheus/app/services/llm_service.py @@ -21,6 +21,7 @@ def __init__( anthropic_api_key: Optional[str] = None, gemini_api_key: Optional[str] = None, open_router_api_key: Optional[str] = None, + deepseek_api_key: Optional[str] = None, ): self.advanced_model = get_model( advanced_model_name, @@ -28,9 +29,10 @@ def __init__( anthropic_api_key, gemini_api_key, open_router_api_key, + deepseek_api_key, ) self.base_model = get_model( - base_model_name, openai_api_key, anthropic_api_key, gemini_api_key, open_router_api_key + base_model_name, openai_api_key, anthropic_api_key, gemini_api_key, open_router_api_key, deepseek_api_key ) @@ -40,6 +42,7 @@ def get_model( anthropic_api_key: Optional[str] = None, gemini_api_key: Optional[str] = None, open_router_api_key: Optional[str] = None, + deepseek_api_key: Optional[str] = None, ) -> BaseChatModel: if "/" in model_name: return CustomChatOpenAI( @@ -74,5 +77,14 @@ def get_model( max_tokens=None, max_retries=3, ) + elif "deepseek" in model_name: + return CustomChatOpenAI( + model=model_name, + api_key=deepseek_api_key, + base_url="https://api.deepseek.com", + temperature=0.0, + max_tokens=None, + max_retries=3, + ) else: raise ValueError(f"Unknown model name: {model_name}") diff --git a/tests/app/services/test_llm_service.py b/tests/app/services/test_llm_service.py index 054d1814..2ea52de7 100644 --- a/tests/app/services/test_llm_service.py +++ b/tests/app/services/test_llm_service.py @@ -100,6 +100,21 @@ def test_get_model_gemini(mock_chat_google): ) +def test_get_model_deepseek(custom_chat_openai): + # Exercise + get_model(model_name="deepseek-r1", deepseek_api_key="deepseek-key") + + # Verify + custom_chat_openai.assert_called_once_with( + model="deepseek-R1", + api_key="deepseek-key", + base_url="https://api.deepseek.com", + temperature=0.0, + max_tokens=None, + max_retries=3, + ) + + def test_get_model_unknown(): # Exercise & Verify with pytest.raises(ValueError, match="Unknown model name: unknown-model"): From 1d7a321fd671e83f3407d6b5ca6e05a650f3ff00 Mon Sep 17 00:00:00 2001 From: Yue Pan <79363355+dcloud347@users.noreply.github.com> Date: Tue, 3 Jun 2025 21:02:56 +0100 Subject: [PATCH 2/2] Refactor argument formatting for get_model function in llm_service.py --- prometheus/app/services/llm_service.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/prometheus/app/services/llm_service.py b/prometheus/app/services/llm_service.py index 16fd1063..59449d13 100644 --- a/prometheus/app/services/llm_service.py +++ b/prometheus/app/services/llm_service.py @@ -32,7 +32,12 @@ def __init__( deepseek_api_key, ) self.base_model = get_model( - base_model_name, openai_api_key, anthropic_api_key, gemini_api_key, open_router_api_key, deepseek_api_key + base_model_name, + openai_api_key, + anthropic_api_key, + gemini_api_key, + open_router_api_key, + deepseek_api_key, )