diff --git a/langfuse/_client/attributes.py b/langfuse/_client/attributes.py index 0e8478500..0a65649f9 100644 --- a/langfuse/_client/attributes.py +++ b/langfuse/_client/attributes.py @@ -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: @@ -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, @@ -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"), } @@ -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, @@ -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 diff --git a/langfuse/_client/client.py b/langfuse/_client/client.py index e926e4571..63489e8fb 100644 --- a/langfuse/_client/client.py +++ b/langfuse/_client/client.py @@ -144,7 +144,6 @@ MaskFunction, MaskOtelSpansFunction, ScoreDataType, - SkillReference, SkillsConfig, SpanLevel, TraceContext, @@ -491,7 +490,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -513,7 +511,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -529,7 +526,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -545,7 +541,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -561,7 +556,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -577,7 +571,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -593,7 +586,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -609,7 +601,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -631,7 +622,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -646,7 +636,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -679,7 +668,6 @@ def start_observation( input: Input data for the operation output: Output data from the operation metadata: Additional metadata to associate with the observation - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the observation status_message: Optional status message for the observation @@ -718,7 +706,6 @@ def start_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -738,7 +725,6 @@ def start_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -758,7 +744,6 @@ def _create_observation_from_otel_span( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -792,7 +777,6 @@ def _create_observation_from_otel_span( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -816,7 +800,6 @@ def _create_observation_from_otel_span( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -835,7 +818,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -858,7 +840,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -875,7 +856,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -892,7 +872,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -909,7 +888,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -926,7 +904,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -943,7 +920,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -960,7 +936,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -983,7 +958,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -999,7 +973,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1036,7 +1009,6 @@ def start_as_current_observation( input: Input data for the operation (can be any JSON-serializable object) output: Output data from the operation (can be any JSON-serializable object) metadata: Additional metadata to associate with the observation - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the observation (info, warning, error) status_message: Optional status message for the observation @@ -1107,7 +1079,6 @@ def start_as_current_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1132,7 +1103,6 @@ def start_as_current_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1174,7 +1144,6 @@ def start_as_current_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1198,7 +1167,6 @@ def start_as_current_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1216,7 +1184,6 @@ def start_as_current_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1290,7 +1257,6 @@ def _create_span_with_parent_context( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1311,7 +1277,6 @@ def _create_span_with_parent_context( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1340,7 +1305,6 @@ def _start_as_current_otel_span_with_processed_media( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1377,7 +1341,6 @@ def _start_as_current_otel_span_with_processed_media( "input": input, "output": output, "metadata": metadata, - "available_skills": available_skills, "version": version, "level": level, "status_message": status_message, @@ -1424,7 +1387,6 @@ def update_current_generation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1446,7 +1408,6 @@ def update_current_generation( input: Updated input data for the model output: Output from the model (e.g., completions) metadata: Additional metadata to associate with the generation - available_skills: Skills available to this observation. version: Version identifier for the model or component level: Importance level of the generation (info, warning, error) status_message: Optional status message for the generation @@ -1493,7 +1454,6 @@ def update_current_generation( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1512,7 +1472,6 @@ def update_current_span( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1528,7 +1487,6 @@ def update_current_span( input: Updated input data for the operation output: Output data from the operation metadata: Additional metadata to associate with the span - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the span (info, warning, error) status_message: Optional status message for the span @@ -1575,7 +1533,6 @@ def update_current_span( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1620,7 +1577,6 @@ def create_event( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1635,7 +1591,6 @@ def create_event( input: Input data for the operation (can be any JSON-serializable object) output: Output data from the operation (can be any JSON-serializable object) metadata: Additional metadata to associate with the span - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the span (info, warning, error) status_message: Optional status message for the span @@ -1680,7 +1635,6 @@ def create_event( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1702,7 +1656,6 @@ def create_event( input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, diff --git a/langfuse/_client/span.py b/langfuse/_client/span.py index 622df4db4..8ec77133b 100644 --- a/langfuse/_client/span.py +++ b/langfuse/_client/span.py @@ -56,7 +56,7 @@ from langfuse._client.utils import get_string_span_attribute from langfuse.api import MapValue, ScoreDataType from langfuse.logger import langfuse_logger -from langfuse.types import SkillReference, SpanLevel +from langfuse.types import SpanLevel # Factory mapping for observation classes # Note: "event" is handled separately due to special instantiation logic @@ -277,7 +277,6 @@ def __init__( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, environment: Optional[str] = None, release: Optional[str] = None, version: Optional[str] = None, @@ -299,7 +298,6 @@ def __init__( input: Input data for the span (any JSON-serializable object) output: Output data from the span (any JSON-serializable object) metadata: Additional metadata to associate with the span - available_skills: Skills available to this observation. environment: Local tracing environment fallback. If the underlying OpenTelemetry span already has `langfuse.environment` from propagated context or baggage, that propagated value takes @@ -368,7 +366,6 @@ def __init__( input=media_processed_input, output=media_processed_output, metadata=media_processed_metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -390,7 +387,6 @@ def __init__( input=media_processed_input, output=media_processed_output, metadata=media_processed_metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -824,7 +820,6 @@ def update( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -846,7 +841,6 @@ def update( input: Updated input data for the operation output: Output data from the operation metadata: Additional metadata to associate with the observation - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the observation (info, warning, error) status_message: Optional status message for the observation @@ -881,7 +875,6 @@ def update( input=processed_input, output=processed_output, metadata=processed_metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -902,7 +895,6 @@ def update( input=processed_input, output=processed_output, metadata=processed_metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -935,7 +927,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -950,7 +941,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -971,7 +961,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -986,7 +975,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1001,7 +989,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1016,7 +1003,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1031,7 +1017,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1046,7 +1031,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1067,7 +1051,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1082,7 +1065,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1096,7 +1078,6 @@ def start_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1130,7 +1111,6 @@ def start_observation( input: Input data for the operation output: Output data from the operation metadata: Additional metadata to associate with the observation - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the observation (info, warning, error) status_message: Optional status message for the observation @@ -1158,7 +1138,6 @@ def start_observation( input=input, output=output, metadata=metadata, - available_skills=available_skills, environment=self._environment, release=self._release, version=version, @@ -1187,7 +1166,6 @@ def start_observation( "input": input, "output": output, "metadata": metadata, - "available_skills": available_skills, "version": version, "level": level, "status_message": status_message, @@ -1216,7 +1194,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1231,7 +1208,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1252,7 +1228,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1273,7 +1248,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1288,7 +1262,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1303,7 +1276,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1318,7 +1290,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1333,7 +1304,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1348,7 +1318,6 @@ def start_as_current_observation( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1362,7 +1331,6 @@ def start_as_current_observation( # type: ignore[misc] input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1397,7 +1365,6 @@ def start_as_current_observation( # type: ignore[misc] input: Input data for the operation output: Output data from the operation metadata: Additional metadata to associate with the observation - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the observation (info, warning, error) status_message: Optional status message for the observation @@ -1419,7 +1386,6 @@ def start_as_current_observation( # type: ignore[misc] input=input, output=output, metadata=metadata, - available_skills=available_skills, version=version, level=level, status_message=status_message, @@ -1438,7 +1404,6 @@ def create_event( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, @@ -1450,7 +1415,6 @@ def create_event( input: Input data for the operation (can be any JSON-serializable object) output: Output data from the operation (can be any JSON-serializable object) metadata: Additional metadata to associate with the span - available_skills: Skills available to this observation. version: Version identifier for the code or component level: Importance level of the span (info, warning, error) status_message: Optional status message for the span @@ -1479,7 +1443,6 @@ def create_event( input=input, output=output, metadata=metadata, - available_skills=available_skills, environment=self._environment, release=self._release, version=version, @@ -1507,7 +1470,6 @@ def __init__( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, environment: Optional[str] = None, release: Optional[str] = None, version: Optional[str] = None, @@ -1522,7 +1484,6 @@ def __init__( input: Input data for the span (any JSON-serializable object) output: Output data from the span (any JSON-serializable object) metadata: Additional metadata to associate with the span - available_skills: Skills available to this observation. environment: The tracing environment release: Release identifier for the application version: Version identifier for the code or component @@ -1536,7 +1497,6 @@ def __init__( input=input, output=output, metadata=metadata, - available_skills=available_skills, environment=environment, release=release, version=version, @@ -1561,7 +1521,6 @@ def __init__( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, environment: Optional[str] = None, release: Optional[str] = None, version: Optional[str] = None, @@ -1582,7 +1541,6 @@ def __init__( input: Input data for the generation (e.g., prompts) output: Output from the generation (e.g., completions) metadata: Additional metadata to associate with the generation - available_skills: Skills available to this observation. environment: The tracing environment release: Release identifier for the application version: Version identifier for the model or component @@ -1602,7 +1560,6 @@ def __init__( input=input, output=output, metadata=metadata, - available_skills=available_skills, environment=environment, release=release, version=version, @@ -1628,7 +1585,6 @@ def __init__( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, environment: Optional[str] = None, release: Optional[str] = None, version: Optional[str] = None, @@ -1643,7 +1599,6 @@ def __init__( input: Input data for the event output: Output from the event metadata: Additional metadata to associate with the generation - available_skills: Skills available to this observation. environment: The tracing environment release: Release identifier for the application version: Version identifier for the model or component @@ -1657,7 +1612,6 @@ def __init__( input=input, output=output, metadata=metadata, - available_skills=available_skills, environment=environment, release=release, version=version, @@ -1672,7 +1626,6 @@ def update( input: Optional[Any] = None, output: Optional[Any] = None, metadata: Optional[Any] = None, - available_skills: Optional[list[SkillReference]] = None, version: Optional[str] = None, level: Optional[SpanLevel] = None, status_message: Optional[str] = None, diff --git a/tests/unit/test_metadata_attribute_limit.py b/tests/unit/test_metadata_attribute_limit.py index 398707a32..89282c184 100644 --- a/tests/unit/test_metadata_attribute_limit.py +++ b/tests/unit/test_metadata_attribute_limit.py @@ -679,12 +679,12 @@ def task(**kwargs): def test_metadata_reserves_room_for_later_skill_availability( small_limit_client, get_span ): - observation = small_limit_client.start_observation( + with small_limit_client.start_as_current_observation( name="late-skills", metadata={f"key_{i}": i for i in range(130)} - ) - before = dict(observation._otel_span.attributes) - observation.update(available_skills=[{"name": "support", "version": 2}]) - observation.end() + ) as observation: + before = dict(observation._otel_span.attributes) + with propagate_attributes(skills_available=[{"name": "support", "version": 2}]): + pass small_limit_client.flush() attributes = get_span("late-skills").attributes diff --git a/tests/unit/test_otel.py b/tests/unit/test_otel.py index f5757fa15..c8fc3fefa 100644 --- a/tests/unit/test_otel.py +++ b/tests/unit/test_otel.py @@ -3934,109 +3934,3 @@ def test_langfuse_event_update_immutability(self, langfuse_client, caplog): assert result is event parent_span.end() - - -@pytest.mark.parametrize("as_type", ["span", "generation", "tool", "embedding"]) -@pytest.mark.parametrize("parented", [False, True]) -@pytest.mark.parametrize("current", [False, True]) -def test_observation_available_skills_creation( - langfuse_memory_client, get_span, as_type, parented, current -): - skills = [{"name": "support", "version": 2, "future_field": {"enabled": True}}] - parent = langfuse_memory_client.start_observation(name="parent") - owner = parent if parented else langfuse_memory_client - if current: - with owner.start_as_current_observation( - name="skills", as_type=as_type, available_skills=skills - ): - pass - else: - owner.start_observation( - name="skills", as_type=as_type, available_skills=skills - ).end() - parent.end() - langfuse_memory_client.flush() - - assert ( - json.loads( - get_span("skills").attributes[ - LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - ] - ) - == skills - ) - - -@pytest.mark.parametrize("current", [False, True]) -def test_remote_observation_available_skills(langfuse_memory_client, get_span, current): - kwargs = { - "name": "remote-skills", - "as_type": "generation", - "trace_context": {"trace_id": "12345678901234567890123456789012"}, - "available_skills": [], - } - if current: - with langfuse_memory_client.start_as_current_observation(**kwargs): - pass - else: - langfuse_memory_client.start_observation(**kwargs).end() - langfuse_memory_client.flush() - - assert ( - get_span("remote-skills").attributes[ - LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - ] - == "[]" - ) - - -@pytest.mark.parametrize("parented", [False, True]) -def test_event_available_skills(langfuse_memory_client, get_span, parented): - parent = langfuse_memory_client.start_observation(name="parent") - owner = parent if parented else langfuse_memory_client - owner.create_event(name="skill-event", available_skills=[{"name": "support"}]) - if parented: - parent.start_observation( - name="other-event", as_type="event", available_skills=[] - ) - parent.end() - langfuse_memory_client.flush() - - assert json.loads( - get_span("skill-event").attributes[ - LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - ] - ) == [{"name": "support"}] - if parented: - assert ( - get_span("other-event").attributes[ - LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - ] - == "[]" - ) - - -@pytest.mark.parametrize("as_type", ["span", "generation"]) -def test_observation_available_skills_updates( - langfuse_memory_client, get_span, as_type -): - key = LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - with langfuse_memory_client.start_as_current_observation( - name="updates", as_type=as_type, available_skills=[{"name": "initial"}] - ) as observation: - observation.update(available_skills=[{"name": "replacement", "version": 3}]) - assert json.loads(observation._otel_span.attributes[key]) == [ - {"name": "replacement", "version": 3} - ] - observation.update(output="unrelated") - assert json.loads(observation._otel_span.attributes[key]) == [ - {"name": "replacement", "version": 3} - ] - update_current = ( - langfuse_memory_client.update_current_generation - if as_type == "generation" - else langfuse_memory_client.update_current_span - ) - update_current(available_skills=[]) - langfuse_memory_client.flush() - assert get_span("updates").attributes[key] == "[]" diff --git a/tests/unit/test_propagate_attributes.py b/tests/unit/test_propagate_attributes.py index 5381d76da..6b91268bb 100644 --- a/tests/unit/test_propagate_attributes.py +++ b/tests/unit/test_propagate_attributes.py @@ -3863,32 +3863,26 @@ def test_catalog_replaces_inherited_and_updates_current_span( ) @pytest.mark.parametrize("skills", [[{"name": "refund"}], []]) - @pytest.mark.parametrize("set_on_update", [False, True]) def test_propagation_updates_current_observation_skills( - self, langfuse_client, memory_exporter, skills, set_on_update + self, langfuse_client, memory_exporter, skills ): - inherited = [{"name": "child"}] with propagate_attributes(skills_available=[{"name": "outer"}]): - with langfuse_client.start_as_current_observation( - name="parent", available_skills=None if set_on_update else skills - ) as parent: - if set_on_update: - parent.update(available_skills=skills) - assert ( - json.loads( - parent._otel_span.attributes[ - LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE - ] + with langfuse_client.start_as_current_observation(name="parent") as parent: + with propagate_attributes(skills_available=skills): + assert ( + json.loads( + parent._otel_span.attributes[ + LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE + ] + ) + == skills ) - == skills - ) - with propagate_attributes(skills_available=inherited): langfuse_client.start_observation(name="child").end() - for name, expected in (("parent", inherited), ("child", inherited)): + for name in ("parent", "child"): _assert_json_attribute( self.get_span_by_name(memory_exporter, name), LangfuseOtelSpanAttributes.OBSERVATION_SKILLS_AVAILABLE, - expected, + skills, ) def test_skills_baggage_is_read_but_not_written(self):