From 3700022d6fee72a86746023494b7e09a20ec002d Mon Sep 17 00:00:00 2001 From: Dinesh Yeduguru Date: Tue, 17 Dec 2024 17:10:43 -0800 Subject: [PATCH] store attributes values in builtin types to avoid otel warnings (#649) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit # What does this PR do? Serialize objects to built in types to avoid otel warnings ## Test Plan ╰─❯ llama stack run ~/.llama/distributions/llamastack-together/together-run.yaml --- .../providers/utils/telemetry/trace_protocol.py | 10 ++++------ llama_stack/providers/utils/telemetry/tracing.py | 3 ++- 2 files changed, 6 insertions(+), 7 deletions(-) diff --git a/llama_stack/providers/utils/telemetry/trace_protocol.py b/llama_stack/providers/utils/telemetry/trace_protocol.py index 67054da90..31897c0ae 100644 --- a/llama_stack/providers/utils/telemetry/trace_protocol.py +++ b/llama_stack/providers/utils/telemetry/trace_protocol.py @@ -6,10 +6,8 @@ import asyncio import inspect -from datetime import datetime from functools import wraps from typing import Any, AsyncGenerator, Callable, Type, TypeVar -from uuid import UUID from pydantic import BaseModel @@ -19,17 +17,17 @@ T = TypeVar("T") def serialize_value(value: Any) -> Any: """Serialize a single value into JSON-compatible format.""" if value is None: - return None + return "" elif isinstance(value, (str, int, float, bool)): return value + elif hasattr(value, "_name_"): + return value._name_ elif isinstance(value, BaseModel): - return value.model_dump() + return value.model_dump_json() elif isinstance(value, (list, tuple, set)): return [serialize_value(item) for item in value] elif isinstance(value, dict): return {str(k): serialize_value(v) for k, v in value.items()} - elif isinstance(value, (datetime, UUID)): - return str(value) else: return str(value) diff --git a/llama_stack/providers/utils/telemetry/tracing.py b/llama_stack/providers/utils/telemetry/tracing.py index 54558afdc..2846afdc8 100644 --- a/llama_stack/providers/utils/telemetry/tracing.py +++ b/llama_stack/providers/utils/telemetry/tracing.py @@ -16,6 +16,7 @@ from typing import Any, Callable, Dict, List from llama_stack.apis.telemetry import * # noqa: F403 +from llama_stack.providers.utils.telemetry.trace_protocol import serialize_value log = logging.getLogger(__name__) @@ -223,7 +224,7 @@ class SpanContextManager: if self.span: if self.span.attributes is None: self.span.attributes = {} - self.span.attributes[key] = value + self.span.attributes[key] = serialize_value(value) async def __aenter__(self): global CURRENT_TRACE_CONTEXT