1313# from rsb.coroutines import fire_and_forget
1414from rsb .models .field import Field
1515
16+ from agentle .generations .models .generation .trace_params import TraceParams
1617from agentle .generations .tracing .otel_client_type import OtelClientType
1718from agentle .prompts .models .prompt import Prompt as AgentlePromptType
1819from agentle .responses .async_stream import AsyncStream
@@ -279,6 +280,7 @@ async def respond_async[TextFormatT = None](
279280 stream_options : Optional [ResponseStreamOptions ] = None ,
280281 conversation : Optional [Union [str , ConversationParam ]] = None ,
281282 text_format : type [TextFormatT ] | None = None ,
283+ trace_params : Optional [TraceParams ] = None ,
282284 # ResponseProperties parameters
283285 previous_response_id : Optional [str ] = None ,
284286 reasoning : Optional [Reasoning ] = None ,
@@ -324,6 +326,7 @@ async def respond_async[TextFormatT = None](
324326 stream_options : Optional [ResponseStreamOptions ] = None ,
325327 conversation : Optional [Union [str , ConversationParam ]] = None ,
326328 text_format : type [TextFormatT ] | None = None ,
329+ trace_params : Optional [TraceParams ] = None ,
327330 # ResponseProperties parameters
328331 previous_response_id : Optional [str ] = None ,
329332 reasoning : Optional [Reasoning ] = None ,
@@ -369,6 +372,7 @@ async def respond_async[TextFormatT = None](
369372 stream_options : Optional [ResponseStreamOptions ] = None ,
370373 conversation : Optional [Union [str , ConversationParam ]] = None ,
371374 text_format : type [TextFormatT ] | None = None ,
375+ trace_params : Optional [TraceParams ] = None ,
372376 # ResponseProperties parameters
373377 previous_response_id : Optional [str ] = None ,
374378 reasoning : Optional [Reasoning ] = None ,
@@ -413,6 +417,7 @@ async def respond_async[TextFormatT = None](
413417 stream_options : Optional [ResponseStreamOptions ] = None ,
414418 conversation : Optional [Union [str , ConversationParam ]] = None ,
415419 text_format : type [TextFormatT ] | None = None ,
420+ trace_params : Optional [TraceParams ] = None ,
416421 # ResponseProperties parameters
417422 previous_response_id : Optional [str ] = None ,
418423 reasoning : Optional [Reasoning ] = None ,
@@ -508,12 +513,14 @@ async def respond_async[TextFormatT = None](
508513 return await self ._respond_async (
509514 create_response ,
510515 text_format = text_format ,
516+ trace_params = trace_params ,
511517 )
512518
513519 async def _respond_async [TextFormatT ](
514520 self ,
515521 create_response : CreateResponse ,
516522 text_format : Type [TextFormatT ] | None = None ,
523+ trace_params : Optional [TraceParams ] = None ,
517524 ) -> Response [TextFormatT ] | AsyncStream [ResponseStreamEvent , TextFormatT ]:
518525 _api_key = self .api_key
519526 if not _api_key :
@@ -557,6 +564,7 @@ async def _respond_async[TextFormatT](
557564 model = model ,
558565 create_response = create_response ,
559566 custom_metadata = custom_metadata ,
567+ trace_params = trace_params ,
560568 )
561569 except Exception as e :
562570 # Log error but don't fail the request
@@ -1136,6 +1144,7 @@ async def _create_tracing_contexts(
11361144 model : str ,
11371145 create_response : CreateResponse ,
11381146 custom_metadata : dict [str , Any ],
1147+ trace_params : Optional [TraceParams ] = None ,
11391148 ) -> list [TracingContext ]:
11401149 """
11411150 Create trace and generation contexts for all configured OtelClients.
@@ -1148,6 +1157,7 @@ async def _create_tracing_contexts(
11481157 model: The model identifier
11491158 create_response: The CreateResponse object
11501159 custom_metadata: Custom metadata dictionary to include in traces
1160+ trace_params: Optional trace parameters for observability
11511161
11521162 Returns:
11531163 List of TracingContext objects containing client and context information
@@ -1164,35 +1174,67 @@ async def _create_tracing_contexts(
11641174 f"Creating tracing contexts for { len (self .otel_clients )} OTel client(s) with model: { model } "
11651175 )
11661176
1177+ # Initialize trace_params if not provided
1178+ if trace_params is None :
1179+ trace_params = TraceParams ()
1180+
1181+ # Extract trace parameters
1182+ trace_name = trace_params .get ("name" , "responder_api_call" )
1183+ user_id = trace_params .get ("user_id" )
1184+ session_id = trace_params .get ("session_id" )
1185+ tags = trace_params .get ("tags" )
1186+ trace_version = trace_params .get ("version" )
1187+ trace_release = trace_params .get ("release" )
1188+ trace_public = trace_params .get ("public" )
1189+ # parent_trace_id = trace_params.get("parent_trace_id") # Reserved for future use
1190+
1191+ # Merge custom metadata from trace_params
1192+ merged_metadata = dict (custom_metadata )
1193+ if "metadata" in trace_params :
1194+ trace_metadata_val = trace_params ["metadata" ]
1195+ merged_metadata .update (trace_metadata_val )
1196+
11671197 # Prepare input data and metadata for tracing
11681198 input_data = self ._prepare_trace_input_data (create_response )
11691199 metadata = self ._prepare_trace_metadata (
11701200 model = model ,
11711201 base_url = self .base_url ,
1172- custom_metadata = custom_metadata ,
1202+ custom_metadata = merged_metadata ,
11731203 )
11741204
1205+ # Add trace_params specific fields to metadata
1206+ if trace_version :
1207+ metadata .custom_metadata ["version" ] = trace_version
1208+ if trace_release :
1209+ metadata .custom_metadata ["release" ] = trace_release
1210+ if trace_public is not None :
1211+ metadata .custom_metadata ["public" ] = trace_public
1212+
11751213 # Create contexts for each client
11761214 for client in self .otel_clients :
11771215 client_name = type (client ).__name__
11781216 try :
11791217 logger .debug (f"Creating trace context for client: { client_name } " )
11801218
1181- # Create trace context
1219+ # Create trace context with trace_params
11821220 trace_gen = client .trace_context (
1183- name = "responder_api_call" ,
1221+ name = trace_name ,
11841222 input_data = input_data .model_dump (),
11851223 metadata = metadata .to_api_dict (),
1224+ user_id = user_id ,
1225+ session_id = session_id ,
1226+ tags = tags ,
11861227 )
11871228 trace_ctx = await trace_gen .__anext__ ()
11881229
11891230 logger .debug (f"Trace context created for client: { client_name } " )
11901231
11911232 # Create generation context
11921233 logger .debug (f"Creating generation context for client: { client_name } " )
1234+ generation_name = trace_params .get ("name" , "response_generation" )
11931235 generation_gen = client .generation_context (
11941236 trace_context = trace_ctx ,
1195- name = "response_generation" ,
1237+ name = generation_name ,
11961238 model = model ,
11971239 provider = metadata .provider ,
11981240 input_data = input_data .model_dump (),
0 commit comments