feat(webui): parse generation defaults from the model catalog
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
This commit is contained in:
@@ -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();
|
||||
});
|
||||
});
|
||||
@@ -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,
|
||||
};
|
||||
}
|
||||
|
||||
|
||||
@@ -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 {
|
||||
|
||||
Reference in New Issue
Block a user