@@ -409,77 +409,80 @@ def sync_wrapper(*args: Any, **kwargs: Any) -> Any:
409409 else None
410410 )
411411 public_key = kwargs .pop ("langfuse_public_key" , None )
412- langfuse_client = get_client (public_key = public_key )
413-
414- # Use consolidated as_type parameter
415- final_obs_type = as_type
416-
417- context_manager : Optional [
418- Union [
419- _AgnosticContextManager [LangfuseGeneration ],
420- _AgnosticContextManager [LangfuseSpan ],
421- ]
422- ] = (
423- (
424- langfuse_client .start_as_current_generation (
425- name = final_name ,
426- trace_context = trace_context ,
427- input = input ,
428- end_on_exit = False , # when returning a generator, closing on exit would be to early
429- )
430- if final_obs_type in ("generation" , "GENERATION" )
431- else langfuse_client .start_as_current_span (
432- name = final_name ,
433- trace_context = trace_context ,
434- input = input ,
435- end_on_exit = False , # when returning a generator, closing on exit would be to early
436- as_type = final_obs_type ,
412+
413+ # Set public key in execution context for nested decorated functions
414+ with _set_current_public_key (public_key ):
415+ langfuse_client = get_client (public_key = public_key )
416+
417+ # Use consolidated as_type parameter
418+ final_obs_type = as_type
419+
420+ context_manager : Optional [
421+ Union [
422+ _AgnosticContextManager [LangfuseGeneration ],
423+ _AgnosticContextManager [LangfuseSpan ],
424+ ]
425+ ] = (
426+ (
427+ langfuse_client .start_as_current_generation (
428+ name = final_name ,
429+ trace_context = trace_context ,
430+ input = input ,
431+ end_on_exit = False , # when returning a generator, closing on exit would be to early
432+ )
433+ if final_obs_type in ("generation" , "GENERATION" )
434+ else langfuse_client .start_as_current_span (
435+ name = final_name ,
436+ trace_context = trace_context ,
437+ input = input ,
438+ end_on_exit = False , # when returning a generator, closing on exit would be to early
439+ as_type = final_obs_type ,
440+ )
437441 )
442+ if langfuse_client
443+ else None
438444 )
439- if langfuse_client
440- else None
441- )
442445
443- if context_manager is None :
444- return func (* args , ** kwargs )
446+ if context_manager is None :
447+ return func (* args , ** kwargs )
445448
446- with context_manager as langfuse_span_or_generation :
447- is_return_type_generator = False
449+ with context_manager as langfuse_span_or_generation :
450+ is_return_type_generator = False
448451
449- try :
450- result = func (* args , ** kwargs )
452+ try :
453+ result = func (* args , ** kwargs )
451454
452- if capture_output is True :
453- if inspect .isgenerator (result ):
454- is_return_type_generator = True
455+ if capture_output is True :
456+ if inspect .isgenerator (result ):
457+ is_return_type_generator = True
455458
456- return self ._wrap_sync_generator_result (
457- langfuse_span_or_generation ,
458- result ,
459- transform_to_string ,
460- )
459+ return self ._wrap_sync_generator_result (
460+ langfuse_span_or_generation ,
461+ result ,
462+ transform_to_string ,
463+ )
461464
462- if inspect .isasyncgen (result ):
463- is_return_type_generator = True
465+ if inspect .isasyncgen (result ):
466+ is_return_type_generator = True
464467
465- return self ._wrap_async_generator_result (
466- langfuse_span_or_generation ,
467- result ,
468- transform_to_string ,
469- )
468+ return self ._wrap_async_generator_result (
469+ langfuse_span_or_generation ,
470+ result ,
471+ transform_to_string ,
472+ )
470473
471- langfuse_span_or_generation .update (output = result )
474+ langfuse_span_or_generation .update (output = result )
472475
473- return result
474- except Exception as e :
475- langfuse_span_or_generation .update (
476- level = "ERROR" , status_message = str (e )
477- )
476+ return result
477+ except Exception as e :
478+ langfuse_span_or_generation .update (
479+ level = "ERROR" , status_message = str (e )
480+ )
478481
479- raise e
480- finally :
481- if not is_return_type_generator :
482- langfuse_span_or_generation .end ()
482+ raise e
483+ finally :
484+ if not is_return_type_generator :
485+ langfuse_span_or_generation .end ()
483486
484487 return cast (F , sync_wrapper )
485488
0 commit comments