mirror of
https://github.com/dograh-hq/dograh.git
synced 2026-06-07 07:55:16 +02:00
* feat: add openai realtime models * chore: bump pipecat * fix: resample telephony audio for openai realtime * fix: sampling rate fix for openai realtime * chore: clean up dead code
59 lines
2 KiB
Python
59 lines
2 KiB
Python
from types import SimpleNamespace
|
|
from unittest.mock import AsyncMock
|
|
|
|
import pytest
|
|
from pipecat.frames.frames import LLMMessagesAppendFrame
|
|
from pipecat.services.openai.realtime import events
|
|
|
|
from api.services.pipecat.realtime.openai_realtime import (
|
|
DograhOpenAIRealtimeLLMService,
|
|
)
|
|
from api.services.workflow.pipecat_engine_callbacks import UserIdleHandler
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_openai_realtime_messages_append_frame_sends_conversation_item():
|
|
service = DograhOpenAIRealtimeLLMService(api_key="test")
|
|
service._api_session_ready = True
|
|
service.send_client_event = AsyncMock()
|
|
service._send_manual_response_create = AsyncMock()
|
|
|
|
await service._handle_messages_append(
|
|
LLMMessagesAppendFrame(
|
|
[{"role": "user", "content": "Are you still there?"}],
|
|
run_llm=True,
|
|
)
|
|
)
|
|
|
|
service.send_client_event.assert_awaited_once()
|
|
event = service.send_client_event.await_args.args[0]
|
|
assert isinstance(event, events.ConversationItemCreateEvent)
|
|
assert event.item.role == "user"
|
|
assert event.item.type == "message"
|
|
assert event.item.content == [
|
|
events.ItemContent(type="input_text", text="Are you still there?")
|
|
]
|
|
service._send_manual_response_create.assert_awaited_once()
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
async def test_user_idle_handler_uses_realtime_append_path():
|
|
engine = SimpleNamespace(
|
|
llm=SimpleNamespace(),
|
|
end_call_with_reason=AsyncMock(),
|
|
)
|
|
aggregator = SimpleNamespace(push_frame=AsyncMock())
|
|
handler = UserIdleHandler(engine)
|
|
|
|
await handler.handle_idle(aggregator)
|
|
|
|
aggregator.push_frame.assert_awaited_once()
|
|
frame = aggregator.push_frame.await_args.args[0]
|
|
assert isinstance(frame, LLMMessagesAppendFrame)
|
|
assert frame.run_llm is True
|
|
assert frame.messages == [
|
|
{
|
|
"role": "user",
|
|
"content": "The user has been quiet. Politely and briefly ask if they're still there in the language that the user has been speaking so far.",
|
|
}
|
|
]
|