Handle developer messages conservatively for OpenRouter

This commit is contained in:
Mark Backman
2026-05-18 10:11:46 -04:00
parent c51a817efa
commit 4b98c2b7f1
2 changed files with 31 additions and 0 deletions

View File

@@ -37,6 +37,7 @@ class OpenRouterLLMService(OpenAILLMService):
Settings = OpenRouterLLMSettings
_settings: Settings
supports_developer_role = False
def __init__(
self,

View File

@@ -23,6 +23,7 @@ from pipecat.services.openai.responses.llm import (
OpenAIResponsesHttpLLMService,
OpenAIResponsesLLMService,
)
from pipecat.services.openrouter.llm import OpenRouterLLMService
@pytest.mark.asyncio
@@ -105,6 +106,35 @@ async def test_openai_run_inference_client_exception():
await service.run_inference(mock_context)
@pytest.mark.asyncio
async def test_openrouter_run_inference_converts_developer_messages_to_user():
"""Test OpenRouter requests convert developer messages for broad model compatibility."""
with patch.object(OpenRouterLLMService, "create_client"):
service = OpenRouterLLMService(settings=OpenRouterLLMService.Settings(model="gpt-4"))
service._client = AsyncMock()
mock_context = MagicMock(spec=LLMContext)
mock_adapter = MagicMock()
mock_adapter.get_llm_invocation_params.return_value = OpenAILLMInvocationParams(
messages=[{"role": "user", "content": "Tool result"}],
tools=OPENAI_NOT_GIVEN,
tool_choice=OPENAI_NOT_GIVEN,
)
service.get_llm_adapter = MagicMock(return_value=mock_adapter)
mock_response = MagicMock()
mock_response.choices = [MagicMock()]
mock_response.choices[0].message.content = "Done"
service._client.chat.completions.create.return_value = mock_response
result = await service.run_inference(mock_context)
assert result == "Done"
mock_adapter.get_llm_invocation_params.assert_called_once_with(
mock_context, system_instruction=None, convert_developer_to_user=True
)
@pytest.mark.asyncio
async def test_anthropic_run_inference_with_llm_context():
"""Test run_inference with LLMContext returns expected response for Anthropic."""