Fix: Resolve an issue where Google LLM context messages were causing a TypeError
This commit is contained in:
@@ -27,6 +27,10 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||||||
|
|
||||||
### Fixed
|
### Fixed
|
||||||
|
|
||||||
|
- Fixed an issue in `RTVIObserver` that prevented handling of Google LLM
|
||||||
|
context messages. The observer now processes both OpenAI-style and
|
||||||
|
Google-style contexts.
|
||||||
|
|
||||||
- Fixed an issue in Daily involving switching virtual devices, by bumping the
|
- Fixed an issue in Daily involving switching virtual devices, by bumping the
|
||||||
daily-python dependency to >= 0.16.1.
|
daily-python dependency to >= 0.16.1.
|
||||||
|
|
||||||
|
|||||||
@@ -540,10 +540,23 @@ class RTVIObserver(BaseObserver):
|
|||||||
await self.push_transport_message_urgent(message)
|
await self.push_transport_message_urgent(message)
|
||||||
|
|
||||||
async def _handle_context(self, frame: OpenAILLMContextFrame):
|
async def _handle_context(self, frame: OpenAILLMContextFrame):
|
||||||
|
"""Process LLM context frames to extract user messages for the RTVI client."""
|
||||||
try:
|
try:
|
||||||
messages = frame.context.messages
|
messages = frame.context.messages
|
||||||
if len(messages) > 0:
|
if not messages:
|
||||||
message = messages[-1]
|
return
|
||||||
|
|
||||||
|
message = messages[-1]
|
||||||
|
|
||||||
|
# Handle Google LLM format (protobuf objects with attributes)
|
||||||
|
if hasattr(message, "role") and message.role == "user" and hasattr(message, "parts"):
|
||||||
|
text = "".join(part.text for part in message.parts if hasattr(part, "text"))
|
||||||
|
if text:
|
||||||
|
rtvi_message = RTVIUserLLMTextMessage(data=RTVITextMessageData(text=text))
|
||||||
|
await self.push_transport_message_urgent(rtvi_message)
|
||||||
|
|
||||||
|
# Handle OpenAI format (original implementation)
|
||||||
|
elif isinstance(message, dict):
|
||||||
if message["role"] == "user":
|
if message["role"] == "user":
|
||||||
content = message["content"]
|
content = message["content"]
|
||||||
if isinstance(content, list):
|
if isinstance(content, list):
|
||||||
@@ -552,7 +565,8 @@ class RTVIObserver(BaseObserver):
|
|||||||
text = content
|
text = content
|
||||||
rtvi_message = RTVIUserLLMTextMessage(data=RTVITextMessageData(text=text))
|
rtvi_message = RTVIUserLLMTextMessage(data=RTVITextMessageData(text=text))
|
||||||
await self.push_transport_message_urgent(rtvi_message)
|
await self.push_transport_message_urgent(rtvi_message)
|
||||||
except TypeError as e:
|
|
||||||
|
except Exception as e:
|
||||||
logger.warning(f"Caught an error while trying to handle context: {e}")
|
logger.warning(f"Caught an error while trying to handle context: {e}")
|
||||||
|
|
||||||
async def _handle_metrics(self, frame: MetricsFrame):
|
async def _handle_metrics(self, frame: MetricsFrame):
|
||||||
|
|||||||
Reference in New Issue
Block a user