feat(webui): parse generation defaults from the model catalog

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
m4
2026-07-29 07:42:08 +08:00
parent dc6fd39341
commit c4411d209f
3 changed files with 43 additions and 1 deletions
+32
View File
@@ -0,0 +1,32 @@
import { describe, expect, it } from "vitest";
import { parseSelectableModel } from "./useAvailableModels";
const RAW = {
model_ref: { provider_id: "zhipu-glm", model_key: "glm-5.2" },
name: "GLM-5.2",
provider_name: "Zhipu GLM",
effective_capabilities: {
tools: true,
vision: false,
structured_output: true,
},
default_temperature: 0.7,
default_top_p: 0.95,
};
describe("parseSelectableModel", () => {
it("keeps generation defaults from the catalog", () => {
const parsed = parseSelectableModel(RAW);
expect(parsed?.default_temperature).toBe(0.7);
expect(parsed?.default_top_p).toBe(0.95);
});
it("defaults missing generation fields to null", () => {
const { default_temperature, default_top_p, ...rest } = RAW;
void default_temperature;
void default_top_p;
const parsed = parseSelectableModel(rest);
expect(parsed?.default_temperature).toBeNull();
expect(parsed?.default_top_p).toBeNull();
});
});
+9 -1
View File
@@ -35,13 +35,15 @@ function isModelRef(value: unknown): value is ModelRef {
);
}
function parseSelectableModel(raw: unknown): SelectableModel | null {
export function parseSelectableModel(raw: unknown): SelectableModel | null {
if (!raw || typeof raw !== "object") return null;
const entry = raw as {
model_ref?: unknown;
name?: unknown;
provider_name?: unknown;
effective_capabilities?: unknown;
default_temperature?: unknown;
default_top_p?: unknown;
};
if (!isModelRef(entry.model_ref) || typeof entry.name !== "string") {
return null;
@@ -62,6 +64,12 @@ function parseSelectableModel(raw: unknown): SelectableModel | null {
vision: caps?.vision === true,
structured_output: caps?.structured_output === true,
},
default_temperature:
typeof entry.default_temperature === "number"
? entry.default_temperature
: null,
default_top_p:
typeof entry.default_top_p === "number" ? entry.default_top_p : null,
};
}
+2
View File
@@ -185,6 +185,8 @@ export interface SelectableModel {
name: string;
provider_name: string;
effective_capabilities: Capabilities;
default_temperature: number | null;
default_top_p: number | null;
}
export interface GetSelectableModelsResponse {