ai-model-verifier 2.0.2 → 3.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (104) hide show
  1. package/README.md +16 -4
  2. package/dist/engine/context.d.ts +8 -8
  3. package/dist/engine/context.d.ts.map +1 -1
  4. package/dist/engine/context.js.map +1 -1
  5. package/dist/engine/handshake.d.ts.map +1 -1
  6. package/dist/engine/handshake.js +7 -1
  7. package/dist/engine/handshake.js.map +1 -1
  8. package/dist/engine/probe-runner.d.ts.map +1 -1
  9. package/dist/engine/probe-runner.js +6 -4
  10. package/dist/engine/probe-runner.js.map +1 -1
  11. package/dist/highlight.d.ts +5 -2
  12. package/dist/highlight.d.ts.map +1 -1
  13. package/dist/highlight.js +30 -9
  14. package/dist/highlight.js.map +1 -1
  15. package/dist/identity/patterns.d.ts +0 -8
  16. package/dist/identity/patterns.d.ts.map +1 -1
  17. package/dist/identity/patterns.js +0 -24
  18. package/dist/identity/patterns.js.map +1 -1
  19. package/dist/identity/signals.d.ts +12 -5
  20. package/dist/identity/signals.d.ts.map +1 -1
  21. package/dist/identity/signals.js +20 -11
  22. package/dist/identity/signals.js.map +1 -1
  23. package/dist/index.d.ts +6 -1
  24. package/dist/index.d.ts.map +1 -1
  25. package/dist/index.js +3 -0
  26. package/dist/index.js.map +1 -1
  27. package/dist/makers/index.d.ts +6 -0
  28. package/dist/makers/index.d.ts.map +1 -0
  29. package/dist/makers/index.js +4 -0
  30. package/dist/makers/index.js.map +1 -0
  31. package/dist/makers/resolve.d.ts +8 -0
  32. package/dist/makers/resolve.d.ts.map +1 -0
  33. package/dist/makers/resolve.js +35 -0
  34. package/dist/makers/resolve.js.map +1 -0
  35. package/dist/makers/table.d.ts +136 -0
  36. package/dist/makers/table.d.ts.map +1 -0
  37. package/dist/makers/table.js +175 -0
  38. package/dist/makers/table.js.map +1 -0
  39. package/dist/makers/types.d.ts +35 -0
  40. package/dist/makers/types.d.ts.map +1 -0
  41. package/dist/makers/types.js +2 -0
  42. package/dist/makers/types.js.map +1 -0
  43. package/dist/models/catalog.d.ts +5 -2
  44. package/dist/models/catalog.d.ts.map +1 -1
  45. package/dist/models/catalog.js +11 -6
  46. package/dist/models/catalog.js.map +1 -1
  47. package/dist/models/facts.d.ts +9 -13
  48. package/dist/models/facts.d.ts.map +1 -1
  49. package/dist/models/facts.js +8 -6
  50. package/dist/models/facts.js.map +1 -1
  51. package/dist/models/index.d.ts +1 -1
  52. package/dist/models/index.d.ts.map +1 -1
  53. package/dist/models/index.js +1 -1
  54. package/dist/models/index.js.map +1 -1
  55. package/dist/probes/table.d.ts +6 -6
  56. package/dist/probes/table.d.ts.map +1 -1
  57. package/dist/probes/table.js +10 -10
  58. package/dist/probes/table.js.map +1 -1
  59. package/dist/registry.d.ts +11 -8
  60. package/dist/registry.d.ts.map +1 -1
  61. package/dist/registry.js +6 -4
  62. package/dist/registry.js.map +1 -1
  63. package/dist/rules/probe-ladder.d.ts.map +1 -1
  64. package/dist/rules/probe-ladder.js +7 -7
  65. package/dist/rules/probe-ladder.js.map +1 -1
  66. package/dist/rules/response-metadata.d.ts.map +1 -1
  67. package/dist/rules/response-metadata.js +5 -33
  68. package/dist/rules/response-metadata.js.map +1 -1
  69. package/dist/rules/token-truth.d.ts +1 -1
  70. package/dist/rules/token-truth.d.ts.map +1 -1
  71. package/dist/rules/token-truth.js.map +1 -1
  72. package/dist/rules/tokenizer-fingerprint.d.ts.map +1 -1
  73. package/dist/rules/tokenizer-fingerprint.js +3 -3
  74. package/dist/rules/tokenizer-fingerprint.js.map +1 -1
  75. package/dist/types.d.ts +4 -1
  76. package/dist/types.d.ts.map +1 -1
  77. package/dist/vendors/anthropic.d.ts +1 -8
  78. package/dist/vendors/anthropic.d.ts.map +1 -1
  79. package/dist/vendors/anthropic.js +1 -11
  80. package/dist/vendors/anthropic.js.map +1 -1
  81. package/dist/vendors/gemini.d.ts +1 -8
  82. package/dist/vendors/gemini.d.ts.map +1 -1
  83. package/dist/vendors/gemini.js +1 -9
  84. package/dist/vendors/gemini.js.map +1 -1
  85. package/dist/vendors/openai.d.ts +1 -8
  86. package/dist/vendors/openai.d.ts.map +1 -1
  87. package/dist/vendors/openai.js +1 -9
  88. package/dist/vendors/openai.js.map +1 -1
  89. package/dist/vendors/shape.d.ts +7 -0
  90. package/dist/vendors/shape.d.ts.map +1 -0
  91. package/dist/vendors/shape.js +34 -0
  92. package/dist/vendors/shape.js.map +1 -0
  93. package/dist/vendors/table.d.ts +3 -24
  94. package/dist/vendors/table.d.ts.map +1 -1
  95. package/dist/vendors/table.js +1 -0
  96. package/dist/vendors/table.js.map +1 -1
  97. package/dist/vendors/types.d.ts +3 -15
  98. package/dist/vendors/types.d.ts.map +1 -1
  99. package/dist/vendors/types.js.map +1 -1
  100. package/dist/verify.d.ts +8 -5
  101. package/dist/verify.d.ts.map +1 -1
  102. package/dist/verify.js +17 -11
  103. package/dist/verify.js.map +1 -1
  104. package/package.json +8 -2
