Compare commits

...

1 Commits

Author SHA1 Message Date
Devin AI
8c0e7d235e Fix Deepseek-v3-250324 empty responses issue (#2657)
Co-Authored-By: Joe Moura <joao@crewai.com>
2025-04-22 11:18:44 +00:00
2 changed files with 43 additions and 0 deletions

View File

@@ -91,6 +91,7 @@ LLM_CONTEXT_WINDOW_SIZES = {
"gemini-1.5-flash-8b": 1048576,
# deepseek
"deepseek-chat": 128000,
"deepseek-v3-250324": 128000,
# groq
"gemma2-9b-it": 8192,
"gemma-7b-it": 8192,
@@ -930,6 +931,17 @@ class LLM(BaseLLM):
) # Create a copy to avoid modifying the original
messages.append({"role": "user", "content": "Please continue."})
return messages
# Handle Deepseek-v3-250324 model - it also requires the last message to have a role of 'user'
if "deepseek-v3-250324" in self.model.lower():
# Check if the last message has a role of 'assistant'
if messages and messages[-1]["role"] == "assistant":
# Add a dummy user message to ensure the last message has a role of 'user'
messages = (
messages.copy()
) # Create a copy to avoid modifying the original
messages.append({"role": "user", "content": "Please continue."})
return messages
# Handle Anthropic models
if not self.is_anthropic:

View File

@@ -407,6 +407,37 @@ def test_anthropic_message_formatting(anthropic_llm, system_message, user_messag
assert formatted[0] == system_message
@pytest.fixture
def deepseek_llm():
"""Fixture for Deepseek-v3-250324 LLM instance."""
return LLM(model="deepseek-v3-250324")
def test_deepseek_message_formatting(deepseek_llm):
"""Test Deepseek-v3-250324 message formatting."""
# Test when last message is assistant
messages = [
{"role": "user", "content": "Hello"},
{"role": "assistant", "content": "Hi there"},
]
formatted = deepseek_llm._format_messages_for_provider(messages)
assert len(formatted) == 3
assert formatted[0]["role"] == "user"
assert formatted[1]["role"] == "assistant"
assert formatted[2]["role"] == "user"
assert formatted[2]["content"] == "Please continue."
# Test when last message is not assistant
messages = [
{"role": "assistant", "content": "Hi there"},
{"role": "user", "content": "Hello"},
]
formatted = deepseek_llm._format_messages_for_provider(messages)
assert len(formatted) == 2
assert formatted[0]["role"] == "assistant"
assert formatted[1]["role"] == "user"
def test_deepseek_r1_with_open_router():
if not os.getenv("OPEN_ROUTER_API_KEY"):
pytest.skip("OPEN_ROUTER_API_KEY not set; skipping test.")