

























@@ -1,7 +1,11 @@
11import path from "node:path";
22import { pathToFileURL } from "node:url";
33import { afterEach, describe, expect, it, vi } from "vitest";
4-import { resolveMediaToolLocalRoots, resolveModelFromRegistry } from "./media-tool-shared.js";
4+import {
5+hasGenerationToolAvailability,
6+resolveMediaToolLocalRoots,
7+resolveModelFromRegistry,
8+} from "./media-tool-shared.js";
59610function normalizeHostPath(value: string): string {
711return path.normalize(path.resolve(value));
@@ -98,3 +102,48 @@ describe("resolveModelFromRegistry", () => {
98102expect(result).toBe(foundModel);
99103}, 180_000);
100104});
105+106+describe("hasGenerationToolAvailability", () => {
107+it("allows generation tools for runtime providers configured without auth", () => {
108+expect(
109+hasGenerationToolAvailability({
110+providerKey: "imageGenerationProviders",
111+providers: [
112+{
113+id: "local-image",
114+defaultModel: "workflow",
115+isConfigured: () => true,
116+},
117+],
118+}),
119+).toBe(true);
120+});
121+122+it("omits generation tools when runtime providers are not configured", () => {
123+expect(
124+hasGenerationToolAvailability({
125+providerKey: "imageGenerationProviders",
126+providers: [
127+{
128+id: "local-image",
129+defaultModel: "workflow",
130+isConfigured: () => false,
131+},
132+],
133+}),
134+).toBe(false);
135+});
136+137+it("keeps explicit model config sufficient for generation tool registration", () => {
138+const loadProviders = vi.fn(() => []);
139+140+expect(
141+hasGenerationToolAvailability({
142+providerKey: "imageGenerationProviders",
143+modelConfig: { primary: "local-image/workflow" },
144+providers: loadProviders,
145+}),
146+).toBe(true);
147+expect(loadProviders).not.toHaveBeenCalled();
148+});
149+});
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。