Skip to content

Commit 668a421

Browse files
committed
Better usage extraction
1 parent 2011ab4 commit 668a421

File tree

1 file changed

+28
-37
lines changed

1 file changed

+28
-37
lines changed

sentry_sdk/tracing_utils.py

Lines changed: 28 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -935,6 +935,29 @@ def _get_input_attributes(template, send_pii, args, kwargs):
935935
return attributes
936936

937937

938+
def _get_usage_attributes(usage):
939+
# type: (Any) -> dict[str, Any]
940+
"""
941+
Get usage attributes.
942+
"""
943+
attributes = {}
944+
945+
if hasattr(usage, "input_tokens") and isinstance(usage.input_tokens, int):
946+
attributes[SPANDATA.GEN_AI_USAGE_INPUT_TOKENS] = usage.input_tokens
947+
elif hasattr(usage, "prompt_tokens") and isinstance(usage.prompt_tokens, int):
948+
attributes[SPANDATA.GEN_AI_USAGE_INPUT_TOKENS] = usage.prompt_tokens
949+
elif hasattr(usage, "output_tokens") and isinstance(usage.output_tokens, int):
950+
attributes[SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS] = usage.output_tokens
951+
elif hasattr(usage, "completion_tokens") and isinstance(
952+
usage.completion_tokens, int
953+
):
954+
attributes[SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS] = usage.completion_tokens
955+
elif hasattr(usage, "total_tokens") and isinstance(usage.total_tokens, int):
956+
attributes[SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS] = usage.total_tokens
957+
958+
return attributes
959+
960+
938961
def _get_output_attributes(template, send_pii, result):
939962
# type: (Union[str, "SpanTemplate"], bool, Any) -> dict[str, Any]
940963
"""
@@ -943,44 +966,12 @@ def _get_output_attributes(template, send_pii, result):
943966
attributes = {} # type: dict[str, Any]
944967

945968
if template in [SpanTemplate.AI_AGENT, SpanTemplate.AI_TOOL, SpanTemplate.AI_CHAT]:
969+
attributes.update(_get_usage_attributes(result))
946970
if hasattr(result, "usage"):
947-
if hasattr(result.usage, "input_tokens") and isinstance(
948-
result.usage.input_tokens, int
949-
):
950-
attributes[SPANDATA.GEN_AI_USAGE_INPUT_TOKENS] = (
951-
result.usage.input_tokens
952-
)
953-
elif hasattr(result.usage, "prompt_tokens") and isinstance(
954-
result.usage.prompt_tokens, int
955-
):
956-
attributes[SPANDATA.GEN_AI_USAGE_INPUT_TOKENS] = (
957-
result.usage.prompt_tokens
958-
)
959-
elif hasattr(result.usage, "output_tokens") and isinstance(
960-
result.usage.output_tokens, int
961-
):
962-
attributes[SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS] = (
963-
result.usage.output_tokens
964-
)
965-
elif hasattr(result.usage, "completion_tokens") and isinstance(
966-
result.usage.completion_tokens, int
967-
):
968-
attributes[SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS] = (
969-
result.usage.completion_tokens
970-
)
971-
elif hasattr(result.usage, "total_tokens") and isinstance(
972-
result.usage.total_tokens, int
973-
):
974-
attributes[SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS] = (
975-
result.usage.total_tokens
976-
)
977-
978-
elif hasattr(result, "input_tokens") and isinstance(result.input_tokens, int):
979-
attributes[SPANDATA.GEN_AI_USAGE_INPUT_TOKENS] = result.input_tokens
980-
elif hasattr(result, "output_tokens") and isinstance(result.output_tokens, int):
981-
attributes[SPANDATA.GEN_AI_USAGE_OUTPUT_TOKENS] = result.output_tokens
982-
elif hasattr(result, "total_tokens") and isinstance(result.total_tokens, int):
983-
attributes[SPANDATA.GEN_AI_USAGE_TOTAL_TOKENS] = result.total_tokens
971+
attributes.update(_get_usage_attributes(result.usage))
972+
elif hasattr(result, "metadata"):
973+
if hasattr(result.metadata, "usage"):
974+
attributes.update(_get_usage_attributes(result.metadata.usage))
984975

985976
elif hasattr(result, "model") and isinstance(result.model, str):
986977
attributes[SPANDATA.GEN_AI_RESPONSE_MODEL] = result.model

0 commit comments

Comments
 (0)