diff --git a/src/pipecat/adapters/services/open_ai_realtime_adapter.py b/src/pipecat/adapters/services/open_ai_realtime_adapter.py index e1ffe2b83..ddf4aa591 100644 --- a/src/pipecat/adapters/services/open_ai_realtime_adapter.py +++ b/src/pipecat/adapters/services/open_ai_realtime_adapter.py @@ -6,8 +6,8 @@ """OpenAI Realtime LLM adapter for Pipecat.""" +import copy import json -from copy import copy from dataclasses import dataclass from typing import Any, Dict, List, Optional, TypedDict @@ -75,7 +75,7 @@ class OpenAIRealtimeLLMAdapter(BaseLLMAdapter): Returns: List of messages in a format ready for logging about OpenAI Realtime. """ - raise NotImplementedError("Universal LLMContext is not yet supported for OpenAI Realtime.") + return self._from_universal_context_messages(self.get_messages(context)).messages @dataclass class ConvertedMessages: diff --git a/src/pipecat/services/openai_realtime/openai.py b/src/pipecat/services/openai_realtime/openai.py index 4f88a30a9..e8d8a7f05 100644 --- a/src/pipecat/services/openai_realtime/openai.py +++ b/src/pipecat/services/openai_realtime/openai.py @@ -9,6 +9,7 @@ import base64 import json import time +import traceback from dataclasses import dataclass from typing import Any, Dict, List, Optional @@ -475,17 +476,18 @@ class OpenAIRealtimeLLMService(LLMService): async def _update_settings(self): settings = self._session_properties - adapter: OpenAIRealtimeLLMAdapter = self.get_llm_adapter() - llm_invocation_params = adapter.get_llm_invocation_params(self._context) + if self._context: + adapter: OpenAIRealtimeLLMAdapter = self.get_llm_adapter() + llm_invocation_params = adapter.get_llm_invocation_params(self._context) - # tools given in the context override the tools in the session properties - if llm_invocation_params["tools"]: - settings.tools = llm_invocation_params["tools"] + # tools given in the context override the tools in the session properties + if llm_invocation_params["tools"]: + settings.tools = llm_invocation_params["tools"] - # instructions in the context come from an initial "system" message in the - # messages list, and override instructions in the session properties - if llm_invocation_params["system_instruction"]: - settings.instructions = llm_invocation_params["system_instruction"] + # instructions in the context come from an initial "system" message in the + # messages list, and override instructions in the session properties + if llm_invocation_params["system_instruction"]: + settings.instructions = llm_invocation_params["system_instruction"] await self.send_client_event(events.SessionUpdateEvent(session=settings)) @@ -790,10 +792,11 @@ class OpenAIRealtimeLLMService(LLMService): self._run_llm_when_api_session_ready = True return + adapter: OpenAIRealtimeLLMAdapter = self.get_llm_adapter() + # Configure the LLM for this session if needed if self._llm_needs_conversation_setup: # Send initial messages - adapter: OpenAIRealtimeLLMAdapter = self.get_llm_adapter() llm_invocation_params = adapter.get_llm_invocation_params(self._context) messages = llm_invocation_params["messages"] for item in messages: @@ -807,7 +810,7 @@ class OpenAIRealtimeLLMService(LLMService): # We're done configuring the LLM for this session self._llm_needs_conversation_setup = False - logger.debug(f"Creating response: {self._context.get_messages_for_logging()}") + logger.debug(f"Creating response: {adapter.get_messages_for_logging(self._context)}") await self.push_frame(LLMFullResponseStartFrame()) await self.start_processing_metrics()