Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion src/vision/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@ import type { TranslatorBudget } from "../lib/translator-budget";
export { describeImage } from "./describe";
export { describeImageAnthropic, parseAnthropicVisionSSE } from "./anthropic-describe";

const DEFAULT_VISION_MODEL = "gpt-5.4-mini";
const DEFAULT_VISION_MODEL = "gpt-5.6-luna";
Comment thread
luvs01 marked this conversation as resolved.
const DEFAULT_ANTHROPIC_VISION_MODEL = "claude-sonnet-5";
const DEFAULT_TIMEOUT_MS = 45_000;
const DEFAULT_MAX_DESCRIPTIONS_PER_TURN = 8;
Expand Down
2 changes: 1 addition & 1 deletion structure/04_transports-and-sidecars.md
Original file line number Diff line number Diff line change
Expand Up @@ -588,7 +588,7 @@ sidecar authority exists. Both have two possible backends, but they select diffe
| Sidecar | Backend selection | Default model | Activation |
| --- | --- | --- | --- |
| `web-search/` | Explicit configuration only: unset always resolves to the OpenAI forward path. Anthropic is never auto-selected from credential availability — doing so once sent OpenAI model ids to the Anthropic API. | `gpt-5.6-luna` (OpenAI), `claude-sonnet-5` (Anthropic) | Hosted `web_search` requested by a non-passthrough routed model. |
| `vision/` | Explicit configuration wins for both backends. Only an unset backend auto-selects: Anthropic when a usable Anthropic OAuth provider exists, otherwise the OpenAI forward authority. An explicitly selected backend whose authority is unavailable produces no plan rather than falling back. | `claude-sonnet-5` (Anthropic), `gpt-5.4-mini` (OpenAI) | Input contains images for a model listed in `noVisionModels`. |
| `vision/` | Explicit configuration wins for both backends. Only an unset backend auto-selects: Anthropic when a usable Anthropic OAuth provider exists, otherwise the OpenAI forward authority. An explicitly selected backend whose authority is unavailable produces no plan rather than falling back. | `claude-sonnet-5` (Anthropic), `gpt-5.6-luna` (OpenAI) | Input contains images for a model listed in `noVisionModels`. |

The asymmetry is in the unset case only: vision may describe an image with whichever model can see
it, while a hosted search tool is tied to a provider-specific tool contract, so search never infers
Expand Down
14 changes: 14 additions & 0 deletions tests/claude-sidecar-override.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -124,3 +124,17 @@ test("unset Claude overrides inherit the global sidecar backend and model", () =
settings: { model: "global-vision" },
});
});

test("unset OpenAI vision model uses the operator-visible default", () => {
const config: OcxConfig = {
port: 10100,
defaultProvider: "routed",
providers: { routed, forward },
visionSidecar: { backend: "openai" },
};

expect(planVisionSidecar(config, routed, "text-model", request, openAiSidecar)).toMatchObject({
backend: "openai",
settings: { model: "gpt-5.6-luna" },
});
});
Loading