





















@@ -1,7 +1,7 @@
11import path from "node:path";
22import { pathToFileURL } from "node:url";
33import { afterEach, describe, expect, it, vi } from "vitest";
4-import { resolveMediaToolLocalRoots } from "./media-tool-shared.js";
4+import { resolveMediaToolLocalRoots, resolveModelFromRegistry } from "./media-tool-shared.js";
5566function normalizeHostPath(value: string): string {
77return path.normalize(path.resolve(value));
@@ -35,3 +35,48 @@ describe("resolveMediaToolLocalRoots", () => {
3535expect(normalizedRoots).not.toContain(normalizeHostPath("/"));
3636});
3737});
38+39+describe("resolveModelFromRegistry", () => {
40+it("normalizes provider and model refs before registry lookup", () => {
41+const foundModel = { provider: "ollama", id: "qwen3.5:397b-cloud" };
42+const find = vi.fn(() => foundModel);
43+44+const result = resolveModelFromRegistry({
45+modelRegistry: { find },
46+provider: " OLLAMA ",
47+modelId: " qwen3.5:397b-cloud ",
48+});
49+50+expect(find).toHaveBeenCalledWith("ollama", "qwen3.5:397b-cloud");
51+expect(result).toBe(foundModel);
52+});
53+54+it("reports the normalized ref when the registry lookup misses", () => {
55+const find = vi.fn(() => null);
56+57+expect(() =>
58+resolveModelFromRegistry({
59+modelRegistry: { find },
60+provider: " OLLAMA ",
61+modelId: " qwen3.5:397b-cloud ",
62+}),
63+).toThrow("Unknown model: ollama/qwen3.5:397b-cloud");
64+});
65+66+it("falls back to provider-prefixed custom model IDs", () => {
67+const foundModel = { provider: "kimchi", id: "kimchi/claude-opus-4-6" };
68+const find = vi.fn().mockReturnValueOnce(null).mockReturnValueOnce(foundModel);
69+70+const result = resolveModelFromRegistry({
71+modelRegistry: { find },
72+provider: "kimchi",
73+modelId: "claude-opus-4-6",
74+});
75+76+expect(find.mock.calls).toEqual([
77+["kimchi", "claude-opus-4-6"],
78+["kimchi", "kimchi/claude-opus-4-6"],
79+]);
80+expect(result).toBe(foundModel);
81+});
82+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。