From 4211664a77fb605f3d3a2bca2c86f3ec3b26aab0 Mon Sep 17 00:00:00 2001 From: Mark Backman Date: Mon, 16 Dec 2024 10:33:34 -0500 Subject: [PATCH] TranscriptProcessor to handle simple and list content --- src/pipecat/processors/transcript_processor.py | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/src/pipecat/processors/transcript_processor.py b/src/pipecat/processors/transcript_processor.py index fcd4bfe52..be53cd79a 100644 --- a/src/pipecat/processors/transcript_processor.py +++ b/src/pipecat/processors/transcript_processor.py @@ -71,7 +71,9 @@ class TranscriptProcessor(FrameProcessor): """Extract conversation messages from standard format. Args: - messages: List of messages in standard format with structured content + messages: List of messages in OpenAI format, which can be either: + - Simple format: {"role": "user", "content": "Hello"} + - Content list: {"role": "user", "content": [{"type": "text", "text": "Hello"}]} Returns: List[TranscriptionMessage]: Normalized conversation messages @@ -82,9 +84,17 @@ class TranscriptProcessor(FrameProcessor): if msg["role"] not in ("user", "assistant"): continue - content = msg.get("content", []) - if isinstance(content, list): - # Extract text from structured content + if "content" not in msg: + logger.warning(f"Message missing content field: {msg}") + continue + + content = msg.get("content") + if isinstance(content, str): + # Handle simple string content + if content: + result.append(TranscriptionMessage(role=msg["role"], content=content)) + elif isinstance(content, list): + # Handle structured content text_parts = [] for part in content: if isinstance(part, dict) and part.get("type") == "text":