@probeo/anymodel 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/README.md +117 -10
- package/dist/batch/index.d.ts +4 -0
- package/dist/batch/index.d.ts.map +1 -0
- package/dist/batch/index.js +3 -0
- package/dist/batch/index.js.map +1 -0
- package/dist/batch/manager.d.ts +72 -0
- package/dist/batch/manager.d.ts.map +1 -0
- package/dist/batch/manager.js +328 -0
- package/dist/batch/manager.js.map +1 -0
- package/dist/batch/store.d.ts +54 -0
- package/dist/batch/store.d.ts.map +1 -0
- package/dist/batch/store.js +109 -0
- package/dist/batch/store.js.map +1 -0
- package/dist/cli.cjs +112 -19
- package/dist/cli.cjs.map +1 -1
- package/dist/cli.d.ts +2 -0
- package/dist/cli.d.ts.map +1 -0
- package/dist/cli.js +28 -1993
- package/dist/cli.js.map +1 -1
- package/dist/client.d.ts +42 -0
- package/dist/client.d.ts.map +1 -0
- package/dist/client.js +181 -0
- package/dist/client.js.map +1 -0
- package/dist/config.d.ts +6 -0
- package/dist/config.d.ts.map +1 -0
- package/dist/config.js +120 -0
- package/dist/config.js.map +1 -0
- package/dist/index.cjs +112 -19
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +10 -0
- package/dist/index.d.ts +14 -538
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +15 -1972
- package/dist/index.js.map +1 -1
- package/dist/providers/adapter.d.ts +33 -0
- package/dist/providers/adapter.d.ts.map +1 -0
- package/dist/providers/adapter.js +2 -0
- package/dist/providers/adapter.js.map +1 -0
- package/dist/providers/anthropic-batch.d.ts +3 -0
- package/dist/providers/anthropic-batch.d.ts.map +1 -0
- package/dist/providers/anthropic-batch.js +228 -0
- package/dist/providers/anthropic-batch.js.map +1 -0
- package/dist/providers/anthropic.d.ts +3 -0
- package/dist/providers/anthropic.d.ts.map +1 -0
- package/dist/providers/anthropic.js +358 -0
- package/dist/providers/anthropic.js.map +1 -0
- package/dist/providers/custom.d.ts +8 -0
- package/dist/providers/custom.d.ts.map +1 -0
- package/dist/providers/custom.js +61 -0
- package/dist/providers/custom.js.map +1 -0
- package/dist/providers/google.d.ts +3 -0
- package/dist/providers/google.d.ts.map +1 -0
- package/dist/providers/google.js +331 -0
- package/dist/providers/google.js.map +1 -0
- package/dist/providers/index.d.ts +6 -0
- package/dist/providers/index.d.ts.map +1 -0
- package/dist/providers/index.js +5 -0
- package/dist/providers/index.js.map +1 -0
- package/dist/providers/openai-batch.d.ts +3 -0
- package/dist/providers/openai-batch.d.ts.map +1 -0
- package/dist/providers/openai-batch.js +208 -0
- package/dist/providers/openai-batch.js.map +1 -0
- package/dist/providers/openai.d.ts +3 -0
- package/dist/providers/openai.d.ts.map +1 -0
- package/dist/providers/openai.js +221 -0
- package/dist/providers/openai.js.map +1 -0
- package/dist/providers/registry.d.ts +10 -0
- package/dist/providers/registry.d.ts.map +1 -0
- package/dist/providers/registry.js +27 -0
- package/dist/providers/registry.js.map +1 -0
- package/dist/router.d.ts +29 -0
- package/dist/router.d.ts.map +1 -0
- package/dist/router.js +212 -0
- package/dist/router.js.map +1 -0
- package/dist/server.d.ts +10 -0
- package/dist/server.d.ts.map +1 -0
- package/dist/server.js +149 -0
- package/dist/server.js.map +1 -0
- package/dist/types.d.ts +283 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/types.js +21 -0
- package/dist/types.js.map +1 -0
- package/dist/utils/fs-io.d.ts +40 -0
- package/dist/utils/fs-io.d.ts.map +1 -0
- package/dist/utils/fs-io.js +203 -0
- package/dist/utils/fs-io.js.map +1 -0
- package/dist/utils/generation-stats.d.ts +25 -0
- package/dist/utils/generation-stats.d.ts.map +1 -0
- package/dist/utils/generation-stats.js +46 -0
- package/dist/utils/generation-stats.js.map +1 -0
- package/dist/utils/id.d.ts +2 -0
- package/dist/utils/id.d.ts.map +1 -0
- package/dist/utils/id.js +6 -0
- package/dist/utils/id.js.map +1 -0
- package/dist/utils/model-parser.d.ts +6 -0
- package/dist/utils/model-parser.d.ts.map +1 -0
- package/dist/utils/model-parser.js +21 -0
- package/dist/utils/model-parser.js.map +1 -0
- package/dist/utils/rate-limiter.d.ts +36 -0
- package/dist/utils/rate-limiter.d.ts.map +1 -0
- package/dist/utils/rate-limiter.js +80 -0
- package/dist/utils/rate-limiter.js.map +1 -0
- package/dist/utils/retry.d.ts +7 -0
- package/dist/utils/retry.d.ts.map +1 -0
- package/dist/utils/retry.js +54 -0
- package/dist/utils/retry.js.map +1 -0
- package/dist/utils/transforms.d.ts +7 -0
- package/dist/utils/transforms.d.ts.map +1 -0
- package/dist/utils/transforms.js +66 -0
- package/dist/utils/transforms.js.map +1 -0
- package/dist/utils/validate.d.ts +3 -0
- package/dist/utils/validate.d.ts.map +1 -0
- package/dist/utils/validate.js +31 -0
- package/dist/utils/validate.js.map +1 -0
- package/package.json +9 -2
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../../src/batch/store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAiBhE;;;;GAIG;AACH,qBAAa,UAAU;IACrB,OAAO,CAAC,GAAG,CAAS;IACpB,OAAO,CAAC,WAAW,CAAS;gBAEhB,GAAG,CAAC,EAAE,MAAM;YAIV,IAAI;IAMlB,OAAO,CAAC,QAAQ;IAIhB;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAO/C;;OAEG;IACG,UAAU,CAAC,KAAK,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAOnD;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,QAAQ,EAAE,OAAO,EAAE,GAAG,OAAO,CAAC,IAAI,CAAC;IAKlE;;OAEG;IACG,YAAY,CAAC,EAAE,EAAE,MAAM,EAAE,MAAM,EAAE,eAAe,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtE;;OAEG;IACG,iBAAiB,CAAC,EAAE,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,OAAO,CAAC,IAAI,CAAC;IAOlF;;OAEG;IACG,iBAAiB,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,IAAI,CAAC;IAM5E;;OAEG;IACG,OAAO,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,WAAW,GAAG,IAAI,CAAC;IAMtD;;OAEG;IACG,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,EAAE,CAAC;IAWxD;;OAEG;IACG,WAAW,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAUtC;;OAEG;IACG,MAAM,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,OAAO,CAAC;CAG3C"}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
import { ensureDir, readFileQueued, readJsonQueued, readDirQueued, writeFileQueued, writeFileFlushedQueued, appendFileQueued, pathExistsQueued, fileExistsQueued, joinPath, resolvePath, } from '../utils/fs-io.js';
|
|
2
|
+
const DEFAULT_BATCH_DIR = joinPath(process.cwd(), '.anymodel', 'batches');
|
|
3
|
+
/**
|
|
4
|
+
* Disk-based batch persistence store.
|
|
5
|
+
* Uses queued, concurrency-limited IO for high-volume operations.
|
|
6
|
+
* Structure: {dir}/{batchId}/meta.json, requests.jsonl, results.jsonl, provider.json
|
|
7
|
+
*/
|
|
8
|
+
export class BatchStore {
|
|
9
|
+
dir;
|
|
10
|
+
initialized = false;
|
|
11
|
+
constructor(dir) {
|
|
12
|
+
this.dir = resolvePath(dir || DEFAULT_BATCH_DIR);
|
|
13
|
+
}
|
|
14
|
+
async init() {
|
|
15
|
+
if (this.initialized)
|
|
16
|
+
return;
|
|
17
|
+
await ensureDir(this.dir);
|
|
18
|
+
this.initialized = true;
|
|
19
|
+
}
|
|
20
|
+
batchDir(id) {
|
|
21
|
+
return joinPath(this.dir, id);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Create a new batch directory and save initial metadata.
|
|
25
|
+
*/
|
|
26
|
+
async create(batch) {
|
|
27
|
+
await this.init();
|
|
28
|
+
const dir = this.batchDir(batch.id);
|
|
29
|
+
await ensureDir(dir);
|
|
30
|
+
await writeFileFlushedQueued(joinPath(dir, 'meta.json'), JSON.stringify(batch, null, 2));
|
|
31
|
+
}
|
|
32
|
+
/**
|
|
33
|
+
* Update batch metadata (atomic write).
|
|
34
|
+
*/
|
|
35
|
+
async updateMeta(batch) {
|
|
36
|
+
await writeFileFlushedQueued(joinPath(this.batchDir(batch.id), 'meta.json'), JSON.stringify(batch, null, 2));
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Save requests as JSONL.
|
|
40
|
+
*/
|
|
41
|
+
async saveRequests(id, requests) {
|
|
42
|
+
const lines = requests.map(r => JSON.stringify(r)).join('\n') + '\n';
|
|
43
|
+
await writeFileQueued(joinPath(this.batchDir(id), 'requests.jsonl'), lines);
|
|
44
|
+
}
|
|
45
|
+
/**
|
|
46
|
+
* Append a result to results.jsonl.
|
|
47
|
+
*/
|
|
48
|
+
async appendResult(id, result) {
|
|
49
|
+
await appendFileQueued(joinPath(this.batchDir(id), 'results.jsonl'), JSON.stringify(result) + '\n');
|
|
50
|
+
}
|
|
51
|
+
/**
|
|
52
|
+
* Save provider-specific state (e.g., provider batch ID).
|
|
53
|
+
*/
|
|
54
|
+
async saveProviderState(id, state) {
|
|
55
|
+
await writeFileFlushedQueued(joinPath(this.batchDir(id), 'provider.json'), JSON.stringify(state, null, 2));
|
|
56
|
+
}
|
|
57
|
+
/**
|
|
58
|
+
* Load provider state.
|
|
59
|
+
*/
|
|
60
|
+
async loadProviderState(id) {
|
|
61
|
+
const p = joinPath(this.batchDir(id), 'provider.json');
|
|
62
|
+
if (!(await fileExistsQueued(p)))
|
|
63
|
+
return null;
|
|
64
|
+
return readJsonQueued(p);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* Get batch metadata.
|
|
68
|
+
*/
|
|
69
|
+
async getMeta(id) {
|
|
70
|
+
const p = joinPath(this.batchDir(id), 'meta.json');
|
|
71
|
+
if (!(await fileExistsQueued(p)))
|
|
72
|
+
return null;
|
|
73
|
+
return readJsonQueued(p);
|
|
74
|
+
}
|
|
75
|
+
/**
|
|
76
|
+
* Get all results for a batch.
|
|
77
|
+
*/
|
|
78
|
+
async getResults(id) {
|
|
79
|
+
const p = joinPath(this.batchDir(id), 'results.jsonl');
|
|
80
|
+
if (!(await fileExistsQueued(p)))
|
|
81
|
+
return [];
|
|
82
|
+
const raw = (await readFileQueued(p, 'utf8'));
|
|
83
|
+
return raw
|
|
84
|
+
.trim()
|
|
85
|
+
.split('\n')
|
|
86
|
+
.filter(Boolean)
|
|
87
|
+
.map(line => JSON.parse(line));
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* List all batch IDs.
|
|
91
|
+
*/
|
|
92
|
+
async listBatches() {
|
|
93
|
+
await this.init();
|
|
94
|
+
if (!(await pathExistsQueued(this.dir)))
|
|
95
|
+
return [];
|
|
96
|
+
const entries = await readDirQueued(this.dir);
|
|
97
|
+
return entries
|
|
98
|
+
.filter(d => d.isDirectory())
|
|
99
|
+
.map(d => d.name)
|
|
100
|
+
.sort();
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* Check if a batch exists.
|
|
104
|
+
*/
|
|
105
|
+
async exists(id) {
|
|
106
|
+
return fileExistsQueued(joinPath(this.batchDir(id), 'meta.json'));
|
|
107
|
+
}
|
|
108
|
+
}
|
|
109
|
+
//# sourceMappingURL=store.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../src/batch/store.ts"],"names":[],"mappings":"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"}
|
package/dist/cli.cjs
CHANGED
|
@@ -623,7 +623,7 @@ function createOpenAIAdapter(apiKey, baseURL) {
|
|
|
623
623
|
async listModels() {
|
|
624
624
|
const res = await makeRequest("/models", void 0, "GET");
|
|
625
625
|
const data = await res.json();
|
|
626
|
-
return (data.data || []).filter((m) => m.id.startsWith("gpt-") || m.id.startsWith("
|
|
626
|
+
return (data.data || []).filter((m) => m.id.startsWith("gpt-") || m.id.startsWith("o1") || m.id.startsWith("o3") || m.id.startsWith("o4") || m.id.startsWith("chatgpt-")).map((m) => ({
|
|
627
627
|
id: `openai/${m.id}`,
|
|
628
628
|
name: m.id,
|
|
629
629
|
created: m.created,
|
|
@@ -689,9 +689,10 @@ var SUPPORTED_PARAMS2 = /* @__PURE__ */ new Set([
|
|
|
689
689
|
"tool_choice",
|
|
690
690
|
"response_format"
|
|
691
691
|
]);
|
|
692
|
-
var
|
|
692
|
+
var FALLBACK_MODELS = [
|
|
693
693
|
{ id: "anthropic/claude-opus-4-6", name: "Claude Opus 4.6", created: 0, description: "Most capable model", context_length: 2e5, pricing: { prompt: "0.000005", completion: "0.000025" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image"], output_modalities: ["text"], tokenizer: "claude" }, top_provider: { context_length: 2e5, max_completion_tokens: 32768, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS2) },
|
|
694
694
|
{ id: "anthropic/claude-sonnet-4-6", name: "Claude Sonnet 4.6", created: 0, description: "Best balance of speed and capability", context_length: 2e5, pricing: { prompt: "0.000003", completion: "0.000015" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image"], output_modalities: ["text"], tokenizer: "claude" }, top_provider: { context_length: 2e5, max_completion_tokens: 16384, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS2) },
|
|
695
|
+
{ id: "anthropic/claude-sonnet-4-5-20251022", name: "Claude Sonnet 4.5", created: 0, description: "Previous generation balanced model", context_length: 2e5, pricing: { prompt: "0.000003", completion: "0.000015" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image"], output_modalities: ["text"], tokenizer: "claude" }, top_provider: { context_length: 2e5, max_completion_tokens: 16384, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS2) },
|
|
695
696
|
{ id: "anthropic/claude-haiku-4-5", name: "Claude Haiku 4.5", created: 0, description: "Fastest and most compact", context_length: 2e5, pricing: { prompt: "0.000001", completion: "0.000005" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image"], output_modalities: ["text"], tokenizer: "claude" }, top_provider: { context_length: 2e5, max_completion_tokens: 8192, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS2) }
|
|
696
697
|
];
|
|
697
698
|
function createAnthropicAdapter(apiKey) {
|
|
@@ -952,7 +953,40 @@ ${body.system}` : jsonInstruction;
|
|
|
952
953
|
};
|
|
953
954
|
},
|
|
954
955
|
async listModels() {
|
|
955
|
-
|
|
956
|
+
try {
|
|
957
|
+
const res = await fetch(`${ANTHROPIC_API_BASE}/models`, {
|
|
958
|
+
method: "GET",
|
|
959
|
+
headers: {
|
|
960
|
+
"x-api-key": apiKey,
|
|
961
|
+
"anthropic-version": ANTHROPIC_VERSION
|
|
962
|
+
}
|
|
963
|
+
});
|
|
964
|
+
if (!res.ok) return FALLBACK_MODELS;
|
|
965
|
+
const data = await res.json();
|
|
966
|
+
const models = data.data || [];
|
|
967
|
+
return models.filter((m) => m.type === "model").map((m) => ({
|
|
968
|
+
id: `anthropic/${m.id}`,
|
|
969
|
+
name: m.display_name || m.id,
|
|
970
|
+
created: m.created_at ? new Date(m.created_at).getTime() / 1e3 : 0,
|
|
971
|
+
description: m.display_name || "",
|
|
972
|
+
context_length: 2e5,
|
|
973
|
+
pricing: { prompt: "0", completion: "0" },
|
|
974
|
+
architecture: {
|
|
975
|
+
modality: "text+image->text",
|
|
976
|
+
input_modalities: ["text", "image"],
|
|
977
|
+
output_modalities: ["text"],
|
|
978
|
+
tokenizer: "claude"
|
|
979
|
+
},
|
|
980
|
+
top_provider: {
|
|
981
|
+
context_length: 2e5,
|
|
982
|
+
max_completion_tokens: 16384,
|
|
983
|
+
is_moderated: false
|
|
984
|
+
},
|
|
985
|
+
supported_parameters: Array.from(SUPPORTED_PARAMS2)
|
|
986
|
+
}));
|
|
987
|
+
} catch {
|
|
988
|
+
return FALLBACK_MODELS;
|
|
989
|
+
}
|
|
956
990
|
},
|
|
957
991
|
supportsParameter(param) {
|
|
958
992
|
return SUPPORTED_PARAMS2.has(param);
|
|
@@ -990,7 +1024,7 @@ var SUPPORTED_PARAMS3 = /* @__PURE__ */ new Set([
|
|
|
990
1024
|
"tool_choice",
|
|
991
1025
|
"response_format"
|
|
992
1026
|
]);
|
|
993
|
-
var
|
|
1027
|
+
var FALLBACK_MODELS2 = [
|
|
994
1028
|
{ id: "google/gemini-2.5-pro", name: "Gemini 2.5 Pro", created: 0, description: "Most capable Gemini model", context_length: 1048576, pricing: { prompt: "0.00000125", completion: "0.000005" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image", "video", "audio"], output_modalities: ["text"], tokenizer: "gemini" }, top_provider: { context_length: 1048576, max_completion_tokens: 65536, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS3) },
|
|
995
1029
|
{ id: "google/gemini-2.5-flash", name: "Gemini 2.5 Flash", created: 0, description: "Fast and efficient", context_length: 1048576, pricing: { prompt: "0.00000015", completion: "0.0000006" }, architecture: { modality: "text+image->text", input_modalities: ["text", "image", "video", "audio"], output_modalities: ["text"], tokenizer: "gemini" }, top_provider: { context_length: 1048576, max_completion_tokens: 65536, is_moderated: false }, supported_parameters: Array.from(SUPPORTED_PARAMS3) }
|
|
996
1030
|
];
|
|
@@ -1194,7 +1228,37 @@ function createGoogleAdapter(apiKey) {
|
|
|
1194
1228
|
};
|
|
1195
1229
|
},
|
|
1196
1230
|
async listModels() {
|
|
1197
|
-
|
|
1231
|
+
try {
|
|
1232
|
+
const res = await fetch(`${GEMINI_API_BASE}/models?key=${apiKey}`);
|
|
1233
|
+
if (!res.ok) return FALLBACK_MODELS2;
|
|
1234
|
+
const data = await res.json();
|
|
1235
|
+
const models = data.models || [];
|
|
1236
|
+
return models.filter((m) => m.name?.startsWith("models/gemini-") && m.supportedGenerationMethods?.includes("generateContent")).map((m) => {
|
|
1237
|
+
const modelId = m.name.replace("models/", "");
|
|
1238
|
+
return {
|
|
1239
|
+
id: `google/${modelId}`,
|
|
1240
|
+
name: m.displayName || modelId,
|
|
1241
|
+
created: 0,
|
|
1242
|
+
description: m.description || "",
|
|
1243
|
+
context_length: m.inputTokenLimit || 1048576,
|
|
1244
|
+
pricing: { prompt: "0", completion: "0" },
|
|
1245
|
+
architecture: {
|
|
1246
|
+
modality: "text+image->text",
|
|
1247
|
+
input_modalities: ["text", "image", "video", "audio"],
|
|
1248
|
+
output_modalities: ["text"],
|
|
1249
|
+
tokenizer: "gemini"
|
|
1250
|
+
},
|
|
1251
|
+
top_provider: {
|
|
1252
|
+
context_length: m.inputTokenLimit || 1048576,
|
|
1253
|
+
max_completion_tokens: m.outputTokenLimit || 65536,
|
|
1254
|
+
is_moderated: false
|
|
1255
|
+
},
|
|
1256
|
+
supported_parameters: Array.from(SUPPORTED_PARAMS3)
|
|
1257
|
+
};
|
|
1258
|
+
});
|
|
1259
|
+
} catch {
|
|
1260
|
+
return FALLBACK_MODELS2;
|
|
1261
|
+
}
|
|
1198
1262
|
},
|
|
1199
1263
|
supportsParameter(param) {
|
|
1200
1264
|
return SUPPORTED_PARAMS3.has(param);
|
|
@@ -1358,14 +1422,22 @@ function deepMerge(target, source) {
|
|
|
1358
1422
|
}
|
|
1359
1423
|
function envConfig() {
|
|
1360
1424
|
const config = {};
|
|
1361
|
-
|
|
1362
|
-
|
|
1363
|
-
|
|
1364
|
-
|
|
1365
|
-
|
|
1366
|
-
|
|
1367
|
-
|
|
1368
|
-
|
|
1425
|
+
const envMap = [
|
|
1426
|
+
["openai", "OPENAI_API_KEY"],
|
|
1427
|
+
["anthropic", "ANTHROPIC_API_KEY"],
|
|
1428
|
+
["google", "GOOGLE_API_KEY"],
|
|
1429
|
+
["mistral", "MISTRAL_API_KEY"],
|
|
1430
|
+
["groq", "GROQ_API_KEY"],
|
|
1431
|
+
["deepseek", "DEEPSEEK_API_KEY"],
|
|
1432
|
+
["xai", "XAI_API_KEY"],
|
|
1433
|
+
["together", "TOGETHER_API_KEY"],
|
|
1434
|
+
["fireworks", "FIREWORKS_API_KEY"],
|
|
1435
|
+
["perplexity", "PERPLEXITY_API_KEY"]
|
|
1436
|
+
];
|
|
1437
|
+
for (const [key, envVar] of envMap) {
|
|
1438
|
+
if (process.env[envVar]) {
|
|
1439
|
+
config[key] = { apiKey: process.env[envVar] };
|
|
1440
|
+
}
|
|
1369
1441
|
}
|
|
1370
1442
|
return config;
|
|
1371
1443
|
}
|
|
@@ -1780,21 +1852,42 @@ var AnyModel = class {
|
|
|
1780
1852
|
};
|
|
1781
1853
|
}
|
|
1782
1854
|
registerProviders() {
|
|
1783
|
-
const
|
|
1784
|
-
const
|
|
1785
|
-
const openaiKey = openai?.apiKey || process.env.OPENAI_API_KEY;
|
|
1786
|
-
const googleKey = google?.apiKey || process.env.GOOGLE_API_KEY;
|
|
1855
|
+
const config = this.config;
|
|
1856
|
+
const openaiKey = config.openai?.apiKey || process.env.OPENAI_API_KEY;
|
|
1787
1857
|
if (openaiKey) {
|
|
1788
1858
|
this.registry.register("openai", createOpenAIAdapter(openaiKey));
|
|
1789
1859
|
}
|
|
1860
|
+
const anthropicKey = config.anthropic?.apiKey || process.env.ANTHROPIC_API_KEY;
|
|
1790
1861
|
if (anthropicKey) {
|
|
1791
1862
|
this.registry.register("anthropic", createAnthropicAdapter(anthropicKey));
|
|
1792
1863
|
}
|
|
1864
|
+
const googleKey = config.google?.apiKey || process.env.GOOGLE_API_KEY;
|
|
1793
1865
|
if (googleKey) {
|
|
1794
1866
|
this.registry.register("google", createGoogleAdapter(googleKey));
|
|
1795
1867
|
}
|
|
1796
|
-
|
|
1797
|
-
|
|
1868
|
+
const builtinProviders = [
|
|
1869
|
+
{ name: "mistral", baseURL: "https://api.mistral.ai/v1", configKey: "mistral", envVar: "MISTRAL_API_KEY" },
|
|
1870
|
+
{ name: "groq", baseURL: "https://api.groq.com/openai/v1", configKey: "groq", envVar: "GROQ_API_KEY" },
|
|
1871
|
+
{ name: "deepseek", baseURL: "https://api.deepseek.com", configKey: "deepseek", envVar: "DEEPSEEK_API_KEY" },
|
|
1872
|
+
{ name: "xai", baseURL: "https://api.x.ai/v1", configKey: "xai", envVar: "XAI_API_KEY" },
|
|
1873
|
+
{ name: "together", baseURL: "https://api.together.xyz/v1", configKey: "together", envVar: "TOGETHER_API_KEY" },
|
|
1874
|
+
{ name: "fireworks", baseURL: "https://api.fireworks.ai/inference/v1", configKey: "fireworks", envVar: "FIREWORKS_API_KEY" },
|
|
1875
|
+
{ name: "perplexity", baseURL: "https://api.perplexity.ai", configKey: "perplexity", envVar: "PERPLEXITY_API_KEY" }
|
|
1876
|
+
];
|
|
1877
|
+
for (const { name, baseURL, configKey, envVar } of builtinProviders) {
|
|
1878
|
+
const providerConfig = config[configKey];
|
|
1879
|
+
const key = providerConfig?.apiKey || process.env[envVar];
|
|
1880
|
+
if (key) {
|
|
1881
|
+
this.registry.register(name, createCustomAdapter(name, { baseURL, apiKey: key }));
|
|
1882
|
+
}
|
|
1883
|
+
}
|
|
1884
|
+
const ollamaConfig = config.ollama;
|
|
1885
|
+
const ollamaURL = ollamaConfig?.baseURL || process.env.OLLAMA_BASE_URL || "http://localhost:11434/v1";
|
|
1886
|
+
if (ollamaConfig || process.env.OLLAMA_BASE_URL) {
|
|
1887
|
+
this.registry.register("ollama", createCustomAdapter("ollama", { baseURL: ollamaURL }));
|
|
1888
|
+
}
|
|
1889
|
+
if (config.custom) {
|
|
1890
|
+
for (const [name, customConfig] of Object.entries(config.custom)) {
|
|
1798
1891
|
this.registry.register(name, createCustomAdapter(name, customConfig));
|
|
1799
1892
|
}
|
|
1800
1893
|
}
|