Handle developer messages conservatively for OpenRouter
This commit is contained in:
@@ -37,6 +37,7 @@ class OpenRouterLLMService(OpenAILLMService):
|
|||||||
|
|
||||||
Settings = OpenRouterLLMSettings
|
Settings = OpenRouterLLMSettings
|
||||||
_settings: Settings
|
_settings: Settings
|
||||||
|
supports_developer_role = False
|
||||||
|
|
||||||
def __init__(
|
def __init__(
|
||||||
self,
|
self,
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ from pipecat.services.openai.responses.llm import (
|
|||||||
OpenAIResponsesHttpLLMService,
|
OpenAIResponsesHttpLLMService,
|
||||||
OpenAIResponsesLLMService,
|
OpenAIResponsesLLMService,
|
||||||
)
|
)
|
||||||
|
from pipecat.services.openrouter.llm import OpenRouterLLMService
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.asyncio
|
@pytest.mark.asyncio
|
||||||
@@ -105,6 +106,35 @@ async def test_openai_run_inference_client_exception():
|
|||||||
await service.run_inference(mock_context)
|
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
|
@pytest.mark.asyncio
|
||||||
async def test_anthropic_run_inference_with_llm_context():
|
async def test_anthropic_run_inference_with_llm_context():
|
||||||
"""Test run_inference with LLMContext returns expected response for Anthropic."""
|
"""Test run_inference with LLMContext returns expected response for Anthropic."""
|
||||||
|
|||||||
Reference in New Issue
Block a user