5454 InputMessage ,
5555 OutputMessage ,
5656)
57- from opentelemetry .util .genai .upload_hook import load_upload_hook
57+ from opentelemetry .util .genai .upload_hook import UploadHook
5858
5959from .allowlist_util import AllowList
6060from .custom_semconv import GCP_GENAI_OPERATION_CONFIG
@@ -290,12 +290,14 @@ def __init__(
290290 models_object : Union [Models , AsyncModels ],
291291 otel_wrapper : OTelWrapper ,
292292 model : str ,
293+ upload_hook : UploadHook ,
293294 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
294295 ):
295296 self ._start_time = time .time_ns ()
296297 self ._otel_wrapper = otel_wrapper
297298 self ._genai_system = _determine_genai_system (models_object )
298299 self ._genai_request_model = model
300+ self .upload_hook = upload_hook
299301 self ._finish_reasons_set = set ()
300302 self ._error_type = None
301303 self ._input_tokens = 0
@@ -490,15 +492,13 @@ def _maybe_log_completion_details(
490492 event = Event (
491493 name = "gen_ai.client.inference.operation.details" , attributes = attributes
492494 )
493- hook = load_upload_hook ()
494- hook .upload (
495+ self .upload_hook .upload (
495496 inputs = input_messages ,
496497 outputs = output_messages ,
497498 system_instruction = system_instructions ,
498499 span = span ,
499500 log_record = event ,
500501 )
501- hook .shutdown ()
502502 self ._otel_wrapper .log_completion_details (event = event )
503503
504504 def _maybe_log_system_instruction (
@@ -689,6 +689,7 @@ def _record_duration_metric(self):
689689def _create_instrumented_generate_content (
690690 snapshot : _MethodsSnapshot ,
691691 otel_wrapper : OTelWrapper ,
692+ upload_hook : UploadHook ,
692693 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
693694):
694695 wrapped_func = snapshot .generate_content
@@ -706,6 +707,7 @@ def instrumented_generate_content(
706707 self ,
707708 otel_wrapper ,
708709 model ,
710+ upload_hook ,
709711 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
710712 )
711713 with helper .start_span_as_current_span (
@@ -746,6 +748,7 @@ def instrumented_generate_content(
746748def _create_instrumented_generate_content_stream (
747749 snapshot : _MethodsSnapshot ,
748750 otel_wrapper : OTelWrapper ,
751+ upload_hook : UploadHook ,
749752 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
750753):
751754 wrapped_func = snapshot .generate_content_stream
@@ -763,6 +766,7 @@ def instrumented_generate_content_stream(
763766 self ,
764767 otel_wrapper ,
765768 model ,
769+ upload_hook ,
766770 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
767771 )
768772 with helper .start_span_as_current_span (
@@ -803,6 +807,7 @@ def instrumented_generate_content_stream(
803807def _create_instrumented_async_generate_content (
804808 snapshot : _MethodsSnapshot ,
805809 otel_wrapper : OTelWrapper ,
810+ upload_hook : UploadHook ,
806811 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
807812):
808813 wrapped_func = snapshot .async_generate_content
@@ -820,6 +825,7 @@ async def instrumented_generate_content(
820825 self ,
821826 otel_wrapper ,
822827 model ,
828+ upload_hook ,
823829 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
824830 )
825831 with helper .start_span_as_current_span (
@@ -861,6 +867,7 @@ async def instrumented_generate_content(
861867def _create_instrumented_async_generate_content_stream ( # type: ignore
862868 snapshot : _MethodsSnapshot ,
863869 otel_wrapper : OTelWrapper ,
870+ upload_hook : UploadHook ,
864871 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
865872):
866873 wrapped_func = snapshot .async_generate_content_stream
@@ -878,6 +885,7 @@ async def instrumented_generate_content_stream(
878885 self ,
879886 otel_wrapper ,
880887 model ,
888+ upload_hook ,
881889 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
882890 )
883891 with helper .start_span_as_current_span (
@@ -936,28 +944,33 @@ def uninstrument_generate_content(snapshot: object):
936944
937945def instrument_generate_content (
938946 otel_wrapper : OTelWrapper ,
947+ upload_hook : UploadHook ,
939948 generate_content_config_key_allowlist : Optional [AllowList ] = None ,
940949) -> object :
941950 snapshot = _MethodsSnapshot ()
942951 Models .generate_content = _create_instrumented_generate_content (
943952 snapshot ,
944953 otel_wrapper ,
954+ upload_hook ,
945955 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
946956 )
947957 Models .generate_content_stream = _create_instrumented_generate_content_stream (
948958 snapshot ,
949959 otel_wrapper ,
960+ upload_hook ,
950961 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
951962 )
952963 AsyncModels .generate_content = _create_instrumented_async_generate_content (
953964 snapshot ,
954965 otel_wrapper ,
966+ upload_hook ,
955967 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
956968 )
957969 AsyncModels .generate_content_stream = (
958970 _create_instrumented_async_generate_content_stream (
959971 snapshot ,
960972 otel_wrapper ,
973+ upload_hook ,
961974 generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
962975 )
963976 )
0 commit comments