Fix tracing in GeminiMultimodalLiveLLMService
This commit is contained in:
@@ -1172,19 +1172,8 @@ class GeminiMultimodalLiveLLMService(LLMService):
|
|||||||
self._bot_is_speaking = False
|
self._bot_is_speaking = False
|
||||||
text = self._bot_text_buffer
|
text = self._bot_text_buffer
|
||||||
|
|
||||||
# Determine output and modality for tracing
|
|
||||||
# TODO: looks like there's a bug here - output_text and output_modality are unused
|
|
||||||
if text:
|
|
||||||
# TEXT modality
|
|
||||||
output_text = text
|
|
||||||
output_modality = "TEXT"
|
|
||||||
else:
|
|
||||||
# AUDIO modality
|
|
||||||
output_text = self._llm_output_buffer
|
|
||||||
output_modality = "AUDIO"
|
|
||||||
|
|
||||||
# Trace the complete LLM response (this will be handled by the decorator)
|
# Trace the complete LLM response (this will be handled by the decorator)
|
||||||
# The decorator will extract the output text and usage metadata from the event
|
# The decorator will extract the output text and usage metadata from the message
|
||||||
|
|
||||||
self._bot_text_buffer = ""
|
self._bot_text_buffer = ""
|
||||||
self._llm_output_buffer = ""
|
self._llm_output_buffer = ""
|
||||||
|
|||||||
@@ -651,9 +651,9 @@ def traced_gemini_live(operation: str) -> Callable:
|
|||||||
|
|
||||||
elif operation == "llm_tool_call" and args:
|
elif operation == "llm_tool_call" and args:
|
||||||
# Extract tool call information
|
# Extract tool call information
|
||||||
evt = args[0] if args else None
|
msg = args[0] if args else None
|
||||||
if evt and hasattr(evt, "toolCall") and evt.toolCall.functionCalls:
|
if msg and hasattr(msg, "tool_call") and msg.tool_call.function_calls:
|
||||||
function_calls = evt.toolCall.functionCalls
|
function_calls = msg.tool_call.function_calls
|
||||||
if function_calls:
|
if function_calls:
|
||||||
# Add information about the first function call
|
# Add information about the first function call
|
||||||
call = function_calls[0]
|
call = function_calls[0]
|
||||||
@@ -722,19 +722,19 @@ def traced_gemini_live(operation: str) -> Callable:
|
|||||||
|
|
||||||
elif operation == "llm_response" and args:
|
elif operation == "llm_response" and args:
|
||||||
# Extract usage and response metadata from turn complete event
|
# Extract usage and response metadata from turn complete event
|
||||||
evt = args[0] if args else None
|
msg = args[0] if args else None
|
||||||
if evt and hasattr(evt, "usageMetadata") and evt.usageMetadata:
|
if msg and hasattr(msg, "usage_metadata") and msg.usage_metadata:
|
||||||
usage = evt.usageMetadata
|
usage = msg.usage_metadata
|
||||||
|
|
||||||
# Token usage - basic attributes for span visibility
|
# Token usage - basic attributes for span visibility
|
||||||
if hasattr(usage, "promptTokenCount"):
|
if hasattr(usage, "prompt_token_count"):
|
||||||
operation_attrs["tokens.prompt"] = usage.promptTokenCount or 0
|
operation_attrs["tokens.prompt"] = usage.prompt_token_count or 0
|
||||||
if hasattr(usage, "responseTokenCount"):
|
if hasattr(usage, "response_token_count"):
|
||||||
operation_attrs["tokens.completion"] = (
|
operation_attrs["tokens.completion"] = (
|
||||||
usage.responseTokenCount or 0
|
usage.response_token_count or 0
|
||||||
)
|
)
|
||||||
if hasattr(usage, "totalTokenCount"):
|
if hasattr(usage, "total_token_count"):
|
||||||
operation_attrs["tokens.total"] = usage.totalTokenCount or 0
|
operation_attrs["tokens.total"] = usage.total_token_count or 0
|
||||||
|
|
||||||
# Get output text and modality from service state
|
# Get output text and modality from service state
|
||||||
text = getattr(self, "_bot_text_buffer", "")
|
text = getattr(self, "_bot_text_buffer", "")
|
||||||
@@ -751,9 +751,9 @@ def traced_gemini_live(operation: str) -> Callable:
|
|||||||
|
|
||||||
# Add turn completion status
|
# Add turn completion status
|
||||||
if (
|
if (
|
||||||
evt
|
msg
|
||||||
and hasattr(evt, "serverContent")
|
and hasattr(msg, "server_content")
|
||||||
and evt.serverContent.turnComplete
|
and msg.server_content.turn_complete
|
||||||
):
|
):
|
||||||
operation_attrs["turn_complete"] = True
|
operation_attrs["turn_complete"] = True
|
||||||
|
|
||||||
@@ -772,16 +772,16 @@ def traced_gemini_live(operation: str) -> Callable:
|
|||||||
|
|
||||||
# For llm_response operation, also handle token usage metrics
|
# For llm_response operation, also handle token usage metrics
|
||||||
if operation == "llm_response" and hasattr(self, "start_llm_usage_metrics"):
|
if operation == "llm_response" and hasattr(self, "start_llm_usage_metrics"):
|
||||||
evt = args[0] if args else None
|
msg = args[0] if args else None
|
||||||
if evt and hasattr(evt, "usageMetadata") and evt.usageMetadata:
|
if msg and hasattr(msg, "usage_metadata") and msg.usage_metadata:
|
||||||
usage = evt.usageMetadata
|
usage = msg.usage_metadata
|
||||||
# Create LLMTokenUsage object
|
# Create LLMTokenUsage object
|
||||||
from pipecat.metrics.metrics import LLMTokenUsage
|
from pipecat.metrics.metrics import LLMTokenUsage
|
||||||
|
|
||||||
tokens = LLMTokenUsage(
|
tokens = LLMTokenUsage(
|
||||||
prompt_tokens=usage.promptTokenCount or 0,
|
prompt_tokens=usage.prompt_token_count or 0,
|
||||||
completion_tokens=usage.responseTokenCount or 0,
|
completion_tokens=usage.response_token_count or 0,
|
||||||
total_tokens=usage.totalTokenCount or 0,
|
total_tokens=usage.total_token_count or 0,
|
||||||
)
|
)
|
||||||
_add_token_usage_to_span(current_span, tokens)
|
_add_token_usage_to_span(current_span, tokens)
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user