diff --git a/test/harness/replayingCapiProxy.test.ts b/test/harness/replayingCapiProxy.test.ts index 062fe89ae9..2eb022ac13 100644 --- a/test/harness/replayingCapiProxy.test.ts +++ b/test/harness/replayingCapiProxy.test.ts @@ -1661,6 +1661,21 @@ Always include PINEAPPLE_COCONUT_42. data: Array<{ id: string }>; }; expect(parsed.data.map((model) => model.id)).toEqual(["claude-sonnet-5"]); + expect(parsed.data[0]).toMatchObject({ + capabilities: { + supports: { vision: true }, + limits: { + vision: { + max_prompt_images: 2, + max_prompt_image_size: expect.any(Number), + supported_media_types: expect.arrayContaining([ + "image/png", + "image/jpeg", + ]), + }, + }, + }, + }); } finally { await proxy.stop(); } @@ -1694,6 +1709,23 @@ Always include PINEAPPLE_COCONUT_42. expect(parsed.data).toHaveLength(2); expect(parsed.data[0].id).toBe("gpt-4o"); expect(parsed.data[1].id).toBe("claude-sonnet-4"); + for (const model of parsed.data) { + expect(model).toMatchObject({ + capabilities: { + supports: { vision: true }, + limits: { + vision: { + max_prompt_images: 2, + max_prompt_image_size: expect.any(Number), + supported_media_types: expect.arrayContaining([ + "image/png", + "image/jpeg", + ]), + }, + }, + }, + }); + } } finally { await proxy.stop(); } diff --git a/test/harness/replayingCapiProxy.ts b/test/harness/replayingCapiProxy.ts index 9bcafcdad4..ef4fadb9d4 100644 --- a/test/harness/replayingCapiProxy.ts +++ b/test/harness/replayingCapiProxy.ts @@ -14,6 +14,7 @@ import type { import { ChatCompletionStream } from "openai/resources/chat/completions"; import path from "path"; import yaml from "yaml"; +import type { ModelCapabilitiesLimitsVision } from "../../nodejs/src/generated/rpc"; import { CapturedExchange, CapturingHttpProxy, @@ -2018,7 +2019,15 @@ function createGetModelsResponse(modelIds: string[]) { name: id, capabilities: { supports: { vision: true }, - limits: { max_context_window_tokens: 128000 }, + limits: { + max_context_window_tokens: 128000, + // Replay fixtures contain two image-bearing messages. + vision: { + max_prompt_images: 2, + max_prompt_image_size: 20 * 1024 * 1024, + supported_media_types: ["image/png", "image/jpeg"], + } satisfies ModelCapabilitiesLimitsVision, + }, }, })), };