Files
clawdbot/src/media-understanding/resolve.test.ts
Peter Steinberger 7cebe7a506 style: run oxfmt
2026-01-17 08:00:05 +00:00

134 lines
3.4 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { ClawdbotConfig } from "../config/config.js";
import { resolveEntriesWithActiveFallback, resolveModelEntries } from "./resolve.js";
const providerRegistry = new Map([
["openai", { capabilities: ["image"] }],
["groq", { capabilities: ["audio"] }],
]);
describe("resolveModelEntries", () => {
it("uses provider capabilities for shared entries without explicit caps", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
models: [{ provider: "openai", model: "gpt-5.2" }],
},
},
};
const imageEntries = resolveModelEntries({
cfg,
capability: "image",
providerRegistry,
});
expect(imageEntries).toHaveLength(1);
const audioEntries = resolveModelEntries({
cfg,
capability: "audio",
providerRegistry,
});
expect(audioEntries).toHaveLength(0);
});
it("keeps per-capability entries even without explicit caps", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
image: {
models: [{ provider: "openai", model: "gpt-5.2" }],
},
},
},
};
const imageEntries = resolveModelEntries({
cfg,
capability: "image",
config: cfg.tools?.media?.image,
providerRegistry,
});
expect(imageEntries).toHaveLength(1);
});
it("skips shared CLI entries without capabilities", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
models: [{ type: "cli", command: "gemini", args: ["--file", "{{MediaPath}}"] }],
},
},
};
const entries = resolveModelEntries({
cfg,
capability: "image",
providerRegistry,
});
expect(entries).toHaveLength(0);
});
});
describe("resolveEntriesWithActiveFallback", () => {
it("uses active model when enabled and no models are configured", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
audio: { enabled: true },
},
},
};
const entries = resolveEntriesWithActiveFallback({
cfg,
capability: "audio",
config: cfg.tools?.media?.audio,
providerRegistry,
activeModel: { provider: "groq", model: "whisper-large-v3" },
});
expect(entries).toHaveLength(1);
expect(entries[0]?.provider).toBe("groq");
});
it("ignores active model when configured entries exist", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
audio: { enabled: true, models: [{ provider: "openai", model: "whisper-1" }] },
},
},
};
const entries = resolveEntriesWithActiveFallback({
cfg,
capability: "audio",
config: cfg.tools?.media?.audio,
providerRegistry,
activeModel: { provider: "groq", model: "whisper-large-v3" },
});
expect(entries).toHaveLength(1);
expect(entries[0]?.provider).toBe("openai");
});
it("skips active model when provider lacks capability", () => {
const cfg: ClawdbotConfig = {
tools: {
media: {
video: { enabled: true },
},
},
};
const entries = resolveEntriesWithActiveFallback({
cfg,
capability: "video",
config: cfg.tools?.media?.video,
providerRegistry,
activeModel: { provider: "groq", model: "whisper-large-v3" },
});
expect(entries).toHaveLength(0);
});
});