@@ -155,6 +155,7 @@ def _calculate_token_usage(
155155 )
156156
157157
158+ # TODO: rename to _set_input_data and _set_output_data
158159def _set_request_data (span , kwargs , operation , integration ):
159160 # type: (Span, dict[str, Any], str, Integration) -> None
160161 messages = kwargs .get ("messages" )
@@ -172,6 +173,7 @@ def _set_request_data(span, kwargs, operation, integration):
172173 ):
173174 set_data_normalized (span , SPANDATA .GEN_AI_REQUEST_MESSAGES , messages )
174175
176+ # TODO: make mapping and loop over kwargs to set attributes
175177 # Common attributes
176178 model = kwargs .get ("model" )
177179 set_data_normalized (span , SPANDATA .GEN_AI_SYSTEM , "openai" )
@@ -215,8 +217,8 @@ def _set_request_data(span, kwargs, operation, integration):
215217 )
216218
217219
218- def _set_response_data (span , response , kwargs , integration ):
219- # type: (Span, Any, dict[str, Any], Integration) -> None
220+ def _set_response_data (span , response , kwargs , integration , finish_span = True ):
221+ # type: (Span, Any, dict[str, Any], Integration, bool ) -> None
220222 if hasattr (response , "model" ):
221223 set_data_normalized (span , SPANDATA .GEN_AI_RESPONSE_MODEL , response .model )
222224
@@ -236,6 +238,7 @@ def _set_response_data(span, response, kwargs, integration):
236238 SPANDATA .GEN_AI_RESPONSE_TEXT ,
237239 safe_serialize (response_text ),
238240 )
241+ span .__exit__ (None , None , None )
239242
240243 elif hasattr (response , "output" ):
241244 if should_send_default_pii () and integration .include_prompts :
@@ -318,6 +321,10 @@ async def new_iterator_async():
318321 response ._iterator = new_iterator_async ()
319322 else :
320323 response ._iterator = new_iterator ()
324+ else :
325+ set_data_normalized (span , "unknown_response" , True )
326+ if finish_span :
327+ span .__exit__ (None , None , None )
321328
322329 _calculate_token_usage (messages , response , span , None , integration .count_tokens )
323330
@@ -341,16 +348,18 @@ def _new_chat_completion_common(f, *args, **kwargs):
341348 model = kwargs .get ("model" )
342349 operation = "chat"
343350
344- with sentry_sdk .start_span (
351+ span = sentry_sdk .start_span (
345352 op = consts .OP .GEN_AI_CHAT ,
346353 name = f"{ operation } { model } " ,
347354 origin = OpenAIIntegration .origin ,
348- ) as span :
349- _set_request_data ( span , kwargs , operation , integration )
355+ )
356+ span . __enter__ ( )
350357
351- response = yield f , args , kwargs
358+ _set_request_data ( span , kwargs , operation , integration )
352359
353- _set_response_data (span , response , kwargs , integration )
360+ response = yield f , args , kwargs
361+
362+ _set_response_data (span , response , kwargs , integration )
354363
355364 return response
356365
@@ -443,7 +452,7 @@ def _new_embeddings_create_common(f, *args, **kwargs):
443452
444453 response = yield f , args , kwargs
445454
446- _set_response_data (span , response , kwargs , integration )
455+ _set_response_data (span , response , kwargs , integration , finish_span = False )
447456
448457 return response
449458
@@ -525,18 +534,21 @@ def _new_responses_create_common(f, *args, **kwargs):
525534 model = kwargs .get ("model" )
526535 operation = "responses"
527536
528- with sentry_sdk .start_span (
537+ span = sentry_sdk .start_span (
529538 op = consts .OP .GEN_AI_RESPONSES ,
530539 name = f"{ operation } { model } " ,
531540 origin = OpenAIIntegration .origin ,
532- ) as span :
533- _set_request_data (span , kwargs , operation , integration )
541+ )
542+ span .__enter__ ()
543+ _set_request_data (span , kwargs , operation , integration )
534544
535- response = yield f , args , kwargs
545+ response = yield f , args , kwargs
536546
537- _set_response_data (span , response , kwargs , integration )
547+ _set_response_data (span , response , kwargs , integration )
538548
539- return response
549+ span .__exit__ (None , None , None )
550+
551+ return response
540552
541553
542554def _wrap_responses_create (f ):
0 commit comments