@@ -92,6 +92,48 @@ class GenerationResponse(StandardBaseModel):
92
92
default = None , description = "Actual output token count reported by the backend."
93
93
)
94
94
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
+
95
137
96
138
class GenerationRequestTimings (RequestTimings ):
97
139
"""Timing model for tracking generation request lifecycle events."""
0 commit comments