@@ -943,6 +943,20 @@ def _sample_rand_range(parent_sampled, sample_rate):
943943 return sample_rate , 1.0
944944
945945
946+ def _get_value (source , key ):
947+ # type: (Any, str) -> Optional[Any]
948+ value = None
949+ if isinstance (source , dict ):
950+ value = source .get (key )
951+ else :
952+ if hasattr (source , key ):
953+ try :
954+ value = getattr (source , key )
955+ except Exception :
956+ value = None
957+ return value
958+
959+
946960def _get_span_name (template , name , kwargs = None ):
947961 # type: (Union[str, SPANTEMPLATE], str, Optional[dict[str, Any]]) -> str
948962 """
@@ -1048,24 +1062,11 @@ def _get_usage_attributes(usage):
10481062 """
10491063 attributes = {}
10501064
1051- def _get_value (source , key ):
1052- # type: (Any, str) -> Optional[int]
1053- value = None
1054- if isinstance (source , dict ):
1055- value = source .get (key )
1056- else :
1057- if hasattr (source , key ):
1058- try :
1059- value = getattr (source , key )
1060- except Exception :
1061- value = None
1062- return value if isinstance (value , int ) else None
1063-
10641065 def _set_from_keys (attribute , keys ):
10651066 # type: (str, tuple[str, ...]) -> None
10661067 for key in keys :
10671068 value = _get_value (usage , key )
1068- if value is not None :
1069+ if value is not None and isinstance ( value , int ) :
10691070 attributes [attribute ] = value
10701071
10711072 _set_from_keys (
@@ -1095,40 +1096,24 @@ def _get_output_attributes(template, send_pii, result):
10951096 with capture_internal_exceptions ():
10961097 # Usage from result, result.usage, and result.metadata.usage
10971098 usage_candidates = [result ]
1098- if isinstance (result , dict ):
1099- usage_candidates .append (result .get ("usage" ))
1100- meta = result .get ("metadata" )
1101- else :
1102- usage_candidates .append (getattr (result , "usage" , None ))
1103- meta = getattr (result , "metadata" , None )
1099+ usage = _get_value (result , "usage" )
1100+ usage_candidates .append (usage )
11041101
1105- if isinstance (meta , dict ):
1106- usage_candidates .append (meta .get ("usage" ))
1107- elif meta is not None :
1108- usage_candidates .append (getattr (meta , "usage" , None ))
1102+ meta = _get_value (usage , "metadata" )
1103+ usage = _get_value (meta , "usage" )
1104+ usage_candidates .append (usage )
11091105
11101106 for usage_candidate in usage_candidates :
11111107 if usage_candidate is not None :
11121108 attributes .update (_get_usage_attributes (usage_candidate ))
11131109
11141110 # Response model
1115- model_name = None
1116- if isinstance (result , dict ):
1117- val = result .get ("model" )
1118- if isinstance (val , str ):
1119- model_name = val
1120- val = result .get ("model_name" )
1121- if isinstance (val , str ):
1122- model_name = val
1123- else :
1124- val = getattr (result , "model" , None )
1125- if isinstance (val , str ):
1126- model_name = val
1127- val = getattr (result , "model_name" , None )
1128- if isinstance (val , str ):
1129- model_name = val
1130-
1131- if model_name is not None :
1111+ model_name = _get_value (result , "model" )
1112+ if model_name is not None and isinstance (model_name , str ):
1113+ attributes [SPANDATA .GEN_AI_RESPONSE_MODEL ] = model_name
1114+
1115+ model_name = _get_value (result , "model_name" )
1116+ if model_name is not None and isinstance (model_name , str ):
11321117 attributes [SPANDATA .GEN_AI_RESPONSE_MODEL ] = model_name
11331118
11341119 # Tool output
0 commit comments