diff --git a/src/resources/beta/realtime/realtime.ts b/src/resources/beta/realtime/realtime.ts index b7fe85dc0..f90095168 100644 --- a/src/resources/beta/realtime/realtime.ts +++ b/src/resources/beta/realtime/realtime.ts @@ -1233,12 +1233,34 @@ export namespace RealtimeResponseUsage { */ cached_tokens?: number; + /** + * Details about the cached tokens used in the Response. + */ + cached_tokens_details?: InputTokenDetails.CachedTokensDetails; + /** * The number of text tokens used in the Response. */ text_tokens?: number; } + export namespace InputTokenDetails { + /** + * Details about the cached tokens used in the Response. + */ + export interface CachedTokensDetails { + /** + * The number of cached audio tokens used in the Response. + */ + audio_tokens?: number; + + /** + * The number of cached text tokens used in the Response. + */ + text_tokens?: number; + } + } + /** * Details about the output tokens used in the Response. */ diff --git a/tests/betaRealtimeTypes.test.ts b/tests/betaRealtimeTypes.test.ts new file mode 100644 index 000000000..28b4a87c0 --- /dev/null +++ b/tests/betaRealtimeTypes.test.ts @@ -0,0 +1,20 @@ +import OpenAI from 'openai/index'; +import { expectType } from './utils/typing'; + +describe('beta realtime types', () => { + test('response usage includes cached token details', () => { + const inputTokenDetails: OpenAI.Beta.Realtime.RealtimeResponseUsage.InputTokenDetails = { + audio_tokens: 1, + cached_tokens: 2, + cached_tokens_details: { + audio_tokens: 3, + text_tokens: 4, + }, + text_tokens: 5, + }; + + expectType(inputTokenDetails.cached_tokens_details?.audio_tokens); + expectType(inputTokenDetails.cached_tokens_details?.text_tokens); + expect(inputTokenDetails.cached_tokens_details?.text_tokens).toBe(4); + }); +});