|
3 | 3 | from typing import TYPE_CHECKING |
4 | 4 |
|
5 | 5 | from sentry_sdk import consts |
6 | | -from sentry_sdk.ai.monitoring import record_token_usage |
7 | 6 | from sentry_sdk.ai.utils import get_start_span_function, set_data_normalized |
8 | 7 | from sentry_sdk.consts import SPANDATA |
9 | 8 | from sentry_sdk.traces import StreamedSpan |
@@ -134,19 +133,52 @@ def collect_chat_response_fields( |
134 | 133 | set_data_normalized(span, "ai." + attr, getattr(res, attr)) |
135 | 134 |
|
136 | 135 | if hasattr(res, "meta"): |
137 | | - if hasattr(res.meta, "billed_units"): |
138 | | - record_token_usage( |
139 | | - span, |
140 | | - input_tokens=res.meta.billed_units.input_tokens, |
141 | | - output_tokens=res.meta.billed_units.output_tokens, |
| 136 | + set_on_span = ( |
| 137 | + span.set_attribute if isinstance(span, StreamedSpan) else span.set_data |
| 138 | + ) |
| 139 | + |
| 140 | + if res.meta.billed_units.input_tokens is not None: |
| 141 | + set_on_span( |
| 142 | + SPANDATA.GEN_AI_USAGE_INPUT_TOKENS, |
| 143 | + res.meta.billed_units.input_tokens, |
142 | 144 | ) |
143 | | - elif hasattr(res.meta, "tokens"): |
144 | | - record_token_usage( |
145 | | - span, |
146 | | - input_tokens=res.meta.tokens.input_tokens, |
147 | | - output_tokens=res.meta.tokens.output_tokens, |
| 145 | + |
| 146 | + if res.meta.billed_units.output_tokens is not None: |
| 147 | + set_on_span( |
| 148 | + SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS, |
| 149 | + res.meta.billed_units.output_tokens, |
148 | 150 | ) |
149 | 151 |
|
| 152 | + if ( |
| 153 | + res.meta.billed_units.input_tokens is not None |
| 154 | + and res.meta.billed_units.output_tokens is not None |
| 155 | + ): |
| 156 | + set_on_span( |
| 157 | + SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS, |
| 158 | + res.meta.billed_units.input_tokens |
| 159 | + + res.meta.billed_units.output_tokens, |
| 160 | + ) |
| 161 | + elif hasattr(res.meta, "tokens"): |
| 162 | + if res.meta.tokens.input_tokens is not None: |
| 163 | + set_on_span( |
| 164 | + SPANDATA.GEN_AI_USAGE_INPUT_TOKENS, res.meta.tokens.input_tokens |
| 165 | + ) |
| 166 | + |
| 167 | + if res.meta.tokens.output_tokens is not None: |
| 168 | + set_on_span( |
| 169 | + SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS, |
| 170 | + res.meta.tokens.output_tokens, |
| 171 | + ) |
| 172 | + |
| 173 | + if ( |
| 174 | + res.meta.tokens.input_tokens is not None |
| 175 | + and res.meta.tokens.output_tokens is not None |
| 176 | + ): |
| 177 | + set_on_span( |
| 178 | + SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS, |
| 179 | + res.meta.tokens.input_tokens + res.meta.tokens.output_tokens, |
| 180 | + ) |
| 181 | + |
150 | 182 | if hasattr(res.meta, "warnings"): |
151 | 183 | set_data_normalized(span, SPANDATA.AI_WARNINGS, res.meta.warnings) |
152 | 184 |
|
@@ -268,13 +300,17 @@ def new_embed(*args: "Any", **kwargs: "Any") -> "Any": |
268 | 300 | "sentry.origin": CohereIntegration.origin, |
269 | 301 | }, |
270 | 302 | ) |
| 303 | + |
| 304 | + set_on_span = span_ctx.set_attribute |
271 | 305 | else: |
272 | 306 | span_ctx = get_start_span_function()( |
273 | 307 | op=consts.OP.COHERE_EMBEDDINGS_CREATE, |
274 | 308 | name="Cohere Embedding Creation", |
275 | 309 | origin=CohereIntegration.origin, |
276 | 310 | ) |
277 | 311 |
|
| 312 | + set_on_span = span_ctx.set_data |
| 313 | + |
278 | 314 | with span_ctx as span: |
279 | 315 | if "texts" in kwargs and _should_record(integration, "inputs"): |
280 | 316 | if isinstance(kwargs["texts"], str): |
@@ -302,11 +338,16 @@ def new_embed(*args: "Any", **kwargs: "Any") -> "Any": |
302 | 338 | and hasattr(res.meta, "billed_units") |
303 | 339 | and hasattr(res.meta.billed_units, "input_tokens") |
304 | 340 | ): |
305 | | - record_token_usage( |
306 | | - span, |
307 | | - input_tokens=res.meta.billed_units.input_tokens, |
308 | | - total_tokens=res.meta.billed_units.input_tokens, |
309 | | - ) |
| 341 | + if res.meta.billed_units.input_tokens is not None: |
| 342 | + set_on_span( |
| 343 | + SPANDATA.GEN_AI_USAGE_INPUT_TOKENS, |
| 344 | + res.meta.billed_units.input_tokens, |
| 345 | + ) |
| 346 | + |
| 347 | + set_on_span( |
| 348 | + SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS, |
| 349 | + res.meta.billed_units.input_tokens, |
| 350 | + ) |
310 | 351 | return res |
311 | 352 |
|
312 | 353 | return new_embed |
0 commit comments