@agentgazer/shared 0.1.0 → 0.3.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.
- package/dist/__tests__/normalize.test.d.ts +2 -0
- package/dist/__tests__/normalize.test.d.ts.map +1 -0
- package/dist/__tests__/normalize.test.js +159 -0
- package/dist/__tests__/normalize.test.js.map +1 -0
- package/dist/__tests__/pricing.test.js +14 -27
- package/dist/__tests__/pricing.test.js.map +1 -1
- package/dist/__tests__/providers.test.js +59 -32
- package/dist/__tests__/providers.test.js.map +1 -1
- package/dist/__tests__/simhash.test.d.ts +2 -0
- package/dist/__tests__/simhash.test.d.ts.map +1 -0
- package/dist/__tests__/simhash.test.js +107 -0
- package/dist/__tests__/simhash.test.js.map +1 -0
- package/dist/index.d.ts +6 -3
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +19 -1
- package/dist/index.js.map +1 -1
- package/dist/logger.d.ts.map +1 -1
- package/dist/logger.js +3 -2
- package/dist/logger.js.map +1 -1
- package/dist/models.d.ts +4 -1
- package/dist/models.d.ts.map +1 -1
- package/dist/models.js +22 -34
- package/dist/models.js.map +1 -1
- package/dist/normalize.d.ts +35 -0
- package/dist/normalize.d.ts.map +1 -0
- package/dist/normalize.js +119 -0
- package/dist/normalize.js.map +1 -0
- package/dist/parsers.d.ts.map +1 -1
- package/dist/parsers.js +0 -1
- package/dist/parsers.js.map +1 -1
- package/dist/pricing.d.ts +6 -0
- package/dist/pricing.d.ts.map +1 -1
- package/dist/pricing.js +38 -8
- package/dist/pricing.js.map +1 -1
- package/dist/provider-validator.d.ts +19 -0
- package/dist/provider-validator.d.ts.map +1 -0
- package/dist/provider-validator.js +321 -0
- package/dist/provider-validator.js.map +1 -0
- package/dist/providers.d.ts +30 -2
- package/dist/providers.d.ts.map +1 -1
- package/dist/providers.js +105 -19
- package/dist/providers.js.map +1 -1
- package/dist/simhash.d.ts +28 -0
- package/dist/simhash.d.ts.map +1 -0
- package/dist/simhash.js +98 -0
- package/dist/simhash.js.map +1 -0
- package/package.json +1 -1
package/dist/pricing.js
CHANGED
|
@@ -3,6 +3,7 @@ Object.defineProperty(exports, "__esModule", { value: true });
|
|
|
3
3
|
exports.getModelPricing = getModelPricing;
|
|
4
4
|
exports.calculateCost = calculateCost;
|
|
5
5
|
exports.listSupportedModels = listSupportedModels;
|
|
6
|
+
exports.getProviderModels = getProviderModels;
|
|
6
7
|
// Prices in USD per 1M tokens
|
|
7
8
|
const PRICING_TABLE = {
|
|
8
9
|
// OpenAI
|
|
@@ -19,10 +20,11 @@ const PRICING_TABLE = {
|
|
|
19
20
|
"claude-sonnet-4-20250514": { inputPerMToken: 3.00, outputPerMToken: 15.00 },
|
|
20
21
|
"claude-haiku-4-5-20251001": { inputPerMToken: 0.80, outputPerMToken: 4.00 },
|
|
21
22
|
// Google
|
|
23
|
+
"gemini-3-pro-preview": { inputPerMToken: 2.50, outputPerMToken: 10.00 },
|
|
24
|
+
"gemini-3-flash-preview": { inputPerMToken: 0.20, outputPerMToken: 0.80 },
|
|
22
25
|
"gemini-2.5-pro": { inputPerMToken: 1.25, outputPerMToken: 5.00 },
|
|
23
26
|
"gemini-2.5-flash": { inputPerMToken: 0.15, outputPerMToken: 0.60 },
|
|
24
|
-
"gemini-2.
|
|
25
|
-
"gemini-2.0-flash-lite": { inputPerMToken: 0.075, outputPerMToken: 0.30 },
|
|
27
|
+
"gemini-2.5-flash-lite": { inputPerMToken: 0.075, outputPerMToken: 0.30 },
|
|
26
28
|
// Mistral
|
|
27
29
|
"mistral-large-latest": { inputPerMToken: 2.00, outputPerMToken: 6.00 },
|
|
28
30
|
"mistral-small-latest": { inputPerMToken: 0.20, outputPerMToken: 0.60 },
|
|
@@ -33,22 +35,25 @@ const PRICING_TABLE = {
|
|
|
33
35
|
// DeepSeek
|
|
34
36
|
"deepseek-chat": { inputPerMToken: 0.27, outputPerMToken: 1.10 },
|
|
35
37
|
"deepseek-reasoner": { inputPerMToken: 0.55, outputPerMToken: 2.19 },
|
|
36
|
-
// Moonshot
|
|
38
|
+
// Moonshot / Kimi
|
|
37
39
|
"moonshot-v1-8k": { inputPerMToken: 0.20, outputPerMToken: 2.00 },
|
|
38
40
|
"moonshot-v1-32k": { inputPerMToken: 1.00, outputPerMToken: 3.00 },
|
|
39
41
|
"moonshot-v1-128k": { inputPerMToken: 0.60, outputPerMToken: 2.50 },
|
|
40
|
-
|
|
42
|
+
"kimi-k2.5": { inputPerMToken: 0.60, outputPerMToken: 2.50 },
|
|
43
|
+
"kimi-k2-thinking": { inputPerMToken: 0.60, outputPerMToken: 2.50 },
|
|
44
|
+
// Zhipu (GLM) / Z.ai
|
|
41
45
|
"glm-4.7": { inputPerMToken: 0.28, outputPerMToken: 1.11 },
|
|
42
46
|
"glm-4.7-flash": { inputPerMToken: 0, outputPerMToken: 0 },
|
|
47
|
+
"glm-4.5": { inputPerMToken: 0.20, outputPerMToken: 0.80 },
|
|
48
|
+
"glm-4.5-flash": { inputPerMToken: 0, outputPerMToken: 0 },
|
|
43
49
|
"glm-4": { inputPerMToken: 0.14, outputPerMToken: 0.42 },
|
|
44
50
|
"glm-4-air": { inputPerMToken: 0.11, outputPerMToken: 0.28 },
|
|
45
51
|
"glm-4-flash": { inputPerMToken: 0, outputPerMToken: 0 },
|
|
46
52
|
// MiniMax
|
|
53
|
+
"MiniMax-M2.1": { inputPerMToken: 0.30, outputPerMToken: 1.20 },
|
|
54
|
+
"MiniMax-M2.1-lightning": { inputPerMToken: 0.15, outputPerMToken: 0.60 },
|
|
47
55
|
"MiniMax-M2": { inputPerMToken: 0.30, outputPerMToken: 1.20 },
|
|
48
|
-
"
|
|
49
|
-
// Baichuan
|
|
50
|
-
"Baichuan4": { inputPerMToken: 13.89, outputPerMToken: 13.89 },
|
|
51
|
-
"Baichuan3-Turbo": { inputPerMToken: 1.39, outputPerMToken: 1.39 },
|
|
56
|
+
"M2-her": { inputPerMToken: 0.30, outputPerMToken: 1.20 },
|
|
52
57
|
// Yi (01.AI)
|
|
53
58
|
"yi-lightning": { inputPerMToken: 0.14, outputPerMToken: 0.14 },
|
|
54
59
|
"yi-large": { inputPerMToken: 2.78, outputPerMToken: 2.78 },
|
|
@@ -71,4 +76,29 @@ function calculateCost(model, tokensIn, tokensOut) {
|
|
|
71
76
|
function listSupportedModels() {
|
|
72
77
|
return Object.keys(PRICING_TABLE);
|
|
73
78
|
}
|
|
79
|
+
const PROVIDER_MODELS = {
|
|
80
|
+
openai: ["gpt-4o", "gpt-4o-mini", "gpt-4-turbo", "o1", "o1-mini", "o1-pro", "o3-mini"],
|
|
81
|
+
anthropic: ["claude-opus-4-5-20251101", "claude-sonnet-4-5-20250929", "claude-sonnet-4-20250514", "claude-haiku-4-5-20251001"],
|
|
82
|
+
google: ["gemini-3-pro-preview", "gemini-3-flash-preview", "gemini-2.5-pro", "gemini-2.5-flash", "gemini-2.5-flash-lite"],
|
|
83
|
+
mistral: ["mistral-large-latest", "mistral-small-latest", "codestral-latest"],
|
|
84
|
+
cohere: ["command-r-plus", "command-r"],
|
|
85
|
+
deepseek: ["deepseek-chat", "deepseek-reasoner"],
|
|
86
|
+
moonshot: ["moonshot-v1-8k", "moonshot-v1-32k", "moonshot-v1-128k", "kimi-k2.5", "kimi-k2-thinking"],
|
|
87
|
+
zhipu: ["glm-4.7", "glm-4.7-flash", "glm-4.5", "glm-4.5-flash", "glm-4", "glm-4-air", "glm-4-flash"],
|
|
88
|
+
minimax: ["MiniMax-M2.1", "MiniMax-M2.1-lightning", "MiniMax-M2", "M2-her"],
|
|
89
|
+
yi: ["yi-lightning", "yi-large", "yi-medium"],
|
|
90
|
+
};
|
|
91
|
+
function getProviderModels(provider) {
|
|
92
|
+
const modelIds = PROVIDER_MODELS[provider];
|
|
93
|
+
if (!modelIds)
|
|
94
|
+
return [];
|
|
95
|
+
return modelIds.map((id) => {
|
|
96
|
+
const pricing = PRICING_TABLE[id];
|
|
97
|
+
return {
|
|
98
|
+
id,
|
|
99
|
+
inputPrice: pricing?.inputPerMToken ?? 0,
|
|
100
|
+
outputPrice: pricing?.outputPerMToken ?? 0,
|
|
101
|
+
};
|
|
102
|
+
});
|
|
103
|
+
}
|
|
74
104
|
//# sourceMappingURL=pricing.js.map
|
package/dist/pricing.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":";;
|
|
1
|
+
{"version":3,"file":"pricing.js","sourceRoot":"","sources":["../src/pricing.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
import { ProviderName } from "./providers.js";
|
|
2
|
+
export interface ValidationResult {
|
|
3
|
+
valid: boolean;
|
|
4
|
+
error?: string;
|
|
5
|
+
models?: string[];
|
|
6
|
+
}
|
|
7
|
+
/**
|
|
8
|
+
* Validate an API key for a given provider.
|
|
9
|
+
* Uses free endpoints where possible to avoid consuming tokens.
|
|
10
|
+
*/
|
|
11
|
+
export declare function validateProviderKey(provider: ProviderName, apiKey: string): Promise<ValidationResult>;
|
|
12
|
+
/**
|
|
13
|
+
* Test if a specific model exists for a provider.
|
|
14
|
+
*/
|
|
15
|
+
export declare function testProviderModel(provider: ProviderName, apiKey: string, modelId: string): Promise<{
|
|
16
|
+
exists: boolean;
|
|
17
|
+
error?: string;
|
|
18
|
+
}>;
|
|
19
|
+
//# sourceMappingURL=provider-validator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-validator.d.ts","sourceRoot":"","sources":["../src/provider-validator.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAA6C,MAAM,gBAAgB,CAAC;AAEzF,MAAM,WAAW,gBAAgB;IAC/B,KAAK,EAAE,OAAO,CAAC;IACf,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,MAAM,CAAC,EAAE,MAAM,EAAE,CAAC;CACnB;AAED;;;GAGG;AACH,wBAAsB,mBAAmB,CACvC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,GACb,OAAO,CAAC,gBAAgB,CAAC,CAyB3B;AAED;;GAEG;AACH,wBAAsB,iBAAiB,CACrC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,OAAO,EAAE,MAAM,GACd,OAAO,CAAC;IAAE,MAAM,EAAE,OAAO,CAAC;IAAC,KAAK,CAAC,EAAE,MAAM,CAAA;CAAE,CAAC,CAkB9C"}
|
|
@@ -0,0 +1,321 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
exports.validateProviderKey = validateProviderKey;
|
|
4
|
+
exports.testProviderModel = testProviderModel;
|
|
5
|
+
const providers_js_1 = require("./providers.js");
|
|
6
|
+
/**
|
|
7
|
+
* Validate an API key for a given provider.
|
|
8
|
+
* Uses free endpoints where possible to avoid consuming tokens.
|
|
9
|
+
*/
|
|
10
|
+
async function validateProviderKey(provider, apiKey) {
|
|
11
|
+
switch (provider) {
|
|
12
|
+
case "openai":
|
|
13
|
+
return validateOpenAI(apiKey);
|
|
14
|
+
case "anthropic":
|
|
15
|
+
return validateAnthropic(apiKey);
|
|
16
|
+
case "google":
|
|
17
|
+
return validateGoogle(apiKey);
|
|
18
|
+
case "mistral":
|
|
19
|
+
return validateMistral(apiKey);
|
|
20
|
+
case "cohere":
|
|
21
|
+
return validateCohere(apiKey);
|
|
22
|
+
case "deepseek":
|
|
23
|
+
return validateDeepSeek(apiKey);
|
|
24
|
+
case "moonshot":
|
|
25
|
+
return validateMoonshot(apiKey);
|
|
26
|
+
case "zhipu":
|
|
27
|
+
return validateZhipu(apiKey);
|
|
28
|
+
case "minimax":
|
|
29
|
+
return validateMinimax(apiKey);
|
|
30
|
+
case "yi":
|
|
31
|
+
return validateYi(apiKey);
|
|
32
|
+
default:
|
|
33
|
+
return { valid: false, error: `Validation not supported for provider: ${provider}` };
|
|
34
|
+
}
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* Test if a specific model exists for a provider.
|
|
38
|
+
*/
|
|
39
|
+
async function testProviderModel(provider, apiKey, modelId) {
|
|
40
|
+
// For providers with /models endpoint, check if model is in list
|
|
41
|
+
const result = await validateProviderKey(provider, apiKey);
|
|
42
|
+
if (!result.valid) {
|
|
43
|
+
return { exists: false, error: result.error };
|
|
44
|
+
}
|
|
45
|
+
if (result.models && result.models.length > 0) {
|
|
46
|
+
const exists = result.models.some(m => m.toLowerCase() === modelId.toLowerCase() ||
|
|
47
|
+
m.includes(modelId) ||
|
|
48
|
+
modelId.includes(m));
|
|
49
|
+
return { exists };
|
|
50
|
+
}
|
|
51
|
+
// For providers without models list, try a minimal request
|
|
52
|
+
return testModelWithMinimalRequest(provider, apiKey, modelId);
|
|
53
|
+
}
|
|
54
|
+
// ---------------------------------------------------------------------------
|
|
55
|
+
// Provider-specific validation
|
|
56
|
+
// ---------------------------------------------------------------------------
|
|
57
|
+
async function validateOpenAI(apiKey) {
|
|
58
|
+
try {
|
|
59
|
+
const res = await fetch("https://api.openai.com/v1/models", {
|
|
60
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
61
|
+
});
|
|
62
|
+
if (res.status === 401) {
|
|
63
|
+
return { valid: false, error: "Invalid API key" };
|
|
64
|
+
}
|
|
65
|
+
if (!res.ok) {
|
|
66
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
67
|
+
}
|
|
68
|
+
const data = await res.json();
|
|
69
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
70
|
+
return { valid: true, models };
|
|
71
|
+
}
|
|
72
|
+
catch (err) {
|
|
73
|
+
return { valid: false, error: String(err) };
|
|
74
|
+
}
|
|
75
|
+
}
|
|
76
|
+
async function validateAnthropic(apiKey) {
|
|
77
|
+
// Anthropic doesn't have a free /models endpoint, so we send a minimal request
|
|
78
|
+
try {
|
|
79
|
+
const res = await fetch("https://api.anthropic.com/v1/messages", {
|
|
80
|
+
method: "POST",
|
|
81
|
+
headers: {
|
|
82
|
+
"x-api-key": apiKey,
|
|
83
|
+
"anthropic-version": "2023-06-01",
|
|
84
|
+
"Content-Type": "application/json",
|
|
85
|
+
},
|
|
86
|
+
body: JSON.stringify({
|
|
87
|
+
model: "claude-3-haiku-20240307",
|
|
88
|
+
max_tokens: 1,
|
|
89
|
+
messages: [{ role: "user", content: "." }],
|
|
90
|
+
}),
|
|
91
|
+
});
|
|
92
|
+
if (res.status === 401) {
|
|
93
|
+
return { valid: false, error: "Invalid API key" };
|
|
94
|
+
}
|
|
95
|
+
if (res.status === 400) {
|
|
96
|
+
const data = await res.json();
|
|
97
|
+
return { valid: false, error: data.error?.message ?? "Bad request" };
|
|
98
|
+
}
|
|
99
|
+
// 200 or 429 (rate limit) means key is valid
|
|
100
|
+
if (res.ok || res.status === 429) {
|
|
101
|
+
return { valid: true };
|
|
102
|
+
}
|
|
103
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
104
|
+
}
|
|
105
|
+
catch (err) {
|
|
106
|
+
return { valid: false, error: String(err) };
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
async function validateGoogle(apiKey) {
|
|
110
|
+
try {
|
|
111
|
+
const res = await fetch(`https://generativelanguage.googleapis.com/v1/models?key=${apiKey}`);
|
|
112
|
+
if (res.status === 400 || res.status === 401 || res.status === 403) {
|
|
113
|
+
return { valid: false, error: "Invalid API key" };
|
|
114
|
+
}
|
|
115
|
+
if (!res.ok) {
|
|
116
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
117
|
+
}
|
|
118
|
+
const data = await res.json();
|
|
119
|
+
const models = data.models?.map(m => m.name.replace("models/", "")) ?? [];
|
|
120
|
+
return { valid: true, models };
|
|
121
|
+
}
|
|
122
|
+
catch (err) {
|
|
123
|
+
return { valid: false, error: String(err) };
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
async function validateMistral(apiKey) {
|
|
127
|
+
try {
|
|
128
|
+
const res = await fetch("https://api.mistral.ai/v1/models", {
|
|
129
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
130
|
+
});
|
|
131
|
+
if (res.status === 401) {
|
|
132
|
+
return { valid: false, error: "Invalid API key" };
|
|
133
|
+
}
|
|
134
|
+
if (!res.ok) {
|
|
135
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
136
|
+
}
|
|
137
|
+
const data = await res.json();
|
|
138
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
139
|
+
return { valid: true, models };
|
|
140
|
+
}
|
|
141
|
+
catch (err) {
|
|
142
|
+
return { valid: false, error: String(err) };
|
|
143
|
+
}
|
|
144
|
+
}
|
|
145
|
+
async function validateCohere(apiKey) {
|
|
146
|
+
try {
|
|
147
|
+
const res = await fetch("https://api.cohere.com/v1/models", {
|
|
148
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
149
|
+
});
|
|
150
|
+
if (res.status === 401) {
|
|
151
|
+
return { valid: false, error: "Invalid API key" };
|
|
152
|
+
}
|
|
153
|
+
if (!res.ok) {
|
|
154
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
155
|
+
}
|
|
156
|
+
const data = await res.json();
|
|
157
|
+
const models = data.models?.map(m => m.name) ?? [];
|
|
158
|
+
return { valid: true, models };
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
return { valid: false, error: String(err) };
|
|
162
|
+
}
|
|
163
|
+
}
|
|
164
|
+
async function validateDeepSeek(apiKey) {
|
|
165
|
+
try {
|
|
166
|
+
const res = await fetch("https://api.deepseek.com/v1/models", {
|
|
167
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
168
|
+
});
|
|
169
|
+
if (res.status === 401) {
|
|
170
|
+
return { valid: false, error: "Invalid API key" };
|
|
171
|
+
}
|
|
172
|
+
if (!res.ok) {
|
|
173
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
174
|
+
}
|
|
175
|
+
const data = await res.json();
|
|
176
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
177
|
+
return { valid: true, models };
|
|
178
|
+
}
|
|
179
|
+
catch (err) {
|
|
180
|
+
return { valid: false, error: String(err) };
|
|
181
|
+
}
|
|
182
|
+
}
|
|
183
|
+
async function validateMoonshot(apiKey) {
|
|
184
|
+
// Try international endpoint first (api.moonshot.ai), fallback to China (api.moonshot.cn)
|
|
185
|
+
try {
|
|
186
|
+
let res = await fetch("https://api.moonshot.ai/v1/models", {
|
|
187
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
188
|
+
});
|
|
189
|
+
// If international fails with 401, try China endpoint
|
|
190
|
+
if (res.status === 401) {
|
|
191
|
+
res = await fetch("https://api.moonshot.cn/v1/models", {
|
|
192
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
193
|
+
});
|
|
194
|
+
}
|
|
195
|
+
if (res.status === 401) {
|
|
196
|
+
return { valid: false, error: "Invalid API key" };
|
|
197
|
+
}
|
|
198
|
+
if (!res.ok) {
|
|
199
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
200
|
+
}
|
|
201
|
+
const data = await res.json();
|
|
202
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
203
|
+
return { valid: true, models };
|
|
204
|
+
}
|
|
205
|
+
catch (err) {
|
|
206
|
+
return { valid: false, error: String(err) };
|
|
207
|
+
}
|
|
208
|
+
}
|
|
209
|
+
async function validateZhipu(apiKey) {
|
|
210
|
+
// Try international endpoint first (z.ai), fallback to China (bigmodel.cn)
|
|
211
|
+
try {
|
|
212
|
+
let res = await fetch("https://api.z.ai/api/paas/v4/models", {
|
|
213
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
214
|
+
});
|
|
215
|
+
// If international fails with 401 or 404, try China endpoint
|
|
216
|
+
if (res.status === 401 || res.status === 404) {
|
|
217
|
+
res = await fetch("https://open.bigmodel.cn/api/paas/v4/models", {
|
|
218
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
219
|
+
});
|
|
220
|
+
}
|
|
221
|
+
if (res.status === 401) {
|
|
222
|
+
return { valid: false, error: "Invalid API key" };
|
|
223
|
+
}
|
|
224
|
+
if (!res.ok) {
|
|
225
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
226
|
+
}
|
|
227
|
+
const data = await res.json();
|
|
228
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
229
|
+
return { valid: true, models };
|
|
230
|
+
}
|
|
231
|
+
catch (err) {
|
|
232
|
+
return { valid: false, error: String(err) };
|
|
233
|
+
}
|
|
234
|
+
}
|
|
235
|
+
async function validateMinimax(apiKey) {
|
|
236
|
+
// MiniMax uses /v1/text/chatcompletion_v2 endpoint (no /models endpoint)
|
|
237
|
+
try {
|
|
238
|
+
const res = await fetch("https://api.minimax.io/v1/text/chatcompletion_v2", {
|
|
239
|
+
method: "POST",
|
|
240
|
+
headers: {
|
|
241
|
+
Authorization: `Bearer ${apiKey}`,
|
|
242
|
+
"Content-Type": "application/json",
|
|
243
|
+
},
|
|
244
|
+
body: JSON.stringify({
|
|
245
|
+
model: "MiniMax-M2",
|
|
246
|
+
max_completion_tokens: 1,
|
|
247
|
+
messages: [{ role: "user", content: "." }],
|
|
248
|
+
}),
|
|
249
|
+
});
|
|
250
|
+
if (res.status === 401 || res.status === 403) {
|
|
251
|
+
return { valid: false, error: "Invalid API key" };
|
|
252
|
+
}
|
|
253
|
+
// 200 or 429 (rate limit) means key is valid
|
|
254
|
+
if (res.ok || res.status === 429) {
|
|
255
|
+
return { valid: true };
|
|
256
|
+
}
|
|
257
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
258
|
+
}
|
|
259
|
+
catch (err) {
|
|
260
|
+
return { valid: false, error: String(err) };
|
|
261
|
+
}
|
|
262
|
+
}
|
|
263
|
+
async function validateYi(apiKey) {
|
|
264
|
+
// Try international endpoint first (01.ai), fallback to China (lingyiwanwu.com)
|
|
265
|
+
try {
|
|
266
|
+
let res = await fetch("https://api.01.ai/v1/models", {
|
|
267
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
268
|
+
});
|
|
269
|
+
// If international fails with 401, try China endpoint
|
|
270
|
+
if (res.status === 401) {
|
|
271
|
+
res = await fetch("https://api.lingyiwanwu.com/v1/models", {
|
|
272
|
+
headers: { Authorization: `Bearer ${apiKey}` },
|
|
273
|
+
});
|
|
274
|
+
}
|
|
275
|
+
if (res.status === 401) {
|
|
276
|
+
return { valid: false, error: "Invalid API key" };
|
|
277
|
+
}
|
|
278
|
+
if (!res.ok) {
|
|
279
|
+
return { valid: false, error: `HTTP ${res.status}: ${res.statusText}` };
|
|
280
|
+
}
|
|
281
|
+
const data = await res.json();
|
|
282
|
+
const models = data.data?.map(m => m.id) ?? [];
|
|
283
|
+
return { valid: true, models };
|
|
284
|
+
}
|
|
285
|
+
catch (err) {
|
|
286
|
+
return { valid: false, error: String(err) };
|
|
287
|
+
}
|
|
288
|
+
}
|
|
289
|
+
async function testModelWithMinimalRequest(provider, apiKey, modelId) {
|
|
290
|
+
const baseUrl = (0, providers_js_1.getProviderBaseUrl)(provider);
|
|
291
|
+
const authHeader = (0, providers_js_1.getProviderAuthHeader)(provider, apiKey);
|
|
292
|
+
if (!baseUrl || !authHeader) {
|
|
293
|
+
return { exists: false, error: `Unsupported provider: ${provider}` };
|
|
294
|
+
}
|
|
295
|
+
// Try OpenAI-compatible chat completions endpoint
|
|
296
|
+
try {
|
|
297
|
+
const res = await fetch(`${baseUrl}/v1/chat/completions`, {
|
|
298
|
+
method: "POST",
|
|
299
|
+
headers: {
|
|
300
|
+
[authHeader.name]: authHeader.value,
|
|
301
|
+
"Content-Type": "application/json",
|
|
302
|
+
},
|
|
303
|
+
body: JSON.stringify({
|
|
304
|
+
model: modelId,
|
|
305
|
+
max_tokens: 1,
|
|
306
|
+
messages: [{ role: "user", content: "." }],
|
|
307
|
+
}),
|
|
308
|
+
});
|
|
309
|
+
if (res.status === 404 || (res.status === 400 && (await res.text()).includes("model"))) {
|
|
310
|
+
return { exists: false, error: "Model not found" };
|
|
311
|
+
}
|
|
312
|
+
if (res.ok || res.status === 429) {
|
|
313
|
+
return { exists: true };
|
|
314
|
+
}
|
|
315
|
+
return { exists: false, error: `HTTP ${res.status}` };
|
|
316
|
+
}
|
|
317
|
+
catch (err) {
|
|
318
|
+
return { exists: false, error: String(err) };
|
|
319
|
+
}
|
|
320
|
+
}
|
|
321
|
+
//# sourceMappingURL=provider-validator.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"provider-validator.js","sourceRoot":"","sources":["../src/provider-validator.ts"],"names":[],"mappings":"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"}
|
package/dist/providers.d.ts
CHANGED
|
@@ -1,6 +1,11 @@
|
|
|
1
|
-
export type ProviderName = "openai" | "anthropic" | "google" | "mistral" | "cohere" | "deepseek" | "moonshot" | "zhipu" | "minimax" | "
|
|
1
|
+
export type ProviderName = "openai" | "anthropic" | "google" | "mistral" | "cohere" | "deepseek" | "moonshot" | "zhipu" | "minimax" | "yi" | "unknown";
|
|
2
2
|
/** All known provider names (excludes "unknown"). Single source of truth. */
|
|
3
3
|
export declare const KNOWN_PROVIDER_NAMES: ProviderName[];
|
|
4
|
+
/**
|
|
5
|
+
* Provider names available for user selection in UI/CLI.
|
|
6
|
+
* Excludes providers without active API access.
|
|
7
|
+
*/
|
|
8
|
+
export declare const SELECTABLE_PROVIDER_NAMES: ProviderName[];
|
|
4
9
|
export declare function detectProvider(url: string): ProviderName;
|
|
5
10
|
/**
|
|
6
11
|
* Detect provider by hostname only. Returns "unknown" for path-only matches.
|
|
@@ -8,11 +13,29 @@ export declare function detectProvider(url: string): ProviderName;
|
|
|
8
13
|
*/
|
|
9
14
|
export declare function detectProviderByHostname(url: string): ProviderName;
|
|
10
15
|
export declare function getProviderBaseUrl(provider: ProviderName): string | null;
|
|
16
|
+
/**
|
|
17
|
+
* Returns the root API URL for a provider for path-based routing.
|
|
18
|
+
* Includes version prefix where needed (e.g., /v1beta for Google).
|
|
19
|
+
* Used for providers that need path-based routing (e.g., Google's native API).
|
|
20
|
+
*/
|
|
21
|
+
export declare function getProviderRootUrl(provider: ProviderName): string | null;
|
|
22
|
+
/**
|
|
23
|
+
* Check if a provider uses path-based routing (client provides the full path).
|
|
24
|
+
* These providers expect the trailing path to be preserved, not replaced with a fixed endpoint.
|
|
25
|
+
*/
|
|
26
|
+
export declare function providerUsesPathRouting(provider: ProviderName): boolean;
|
|
27
|
+
/**
|
|
28
|
+
* Returns the complete chat endpoint URL for a provider.
|
|
29
|
+
* This is the full URL including path - no additional path construction needed.
|
|
30
|
+
* Returns null for unknown providers.
|
|
31
|
+
*/
|
|
32
|
+
export declare function getProviderChatEndpoint(provider: ProviderName): string | null;
|
|
11
33
|
/**
|
|
12
34
|
* Returns the auth header name and value for a given provider.
|
|
13
35
|
* Different providers use different header conventions.
|
|
36
|
+
* @param useNativeApi - For Google, whether to use native API auth (x-goog-api-key) vs OpenAI-compatible (Bearer)
|
|
14
37
|
*/
|
|
15
|
-
export declare function getProviderAuthHeader(provider: ProviderName, apiKey: string): {
|
|
38
|
+
export declare function getProviderAuthHeader(provider: ProviderName, apiKey: string, useNativeApi?: boolean): {
|
|
16
39
|
name: string;
|
|
17
40
|
value: string;
|
|
18
41
|
} | null;
|
|
@@ -25,6 +48,11 @@ export declare function parsePathPrefix(path: string): {
|
|
|
25
48
|
provider: ProviderName;
|
|
26
49
|
remainingPath: string;
|
|
27
50
|
} | null;
|
|
51
|
+
/**
|
|
52
|
+
* Rewrite OpenAI-compatible paths to provider-specific paths.
|
|
53
|
+
* Some Chinese providers use different endpoint structures.
|
|
54
|
+
*/
|
|
55
|
+
export declare function rewriteProviderPath(provider: ProviderName, path: string): string;
|
|
28
56
|
/**
|
|
29
57
|
* Parse a URL path to extract an agent ID from /agents/{id}/... format.
|
|
30
58
|
* Given "/agents/my-bot/openai/v1/chat/completions" returns:
|
package/dist/providers.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,GACT,
|
|
1
|
+
{"version":3,"file":"providers.d.ts","sourceRoot":"","sources":["../src/providers.ts"],"names":[],"mappings":"AAAA,MAAM,MAAM,YAAY,GACpB,QAAQ,GACR,WAAW,GACX,QAAQ,GACR,SAAS,GACT,QAAQ,GACR,UAAU,GACV,UAAU,GACV,OAAO,GACP,SAAS,GACT,IAAI,GACJ,SAAS,CAAC;AAQd,6EAA6E;AAC7E,eAAO,MAAM,oBAAoB,EAAE,YAAY,EAW9C,CAAC;AAEF;;;GAGG;AACH,eAAO,MAAM,yBAAyB,EAAE,YAAY,EAUnD,CAAC;AA+CF,wBAAgB,cAAc,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CA4BxD;AAED;;;GAGG;AACH,wBAAgB,wBAAwB,CAAC,GAAG,EAAE,MAAM,GAAG,YAAY,CAmBlE;AAED,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAgBxE;AAED;;;;GAIG;AACH,wBAAgB,kBAAkB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAcxE;AAED;;;GAGG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,OAAO,CAGvE;AAED;;;;GAIG;AACH,wBAAgB,uBAAuB,CAAC,QAAQ,EAAE,YAAY,GAAG,MAAM,GAAG,IAAI,CAc7E;AAED;;;;GAIG;AACH,wBAAgB,qBAAqB,CACnC,QAAQ,EAAE,YAAY,EACtB,MAAM,EAAE,MAAM,EACd,YAAY,GAAE,OAAe,GAC5B;IAAE,IAAI,EAAE,MAAM,CAAC;IAAC,KAAK,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAsBxC;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAC7B,IAAI,EAAE,MAAM,GACX;IAAE,QAAQ,EAAE,YAAY,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAW1D;AAED;;;GAGG;AACH,wBAAgB,mBAAmB,CAAC,QAAQ,EAAE,YAAY,EAAE,IAAI,EAAE,MAAM,GAAG,MAAM,CAYhF;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,IAAI,EAAE,MAAM,GACX;IAAE,OAAO,EAAE,MAAM,CAAC;IAAC,aAAa,EAAE,MAAM,CAAA;CAAE,GAAG,IAAI,CAMnD"}
|