diff --git a/packages/app/src/components/session/session-context-metrics.test.ts b/packages/app/src/components/session/session-context-metrics.test.ts index 68903a455..e90df9a94 100644 --- a/packages/app/src/components/session/session-context-metrics.test.ts +++ b/packages/app/src/components/session/session-context-metrics.test.ts @@ -79,15 +79,16 @@ describe("getSessionContextMetrics", () => { expect(metrics.context?.usage).toBeNull() }) - test("memoizes by message and provider array identity", () => { + test("recomputes when message array is mutated in place", () => { const messages = [assistant("a1", { input: 10, output: 10, reasoning: 10, read: 10, write: 10 }, 0.25)] const providers = [{ id: "openai", models: {} }] const one = getSessionContextMetrics(messages, providers) + messages.push(assistant("a2", { input: 100, output: 20, reasoning: 0, read: 0, write: 0 }, 0.75)) const two = getSessionContextMetrics(messages, providers) - const three = getSessionContextMetrics([...messages], providers) - expect(two).toBe(one) - expect(three).not.toBe(one) + expect(one.context?.message.id).toBe("a1") + expect(two.context?.message.id).toBe("a2") + expect(two.totalCost).toBe(1) }) }) diff --git a/packages/app/src/components/session/session-context-metrics.ts b/packages/app/src/components/session/session-context-metrics.ts index 2b6edbd95..357205afb 100644 --- a/packages/app/src/components/session/session-context-metrics.ts +++ b/packages/app/src/components/session/session-context-metrics.ts @@ -34,8 +34,6 @@ type Metrics = { context: Context | undefined } -const cache = new WeakMap>() - const tokenTotal = (msg: AssistantMessage) => { return msg.tokens.input + msg.tokens.output + msg.tokens.reasoning + msg.tokens.cache.read + msg.tokens.cache.write } @@ -80,15 +78,5 @@ const build = (messages: Message[], providers: Provider[]): Metrics => { } export function getSessionContextMetrics(messages: Message[], providers: Provider[]) { - const byProvider = cache.get(messages) - if (byProvider) { - const hit = byProvider.get(providers) - if (hit) return hit - } - - const value = build(messages, providers) - const next = byProvider ?? new WeakMap() - next.set(providers, value) - if (!byProvider) cache.set(messages, next) - return value + return build(messages, providers) }