@@ -9,59 +9,87 @@ import {
99} from "./pricing.ts" ;
1010
1111describe ( "generateLookupCandidates" , ( ) => {
12- describe ( "openrouter provider" , ( ) => {
12+ describe ( "openrouter provider (slash format) " , ( ) => {
1313 it ( "should generate candidates for openrouter/anthropic/model" , ( ) => {
1414 const candidates = generateLookupCandidates (
1515 "openrouter/anthropic/claude-sonnet-4" ,
1616 ) ;
17- expect ( candidates ) . toEqual ( [
18- "openrouter/anthropic/claude-sonnet-4" ,
19- "anthropic/claude-sonnet-4" ,
20- "claude-sonnet-4" ,
21- ] ) ;
17+ expect ( candidates ) . toContain ( "openrouter/anthropic/claude-sonnet-4" ) ;
18+ expect ( candidates ) . toContain ( "anthropic/claude-sonnet-4" ) ;
19+ expect ( candidates ) . toContain ( "claude-sonnet-4" ) ;
2220 } ) ;
2321
2422 it ( "should generate candidates for openrouter/openai/model" , ( ) => {
2523 const candidates = generateLookupCandidates ( "openrouter/openai/gpt-4o" ) ;
26- expect ( candidates ) . toEqual ( [
27- "openrouter/openai/gpt-4o" ,
28- "openai/gpt-4o" ,
29- "gpt-4o" ,
30- ] ) ;
24+ expect ( candidates ) . toContain ( "openrouter/openai/gpt-4o" ) ;
25+ expect ( candidates ) . toContain ( "openai/gpt-4o" ) ;
26+ expect ( candidates ) . toContain ( "gpt-4o" ) ;
3127 } ) ;
3228
3329 it ( "should handle openrouter with simple model name" , ( ) => {
3430 const candidates = generateLookupCandidates ( "openrouter/some-model" ) ;
35- expect ( candidates ) . toEqual ( [ "openrouter/some-model" , "some-model" ] ) ;
31+ expect ( candidates ) . toContain ( "openrouter/some-model" ) ;
32+ expect ( candidates ) . toContain ( "some-model" ) ;
3633 } ) ;
3734 } ) ;
3835
39- describe ( "anthropic provider" , ( ) => {
36+ describe ( "anthropic provider (slash format) " , ( ) => {
4037 it ( "should generate candidates for anthropic/model" , ( ) => {
4138 const candidates = generateLookupCandidates ( "anthropic/claude-haiku-4-5" ) ;
42- expect ( candidates ) . toEqual ( [
43- "anthropic/claude-haiku-4-5" ,
44- "claude-haiku-4-5" ,
45- ] ) ;
39+ expect ( candidates ) . toContain ( "anthropic/claude-haiku-4-5" ) ;
40+ expect ( candidates ) . toContain ( "claude-haiku-4-5" ) ;
41+ } ) ;
42+ } ) ;
43+
44+ describe ( "Vercel AI Gateway format (colon separator)" , ( ) => {
45+ it ( "should generate candidates for anthropic:model" , ( ) => {
46+ const candidates = generateLookupCandidates ( "anthropic:claude-sonnet-4" ) ;
47+ expect ( candidates ) . toContain ( "anthropic:claude-sonnet-4" ) ;
48+ expect ( candidates ) . toContain ( "anthropic/claude-sonnet-4" ) ;
49+ expect ( candidates ) . toContain ( "claude-sonnet-4" ) ;
50+ } ) ;
51+
52+ it ( "should generate candidates for openai:model" , ( ) => {
53+ const candidates = generateLookupCandidates ( "openai:gpt-4o" ) ;
54+ expect ( candidates ) . toContain ( "openai:gpt-4o" ) ;
55+ expect ( candidates ) . toContain ( "openai/gpt-4o" ) ;
56+ expect ( candidates ) . toContain ( "gpt-4o" ) ;
57+ } ) ;
58+
59+ it ( "should generate candidates for google:model" , ( ) => {
60+ const candidates = generateLookupCandidates ( "google:gemini-2.0-flash" ) ;
61+ expect ( candidates ) . toContain ( "google:gemini-2.0-flash" ) ;
62+ expect ( candidates ) . toContain ( "google/gemini-2.0-flash" ) ;
63+ expect ( candidates ) . toContain ( "gemini-2.0-flash" ) ;
64+ } ) ;
65+
66+ it ( "should generate candidates for x-ai:model" , ( ) => {
67+ const candidates = generateLookupCandidates ( "x-ai:grok-2" ) ;
68+ expect ( candidates ) . toContain ( "x-ai:grok-2" ) ;
69+ expect ( candidates ) . toContain ( "x-ai/grok-2" ) ;
70+ expect ( candidates ) . toContain ( "grok-2" ) ;
4671 } ) ;
4772 } ) ;
4873
49- describe ( "openai provider" , ( ) => {
74+ describe ( "openai provider (slash format) " , ( ) => {
5075 it ( "should generate candidates for openai/model" , ( ) => {
5176 const candidates = generateLookupCandidates ( "openai/gpt-4o" ) ;
52- expect ( candidates ) . toEqual ( [ "openai/gpt-4o" , "gpt-4o" ] ) ;
77+ expect ( candidates ) . toContain ( "openai/gpt-4o" ) ;
78+ expect ( candidates ) . toContain ( "gpt-4o" ) ;
5379 } ) ;
5480
5581 it ( "should handle openai/gpt-4o-mini" , ( ) => {
5682 const candidates = generateLookupCandidates ( "openai/gpt-4o-mini" ) ;
57- expect ( candidates ) . toEqual ( [ "openai/gpt-4o-mini" , "gpt-4o-mini" ] ) ;
83+ expect ( candidates ) . toContain ( "openai/gpt-4o-mini" ) ;
84+ expect ( candidates ) . toContain ( "gpt-4o-mini" ) ;
5885 } ) ;
5986 } ) ;
6087
6188 describe ( "lmstudio provider" , ( ) => {
6289 it ( "should generate candidates for lmstudio/model" , ( ) => {
6390 const candidates = generateLookupCandidates ( "lmstudio/llama-3-8b" ) ;
64- expect ( candidates ) . toEqual ( [ "lmstudio/llama-3-8b" , "llama-3-8b" ] ) ;
91+ expect ( candidates ) . toContain ( "lmstudio/llama-3-8b" ) ;
92+ expect ( candidates ) . toContain ( "llama-3-8b" ) ;
6593 } ) ;
6694 } ) ;
6795
@@ -70,10 +98,16 @@ describe("generateLookupCandidates", () => {
7098 const candidates = generateLookupCandidates ( "unknown/some-model" ) ;
7199 expect ( candidates ) . toEqual ( [ "unknown/some-model" ] ) ;
72100 } ) ;
101+
102+ it ( "should handle unknown provider with colon format" , ( ) => {
103+ const candidates = generateLookupCandidates ( "unknown:some-model" ) ;
104+ expect ( candidates ) . toContain ( "unknown:some-model" ) ;
105+ expect ( candidates ) . toContain ( "unknown/some-model" ) ;
106+ } ) ;
73107 } ) ;
74108
75109 describe ( "no provider prefix" , ( ) => {
76- it ( "should return only the original string when no slash " , ( ) => {
110+ it ( "should return only the original string when no separator " , ( ) => {
77111 const candidates = generateLookupCandidates ( "claude-sonnet-4" ) ;
78112 expect ( candidates ) . toEqual ( [ "claude-sonnet-4" ] ) ;
79113 } ) ;
0 commit comments