@@ -338,11 +338,46 @@ class ConversationResultAlpha2Choices:
338338 message : ConversationResultAlpha2Message
339339
340340
341+ @dataclass
342+ class ConversationResultAlpha2CompletionUsageCompletionTokensDetails :
343+ """Breakdown of tokens used in the completion."""
344+
345+ accepted_prediction_tokens : int = 0
346+ audio_tokens : int = 0
347+ reasoning_tokens : int = 0
348+ rejected_prediction_tokens : int = 0
349+
350+
351+ @dataclass
352+ class ConversationResultAlpha2CompletionUsagePromptTokensDetails :
353+ """Breakdown of tokens used in the prompt."""
354+
355+ audio_tokens : int = 0
356+ cached_tokens : int = 0
357+
358+
359+ @dataclass
360+ class ConversationResultAlpha2CompletionUsage :
361+ """Token usage for one Alpha2 conversation result."""
362+
363+ completion_tokens : int = 0
364+ prompt_tokens : int = 0
365+ total_tokens : int = 0
366+ completion_tokens_details : Optional [
367+ ConversationResultAlpha2CompletionUsageCompletionTokensDetails
368+ ] = None
369+ prompt_tokens_details : Optional [ConversationResultAlpha2CompletionUsagePromptTokensDetails ] = (
370+ None
371+ )
372+
373+
341374@dataclass
342375class ConversationResultAlpha2 :
343376 """One of the outputs in Alpha2 response from conversation input."""
344377
345378 choices : List [ConversationResultAlpha2Choices ] = field (default_factory = list )
379+ model : Optional [str ] = None
380+ usage : Optional [ConversationResultAlpha2CompletionUsage ] = None
346381
347382
348383@dataclass
@@ -657,5 +692,38 @@ def _get_outputs_from_grpc_response(
657692 )
658693 )
659694
660- outputs .append (ConversationResultAlpha2 (choices = choices ))
695+ model : Optional [str ] = None
696+ usage : Optional [ConversationResultAlpha2CompletionUsage ] = None
697+ if hasattr (output , 'model' ) and getattr (output , 'model' , None ):
698+ model = output .model
699+ if hasattr (output , 'usage' ) and output .usage :
700+ u = output .usage
701+ completion_details : Optional [
702+ ConversationResultAlpha2CompletionUsageCompletionTokensDetails
703+ ] = None
704+ prompt_details : Optional [ConversationResultAlpha2CompletionUsagePromptTokensDetails ] = (
705+ None
706+ )
707+ if hasattr (u , 'completion_tokens_details' ) and u .completion_tokens_details :
708+ cd = u .completion_tokens_details
709+ completion_details = ConversationResultAlpha2CompletionUsageCompletionTokensDetails (
710+ accepted_prediction_tokens = getattr (cd , 'accepted_prediction_tokens' , 0 ) or 0 ,
711+ audio_tokens = getattr (cd , 'audio_tokens' , 0 ) or 0 ,
712+ reasoning_tokens = getattr (cd , 'reasoning_tokens' , 0 ) or 0 ,
713+ rejected_prediction_tokens = getattr (cd , 'rejected_prediction_tokens' , 0 ) or 0 ,
714+ )
715+ if hasattr (u , 'prompt_tokens_details' ) and u .prompt_tokens_details :
716+ pd = u .prompt_tokens_details
717+ prompt_details = ConversationResultAlpha2CompletionUsagePromptTokensDetails (
718+ audio_tokens = getattr (pd , 'audio_tokens' , 0 ) or 0 ,
719+ cached_tokens = getattr (pd , 'cached_tokens' , 0 ) or 0 ,
720+ )
721+ usage = ConversationResultAlpha2CompletionUsage (
722+ completion_tokens = getattr (u , 'completion_tokens' , 0 ) or 0 ,
723+ prompt_tokens = getattr (u , 'prompt_tokens' , 0 ) or 0 ,
724+ total_tokens = getattr (u , 'total_tokens' , 0 ) or 0 ,
725+ completion_tokens_details = completion_details ,
726+ prompt_tokens_details = prompt_details ,
727+ )
728+ outputs .append (ConversationResultAlpha2 (choices = choices , model = model , usage = usage ))
661729 return outputs
0 commit comments