@@ -92,6 +92,48 @@ class GenerationResponse(StandardBaseModel):
9292 default = None , description = "Actual output token count reported by the backend."
9393 )
9494
95+ @property
96+ def prompt_tokens (self ) -> Optional [int ]:
97+ """
98+ :return: The number of prompt tokens used in the request
99+ (response_prompt_tokens if available, otherwise request_prompt_tokens).
100+ """
101+ return self .response_prompt_tokens or self .request_prompt_tokens
102+
103+ @property
104+ def output_tokens (self ) -> Optional [int ]:
105+ """
106+ :return: The number of output tokens generated in the response
107+ (response_output_tokens if available, otherwise request_output_tokens).
108+ """
109+ return self .response_output_tokens or self .request_output_tokens
110+
111+ @property
112+ def total_tokens (self ) -> Optional [int ]:
113+ """
114+ :return: The total number of tokens used in the request and response.
115+ Sum of prompt_tokens and output_tokens.
116+ """
117+ if self .prompt_tokens is None or self .output_tokens is None :
118+ return None
119+ return self .prompt_tokens + self .output_tokens
120+
121+ def preferred_prompt_tokens (
122+ self , preferred_source : Literal ["request" , "response" ]
123+ ) -> Optional [int ]:
124+ if preferred_source == "request" :
125+ return self .request_prompt_tokens or self .response_prompt_tokens
126+ else :
127+ return self .response_prompt_tokens or self .request_prompt_tokens
128+
129+ def preferred_output_tokens (
130+ self , preferred_source : Literal ["request" , "response" ]
131+ ) -> Optional [int ]:
132+ if preferred_source == "request" :
133+ return self .request_output_tokens or self .response_output_tokens
134+ else :
135+ return self .response_output_tokens or self .request_output_tokens
136+
95137
96138class GenerationRequestTimings (RequestTimings ):
97139 """Timing model for tracking generation request lifecycle events."""
0 commit comments