54
54
InputMessage ,
55
55
OutputMessage ,
56
56
)
57
- from opentelemetry .util .genai .upload_hook import load_upload_hook
57
+ from opentelemetry .util .genai .upload_hook import UploadHook
58
58
59
59
from .allowlist_util import AllowList
60
60
from .custom_semconv import GCP_GENAI_OPERATION_CONFIG
@@ -290,12 +290,14 @@ def __init__(
290
290
models_object : Union [Models , AsyncModels ],
291
291
otel_wrapper : OTelWrapper ,
292
292
model : str ,
293
+ upload_hook : UploadHook ,
293
294
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
294
295
):
295
296
self ._start_time = time .time_ns ()
296
297
self ._otel_wrapper = otel_wrapper
297
298
self ._genai_system = _determine_genai_system (models_object )
298
299
self ._genai_request_model = model
300
+ self .upload_hook = upload_hook
299
301
self ._finish_reasons_set = set ()
300
302
self ._error_type = None
301
303
self ._input_tokens = 0
@@ -490,15 +492,13 @@ def _maybe_log_completion_details(
490
492
event = Event (
491
493
name = "gen_ai.client.inference.operation.details" , attributes = attributes
492
494
)
493
- hook = load_upload_hook ()
494
- hook .upload (
495
+ self .upload_hook .upload (
495
496
inputs = input_messages ,
496
497
outputs = output_messages ,
497
498
system_instruction = system_instructions ,
498
499
span = span ,
499
500
log_record = event ,
500
501
)
501
- hook .shutdown ()
502
502
self ._otel_wrapper .log_completion_details (event = event )
503
503
504
504
def _maybe_log_system_instruction (
@@ -689,6 +689,7 @@ def _record_duration_metric(self):
689
689
def _create_instrumented_generate_content (
690
690
snapshot : _MethodsSnapshot ,
691
691
otel_wrapper : OTelWrapper ,
692
+ upload_hook : UploadHook ,
692
693
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
693
694
):
694
695
wrapped_func = snapshot .generate_content
@@ -706,6 +707,7 @@ def instrumented_generate_content(
706
707
self ,
707
708
otel_wrapper ,
708
709
model ,
710
+ upload_hook ,
709
711
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
710
712
)
711
713
with helper .start_span_as_current_span (
@@ -746,6 +748,7 @@ def instrumented_generate_content(
746
748
def _create_instrumented_generate_content_stream (
747
749
snapshot : _MethodsSnapshot ,
748
750
otel_wrapper : OTelWrapper ,
751
+ upload_hook : UploadHook ,
749
752
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
750
753
):
751
754
wrapped_func = snapshot .generate_content_stream
@@ -763,6 +766,7 @@ def instrumented_generate_content_stream(
763
766
self ,
764
767
otel_wrapper ,
765
768
model ,
769
+ upload_hook ,
766
770
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
767
771
)
768
772
with helper .start_span_as_current_span (
@@ -803,6 +807,7 @@ def instrumented_generate_content_stream(
803
807
def _create_instrumented_async_generate_content (
804
808
snapshot : _MethodsSnapshot ,
805
809
otel_wrapper : OTelWrapper ,
810
+ upload_hook : UploadHook ,
806
811
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
807
812
):
808
813
wrapped_func = snapshot .async_generate_content
@@ -820,6 +825,7 @@ async def instrumented_generate_content(
820
825
self ,
821
826
otel_wrapper ,
822
827
model ,
828
+ upload_hook ,
823
829
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
824
830
)
825
831
with helper .start_span_as_current_span (
@@ -861,6 +867,7 @@ async def instrumented_generate_content(
861
867
def _create_instrumented_async_generate_content_stream ( # type: ignore
862
868
snapshot : _MethodsSnapshot ,
863
869
otel_wrapper : OTelWrapper ,
870
+ upload_hook : UploadHook ,
864
871
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
865
872
):
866
873
wrapped_func = snapshot .async_generate_content_stream
@@ -878,6 +885,7 @@ async def instrumented_generate_content_stream(
878
885
self ,
879
886
otel_wrapper ,
880
887
model ,
888
+ upload_hook ,
881
889
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
882
890
)
883
891
with helper .start_span_as_current_span (
@@ -936,28 +944,33 @@ def uninstrument_generate_content(snapshot: object):
936
944
937
945
def instrument_generate_content (
938
946
otel_wrapper : OTelWrapper ,
947
+ upload_hook : UploadHook ,
939
948
generate_content_config_key_allowlist : Optional [AllowList ] = None ,
940
949
) -> object :
941
950
snapshot = _MethodsSnapshot ()
942
951
Models .generate_content = _create_instrumented_generate_content (
943
952
snapshot ,
944
953
otel_wrapper ,
954
+ upload_hook ,
945
955
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
946
956
)
947
957
Models .generate_content_stream = _create_instrumented_generate_content_stream (
948
958
snapshot ,
949
959
otel_wrapper ,
960
+ upload_hook ,
950
961
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
951
962
)
952
963
AsyncModels .generate_content = _create_instrumented_async_generate_content (
953
964
snapshot ,
954
965
otel_wrapper ,
966
+ upload_hook ,
955
967
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
956
968
)
957
969
AsyncModels .generate_content_stream = (
958
970
_create_instrumented_async_generate_content_stream (
959
971
snapshot ,
960
972
otel_wrapper ,
973
+ upload_hook ,
961
974
generate_content_config_key_allowlist = generate_content_config_key_allowlist ,
962
975
)
963
976
)
0 commit comments