@@ -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+
938961def _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