Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
16 changes: 1 addition & 15 deletions langfuse/_client/attributes.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,12 +18,11 @@
ObservationTypeGenerationLike,
ObservationTypeSpanLike,
)
from langfuse._client.skills import serialize_available_skills
from langfuse._utils.serializer import EventSerializer
from langfuse.api import MapValue
from langfuse.logger import langfuse_logger
from langfuse.model import PromptClient
from langfuse.types import SkillReference, SpanLevel
from langfuse.types import SpanLevel


class LangfuseOtelSpanAttributes:
Expand Down Expand Up @@ -89,7 +88,6 @@ def create_trace_attributes(
def create_span_attributes(
*,
metadata: Optional[Any] = None,
available_skills: Optional[list[SkillReference]] = None,
input: Optional[Any] = None,
output: Optional[Any] = None,
level: Optional[SpanLevel] = None,
Expand All @@ -106,7 +104,6 @@ def create_span_attributes(
LangfuseOtelSpanAttributes.VERSION: version,
LangfuseOtelSpanAttributes.OBSERVATION_INPUT: _serialize(input),
LangfuseOtelSpanAttributes.OBSERVATION_OUTPUT: _serialize(output),
**create_available_skills_attributes(available_skills),
**_flatten_and_serialize_metadata(metadata, "observation"),
}

Expand All @@ -118,7 +115,6 @@ def create_generation_attributes(
name: Optional[str] = None,
completion_start_time: Optional[datetime] = None,
metadata: Optional[Any] = None,
available_skills: Optional[list[SkillReference]] = None,
level: Optional[SpanLevel] = None,
status_message: Optional[str] = None,
version: Optional[str] = None,
Expand Down Expand Up @@ -153,22 +149,12 @@ def create_generation_attributes(
LangfuseOtelSpanAttributes.OBSERVATION_MODEL_PARAMETERS: _serialize(
model_parameters
),
**create_available_skills_attributes(available_skills),
**_flatten_and_serialize_metadata(metadata, "observation"),
}

return {k: v for k, v in attributes.items() if v is not None}


def create_available_skills_attributes(
available_skills: Optional[list[SkillReference]],
) -> dict[str, str]:
serialized = serialize_available_skills(available_skills)
if serialized is None:
return {}
return {LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE: serialized}


def _serialize(obj: Any) -> Optional[str]:
if obj is None or isinstance(obj, str):
return obj
Expand Down
Loading
Loading