@@ -0,0 +1,35 @@
1
+ import { CLOUD_HOST_PATTERNS } from "../identity/patterns";
2
+ import { globMatches, normalizeModelId } from "../models/facts";
3
+ import { MAKERS, makerFor } from "./table";
4
+ /** The maker with its foreign vocabulary: every other maker's words, minus cloud hosts and its own. */
5
+ export function resolveMaker(makers, id) {
6
+ const maker = makerFor(makers, id);
7
+ if (!maker)
8
+ throw new TypeError(`unknown maker "${id}"`);
9
+ const own = new Set([
10
+ ...maker.home,
11
+ ...maker.modelNames,
12
+ ...(maker.cloudModelNames ?? []),
13
+ ]);
14
+ const foreign = new Set();
15
+ for (const other of makers) {
16
+ if (other.id === maker.id)
17
+ continue;
18
+ for (const w of [...other.home, ...other.modelNames])
19
+ if (!own.has(w) && !CLOUD_HOST_PATTERNS.includes(w))
20
+ foreign.add(w);
21
+ }
22
+ return {
23
+ ...maker,
24
+ cloudModelNames: maker.cloudModelNames ?? [],
25
+ foreign: [...foreign],
26
+ };
27
+ }
28
+ export function makerForModel(model, makers = MAKERS) {
29
+ const id = normalizeModelId(model);
30
+ for (const m of makers)
31
+ if (m.models.some((p) => globMatches(id, p)))
32
+ return m.id;
33
+ return null;
34
+ }
35
+ //# sourceMappingURL=resolve.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"resolve.js","sourceRoot":"","sources":["../../src/makers/resolve.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,WAAW,EAAE,gBAAgB,EAAE,MAAM,iBAAiB,CAAC;AAChE,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAgB,MAAM,SAAS,CAAC;AAGzD,uGAAuG;AACvG,MAAM,UAAU,YAAY,CAC1B,MAA2B,EAC3B,EAAK;IAEL,MAAM,KAAK,GAAG,QAAQ,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;IACnC,IAAI,CAAC,KAAK;QAAE,MAAM,IAAI,SAAS,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;IACzD,MAAM,GAAG,GAAG,IAAI,GAAG,CAAC;QAClB,GAAG,KAAK,CAAC,IAAI;QACb,GAAG,KAAK,CAAC,UAAU;QACnB,GAAG,CAAC,KAAK,CAAC,eAAe,IAAI,EAAE,CAAC;KACjC,CAAC,CAAC;IACH,MAAM,OAAO,GAAG,IAAI,GAAG,EAAU,CAAC;IAClC,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE,CAAC;QAC3B,IAAI,KAAK,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE;YAAE,SAAS;QACpC,KAAK,MAAM,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,IAAI,EAAE,GAAG,KAAK,CAAC,UAAU,CAAC;YAClD,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC,CAAC,IAAI,CAAC,mBAAmB,CAAC,QAAQ,CAAC,CAAC,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxE,CAAC;IACD,OAAO;QACL,GAAG,KAAK;QACR,eAAe,EAAE,KAAK,CAAC,eAAe,IAAI,EAAE;QAC5C,OAAO,EAAE,CAAC,GAAG,OAAO,CAAC;KACtB,CAAC;AACJ,CAAC;AAQD,MAAM,UAAU,aAAa,CAC3B,KAAa,EACb,MAAM,GAA6B,MAAM;IAEzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,KAAK,MAAM,CAAC,IAAI,MAAM;QACpB,IAAI,CAAC,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAE,OAAO,CAAC,CAAC,EAAE,CAAC;IAC5D,OAAO,IAAI,CAAC;AACd,CAAC"}
@@ -0,0 +1,136 @@
1
+ import type { Maker } from "./types";
2
+ export declare const MAKERS: readonly [{
3
+ readonly id: "anthropic";
4
+ readonly name: "Anthropic";
5
+ readonly wire: "anthropic";
6
+ readonly models: readonly ["*claude*"];
7
+ readonly home: readonly ["anthropic"];
8
+ readonly modelNames: readonly ["claude", "anthropic"];
9
+ readonly cloudModelNames: readonly ["amazon q", "q developer", "kiro"];
10
+ readonly acceptsCloudHost: true;
11
+ readonly tiers: readonly ["opus", "sonnet", "haiku", "fable"];
12
+ readonly cjkNative: false;
13
+ }, {
14
+ readonly id: "openai";
15
+ readonly name: "OpenAI";
16
+ readonly wire: "openai";
17
+ readonly models: readonly ["gpt-*", "chatgpt*", "o1*", "o3*", "o4*"];
18
+ readonly home: readonly ["openai"];
19
+ readonly modelNames: readonly ["gpt", "chatgpt", "openai", "o1", "o3", "o4"];
20
+ readonly acceptsCloudHost: false;
21
+ readonly tiers: null;
22
+ readonly cjkNative: false;
23
+ }, {
24
+ readonly id: "google";
25
+ readonly name: "Google";
26
+ readonly wire: "gemini";
27
+ readonly models: readonly ["*gemini*", "gemma*"];
28
+ readonly home: readonly ["google", "deepmind"];
29
+ readonly modelNames: readonly ["gemini", "google", "gemma"];
30
+ readonly acceptsCloudHost: false;
31
+ readonly tiers: null;
32
+ readonly cjkNative: false;
33
+ }, {
34
+ readonly id: "deepseek";
35
+ readonly name: "DeepSeek";
36
+ readonly wire: "openai";
37
+ readonly models: readonly ["deepseek*"];
38
+ readonly home: readonly ["deepseek", "deepseek-ai", "深度求索"];
39
+ readonly modelNames: readonly ["deepseek"];
40
+ readonly acceptsCloudHost: false;
41
+ readonly tiers: null;
42
+ readonly cjkNative: true;
43
+ }, {
44
+ readonly id: "moonshot";
45
+ readonly name: "Moonshot AI";
46
+ readonly wire: "openai";
47
+ readonly models: readonly ["kimi*", "moonshot*"];
48
+ readonly home: readonly ["moonshot", "moonshotai", "月之暗面"];
49
+ readonly modelNames: readonly ["kimi"];
50
+ readonly acceptsCloudHost: false;
51
+ readonly tiers: null;
52
+ readonly cjkNative: true;
53
+ }, {
54
+ readonly id: "zhipu";
55
+ readonly name: "Zhipu AI";
56
+ readonly wire: "openai";
57
+ readonly models: readonly ["glm*", "chatglm*"];
58
+ readonly home: readonly ["zhipu", "zhipuai", "z.ai", "智谱"];
59
+ readonly modelNames: readonly ["glm", "chatglm"];
60
+ readonly acceptsCloudHost: false;
61
+ readonly tiers: null;
62
+ readonly cjkNative: true;
63
+ }, {
64
+ readonly id: "minimax";
65
+ readonly name: "MiniMax";
66
+ readonly wire: "openai";
67
+ readonly models: readonly ["minimax*", "abab*"];
68
+ readonly home: readonly ["minimax", "minimaxai", "稀宇"];
69
+ readonly modelNames: readonly ["minimax", "abab"];
70
+ readonly acceptsCloudHost: false;
71
+ readonly tiers: null;
72
+ readonly cjkNative: true;
73
+ }, {
74
+ readonly id: "xiaomi";
75
+ readonly name: "Xiaomi";
76
+ readonly wire: "openai";
77
+ readonly models: readonly ["mimo*"];
78
+ readonly home: readonly ["xiaomi", "小米"];
79
+ readonly modelNames: readonly ["mimo"];
80
+ readonly acceptsCloudHost: false;
81
+ readonly tiers: null;
82
+ readonly cjkNative: true;
83
+ }, {
84
+ readonly id: "mistral";
85
+ readonly name: "Mistral AI";
86
+ readonly wire: "openai";
87
+ readonly models: readonly ["mistral*", "mixtral*", "codestral*", "magistral*", "devstral*", "ministral*", "pixtral*"];
88
+ readonly home: readonly ["mistral", "mistralai"];
89
+ readonly modelNames: readonly ["mistral", "mixtral", "codestral", "magistral", "devstral", "ministral", "pixtral"];
90
+ readonly acceptsCloudHost: false;
91
+ readonly tiers: null;
92
+ readonly cjkNative: false;
93
+ }, {
94
+ readonly id: "alibaba";
95
+ readonly name: "Alibaba";
96
+ readonly wire: "openai";
97
+ readonly models: readonly ["qwen*", "qwq*", "qvq*"];
98
+ readonly home: readonly ["alibaba", "qwen", "tongyi", "阿里", "通义"];
99
+ readonly modelNames: readonly ["qwen", "qwq", "qvq"];
100
+ readonly acceptsCloudHost: false;
101
+ readonly tiers: null;
102
+ readonly cjkNative: true;
103
+ }, {
104
+ readonly id: "meta";
105
+ readonly name: "Meta";
106
+ readonly wire: "openai";
107
+ readonly models: readonly ["*llama*"];
108
+ readonly home: readonly ["meta", "facebook"];
109
+ readonly modelNames: readonly ["llama"];
110
+ readonly acceptsCloudHost: false;
111
+ readonly tiers: null;
112
+ readonly cjkNative: false;
113
+ }, {
114
+ readonly id: "xai";
115
+ readonly name: "xAI";
116
+ readonly wire: "openai";
117
+ readonly models: readonly ["grok*"];
118
+ readonly home: readonly ["xai", "x.ai"];
119
+ readonly modelNames: readonly ["grok"];
120
+ readonly acceptsCloudHost: false;
121
+ readonly tiers: null;
122
+ readonly cjkNative: false;
123
+ }, {
124
+ readonly id: "tencent";
125
+ readonly name: "Tencent";
126
+ readonly wire: "openai";
127
+ readonly models: readonly ["hunyuan*"];
128
+ readonly home: readonly ["tencent", "hunyuan", "腾讯", "混元"];
129
+ readonly modelNames: readonly ["hunyuan", "hy"];
130
+ readonly acceptsCloudHost: false;
131
+ readonly tiers: null;
132
+ readonly cjkNative: true;
133
+ }];
134
+ export type MakerId = (typeof MAKERS)[number]["id"];
135
+ export declare function makerFor<M extends string>(makers: readonly Maker<M>[], id: string): Maker<M> | undefined;
136
+ //# sourceMappingURL=table.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.d.ts","sourceRoot":"","sources":["../../src/makers/table.ts"],"names":[],"mappings":"AACA,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAKrC,eAAO,MAAM,MAAM;iBAEX,WAAW;mBACT,WAAW;mBACX,WAAW;;;;;;;;;iBAYb,QAAQ;mBACN,QAAQ;mBACR,QAAQ;;;;;;;;iBASV,QAAQ;mBACN,QAAQ;mBACR,QAAQ;;;;;;;;iBASV,UAAU;mBACR,UAAU;mBACV,QAAQ;;;;;;;;iBASV,UAAU;mBACR,aAAa;mBACb,QAAQ;;;;;;;;iBASV,OAAO;mBACL,UAAU;mBACV,QAAQ;;;;;;;;iBASV,SAAS;mBACP,SAAS;mBACT,QAAQ;;;;;;;;iBASV,QAAQ;mBACN,QAAQ;mBACR,QAAQ;;;;;;;;iBASV,SAAS;mBACP,YAAY;mBACZ,QAAQ;;;;;;;;iBAyBV,SAAS;mBACP,SAAS;mBACT,QAAQ;;;;;;;;iBASV,MAAM;mBACJ,MAAM;mBACN,QAAQ;;;;;;;;iBASV,KAAK;mBACH,KAAK;mBACL,QAAQ;;;;;;;;iBASV,SAAS;mBACP,SAAS;mBACT,QAAQ;;;;;;;EAUmB,CAAC;AAEtC,MAAM,MAAM,OAAO,GAAG,CAAC,OAAO,MAAM,CAAC,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,CAAC;AAKpD,wBAAgB,QAAQ,CAAC,CAAC,SAAS,MAAM,EACvC,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,EAC3B,EAAE,EAAE,MAAM,GACT,KAAK,CAAC,CAAC,CAAC,GAAG,SAAS,CAEtB"}
@@ -0,0 +1,175 @@
1
+ // Every word is matched on word boundaries (a digit or hyphen may follow, a
2
+ // letter may not), so "meta" never hits "metadata" and "o3" still hits "o3-mini".
3
+ // "google" is a cloud host, not a maker word for anyone else's foreign list.
4
+ export const MAKERS = [
5
+ {
6
+ id: "anthropic",
7
+ name: "Anthropic",
8
+ wire: "anthropic",
9
+ models: ["*claude*"],
10
+ home: ["anthropic"],
11
+ modelNames: ["claude", "anthropic"],
12
+ cloudModelNames: ["amazon q", "q developer", "kiro"],
13
+ acceptsCloudHost: true,
14
+ // `fable` is load-bearing: without it tierOf() returns null for
15
+ // claude-fable-5 and a relay serving opus under a fable label is never checked.
16
+ tiers: ["opus", "sonnet", "haiku", "fable"],
17
+ cjkNative: false,
18
+ },
19
+ {
20
+ id: "openai",
21
+ name: "OpenAI",
22
+ wire: "openai",
23
+ models: ["gpt-*", "chatgpt*", "o1*", "o3*", "o4*"],
24
+ home: ["openai"],
25
+ modelNames: ["gpt", "chatgpt", "openai", "o1", "o3", "o4"],
26
+ acceptsCloudHost: false,
27
+ tiers: null,
28
+ cjkNative: false,
29
+ },
30
+ {
31
+ id: "google",
32
+ name: "Google",
33
+ wire: "gemini",
34
+ models: ["*gemini*", "gemma*"],
35
+ home: ["google", "deepmind"],
36
+ modelNames: ["gemini", "google", "gemma"],
37
+ acceptsCloudHost: false,
38
+ tiers: null,
39
+ cjkNative: false,
40
+ },
41
+ {
42
+ id: "deepseek",
43
+ name: "DeepSeek",
44
+ wire: "openai",
45
+ models: ["deepseek*"],
46
+ home: ["deepseek", "deepseek-ai", "深度求索"],
47
+ modelNames: ["deepseek"],
48
+ acceptsCloudHost: false,
49
+ tiers: null,
50
+ cjkNative: true,
51
+ },
52
+ {
53
+ id: "moonshot",
54
+ name: "Moonshot AI",
55
+ wire: "openai",
56
+ models: ["kimi*", "moonshot*"],
57
+ home: ["moonshot", "moonshotai", "月之暗面"],
58
+ modelNames: ["kimi"],
59
+ acceptsCloudHost: false,
60
+ tiers: null,
61
+ cjkNative: true,
62
+ },
63
+ {
64
+ id: "zhipu",
65
+ name: "Zhipu AI",
66
+ wire: "openai",
67
+ models: ["glm*", "chatglm*"],
68
+ home: ["zhipu", "zhipuai", "z.ai", "智谱"],
69
+ modelNames: ["glm", "chatglm"],
70
+ acceptsCloudHost: false,
71
+ tiers: null,
72
+ cjkNative: true,
73
+ },
74
+ {
75
+ id: "minimax",
76
+ name: "MiniMax",
77
+ wire: "openai",
78
+ models: ["minimax*", "abab*"],
79
+ home: ["minimax", "minimaxai", "稀宇"],
80
+ modelNames: ["minimax", "abab"],
81
+ acceptsCloudHost: false,
82
+ tiers: null,
83
+ cjkNative: true,
84
+ },
85
+ {
86
+ id: "xiaomi",
87
+ name: "Xiaomi",
88
+ wire: "openai",
89
+ models: ["mimo*"],
90
+ home: ["xiaomi", "小米"],
91
+ modelNames: ["mimo"],
92
+ acceptsCloudHost: false,
93
+ tiers: null,
94
+ cjkNative: true,
95
+ },
96
+ {
97
+ id: "mistral",
98
+ name: "Mistral AI",
99
+ wire: "openai",
100
+ models: [
101
+ "mistral*",
102
+ "mixtral*",
103
+ "codestral*",
104
+ "magistral*",
105
+ "devstral*",
106
+ "ministral*",
107
+ "pixtral*",
108
+ ],
109
+ home: ["mistral", "mistralai"],
110
+ modelNames: [
111
+ "mistral",
112
+ "mixtral",
113
+ "codestral",
114
+ "magistral",
115
+ "devstral",
116
+ "ministral",
117
+ "pixtral",
118
+ ],
119
+ acceptsCloudHost: false,
120
+ tiers: null,
121
+ cjkNative: false,
122
+ },
123
+ {
124
+ id: "alibaba",
125
+ name: "Alibaba",
126
+ wire: "openai",
127
+ models: ["qwen*", "qwq*", "qvq*"],
128
+ home: ["alibaba", "qwen", "tongyi", "阿里", "通义"],
129
+ modelNames: ["qwen", "qwq", "qvq"],
130
+ acceptsCloudHost: false,
131
+ tiers: null,
132
+ cjkNative: true,
133
+ },
134
+ {
135
+ id: "meta",
136
+ name: "Meta",
137
+ wire: "openai",
138
+ models: ["*llama*"],
139
+ home: ["meta", "facebook"],
140
+ modelNames: ["llama"],
141
+ acceptsCloudHost: false,
142
+ tiers: null,
143
+ cjkNative: false,
144
+ },
145
+ {
146
+ id: "xai",
147
+ name: "xAI",
148
+ wire: "openai",
149
+ models: ["grok*"],
150
+ home: ["xai", "x.ai"],
151
+ modelNames: ["grok"],
152
+ acceptsCloudHost: false,
153
+ tiers: null,
154
+ cjkNative: false,
155
+ },
156
+ {
157
+ id: "tencent",
158
+ name: "Tencent",
159
+ wire: "openai",
160
+ // No `hy*` glob: it would claim hybrid-* and hyper-* ids; a consumer pins
161
+ // hy4-preview through modelFacts.
162
+ models: ["hunyuan*"],
163
+ home: ["tencent", "hunyuan", "腾讯", "混元"],
164
+ modelNames: ["hunyuan", "hy"],
165
+ acceptsCloudHost: false,
166
+ tiers: null,
167
+ cjkNative: true,
168
+ },
169
+ ];
170
+ // A native wire that names no adapter is a typo; fail the build, not the run.
171
+ void MAKERS;
172
+ export function makerFor(makers, id) {
173
+ return makers.find((m) => m.id === id);
174
+ }
175
+ //# sourceMappingURL=table.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"table.js","sourceRoot":"","sources":["../../src/makers/table.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,35 @@
1
+ /**
2
+ * A maker is who trained a model; a wire is how an endpoint sells it. The
3
+ * vocabulary a genuine model uses for itself belongs to the maker: Claude sold
4
+ * over an OpenAI-shaped relay still says "anthropic", and a DeepSeek over the
5
+ * same wire says "deepseek".
6
+ */
7
+ export type Maker<Id extends string = string> = {
8
+ id: Id;
9
+ /** Display name. */
10
+ name: string;
11
+ /** Wire this maker's models are natively sold on; a VendorId for the built-ins. */
12
+ wire: string;
13
+ /** Globs over the normalised model id that name this maker's models. */
14
+ models: readonly string[];
15
+ /** Words a genuine model uses for its maker; matched on word boundaries. */
16
+ home: readonly string[];
17
+ /** Words its model names contain. */
18
+ modelNames: readonly string[];
19
+ /** Model names a cloud host sells under its own badge (Amazon Q over Claude). */
20
+ cloudModelNames?: readonly string[];
21
+ /** A cloud host named as the maker still counts as home (Bedrock is Claude). */
22
+ acceptsCloudHost: boolean;
23
+ /** Tier vocabulary for tier checks; null when the maker sells no tiers. */
24
+ tiers: readonly string[] | null;
25
+ /** Trains primarily on Chinese text: CJK in a reply is a language preference, not a substitution tell. */
26
+ cjkNative: boolean;
27
+ };
28
+ /** A maker plus the vocabulary derived from every other maker in the registry. */
29
+ export type ResolvedMaker<Id extends string = string> = Maker<Id> & {
30
+ /** Words that name a competitor. */
31
+ foreign: readonly string[];
32
+ cloudModelNames: readonly string[];
33
+ };
34
+ export declare const defineMaker: <const M extends Maker>(maker: M) => M;
35
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/makers/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AACH,MAAM,MAAM,KAAK,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI;IAC9C,EAAE,EAAE,EAAE,CAAC;IACP,oBAAoB;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,mFAAmF;IACnF,IAAI,EAAE,MAAM,CAAC;IACb,wEAAwE;IACxE,MAAM,EAAE,SAAS,MAAM,EAAE,CAAC;IAC1B,4EAA4E;IAC5E,IAAI,EAAE,SAAS,MAAM,EAAE,CAAC;IACxB,qCAAqC;IACrC,UAAU,EAAE,SAAS,MAAM,EAAE,CAAC;IAC9B,iFAAiF;IACjF,eAAe,CAAC,EAAE,SAAS,MAAM,EAAE,CAAC;IACpC,gFAAgF;IAChF,gBAAgB,EAAE,OAAO,CAAC;IAC1B,2EAA2E;IAC3E,KAAK,EAAE,SAAS,MAAM,EAAE,GAAG,IAAI,CAAC;IAChC,0GAA0G;IAC1G,SAAS,EAAE,OAAO,CAAC;CACpB,CAAC;AAEF,kFAAkF;AAClF,MAAM,MAAM,aAAa,CAAC,EAAE,SAAS,MAAM,GAAG,MAAM,IAAI,KAAK,CAAC,EAAE,CAAC,GAAG;IAClE,oCAAoC;IACpC,OAAO,EAAE,SAAS,MAAM,EAAE,CAAC;IAC3B,eAAe,EAAE,SAAS,MAAM,EAAE,CAAC;CACpC,CAAC;AAEF,eAAO,MAAM,WAAW,GAAI,KAAK,CAAC,CAAC,SAAS,KAAK,SAAS,CAAC,KAAG,CAAU,CAAC"}
@@ -0,0 +1,2 @@
1
+ export const defineMaker = (maker) => maker;
2
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/makers/types.ts"],"names":[],"mappings":"AAmCA,MAAM,CAAC,MAAM,WAAW,GAAG,CAAwB,KAAQ,EAAK,EAAE,CAAC,KAAK,CAAC"}
@@ -1,7 +1,10 @@
1
+ import { makerForModel } from "../makers/resolve";
1
2
  import { type VendorId } from "../vendors/table";
