diff --git a/src/lib/ai/__tests__/vision-capability.test.ts b/src/lib/ai/__tests__/vision-capability.test.ts index 7742ae293..362a27d8e 100644 --- a/src/lib/ai/__tests__/vision-capability.test.ts +++ b/src/lib/ai/__tests__/vision-capability.test.ts @@ -6,8 +6,11 @@ import { } from "../vision-capability"; describe("supportsVisionForConfig", () => { - it("accepts Claude 3.5+/4 family models for anthropic", () => { + it("accepts the Claude 3 / 3.5 / 3.7 / 4 families for anthropic", () => { for (const model of [ + "claude-3-opus-20240229", + "claude-3-sonnet-20240229", + "claude-3-haiku-20240307", "claude-3-5-sonnet-latest", "claude-3-7-sonnet", "claude-sonnet-4-6", diff --git a/src/lib/ai/vision-capability.ts b/src/lib/ai/vision-capability.ts index 2ab906afb..360b87160 100644 --- a/src/lib/ai/vision-capability.ts +++ b/src/lib/ai/vision-capability.ts @@ -15,12 +15,19 @@ /** * Anthropic vision models. The Messages API `image` + `document` blocks are - * accepted by the Claude 3.5+ / 3.7 / 4 families. An older `claude-2*` / - * `claude-instant*` pin is text-only. + * accepted by the whole Claude 3 family (3 / 3.5 / 3.7) and the Claude 4 + * family. An older `claude-2*` / `claude-instant*` pin is text-only. + * + * The bare `claude-3-opus` / `claude-3-sonnet` / `claude-3-haiku` prefixes are + * listed explicitly: a self-hoster pinned to e.g. `claude-3-opus-20240229` + * reads images, but the `claude-3-5` prefix does not match it. */ function anthropicSupportsVision(model: string): boolean { const m = model.toLowerCase(); return ( + m.startsWith("claude-3-opus") || + m.startsWith("claude-3-sonnet") || + m.startsWith("claude-3-haiku") || m.startsWith("claude-3-5") || m.startsWith("claude-3.5") || m.startsWith("claude-3-7") ||