From 0c814dd2de7cba268433883a75d32c24b08d16f6 Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Wed, 17 Dec 2025 15:58:58 +0900 Subject: [PATCH 1/2] fix: Add usage data integration to #760 feature addition --- .changeset/fiery-ravens-refuse.md | 6 + examples/memory/oai-compact.ts | 7 +- packages/agents-core/src/index.ts | 1 + packages/agents-core/src/memory/session.ts | 9 +- packages/agents-core/src/runImplementation.ts | 27 +++- packages/agents-core/src/runState.ts | 2 + packages/agents-core/src/types/protocol.ts | 1 + packages/agents-core/src/usage.ts | 9 ++ .../test/runImplementation.test.ts | 122 +++++++++++++++++- packages/agents-core/test/usage.test.ts | 32 +++++ .../openaiResponsesCompactionSession.ts | 31 ++++- .../agents-openai/src/openaiResponsesModel.ts | 21 +++ .../openaiResponsesCompactionSession.test.ts | 16 +++ .../test/openaiResponsesModel.test.ts | 12 +- 14 files changed, 281 insertions(+), 15 deletions(-) create mode 100644 .changeset/fiery-ravens-refuse.md diff --git a/.changeset/fiery-ravens-refuse.md b/.changeset/fiery-ravens-refuse.md new file mode 100644 index 00000000..9468035e --- /dev/null +++ b/.changeset/fiery-ravens-refuse.md @@ -0,0 +1,6 @@ +--- +'@openai/agents-openai': patch +'@openai/agents-core': patch +--- + +fix: Add usage data integration to #760 feature addition diff --git a/examples/memory/oai-compact.ts b/examples/memory/oai-compact.ts index 8fa78d16..f55ce9b3 100644 --- a/examples/memory/oai-compact.ts +++ b/examples/memory/oai-compact.ts @@ -68,6 +68,10 @@ async function main() { console.log(`Assistant: ${event.item.content.trim()}`); } } + console.log( + 'Usage for the turn:', + result.state.usage.requestUsageEntries, + ); } const compactedHistory = await session.getItems(); @@ -77,7 +81,8 @@ async function main() { } // You can manually run compaction this way: - await session.runCompaction({ force: true }); + const compactionResult = await session.runCompaction({ force: true }); + console.log('Manual compaction result:', compactionResult); const finalHistory = await session.getItems(); console.log('\nStored history after final compaction:'); diff --git a/packages/agents-core/src/index.ts b/packages/agents-core/src/index.ts index e59545c3..8fd4f2a7 100644 --- a/packages/agents-core/src/index.ts +++ b/packages/agents-core/src/index.ts @@ -183,6 +183,7 @@ export type { SessionInputCallback, OpenAIResponsesCompactionArgs, OpenAIResponsesCompactionAwareSession, + CompactionResult, } from './memory/session'; export { isOpenAIResponsesCompactionAwareSession } from './memory/session'; export { MemorySession } from './memory/memorySession'; diff --git a/packages/agents-core/src/memory/session.ts b/packages/agents-core/src/memory/session.ts index 1e8ae454..910a9061 100644 --- a/packages/agents-core/src/memory/session.ts +++ b/packages/agents-core/src/memory/session.ts @@ -1,4 +1,5 @@ import type { AgentInputItem } from '../types'; +import type { RequestUsage } from '../usage'; /** * A function that combines session history with new input items before the model call. @@ -60,6 +61,10 @@ export type OpenAIResponsesCompactionArgs = { force?: boolean; }; +export type CompactionResult = { + usage: RequestUsage; +}; + export interface OpenAIResponsesCompactionAwareSession extends Session { /** * Invoked by the runner after it persists a completed turn into the session. @@ -70,7 +75,9 @@ export interface OpenAIResponsesCompactionAwareSession extends Session { * This hook is best-effort. Implementations should consider handling transient failures and * deciding whether to retry or skip compaction for the current turn. */ - runCompaction(args?: OpenAIResponsesCompactionArgs): Promise | void; + runCompaction( + args?: OpenAIResponsesCompactionArgs, + ): Promise | CompactionResult | null; } export function isOpenAIResponsesCompactionAwareSession( diff --git a/packages/agents-core/src/runImplementation.ts b/packages/agents-core/src/runImplementation.ts index 2f6b11e9..74cf15f1 100644 --- a/packages/agents-core/src/runImplementation.ts +++ b/packages/agents-core/src/runImplementation.ts @@ -65,6 +65,7 @@ import { type Session, type SessionInputCallback, } from './memory/session'; +import { Usage } from './usage'; // Represents a single handoff function call that still needs to be executed after the model turn. type ToolRunHandoff = { @@ -2296,14 +2297,30 @@ function shouldStripIdForType(type: string): boolean { async function runCompactionOnSession( session: Session | undefined, responseId: string | undefined, + state: RunState, ): Promise { if (!isOpenAIResponsesCompactionAwareSession(session)) { return; } // Called after a completed turn is persisted so compaction can consider the latest stored state. - await session.runCompaction( + const compactionResult = await session.runCompaction( typeof responseId === 'undefined' ? undefined : { responseId }, ); + if (!compactionResult) { + return; + } + const usage = compactionResult.usage; + state._context.usage.add( + new Usage({ + requests: 1, + inputTokens: usage.inputTokens, + outputTokens: usage.outputTokens, + totalTokens: usage.totalTokens, + inputTokensDetails: usage.inputTokensDetails, + outputTokensDetails: usage.outputTokensDetails, + requestUsageEntries: [usage], + }), + ); } /** @@ -2335,12 +2352,12 @@ export async function saveToSession( if (itemsToSave.length === 0) { state._currentTurnPersistedItemCount = alreadyPersisted + newRunItems.length; - await runCompactionOnSession(session, result.lastResponseId); + await runCompactionOnSession(session, result.lastResponseId, state); return; } const sanitizedItems = normalizeItemsForSessionPersistence(itemsToSave); await session.addItems(sanitizedItems); - await runCompactionOnSession(session, result.lastResponseId); + await runCompactionOnSession(session, result.lastResponseId, state); state._currentTurnPersistedItemCount = alreadyPersisted + newRunItems.length; } @@ -2382,12 +2399,12 @@ export async function saveStreamResultToSession( if (itemsToSave.length === 0) { state._currentTurnPersistedItemCount = alreadyPersisted + newRunItems.length; - await runCompactionOnSession(session, result.lastResponseId); + await runCompactionOnSession(session, result.lastResponseId, state); return; } const sanitizedItems = normalizeItemsForSessionPersistence(itemsToSave); await session.addItems(sanitizedItems); - await runCompactionOnSession(session, result.lastResponseId); + await runCompactionOnSession(session, result.lastResponseId, state); state._currentTurnPersistedItemCount = alreadyPersisted + newRunItems.length; } diff --git a/packages/agents-core/src/runState.ts b/packages/agents-core/src/runState.ts index 7627197c..72a2db52 100644 --- a/packages/agents-core/src/runState.ts +++ b/packages/agents-core/src/runState.ts @@ -78,6 +78,7 @@ const requestUsageSchema = z.object({ totalTokens: z.number(), inputTokensDetails: z.record(z.string(), z.number()).optional(), outputTokensDetails: z.record(z.string(), z.number()).optional(), + endpoint: z.string().optional(), }); const usageSchema = z.object({ @@ -470,6 +471,7 @@ export class RunState> { totalTokens: entry.totalTokens, inputTokensDetails: entry.inputTokensDetails, outputTokensDetails: entry.outputTokensDetails, + ...(entry.endpoint ? { endpoint: entry.endpoint } : {}), }), ), } diff --git a/packages/agents-core/src/types/protocol.ts b/packages/agents-core/src/types/protocol.ts index 581bf1ec..30597c9c 100644 --- a/packages/agents-core/src/types/protocol.ts +++ b/packages/agents-core/src/types/protocol.ts @@ -769,6 +769,7 @@ export const RequestUsageData = z.object({ totalTokens: z.number(), inputTokensDetails: z.record(z.string(), z.number()).optional(), outputTokensDetails: z.record(z.string(), z.number()).optional(), + endpoint: z.string().optional(), }); export type RequestUsageData = z.infer; diff --git a/packages/agents-core/src/usage.ts b/packages/agents-core/src/usage.ts index a72fc05b..ecd53029 100644 --- a/packages/agents-core/src/usage.ts +++ b/packages/agents-core/src/usage.ts @@ -7,6 +7,7 @@ type RequestUsageInput = Partial< total_tokens: number; input_tokens_details: object; output_tokens_details: object; + endpoint?: string; } >; @@ -56,6 +57,11 @@ export class RequestUsage { */ public outputTokensDetails: Record; + /** + * The endpoint that produced this usage entry (e.g., responses.create, responses.compact). + */ + public endpoint?: 'responses.create' | 'responses.compact' | (string & {}); + constructor(input?: RequestUsageInput) { this.inputTokens = input?.inputTokens ?? input?.input_tokens ?? 0; this.outputTokens = input?.outputTokens ?? input?.output_tokens ?? 0; @@ -73,6 +79,9 @@ export class RequestUsage { this.outputTokensDetails = outputTokensDetails ? (outputTokensDetails as Record) : {}; + if (typeof input?.endpoint !== 'undefined') { + this.endpoint = input.endpoint; + } } } diff --git a/packages/agents-core/test/runImplementation.test.ts b/packages/agents-core/test/runImplementation.test.ts index 295fbf67..119223f2 100644 --- a/packages/agents-core/test/runImplementation.test.ts +++ b/packages/agents-core/test/runImplementation.test.ts @@ -50,7 +50,7 @@ import { import { handoff } from '../src/handoff'; import { ModelBehaviorError, UserError } from '../src/errors'; import { Computer } from '../src/computer'; -import { Usage } from '../src/usage'; +import { RequestUsage, Usage } from '../src/usage'; import { setTracingDisabled, withTrace } from '../src'; import { @@ -70,7 +70,7 @@ import { RunContext } from '../src/runContext'; import { setDefaultModelProvider } from '../src'; import { Logger } from '../src/logger'; import type { UnknownContext } from '../src/types'; -import type { Session } from '../src/memory/session'; +import type { CompactionResult, Session } from '../src/memory/session'; import type { AgentInputItem } from '../src/types'; beforeAll(() => { @@ -580,8 +580,9 @@ describe('saveToSession', () => { async runCompaction(args: { responseId: string | undefined; - }): Promise { + }): Promise { this.events.push(`runCompaction:${args.responseId}`); + return null; } } @@ -662,8 +663,11 @@ describe('saveToSession', () => { this.items = []; } - async runCompaction(args?: { responseId?: string }): Promise { + async runCompaction(args?: { + responseId?: string; + }): Promise { this.events.push(`runCompaction:${String(args?.responseId)}`); + return null; } } @@ -713,6 +717,116 @@ describe('saveToSession', () => { expect(session.events).toEqual(['addItems:2', 'runCompaction:undefined']); expect(session.items).toHaveLength(2); }); + + it('aggregates compaction usage into the run usage', async () => { + class TrackingSession implements Session { + items: AgentInputItem[] = []; + events: string[] = []; + + async getSessionId(): Promise { + return 'session'; + } + + async getItems(): Promise { + return [...this.items]; + } + + async addItems(items: AgentInputItem[]): Promise { + this.events.push(`addItems:${items.length}`); + this.items.push(...items); + } + + async popItem(): Promise { + return undefined; + } + + async clearSession(): Promise { + this.items = []; + } + + async runCompaction(): Promise { + this.events.push('runCompaction:resp_123'); + return { + usage: new RequestUsage({ + inputTokens: 4, + outputTokens: 6, + totalTokens: 10, + endpoint: 'responses.compact', + }), + }; + } + } + + const textAgent = new Agent({ + name: 'Recorder', + outputType: 'text', + instructions: 'capture', + }); + const agent = textAgent as unknown as Agent< + UnknownContext, + AgentOutputType + >; + const session = new TrackingSession(); + const context = new RunContext(undefined as UnknownContext); + const state = new RunState< + UnknownContext, + Agent + >(context, 'hello', agent, 10); + + const modelUsage = new Usage({ + requests: 1, + inputTokens: 2, + outputTokens: 3, + totalTokens: 5, + requestUsageEntries: [ + new RequestUsage({ + inputTokens: 2, + outputTokens: 3, + totalTokens: 5, + endpoint: 'responses.create', + }), + ], + }); + state._modelResponses.push({ + output: [], + usage: modelUsage, + responseId: 'resp_123', + }); + state._context.usage.add(modelUsage); + state._generatedItems = [ + new MessageOutputItem( + { + type: 'message', + role: 'assistant', + id: 'msg_123', + status: 'completed', + content: [ + { + type: 'output_text', + text: 'here is the reply', + }, + ], + providerData: {}, + }, + textAgent, + ), + ]; + state._currentStep = { + type: 'next_step_final_output', + output: 'here is the reply', + }; + + const result = new RunResult(state); + await saveToSession(session, toInputItemList(state._originalInput), result); + + expect(session.events).toEqual(['addItems:2', 'runCompaction:resp_123']); + expect(state.usage.inputTokens).toBe(6); + expect(state.usage.outputTokens).toBe(9); + expect(state.usage.totalTokens).toBe(15); + expect( + state.usage.requestUsageEntries?.map((entry) => entry.endpoint), + ).toEqual(['responses.create', 'responses.compact']); + }); }); describe('prepareInputItemsWithSession', () => { diff --git a/packages/agents-core/test/usage.test.ts b/packages/agents-core/test/usage.test.ts index f3a1b001..bdeea216 100644 --- a/packages/agents-core/test/usage.test.ts +++ b/packages/agents-core/test/usage.test.ts @@ -163,4 +163,36 @@ describe('Usage', () => { }, ]); }); + + it('preserves endpoint metadata on request usage entries', () => { + const aggregated = new Usage(); + + aggregated.add( + new Usage({ + requests: 1, + inputTokens: 3, + outputTokens: 4, + totalTokens: 7, + requestUsageEntries: [ + new RequestUsage({ + inputTokens: 3, + outputTokens: 4, + totalTokens: 7, + endpoint: 'responses.create', + }), + ], + }), + ); + + expect(aggregated.requestUsageEntries).toEqual([ + { + inputTokens: 3, + outputTokens: 4, + totalTokens: 7, + inputTokensDetails: {}, + outputTokensDetails: {}, + endpoint: 'responses.create', + }, + ]); + }); }); diff --git a/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts b/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts index afc29e82..2eaf046d 100644 --- a/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts +++ b/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts @@ -1,11 +1,17 @@ import OpenAI from 'openai'; -import { getLogger, MemorySession, UserError } from '@openai/agents-core'; +import { + getLogger, + MemorySession, + RequestUsage, + UserError, +} from '@openai/agents-core'; import type { AgentInputItem, OpenAIResponsesCompactionArgs, OpenAIResponsesCompactionAwareSession as OpenAIResponsesCompactionSessionLike, Session, } from '@openai/agents-core'; +import type { CompactionResult } from '@openai/agents-core'; import { DEFAULT_OPENAI_MODEL, getDefaultOpenAIClient } from '../defaults'; import { OPENAI_SESSION_API, @@ -118,7 +124,9 @@ export class OpenAIResponsesCompactionSession this.sessionItems = undefined; } - async runCompaction(args: OpenAIResponsesCompactionArgs = {}) { + async runCompaction( + args: OpenAIResponsesCompactionArgs = {}, + ): Promise { this.responseId = args.responseId ?? this.responseId ?? undefined; if (!this.responseId) { @@ -141,7 +149,7 @@ export class OpenAIResponsesCompactionSession logger.debug('skip: decision hook %o', { responseId: this.responseId, }); - return; + return null; } logger.debug('compact: start %o', { @@ -167,6 +175,10 @@ export class OpenAIResponsesCompactionSession outputItemCount: outputItems.length, candidateCount: this.compactionCandidateItems.length, }); + + return { + usage: toRequestUsage(compacted.usage), + }; } async getSessionId(): Promise { @@ -326,6 +338,19 @@ function isOpenAIModelName(model: string): boolean { return false; } +function toRequestUsage( + usage: OpenAI.Responses.ResponseUsage | undefined, +): RequestUsage { + return new RequestUsage({ + inputTokens: usage?.input_tokens ?? 0, + outputTokens: usage?.output_tokens ?? 0, + totalTokens: usage?.total_tokens ?? 0, + inputTokensDetails: { ...usage?.input_tokens_details }, + outputTokensDetails: { ...usage?.output_tokens_details }, + endpoint: 'responses.compact', + }); +} + function isOpenAIConversationsSessionDelegate( underlyingSession: Session | undefined, ): underlyingSession is Session & OpenAISessionApiTagged<'conversations'> { diff --git a/packages/agents-openai/src/openaiResponsesModel.ts b/packages/agents-openai/src/openaiResponsesModel.ts index 94c3f953..4a55e211 100644 --- a/packages/agents-openai/src/openaiResponsesModel.ts +++ b/packages/agents-openai/src/openaiResponsesModel.ts @@ -1,5 +1,6 @@ import { Model, + RequestUsage, Usage, withResponseSpan, createResponseSpan, @@ -1703,6 +1704,9 @@ export class OpenAIResponsesModel implements Model { totalTokens: response.usage?.total_tokens ?? 0, inputTokensDetails: { ...response.usage?.input_tokens_details }, outputTokensDetails: { ...response.usage?.output_tokens_details }, + requestUsageEntries: [ + toRequestUsageEntry(response.usage, 'responses.create'), + ], }), output: convertToOutputItem(response.output), responseId: response.id, @@ -1759,6 +1763,9 @@ export class OpenAIResponsesModel implements Model { outputTokensDetails: { ...usage?.output_tokens_details, }, + requestUsageEntries: [ + toRequestUsageEntry(usage, 'responses.create'), + ], }, providerData: remainingResponse, }, @@ -1827,3 +1834,17 @@ function normalizeInstructions( } return undefined; } + +function toRequestUsageEntry( + usage: OpenAI.Responses.ResponseUsage | undefined, + endpoint: string, +): RequestUsage { + return new RequestUsage({ + inputTokens: usage?.input_tokens ?? 0, + outputTokens: usage?.output_tokens ?? 0, + totalTokens: usage?.total_tokens ?? 0, + inputTokensDetails: { ...usage?.input_tokens_details }, + outputTokensDetails: { ...usage?.output_tokens_details }, + endpoint, + }); +} diff --git a/packages/agents-openai/test/openaiResponsesCompactionSession.test.ts b/packages/agents-openai/test/openaiResponsesCompactionSession.test.ts index 528e4129..47bda8a6 100644 --- a/packages/agents-openai/test/openaiResponsesCompactionSession.test.ts +++ b/packages/agents-openai/test/openaiResponsesCompactionSession.test.ts @@ -72,6 +72,11 @@ describe('OpenAIResponsesCompactionSession', () => { content: [{ type: 'output_text', text: 'compacted output' }], }, ], + usage: { + input_tokens: 7, + output_tokens: 11, + total_tokens: 18, + }, }); const underlyingSession = new MemorySession(); const decisionHistoryLengths: number[] = []; @@ -120,6 +125,17 @@ describe('OpenAIResponsesCompactionSession', () => { content: [{ type: 'output_text', text: 'compacted output' }], }, ]); + + const compactionResult = await session.runCompaction({ + responseId: 'resp_2', + force: true, + }); + expect(compactionResult?.usage).toMatchObject({ + inputTokens: 7, + outputTokens: 11, + totalTokens: 18, + endpoint: 'responses.compact', + }); }); it('provides compaction candidates to the decision hook', async () => { diff --git a/packages/agents-openai/test/openaiResponsesModel.test.ts b/packages/agents-openai/test/openaiResponsesModel.test.ts index 1d3903d0..f34d419c 100644 --- a/packages/agents-openai/test/openaiResponsesModel.test.ts +++ b/packages/agents-openai/test/openaiResponsesModel.test.ts @@ -539,12 +539,22 @@ describe('OpenAIResponsesModel', () => { const responseDone = received.find((ev) => ev.type === 'response_done'); expect(responseDone).toBeDefined(); expect((responseDone as any).response.id).toBe('res-stream'); - expect((responseDone as any).response.usage).toEqual({ + expect((responseDone as any).response.usage).toMatchObject({ inputTokens: 11, outputTokens: 5, totalTokens: 16, inputTokensDetails: { cached_tokens: 2 }, outputTokensDetails: { reasoning_tokens: 3 }, + requestUsageEntries: [ + { + inputTokens: 11, + outputTokens: 5, + totalTokens: 16, + inputTokensDetails: { cached_tokens: 2 }, + outputTokensDetails: { reasoning_tokens: 3 }, + endpoint: 'responses.create', + }, + ], }); }); }); From 9d8f8f0bf46fe112e36280e2dc342aeb42d04486 Mon Sep 17 00:00:00 2001 From: Kazuhiro Sera Date: Wed, 17 Dec 2025 16:33:12 +0900 Subject: [PATCH 2/2] rename result type --- packages/agents-core/src/index.ts | 2 +- packages/agents-core/src/memory/session.ts | 7 +++++-- packages/agents-core/test/runImplementation.test.ts | 11 +++++++---- .../src/memory/openaiResponsesCompactionSession.ts | 4 ++-- 4 files changed, 15 insertions(+), 9 deletions(-) diff --git a/packages/agents-core/src/index.ts b/packages/agents-core/src/index.ts index 8fd4f2a7..3f2b03bf 100644 --- a/packages/agents-core/src/index.ts +++ b/packages/agents-core/src/index.ts @@ -183,7 +183,7 @@ export type { SessionInputCallback, OpenAIResponsesCompactionArgs, OpenAIResponsesCompactionAwareSession, - CompactionResult, + OpenAIResponsesCompactionResult, } from './memory/session'; export { isOpenAIResponsesCompactionAwareSession } from './memory/session'; export { MemorySession } from './memory/memorySession'; diff --git a/packages/agents-core/src/memory/session.ts b/packages/agents-core/src/memory/session.ts index 910a9061..77b782a7 100644 --- a/packages/agents-core/src/memory/session.ts +++ b/packages/agents-core/src/memory/session.ts @@ -61,7 +61,7 @@ export type OpenAIResponsesCompactionArgs = { force?: boolean; }; -export type CompactionResult = { +export type OpenAIResponsesCompactionResult = { usage: RequestUsage; }; @@ -77,7 +77,10 @@ export interface OpenAIResponsesCompactionAwareSession extends Session { */ runCompaction( args?: OpenAIResponsesCompactionArgs, - ): Promise | CompactionResult | null; + ): + | Promise + | OpenAIResponsesCompactionResult + | null; } export function isOpenAIResponsesCompactionAwareSession( diff --git a/packages/agents-core/test/runImplementation.test.ts b/packages/agents-core/test/runImplementation.test.ts index 119223f2..23b956d8 100644 --- a/packages/agents-core/test/runImplementation.test.ts +++ b/packages/agents-core/test/runImplementation.test.ts @@ -70,7 +70,10 @@ import { RunContext } from '../src/runContext'; import { setDefaultModelProvider } from '../src'; import { Logger } from '../src/logger'; import type { UnknownContext } from '../src/types'; -import type { CompactionResult, Session } from '../src/memory/session'; +import type { + OpenAIResponsesCompactionResult, + Session, +} from '../src/memory/session'; import type { AgentInputItem } from '../src/types'; beforeAll(() => { @@ -580,7 +583,7 @@ describe('saveToSession', () => { async runCompaction(args: { responseId: string | undefined; - }): Promise { + }): Promise { this.events.push(`runCompaction:${args.responseId}`); return null; } @@ -665,7 +668,7 @@ describe('saveToSession', () => { async runCompaction(args?: { responseId?: string; - }): Promise { + }): Promise { this.events.push(`runCompaction:${String(args?.responseId)}`); return null; } @@ -744,7 +747,7 @@ describe('saveToSession', () => { this.items = []; } - async runCompaction(): Promise { + async runCompaction(): Promise { this.events.push('runCompaction:resp_123'); return { usage: new RequestUsage({ diff --git a/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts b/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts index 2eaf046d..379303e0 100644 --- a/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts +++ b/packages/agents-openai/src/memory/openaiResponsesCompactionSession.ts @@ -11,7 +11,7 @@ import type { OpenAIResponsesCompactionAwareSession as OpenAIResponsesCompactionSessionLike, Session, } from '@openai/agents-core'; -import type { CompactionResult } from '@openai/agents-core'; +import type { OpenAIResponsesCompactionResult } from '@openai/agents-core'; import { DEFAULT_OPENAI_MODEL, getDefaultOpenAIClient } from '../defaults'; import { OPENAI_SESSION_API, @@ -126,7 +126,7 @@ export class OpenAIResponsesCompactionSession async runCompaction( args: OpenAIResponsesCompactionArgs = {}, - ): Promise { + ): Promise { this.responseId = args.responseId ?? this.responseId ?? undefined; if (!this.responseId) {