Models: normalize Gemini 3 ids in runtime selection

Closes #795
This commit is contained in:
Shadow
2026-01-12 21:32:53 -06:00
parent 2467a103b2
commit ab993904d7
3 changed files with 28 additions and 4 deletions

View File

@@ -107,6 +107,24 @@ describe("parseModelRef", () => {
model: "claude-opus-4-5",
});
});
it("normalizes google gemini 3 models to preview ids", () => {
expect(parseModelRef("google/gemini-3-pro", "anthropic")).toEqual({
provider: "google",
model: "gemini-3-pro-preview",
});
expect(parseModelRef("google/gemini-3-flash", "anthropic")).toEqual({
provider: "google",
model: "gemini-3-flash-preview",
});
});
it("normalizes default-provider google models", () => {
expect(parseModelRef("gemini-3-pro", "google")).toEqual({
provider: "google",
model: "gemini-3-pro-preview",
});
});
});
describe("resolveHooksGmailModel", () => {

View File

@@ -1,5 +1,6 @@
import type { ClawdbotConfig } from "../config/config.js";
import type { ModelCatalogEntry } from "./model-catalog.js";
import { normalizeGoogleModelId } from "./models-config.providers.js";
export type ModelRef = {
provider: string;
@@ -47,6 +48,12 @@ function normalizeAnthropicModelId(model: string): string {
return trimmed;
}
function normalizeProviderModelId(provider: string, model: string): string {
if (provider === "anthropic") return normalizeAnthropicModelId(model);
if (provider === "google") return normalizeGoogleModelId(model);
return model;
}
export function parseModelRef(
raw: string,
defaultProvider: string,
@@ -56,16 +63,14 @@ export function parseModelRef(
const slash = trimmed.indexOf("/");
if (slash === -1) {
const provider = normalizeProviderId(defaultProvider);
const model =
provider === "anthropic" ? normalizeAnthropicModelId(trimmed) : trimmed;
const model = normalizeProviderModelId(provider, trimmed);
return { provider, model };
}
const providerRaw = trimmed.slice(0, slash).trim();
const provider = normalizeProviderId(providerRaw);
const model = trimmed.slice(slash + 1).trim();
if (!provider || !model) return null;
const normalizedModel =
provider === "anthropic" ? normalizeAnthropicModelId(model) : model;
const normalizedModel = normalizeProviderModelId(provider, model);
return { provider, model: normalizedModel };
}