@@ -236,21 +236,33 @@ async def async_wrapper(*args, **kwargs):
236236 return await func (* args , ** kwargs )
237237
238238 with context_manager as langfuse_span_or_generation :
239- result = await func ( * args , ** kwargs )
239+ is_return_type_generator = False
240240
241- if capture_output is True :
242- if inspect .isasyncgen (result ):
243- return self ._wrap_async_generator_result (
244- langfuse_span_or_generation ,
245- result ,
246- transform_to_string ,
247- )
241+ try :
242+ result = await func (* args , ** kwargs )
248243
249- langfuse_span_or_generation .update (output = result )
244+ if capture_output is True :
245+ if inspect .isasyncgen (result ):
246+ is_return_type_generator = True
250247
251- langfuse_span_or_generation .end ()
248+ return self ._wrap_async_generator_result (
249+ langfuse_span_or_generation ,
250+ result ,
251+ transform_to_string ,
252+ )
252253
253- return result
254+ langfuse_span_or_generation .update (output = result )
255+
256+ return result
257+ except Exception as e :
258+ langfuse_span_or_generation .update (
259+ level = "ERROR" , status_message = str (e )
260+ )
261+
262+ raise e
263+ finally :
264+ if not is_return_type_generator :
265+ langfuse_span_or_generation .end ()
254266
255267 return cast (F , async_wrapper )
256268
@@ -312,21 +324,33 @@ def sync_wrapper(*args, **kwargs):
312324 return func (* args , ** kwargs )
313325
314326 with context_manager as langfuse_span_or_generation :
315- result = func ( * args , ** kwargs )
327+ is_return_type_generator = False
316328
317- if capture_output is True :
318- if inspect .isgenerator (result ):
319- return self ._wrap_sync_generator_result (
320- langfuse_span_or_generation ,
321- result ,
322- transform_to_string ,
323- )
329+ try :
330+ result = func (* args , ** kwargs )
324331
325- langfuse_span_or_generation .update (output = result )
332+ if capture_output is True :
333+ if inspect .isgenerator (result ):
334+ is_return_type_generator = True
326335
327- langfuse_span_or_generation .end ()
336+ return self ._wrap_sync_generator_result (
337+ langfuse_span_or_generation ,
338+ result ,
339+ transform_to_string ,
340+ )
341+
342+ langfuse_span_or_generation .update (output = result )
343+
344+ return result
345+ except Exception as e :
346+ langfuse_span_or_generation .update (
347+ level = "ERROR" , status_message = str (e )
348+ )
328349
329- return result
350+ raise e
351+ finally :
352+ if not is_return_type_generator :
353+ langfuse_span_or_generation .end ()
330354
331355 return cast (F , sync_wrapper )
332356
0 commit comments