| 1 | import { |
| 2 | ProviderDriverKind, |
| 3 | type ModelCapabilities, |
| 4 | type ServerProviderModel, |
| 5 | } from "@t3tools/contracts"; |
| 6 | import { describe, expect, it } from "vite-plus/test"; |
| 7 | |
| 8 | import { getProviderModelCapabilities } from "./providerModels"; |
| 9 | |
| 10 | const PROVIDER = ProviderDriverKind.make("claudeAgent"); |
| 11 | |
| 12 | function capabilities(id: string): ModelCapabilities { |
| 13 | return { |
| 14 | optionDescriptors: [{ id, label: id, type: "boolean" }], |
| 15 | }; |
| 16 | } |
| 17 | |
| 18 | function model(input: { |
| 19 | slug: string; |
| 20 | capabilities: ModelCapabilities; |
| 21 | aliases?: ReadonlyArray<string>; |
| 22 | isCustom?: boolean; |
| 23 | }): ServerProviderModel { |
| 24 | return { |
| 25 | slug: input.slug, |
| 26 | name: input.slug, |
| 27 | ...(input.aliases ? { aliases: [...input.aliases] } : {}), |
| 28 | isCustom: input.isCustom ?? false, |
| 29 | capabilities: input.capabilities, |
| 30 | }; |
| 31 | } |
| 32 | |
| 33 | describe("getProviderModelCapabilities", () => { |
| 34 | it("resolves model-declared aliases", () => { |
| 35 | const aliasCapabilities = capabilities("aliased-option"); |
| 36 | const models = [ |
| 37 | model({ |
| 38 | slug: "synthetic-model", |
| 39 | aliases: ["Legacy-Synthetic-Model"], |
| 40 | capabilities: aliasCapabilities, |
| 41 | }), |
| 42 | ]; |
| 43 | |
| 44 | expect(getProviderModelCapabilities(models, "legacy-synthetic-model", PROVIDER)).toEqual( |
| 45 | aliasCapabilities, |
| 46 | ); |
| 47 | }); |
| 48 | |
| 49 | it("prefers an exact custom slug over a built-in model alias", () => { |
| 50 | const customCapabilities = capabilities("custom-option"); |
| 51 | const models = [ |
| 52 | model({ |
| 53 | slug: "synthetic-model", |
| 54 | aliases: ["custom-model"], |
| 55 | capabilities: capabilities("built-in-option"), |
| 56 | }), |
| 57 | model({ slug: "custom-model", capabilities: customCapabilities, isCustom: true }), |
| 58 | ]; |
| 59 | |
| 60 | expect(getProviderModelCapabilities(models, " custom-model ", PROVIDER)).toEqual( |
| 61 | customCapabilities, |
| 62 | ); |
| 63 | }); |
| 64 | |
| 65 | it("returns empty capabilities for an unknown slug", () => { |
| 66 | const models = [ |
| 67 | model({ |
| 68 | slug: "default-model", |
| 69 | capabilities: capabilities("default-option"), |
| 70 | }), |
| 71 | ]; |
| 72 | |
| 73 | expect(getProviderModelCapabilities(models, "unknown-model", PROVIDER)).toEqual({ |
| 74 | optionDescriptors: [], |
| 75 | }); |
| 76 | }); |
| 77 | }); |