2
3
  /** Models the tester offers by default, per wire. */
3
4
  export declare const CURATED_MODELS: Record<VendorId, readonly string[]>;
4
- export declare function vendorForModel(model: string): VendorId | null;
5
- /** Display vendor for a row: the model's maker when known, else the wire's. */
5
+ export { makerForModel };
6
+ /** The wire a model's maker sells it on natively; null when the maker is unknown. */
7
+ export declare function wireForModel(model: string): VendorId | null;
8
+ /** Display vendor for a row: the model's maker when known, else the wire's name. */
6
9
  export declare function vendorForRow(vendor: VendorId, model?: string): string;
7
10
  //# sourceMappingURL=catalog.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/models/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAGrE,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAU9D,CAAC;AAEF,wBAAgB,cAAc,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAE7D;AAED,+EAA+E;AAC/E,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAGrE"}
1
+ {"version":3,"file":"catalog.d.ts","sourceRoot":"","sources":["../../src/models/catalog.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAsB,KAAK,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAErE,qDAAqD;AACrD,eAAO,MAAM,cAAc,EAAE,MAAM,CAAC,QAAQ,EAAE,SAAS,MAAM,EAAE,CAU9D,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,qFAAqF;AACrF,wBAAgB,YAAY,CAAC,KAAK,EAAE,MAAM,GAAG,QAAQ,GAAG,IAAI,CAG3D;AAED,oFAAoF;AACpF,wBAAgB,YAAY,CAAC,MAAM,EAAE,QAAQ,EAAE,KAAK,CAAC,EAAE,MAAM,GAAG,MAAM,CAMrE"}
@@ -1,5 +1,6 @@
1
+ import { MAKERS } from "../makers/table";
2
+ import { makerForModel } from "../makers/resolve";
1
3
  import { VENDORS, vendorFor } from "../vendors/table";
2
- import { resolveModelFacts } from "./facts";
3
4
  /** Models the tester offers by default, per wire. */
4
5
  export const CURATED_MODELS = {
5
6
  anthropic: [
@@ -12,12 +13,16 @@ export const CURATED_MODELS = {
12
13
  openai: ["gpt-5.5", "gpt-5.4", "gpt-5.1", "o3", "o4-mini"],
13
14
  gemini: ["gemini-3.1-pro-preview", "gemini-3.1-flash", "gemini-2.5-pro"],
14
15
  };
15
- export function vendorForModel(model) {
16
- return resolveModelFacts(model).vendor;
16
+ export { makerForModel };
17
+ /** The wire a model's maker sells it on natively; null when the maker is unknown. */
18
+ export function wireForModel(model) {
19
+ const maker = makerForModel(model);
20
+ return MAKERS.find((m) => m.id === maker)?.wire ?? null;
17
21
  }
18
- /** Display vendor for a row: the model's maker when known, else the wire's. */
22
+ /** Display vendor for a row: the model's maker when known, else the wire's name. */
19
23
  export function vendorForRow(vendor, model) {
20
- const id = (model ? vendorForModel(model) : null) ?? vendor;
21
- return vendorFor(VENDORS, id)?.vendorName ?? id;
24
+ return ((model ? makerForModel(model) : null) ??
25
+ vendorFor(VENDORS, vendor)?.vendorName ??
26
+ vendor);
22
27
  }
23
28
  //# sourceMappingURL=catalog.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/models/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AACrE,OAAO,EAAE,iBAAiB,EAAE,MAAM,SAAS,CAAC;AAE5C,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAwC;IACjE,SAAS,EAAE;QACT,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;KACnB;IACD,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IAC1D,MAAM,EAAE,CAAC,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;CACzE,CAAC;AAEF,MAAM,UAAU,cAAc,CAAC,KAAa;IAC1C,OAAO,iBAAiB,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC;AACzC,CAAC;AAED,+EAA+E;AAC/E,MAAM,UAAU,YAAY,CAAC,MAAgB,EAAE,KAAc;IAC3D,MAAM,EAAE,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,cAAc,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,IAAI,MAAM,CAAC;IAC5D,OAAO,SAAS,CAAC,OAAO,EAAE,EAAE,CAAC,EAAE,UAAU,IAAI,EAAE,CAAC;AAClD,CAAC"}
1
+ {"version":3,"file":"catalog.js","sourceRoot":"","sources":["../../src/models/catalog.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAClD,OAAO,EAAE,OAAO,EAAE,SAAS,EAAiB,MAAM,kBAAkB,CAAC;AAErE,qDAAqD;AACrD,MAAM,CAAC,MAAM,cAAc,GAAwC;IACjE,SAAS,EAAE;QACT,iBAAiB;QACjB,iBAAiB;QACjB,iBAAiB;QACjB,mBAAmB;QACnB,kBAAkB;KACnB;IACD,MAAM,EAAE,CAAC,SAAS,EAAE,SAAS,EAAE,SAAS,EAAE,IAAI,EAAE,SAAS,CAAC;IAC1D,MAAM,EAAE,CAAC,wBAAwB,EAAE,kBAAkB,EAAE,gBAAgB,CAAC;CACzE,CAAC;AAEF,OAAO,EAAE,aAAa,EAAE,CAAC;AAEzB,qFAAqF;AACrF,MAAM,UAAU,YAAY,CAAC,KAAa;IACxC,MAAM,KAAK,GAAG,aAAa,CAAC,KAAK,CAAC,CAAC;IACnC,OAAO,MAAM,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,KAAK,KAAK,CAAC,EAAE,IAAI,IAAI,IAAI,CAAC;AAC1D,CAAC;AAED,oFAAoF;AACpF,MAAM,UAAU,YAAY,CAAC,MAAgB,EAAE,KAAc;IAC3D,OAAO,CACL,CAAC,KAAK,CAAC,CAAC,CAAC,aAAa,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;QACrC,SAAS,CAAC,OAAO,EAAE,MAAM,CAAC,EAAE,UAAU;QACtC,MAAM,CACP,CAAC;AACJ,CAAC"}
@@ -7,12 +7,13 @@
7
7
  * so a narrow entry (opus-4-7 thinks adaptively) sits above the broad one
8
8
  * (every claude belongs to anthropic) and both apply.
9
9
  */
10
- import type { VendorId } from "../vendors/table";
10
+ import { type MakerId } from "../makers/table";
11
+ import type { Maker } from "../makers/types";
11
12
  export type ThinkingMode = "adaptive" | "extended" | "none";
12
13
  export type TokenizerGeneration = "claude-v1" | "claude-v2";
13
- export type ModelFacts = {
14
- /** Vendor that trained it; null when the id names nothing the table knows. */
15
- vendor: VendorId | null;
14
+ export type ModelFacts<M extends string = MakerId> = {
15
+ /** Who trained it; null when the id names no maker the tables know. */
16
+ maker: M | null;
16
17
  thinking: ThinkingMode;
17
18
  tokenizer: TokenizerGeneration | null;
18
19
  /** Cannot switch reasoning off (a reply with no thought tokens is a cheaper tier). */
@@ -20,10 +21,10 @@ export type ModelFacts = {
20
21
  /** Reasoning models need room for hidden thought before the visible answer. */
21
22
  minOutputTokens: number | null;
22
23
  };
23
- export type FactsEntry = {
24
+ export type FactsEntry<M extends string = MakerId> = {
24
25
  /** Glob(s) over the normalised id: `*` is the only wildcard, no `*` means exact. */
25
26
  match: string | readonly string[];
26
- } & Partial<ModelFacts>;
27
+ } & Partial<ModelFacts<M>>;
27
28
  /** Lowercase, `.` and `_` to `-`, any `vendor/` or `pool/` prefix stripped. */
28
29
  export declare const normalizeModelId: (model: string) => string;
29
30
  export declare function globMatches(name: string, pattern: string): boolean;
@@ -36,21 +37,16 @@ export declare const MODEL_FACTS: readonly [{
36
37
  readonly thinking: "extended";
37
38
  }, {
38
39
  readonly match: "*claude*";
39
- readonly vendor: "anthropic";
40
40
  readonly tokenizer: "claude-v1";
41
41
  }, {
42
42
  readonly match: "gemini-2-5-pro*";
43
43
  readonly alwaysThinks: true;
44
- }, {
45
- readonly match: "*gemini*";
46
- readonly vendor: "gemini";
47
44
  }, {
48
45
  readonly match: readonly ["gpt-5*", "o1*", "o2*", "o3*", "o4*", "o5*", "o6*", "o7*", "o8*", "o9*"];
49
46
  readonly minOutputTokens: 2000;
50
- }, {
51
- readonly match: readonly ["gpt-*", "o1*", "o3*", "o4*", "chatgpt*"];
52
- readonly vendor: "openai";
53
47
  }];
54
48
  export declare const defineModelFacts: <const F extends readonly FactsEntry[]>(facts: F) => F;
49
+ /** Layered first match per field: consumer entries, the table, then the maker globs. */
55
50
  export declare function resolveModelFacts(model: string, extra?: readonly FactsEntry[]): ModelFacts;
51
+ export declare function resolveModelFacts<M extends string>(model: string, extra: readonly FactsEntry<M>[], makers: readonly Maker<M>[]): ModelFacts<M>;
56
52
  //# sourceMappingURL=facts.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/models/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,kBAAkB,CAAC;AAEjD,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5D,MAAM,MAAM,UAAU,GAAG;IACvB,8EAA8E;IAC9E,MAAM,EAAE,QAAQ,GAAG,IAAI,CAAC;IACxB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,sFAAsF;IACtF,YAAY,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,UAAU,GAAG;IACvB,oFAAoF;IACpF,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;AAExB,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,MACwB,CAAC;AAI1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMlE;AAED,eAAO,MAAM,WAAW;;uBAGV,UAAU;wBACT,WAAW;;;uBAWZ,UAAU;;oBAEb,UAAU;qBAAU,WAAW;wBAAa,WAAW;;oBACvD,iBAAiB;;;oBACjB,UAAU;qBAAU,QAAQ;;;8BAclB,IAAI;;;qBAEsC,QAAQ;EAC7B,CAAC;AAE3C,eAAO,MAAM,gBAAgB,GAAI,KAAK,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,SAC7D,CAAC,KACP,CAAU,CAAC;AA8Bd,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,GAAE,SAAS,UAAU,EAAO,GAChC,UAAU,CAWZ"}
1
+ {"version":3,"file":"facts.d.ts","sourceRoot":"","sources":["../../src/models/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAU,KAAK,OAAO,EAAE,MAAM,iBAAiB,CAAC;AAEvD,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,iBAAiB,CAAC;AAE7C,MAAM,MAAM,YAAY,GAAG,UAAU,GAAG,UAAU,GAAG,MAAM,CAAC;AAC5D,MAAM,MAAM,mBAAmB,GAAG,WAAW,GAAG,WAAW,CAAC;AAE5D,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;IACnD,uEAAuE;IACvE,KAAK,EAAE,CAAC,GAAG,IAAI,CAAC;IAChB,QAAQ,EAAE,YAAY,CAAC;IACvB,SAAS,EAAE,mBAAmB,GAAG,IAAI,CAAC;IACtC,sFAAsF;IACtF,YAAY,EAAE,OAAO,CAAC;IACtB,+EAA+E;IAC/E,eAAe,EAAE,MAAM,GAAG,IAAI,CAAC;CAChC,CAAC;AAEF,MAAM,MAAM,UAAU,CAAC,CAAC,SAAS,MAAM,GAAG,OAAO,IAAI;IACnD,oFAAoF;IACpF,KAAK,EAAE,MAAM,GAAG,SAAS,MAAM,EAAE,CAAC;CACnC,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;AAE3B,+EAA+E;AAC/E,eAAO,MAAM,gBAAgB,UAAW,MAAM,KAAG,MACwB,CAAC;AAI1E,wBAAgB,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,GAAG,OAAO,CAMlE;AAED,eAAO,MAAM,WAAW;;uBAGV,UAAU;wBACT,WAAW;;;uBAWZ,UAAU;;oBAEb,UAAU;wBAAa,WAAW;;oBAClC,iBAAiB;;;;8BAcP,IAAI;EAEiB,CAAC;AAE3C,eAAO,MAAM,gBAAgB,GAAI,KAAK,CAAC,CAAC,SAAS,SAAS,UAAU,EAAE,SAC7D,CAAC,KACP,CAAU,CAAC;AA8Bd,wFAAwF;AACxF,wBAAgB,iBAAiB,CAC/B,KAAK,EAAE,MAAM,EACb,KAAK,CAAC,EAAE,SAAS,UAAU,EAAE,GAC5B,UAAU,CAAC;AACd,wBAAgB,iBAAiB,CAAC,CAAC,SAAS,MAAM,EAChD,KAAK,EAAE,MAAM,EACb,KAAK,EAAE,SAAS,UAAU,CAAC,CAAC,CAAC,EAAE,EAC/B,MAAM,EAAE,SAAS,KAAK,CAAC,CAAC,CAAC,EAAE,GAC1B,UAAU,CAAC,CAAC,CAAC,CAAC"}
@@ -7,6 +7,8 @@
7
7
  * so a narrow entry (opus-4-7 thinks adaptively) sits above the broad one
8
8
  * (every claude belongs to anthropic) and both apply.
9
9
  */
10
+ import { MAKERS } from "../makers/table";
11
+ import { makerForModel } from "../makers/resolve";
10
12
  /** Lowercase, `.` and `_` to `-`, any `vendor/` or `pool/` prefix stripped. */
11
13
  export const normalizeModelId = (model) => model.trim().toLowerCase().replace(/[._]/g, "-").split("/").pop() ?? "";
12
14
  const escapeRegExp = (s) => s.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
@@ -33,9 +35,8 @@ export const MODEL_FACTS = [
33
35
  ],
34
36
  thinking: "extended",
35
37
  },
36
- { match: "*claude*", vendor: "anthropic", tokenizer: "claude-v1" },
38
+ { match: "*claude*", tokenizer: "claude-v1" },
37
39
  { match: "gemini-2-5-pro*", alwaysThinks: true },
38
- { match: "*gemini*", vendor: "gemini" },
39
40
  {
40
41
  match: [
41
42
  "gpt-5*",
@@ -51,18 +52,17 @@ export const MODEL_FACTS = [
51
52
  ],
52
53
  minOutputTokens: 2000,
53
54
  },
54
- { match: ["gpt-*", "o1*", "o3*", "o4*", "chatgpt*"], vendor: "openai" },
55
55
  ];
56
56
  export const defineModelFacts = (facts) => facts;
57
57
  const DEFAULTS = {
58
- vendor: null,
58
+ maker: null,
59
59
  thinking: "none",
60
60
  tokenizer: null,
61
61
  alwaysThinks: false,
62
62
  minOutputTokens: null,
63
63
  };
64
64
  const FACT_KEYS = [
65
- "vendor",
65
+ "maker",
66
66
  "thinking",
67
67
  "tokenizer",
68
68
  "alwaysThinks",
@@ -75,7 +75,7 @@ function take(out, entry, key, seen) {
75
75
  out[key] = v;
76
76
  seen.add(key);
77
77
  }
78
- export function resolveModelFacts(model, extra = []) {
78
+ export function resolveModelFacts(model, extra = [], makers = MAKERS) {
79
79
  const id = normalizeModelId(model);
80
80
  const out = { ...DEFAULTS };
81
81
  const seen = new Set();
@@ -86,6 +86,8 @@ export function resolveModelFacts(model, extra = []) {
86
86
  for (const key of FACT_KEYS)
87
87
  take(out, entry, key, seen);
88
88
  }
89
+ if (!seen.has("maker"))
90
+ out.maker = makerForModel(id, makers);
89
91
  return out;
90
92
  }
91
93
  //# sourceMappingURL=facts.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/models/facts.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"facts.js","sourceRoot":"","sources":["../../src/models/facts.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;AAEH,OAAO,EAAE,MAAM,EAAgB,MAAM,iBAAiB,CAAC;AACvD,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAsBlD,+EAA+E;AAC/E,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAAC,KAAa,EAAU,EAAE,CACxD,KAAK,CAAC,IAAI,EAAE,CAAC,WAAW,EAAE,CAAC,OAAO,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,EAAE,IAAI,EAAE,CAAC;AAE1E,MAAM,YAAY,GAAG,CAAC,CAAS,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,qBAAqB,EAAE,MAAM,CAAC,CAAC;AAE7E,MAAM,UAAU,WAAW,CAAC,IAAY,EAAE,OAAe;IACvD,MAAM,CAAC,GAAG,OAAO,CAAC,WAAW,EAAE,CAAC;IAChC,IAAI,CAAC,CAAC,CAAC,QAAQ,CAAC,GAAG,CAAC;QAAE,OAAO,IAAI,KAAK,CAAC,CAAC;IACxC,OAAO,IAAI,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,IAAI,CACtE,IAAI,CACL,CAAC;AACJ,CAAC;AAED,MAAM,CAAC,MAAM,WAAW,GAAG;IACzB;QACE,KAAK,EAAE,CAAC,kBAAkB,EAAE,kBAAkB,CAAC;QAC/C,QAAQ,EAAE,UAAU;QACpB,SAAS,EAAE,WAAW;KACvB;IACD;QACE,KAAK,EAAE;YACL,kBAAkB;YAClB,kBAAkB;YAClB,kBAAkB;YAClB,oBAAoB;YACpB,oBAAoB;YACpB,mBAAmB;SACpB;QACD,QAAQ,EAAE,UAAU;KACrB;IACD,EAAE,KAAK,EAAE,UAAU,EAAE,SAAS,EAAE,WAAW,EAAE;IAC7C,EAAE,KAAK,EAAE,iBAAiB,EAAE,YAAY,EAAE,IAAI,EAAE;IAChD;QACE,KAAK,EAAE;YACL,QAAQ;YACR,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;YACL,KAAK;SACN;QACD,eAAe,EAAE,IAAI;KACtB;CACuC,CAAC;AAE3C,MAAM,CAAC,MAAM,gBAAgB,GAAG,CAC9B,KAAQ,EACL,EAAE,CAAC,KAAK,CAAC;AAEd,MAAM,QAAQ,GAAuB;IACnC,KAAK,EAAE,IAAI;IACX,QAAQ,EAAE,MAAM;IAChB,SAAS,EAAE,IAAI;IACf,YAAY,EAAE,KAAK;IACnB,eAAe,EAAE,IAAI;CACtB,CAAC;AAEF,MAAM,SAAS,GAAG;IAChB,OAAO;IACP,UAAU;IACV,WAAW;IACX,cAAc;IACd,iBAAiB;CAC+B,CAAC;AAEnD,SAAS,IAAI,CACX,GAAuB,EACvB,KAAkC,EAClC,GAAM,EACN,IAAmC;IAEnC,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,CAAC;IACrB,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,SAAS;QAAE,OAAO;IAC7C,GAAG,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACb,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;AAChB,CAAC;AAYD,MAAM,UAAU,iBAAiB,CAC/B,KAAa,EACb,KAAK,GAAkC,EAAE,EACzC,MAAM,GAA6B,MAAM;IAEzC,MAAM,EAAE,GAAG,gBAAgB,CAAC,KAAK,CAAC,CAAC;IACnC,MAAM,GAAG,GAAuB,EAAE,GAAG,QAAQ,EAAE,CAAC;IAChD,MAAM,IAAI,GAAG,IAAI,GAAG,EAA4B,CAAC;IACjD,KAAK,MAAM,KAAK,IAAI,CAAC,GAAG,KAAK,EAAE,GAAG,WAAW,CAAC,EAAE,CAAC;QAC/C,MAAM,QAAQ,GACZ,OAAO,KAAK,CAAC,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QAChE,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,WAAW,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;YAAE,SAAS;QACxD,KAAK,MAAM,GAAG,IAAI,SAAS;YAAE,IAAI,CAAC,GAAG,EAAE,KAAK,EAAE,GAAG,EAAE,IAAI,CAAC,CAAC;IAC3D,CAAC;IACD,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,OAAO,CAAC;QAAE,GAAG,CAAC,KAAK,GAAG,aAAa,CAAC,EAAE,EAAE,MAAM,CAAC,CAAC;IAC9D,OAAO,GAAG,CAAC;AACb,CAAC"}
@@ -1,6 +1,6 @@
1
1
  export { MODEL_FACTS, defineModelFacts, globMatches, normalizeModelId, resolveModelFacts, } from "./facts";
2
2
  export type { FactsEntry, ModelFacts, ThinkingMode, TokenizerGeneration, } from "./facts";
3
- export { CURATED_MODELS, vendorForModel, vendorForRow } from "./catalog";
3
+ export { CURATED_MODELS, makerForModel, vendorForRow, wireForModel, } from "./catalog";
4
4
  export { detectSubstitution, modelsMatch } from "./substitution";
5
5
  export { detectServedModelMismatch, detectTierMismatch, tierOf } from "./tiers";
6
6
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AACjB,YAAY,EACV,UAAU,EACV,UAAU,EACV,YAAY,EACZ,mBAAmB,GACpB,MAAM,SAAS,CAAC;AACjB,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
@@ -1,5 +1,5 @@
1
1
  export { MODEL_FACTS, defineModelFacts, globMatches, normalizeModelId, resolveModelFacts, } from "./facts";
2
- export { CURATED_MODELS, vendorForModel, vendorForRow } from "./catalog";
2
+ export { CURATED_MODELS, makerForModel, vendorForRow, wireForModel, } from "./catalog";
3
3
  export { detectSubstitution, modelsMatch } from "./substitution";
4
4
  export { detectServedModelMismatch, detectTierMismatch, tierOf } from "./tiers";
5
5
  //# sourceMappingURL=index.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAOjB,OAAO,EAAE,cAAc,EAAE,cAAc,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AACzE,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/models/index.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,WAAW,EACX,gBAAgB,EAChB,WAAW,EACX,gBAAgB,EAChB,iBAAiB,GAClB,MAAM,SAAS,CAAC;AAOjB,OAAO,EACL,cAAc,EACd,aAAa,EACb,YAAY,EACZ,YAAY,GACb,MAAM,WAAW,CAAC;AACnB,OAAO,EAAE,kBAAkB,EAAE,WAAW,EAAE,MAAM,gBAAgB,CAAC;AACjE,OAAO,EAAE,yBAAyB,EAAE,kBAAkB,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC"}