Enhance model handling and settings integration for providers (#295)

This commit is contained in:
Ammad Ali
2026-03-21 17:34:47 +00:00
committed by GitHub
parent 7f517776df
commit 8274ec4e14
27 changed files with 1343 additions and 186 deletions
+14 -1
View File
@@ -1,5 +1,8 @@
import { describe, expect, it } from "vitest";
import { settingsRegistry } from "./settings-registry";
import {
getDefaultModelForProvider,
settingsRegistry,
} from "./settings-registry";
describe("settingsRegistry helpers", () => {
describe("string parsing (parseNonEmptyStringOrNull)", () => {
@@ -192,5 +195,15 @@ describe("settingsRegistry helpers", () => {
"openai_compatible",
);
});
it("uses provider-specific default models", () => {
expect(getDefaultModelForProvider("openai")).toBe("gpt-5.4-mini");
expect(getDefaultModelForProvider("gemini")).toBe(
"google/gemini-3-flash-preview",
);
expect(getDefaultModelForProvider("openrouter")).toBe(
"google/gemini-3-flash-preview",
);
});
});
});
+29 -2
View File
@@ -38,6 +38,30 @@ function normalizeLlmProviderOrNull(raw: string | undefined): string | null {
return normalized ? normalized : null;
}
export const DEFAULT_GEMINI_MODEL = "google/gemini-3-flash-preview";
export const DEFAULT_OPENAI_MODEL = "gpt-5.4-mini";
export function getDefaultModelForProvider(
provider: string | null | undefined,
fallbackModel?: string | null,
): string {
const trimmedFallback = fallbackModel?.trim();
if (trimmedFallback) {
return trimmedFallback;
}
const normalizedProvider = normalizeLlmProviderOrNull(provider ?? undefined);
if (normalizedProvider === "openai") {
return DEFAULT_OPENAI_MODEL;
}
if (normalizedProvider === "gemini") {
return DEFAULT_GEMINI_MODEL;
}
return DEFAULT_GEMINI_MODEL;
}
function serializeNullableNumber(
value: number | null | undefined,
): string | null {
@@ -87,8 +111,11 @@ export const settingsRegistry = {
schema: z.string().trim().max(200),
default: (): string =>
typeof process !== "undefined"
? process.env.MODEL || "google/gemini-3-flash-preview"
: "google/gemini-3-flash-preview",
? getDefaultModelForProvider(
process.env.LLM_PROVIDER,
process.env.MODEL,
)
: DEFAULT_GEMINI_MODEL,
parse: parseNonEmptyStringOrNull,
serialize: (value: string | null | undefined): string | null =>
value ?? null,