55
66import sentry_sdk
77from sentry_sdk .ai .monitoring import record_token_usage
8- from sentry_sdk .ai .utils import set_data_normalized
8+ from sentry_sdk .ai .utils import _set_span_data_attribute , set_data_normalized
99from sentry_sdk .consts import OP , SPANDATA
1010from sentry_sdk .integrations import DidNotEnable , Integration
1111from sentry_sdk .scope import should_send_default_pii
12+ from sentry_sdk .traces import StreamedSpan
13+ from sentry_sdk .tracing_utils import has_span_streaming_enabled
1214from sentry_sdk .utils import (
1315 capture_internal_exceptions ,
1416 event_from_exception ,
1517 reraise ,
1618)
1719
1820if TYPE_CHECKING :
19- from typing import Any , Callable , Iterable
21+ from typing import Any , Callable , Iterable , Union
22+
23+ from sentry_sdk .tracing import Span
2024
2125try :
2226 import huggingface_hub .inference ._client
@@ -83,17 +87,27 @@ def new_huggingface_task(*args: "Any", **kwargs: "Any") -> "Any":
8387 model = client .model or kwargs .get ("model" ) or ""
8488 operation_name = op .split ("." )[- 1 ]
8589
86- span = sentry_sdk .start_span (
87- op = op ,
88- name = f"{ operation_name } { model } " ,
89- origin = HuggingfaceHubIntegration .origin ,
90- )
90+ span : "Union[Span, StreamedSpan]"
91+ if has_span_streaming_enabled (sentry_sdk .get_client ().options ):
92+ span = sentry_sdk .traces .start_span (
93+ name = f"{ operation_name } { model } " ,
94+ attributes = {
95+ "sentry.op" : op ,
96+ "sentry.origin" : HuggingfaceHubIntegration .origin ,
97+ },
98+ )
99+ else :
100+ span = sentry_sdk .start_span (
101+ op = op ,
102+ name = f"{ operation_name } { model } " ,
103+ origin = HuggingfaceHubIntegration .origin ,
104+ )
91105 span .__enter__ ()
92106
93- span . set_data ( SPANDATA .GEN_AI_OPERATION_NAME , operation_name )
107+ _set_span_data_attribute ( span , SPANDATA .GEN_AI_OPERATION_NAME , operation_name )
94108
95109 if model :
96- span . set_data ( SPANDATA .GEN_AI_REQUEST_MODEL , model )
110+ _set_span_data_attribute ( span , SPANDATA .GEN_AI_REQUEST_MODEL , model )
97111
98112 # Input attributes
99113 if should_send_default_pii () and integration .include_prompts :
@@ -116,7 +130,7 @@ def new_huggingface_task(*args: "Any", **kwargs: "Any") -> "Any":
116130 value = kwargs .get (attribute , None )
117131 if value is not None :
118132 if isinstance (value , (int , float , bool , str )):
119- span . set_data ( span_attribute , value )
133+ _set_span_data_attribute ( span , span_attribute , value )
120134 else :
121135 set_data_normalized (span , span_attribute , value , unpack = False )
122136
@@ -177,7 +191,9 @@ def new_huggingface_task(*args: "Any", **kwargs: "Any") -> "Any":
177191 response_text_buffer .append (choice .message .content )
178192
179193 if response_model is not None :
180- span .set_data (SPANDATA .GEN_AI_RESPONSE_MODEL , response_model )
194+ _set_span_data_attribute (
195+ span , SPANDATA .GEN_AI_RESPONSE_MODEL , response_model
196+ )
181197
182198 if finish_reason is not None :
183199 set_data_normalized (
@@ -328,8 +344,8 @@ def new_iterator() -> "Iterable[str]":
328344 yield chunk
329345
330346 if response_model is not None :
331- span . set_data (
332- SPANDATA .GEN_AI_RESPONSE_MODEL , response_model
347+ _set_span_data_attribute (
348+ span , SPANDATA .GEN_AI_RESPONSE_MODEL , response_model
333349 )
334350
335351 if finish_reason is not None :
0 commit comments