aieo 0.1.38 → 0.1.40
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/index.cjs +145 -25
- package/dist/index.cjs.map +1 -1
- package/dist/index.d.cts +94 -1
- package/dist/index.d.ts +94 -1
- package/dist/index.js +137 -25
- package/dist/index.js.map +1 -1
- package/package.json +2 -2
package/dist/index.cjs
CHANGED
|
@@ -30,9 +30,12 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
|
|
|
30
30
|
// src/index.ts
|
|
31
31
|
var index_exports = {};
|
|
32
32
|
__export(index_exports, {
|
|
33
|
+
API_KEY_ENV: () => API_KEY_ENV,
|
|
33
34
|
ConversationStorage: () => ConversationStorage,
|
|
35
|
+
DEFAULT_MODELS: () => DEFAULT_MODELS,
|
|
34
36
|
GATEWAY_PATHS: () => GATEWAY_PATHS,
|
|
35
37
|
MAX_CONVERSATIONS: () => MAX_CONVERSATIONS,
|
|
38
|
+
MODELS: () => MODELS,
|
|
36
39
|
OUTRO: () => OUTRO,
|
|
37
40
|
PROVIDERS: () => PROVIDERS,
|
|
38
41
|
SYSTEM: () => SYSTEM,
|
|
@@ -42,6 +45,7 @@ __export(index_exports, {
|
|
|
42
45
|
callGenerateObject: () => callGenerateObject,
|
|
43
46
|
callGenerateText: () => callGenerateText,
|
|
44
47
|
callModel: () => callModel,
|
|
48
|
+
canonicalModelName: () => canonicalModelName,
|
|
45
49
|
captureNativeFetchResults: () => captureNativeFetchResults,
|
|
46
50
|
captureNativeResults: () => captureNativeResults,
|
|
47
51
|
computeSessionCost: () => computeSessionCost,
|
|
@@ -69,12 +73,16 @@ __export(index_exports, {
|
|
|
69
73
|
htmlToText: () => htmlToText,
|
|
70
74
|
isPrivateAddress: () => isPrivateAddress,
|
|
71
75
|
linkifyCitations: () => linkifyCitations,
|
|
76
|
+
listModels: () => listModels,
|
|
72
77
|
loadModelPricing: () => loadModelPricing,
|
|
78
|
+
maxOutputTokensFor: () => maxOutputTokensFor,
|
|
73
79
|
normalizeApiKey: () => normalizeApiKey,
|
|
74
80
|
normalizeCallerBaseURL: () => normalizeCallerBaseURL,
|
|
75
81
|
normalizeUsage: () => normalizeUsage,
|
|
82
|
+
parseModelName: () => parseModelName,
|
|
76
83
|
resolveFetchBackend: () => resolveFetchBackend,
|
|
77
84
|
resolveLLMConfig: () => resolveLLMConfig,
|
|
85
|
+
resolveModel: () => resolveModel,
|
|
78
86
|
resolveSearchBackend: () => resolveSearchBackend,
|
|
79
87
|
searchWeb: () => searchWeb,
|
|
80
88
|
stripCitations: () => stripCitations,
|
|
@@ -23167,20 +23175,20 @@ var PROVIDERS = [
|
|
|
23167
23175
|
var MODELS = {
|
|
23168
23176
|
anthropic: {
|
|
23169
23177
|
sonnet: "claude-sonnet-5",
|
|
23170
|
-
opus: "claude-opus-
|
|
23178
|
+
opus: "claude-opus-5",
|
|
23171
23179
|
haiku: "claude-haiku-4-5"
|
|
23172
23180
|
},
|
|
23173
23181
|
google: {
|
|
23174
23182
|
gemini: "gemini-3-pro-preview"
|
|
23175
23183
|
},
|
|
23176
23184
|
openai: {
|
|
23177
|
-
gpt: "gpt-5"
|
|
23185
|
+
gpt: "gpt-5.6-luna"
|
|
23178
23186
|
},
|
|
23179
23187
|
openrouter: {
|
|
23180
|
-
kimi: "moonshotai/kimi-
|
|
23188
|
+
kimi: "moonshotai/kimi-k3"
|
|
23181
23189
|
},
|
|
23182
23190
|
xai: {
|
|
23183
|
-
grok: "grok-4"
|
|
23191
|
+
grok: "grok-4.6"
|
|
23184
23192
|
}
|
|
23185
23193
|
};
|
|
23186
23194
|
var DEFAULT_MODELS = {
|
|
@@ -23234,6 +23242,7 @@ function getProviderForModel(modelName) {
|
|
|
23234
23242
|
return "xai";
|
|
23235
23243
|
// Full model IDs
|
|
23236
23244
|
case "claude-sonnet-5":
|
|
23245
|
+
case "claude-opus-5":
|
|
23237
23246
|
case "claude-opus-4-6":
|
|
23238
23247
|
case "claude-haiku-4-5":
|
|
23239
23248
|
return "anthropic";
|
|
@@ -23241,6 +23250,10 @@ function getProviderForModel(modelName) {
|
|
|
23241
23250
|
case "gemini-2.0-flash":
|
|
23242
23251
|
return "google";
|
|
23243
23252
|
case "gpt-5":
|
|
23253
|
+
case "gpt-5.5":
|
|
23254
|
+
case "gpt-5.6-luna":
|
|
23255
|
+
case "gpt-5.6-sol":
|
|
23256
|
+
case "gpt-5.6-terra":
|
|
23244
23257
|
case "gpt-4.1-mini":
|
|
23245
23258
|
return "openai";
|
|
23246
23259
|
default:
|
|
@@ -23250,6 +23263,11 @@ function getProviderForModel(modelName) {
|
|
|
23250
23263
|
if (process.env.LLM_PROVIDER && PROVIDERS.includes(process.env.LLM_PROVIDER)) {
|
|
23251
23264
|
return process.env.LLM_PROVIDER;
|
|
23252
23265
|
}
|
|
23266
|
+
if (typeof modelName === "string") {
|
|
23267
|
+
const m = modelName.toLowerCase();
|
|
23268
|
+
if (m.startsWith("gpt-")) return "openai";
|
|
23269
|
+
if (m.startsWith("gemini-")) return "google";
|
|
23270
|
+
}
|
|
23253
23271
|
return "anthropic";
|
|
23254
23272
|
}
|
|
23255
23273
|
}
|
|
@@ -23258,23 +23276,19 @@ function normalizeApiKey(key) {
|
|
|
23258
23276
|
const trimmed = key.trim();
|
|
23259
23277
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
23260
23278
|
}
|
|
23279
|
+
var API_KEY_ENV = {
|
|
23280
|
+
anthropic: "ANTHROPIC_API_KEY",
|
|
23281
|
+
google: "GOOGLE_API_KEY",
|
|
23282
|
+
openai: "OPENAI_API_KEY",
|
|
23283
|
+
openrouter: "OPENROUTER_API_KEY",
|
|
23284
|
+
xai: "XAI_API_KEY"
|
|
23285
|
+
};
|
|
23261
23286
|
function lookupApiKeyForProvider(provider) {
|
|
23262
|
-
|
|
23263
|
-
|
|
23264
|
-
return normalizeApiKey(process.env.ANTHROPIC_API_KEY);
|
|
23265
|
-
case "google":
|
|
23266
|
-
return normalizeApiKey(process.env.GOOGLE_API_KEY);
|
|
23267
|
-
case "openai":
|
|
23268
|
-
return normalizeApiKey(process.env.OPENAI_API_KEY);
|
|
23269
|
-
case "openrouter":
|
|
23270
|
-
return normalizeApiKey(process.env.OPENROUTER_API_KEY);
|
|
23271
|
-
case "xai":
|
|
23272
|
-
return normalizeApiKey(process.env.XAI_API_KEY);
|
|
23273
|
-
case "claude_code":
|
|
23274
|
-
return normalizeApiKey(process.env.CLAUDE_CODE_API_KEY);
|
|
23275
|
-
default:
|
|
23276
|
-
return void 0;
|
|
23287
|
+
if (provider === "claude_code") {
|
|
23288
|
+
return normalizeApiKey(process.env.CLAUDE_CODE_API_KEY);
|
|
23277
23289
|
}
|
|
23290
|
+
if (!PROVIDERS.includes(provider)) return void 0;
|
|
23291
|
+
return normalizeApiKey(process.env[API_KEY_ENV[provider]]);
|
|
23278
23292
|
}
|
|
23279
23293
|
function hasApiKeyForProvider(provider) {
|
|
23280
23294
|
return !!lookupApiKeyForProvider(provider);
|
|
@@ -23547,23 +23561,26 @@ function getModel(provider, opts) {
|
|
|
23547
23561
|
}
|
|
23548
23562
|
}
|
|
23549
23563
|
var MODEL_CONTEXT_LIMITS = {
|
|
23550
|
-
// Anthropic
|
|
23564
|
+
// Anthropic — 1M is the default and the max on the 5-series; Haiku 4.5 is 200k.
|
|
23551
23565
|
"claude-sonnet-5": 1e6,
|
|
23566
|
+
"claude-opus-5": 1e6,
|
|
23552
23567
|
"claude-opus-4-6": 1e6,
|
|
23553
23568
|
"claude-haiku-4-5": 2e5,
|
|
23554
|
-
// Google
|
|
23555
|
-
"gemini-3-pro-preview":
|
|
23556
|
-
"gemini-2.0-flash":
|
|
23557
|
-
// OpenAI
|
|
23569
|
+
// Google — Gemini's "1M" is 2^20.
|
|
23570
|
+
"gemini-3-pro-preview": 1048576,
|
|
23571
|
+
"gemini-2.0-flash": 1048576,
|
|
23572
|
+
// OpenAI — 5.4+ is 1,050,000; the 4.1 family is 1,047,576; 5 through 5.3 are 400k.
|
|
23558
23573
|
"gpt-5": 4e5,
|
|
23559
23574
|
"gpt-5.5": 105e4,
|
|
23560
23575
|
"gpt-5.6-terra": 105e4,
|
|
23561
23576
|
"gpt-5.6-luna": 105e4,
|
|
23562
23577
|
"gpt-5.6-sol": 105e4,
|
|
23563
|
-
"gpt-4.1-mini":
|
|
23578
|
+
"gpt-4.1-mini": 1047576,
|
|
23564
23579
|
// OpenRouter — values from the OpenRouter model catalog
|
|
23565
23580
|
// (https://openrouter.ai/api/v1/models, context_length).
|
|
23566
23581
|
"stealth/ox-alpha": 1048576,
|
|
23582
|
+
"anthropic/claude-opus-5": 1e6,
|
|
23583
|
+
"anthropic/claude-sonnet-5": 1e6,
|
|
23567
23584
|
"openai/gpt-5": 4e5,
|
|
23568
23585
|
"openai/gpt-5.5": 105e4,
|
|
23569
23586
|
"openai/gpt-5.6-terra": 105e4,
|
|
@@ -23579,11 +23596,17 @@ var MODEL_CONTEXT_LIMITS = {
|
|
|
23579
23596
|
// right matters beyond display: contextLimit drives truncateOldToolResults,
|
|
23580
23597
|
// and premature truncation rewrites old messages — which invalidates Grok's
|
|
23581
23598
|
// automatic prefix cache on every subsequent step.
|
|
23599
|
+
"grok-4.6": 5e5,
|
|
23600
|
+
"grok-4.5": 5e5,
|
|
23601
|
+
"grok-4.3": 1e6,
|
|
23582
23602
|
"grok-4": 256e3,
|
|
23583
23603
|
"grok-4-fast": 2e6,
|
|
23584
23604
|
"grok-4-fast-reasoning": 2e6,
|
|
23585
23605
|
"grok-4-fast-non-reasoning": 2e6,
|
|
23586
23606
|
"grok-code-fast-1": 256e3,
|
|
23607
|
+
"x-ai/grok-4.6": 5e5,
|
|
23608
|
+
"x-ai/grok-4.5": 5e5,
|
|
23609
|
+
"x-ai/grok-4.3": 1e6,
|
|
23587
23610
|
"x-ai/grok-4": 256e3,
|
|
23588
23611
|
"x-ai/grok-4-fast": 2e6,
|
|
23589
23612
|
"x-ai/grok-code-fast-1": 256e3
|
|
@@ -23745,6 +23768,95 @@ function resolveLLMConfig(opts) {
|
|
|
23745
23768
|
return { provider, apiKey, model, modelName: effectiveModelName };
|
|
23746
23769
|
}
|
|
23747
23770
|
|
|
23771
|
+
// src/resolve.ts
|
|
23772
|
+
function listModels() {
|
|
23773
|
+
const out = [];
|
|
23774
|
+
for (const provider of PROVIDERS) {
|
|
23775
|
+
for (const [alias, modelId] of Object.entries(MODELS[provider])) {
|
|
23776
|
+
if (!modelId) continue;
|
|
23777
|
+
out.push({
|
|
23778
|
+
provider,
|
|
23779
|
+
alias,
|
|
23780
|
+
modelId,
|
|
23781
|
+
default: DEFAULT_MODELS[provider] === modelId
|
|
23782
|
+
});
|
|
23783
|
+
}
|
|
23784
|
+
}
|
|
23785
|
+
return out;
|
|
23786
|
+
}
|
|
23787
|
+
function parseModelName(name19) {
|
|
23788
|
+
if (!name19) return {};
|
|
23789
|
+
const slash = name19.indexOf("/");
|
|
23790
|
+
if (slash > 0) {
|
|
23791
|
+
const head = name19.slice(0, slash);
|
|
23792
|
+
if (PROVIDERS.includes(head)) {
|
|
23793
|
+
return { provider: head, modelId: name19.slice(slash + 1) || void 0 };
|
|
23794
|
+
}
|
|
23795
|
+
}
|
|
23796
|
+
return { modelId: name19 };
|
|
23797
|
+
}
|
|
23798
|
+
var ALIASES = new Set(Object.values(MODELS).flatMap((m) => Object.keys(m)));
|
|
23799
|
+
function envProvider() {
|
|
23800
|
+
const v = process.env.LLM_PROVIDER;
|
|
23801
|
+
return v && PROVIDERS.includes(v) ? v : void 0;
|
|
23802
|
+
}
|
|
23803
|
+
function canonicalModelName(model, provider) {
|
|
23804
|
+
const parsed = parseModelName(model);
|
|
23805
|
+
const chosen = provider ?? parsed.provider ?? getProviderForModel(model);
|
|
23806
|
+
if (!PROVIDERS.includes(chosen)) {
|
|
23807
|
+
throw new Error(`Unknown LLM provider: "${chosen}". Supported: ${PROVIDERS.join(", ")}`);
|
|
23808
|
+
}
|
|
23809
|
+
const p = chosen;
|
|
23810
|
+
if (model && !provider && !parsed.provider && model.includes("/") && !envProvider()) {
|
|
23811
|
+
const head = model.split("/")[0];
|
|
23812
|
+
throw new Error(
|
|
23813
|
+
`Model "${model}" has no provider prefix: "${head}" is not a provider (${PROVIDERS.join(", ")}). For an OpenRouter-hosted model write "openrouter/${model}"; otherwise pass the provider explicitly.`
|
|
23814
|
+
);
|
|
23815
|
+
}
|
|
23816
|
+
let modelId = parsed.modelId;
|
|
23817
|
+
if (modelId && ALIASES.has(modelId)) {
|
|
23818
|
+
const hit = MODELS[p][modelId];
|
|
23819
|
+
if (!hit) {
|
|
23820
|
+
throw new Error(
|
|
23821
|
+
`Model "${modelId}" is not available for provider "${p}". Available models: ${Object.keys(MODELS[p]).join(", ")}`
|
|
23822
|
+
);
|
|
23823
|
+
}
|
|
23824
|
+
modelId = hit;
|
|
23825
|
+
}
|
|
23826
|
+
if (!modelId) modelId = DEFAULT_MODELS[p];
|
|
23827
|
+
return { provider: p, modelId, name: `${p}/${modelId}` };
|
|
23828
|
+
}
|
|
23829
|
+
function maxOutputTokensFor(provider) {
|
|
23830
|
+
const env = Number(process.env.MAX_OUTPUT_TOKENS);
|
|
23831
|
+
if (env > 0) return env;
|
|
23832
|
+
return provider === "anthropic" ? 128e3 : 64e3;
|
|
23833
|
+
}
|
|
23834
|
+
async function resolveModel(opts = {}) {
|
|
23835
|
+
const ref = canonicalModelName(opts.model, opts.provider);
|
|
23836
|
+
const envName = API_KEY_ENV[ref.provider];
|
|
23837
|
+
const apiKey = normalizeApiKey(opts.apiKey) ?? normalizeApiKey(await opts.getSecret?.(envName)) ?? normalizeApiKey(process.env[envName]);
|
|
23838
|
+
if (!apiKey) {
|
|
23839
|
+
throw new Error(
|
|
23840
|
+
`No API key for provider "${ref.provider}": set ${envName} (or pass apiKey / getSecret)`
|
|
23841
|
+
);
|
|
23842
|
+
}
|
|
23843
|
+
const model = getModel(ref.provider, {
|
|
23844
|
+
modelName: ref.name,
|
|
23845
|
+
apiKey,
|
|
23846
|
+
baseUrl: opts.baseUrl,
|
|
23847
|
+
headers: opts.headers,
|
|
23848
|
+
abortSignal: opts.abortSignal,
|
|
23849
|
+
timeoutMs: opts.timeoutMs
|
|
23850
|
+
});
|
|
23851
|
+
return {
|
|
23852
|
+
...ref,
|
|
23853
|
+
model,
|
|
23854
|
+
apiKey,
|
|
23855
|
+
contextLimit: getContextLimit(ref.modelId, ref.provider),
|
|
23856
|
+
maxOutputTokens: maxOutputTokensFor(ref.provider)
|
|
23857
|
+
};
|
|
23858
|
+
}
|
|
23859
|
+
|
|
23748
23860
|
// src/stream.ts
|
|
23749
23861
|
var import_ai = require("ai");
|
|
23750
23862
|
|
|
@@ -24561,9 +24673,12 @@ function consoleLogger(name19) {
|
|
|
24561
24673
|
}
|
|
24562
24674
|
// Annotate the CommonJS export names for ESM import in node:
|
|
24563
24675
|
0 && (module.exports = {
|
|
24676
|
+
API_KEY_ENV,
|
|
24564
24677
|
ConversationStorage,
|
|
24678
|
+
DEFAULT_MODELS,
|
|
24565
24679
|
GATEWAY_PATHS,
|
|
24566
24680
|
MAX_CONVERSATIONS,
|
|
24681
|
+
MODELS,
|
|
24567
24682
|
OUTRO,
|
|
24568
24683
|
PROVIDERS,
|
|
24569
24684
|
SYSTEM,
|
|
@@ -24573,6 +24688,7 @@ function consoleLogger(name19) {
|
|
|
24573
24688
|
callGenerateObject,
|
|
24574
24689
|
callGenerateText,
|
|
24575
24690
|
callModel,
|
|
24691
|
+
canonicalModelName,
|
|
24576
24692
|
captureNativeFetchResults,
|
|
24577
24693
|
captureNativeResults,
|
|
24578
24694
|
computeSessionCost,
|
|
@@ -24600,12 +24716,16 @@ function consoleLogger(name19) {
|
|
|
24600
24716
|
htmlToText,
|
|
24601
24717
|
isPrivateAddress,
|
|
24602
24718
|
linkifyCitations,
|
|
24719
|
+
listModels,
|
|
24603
24720
|
loadModelPricing,
|
|
24721
|
+
maxOutputTokensFor,
|
|
24604
24722
|
normalizeApiKey,
|
|
24605
24723
|
normalizeCallerBaseURL,
|
|
24606
24724
|
normalizeUsage,
|
|
24725
|
+
parseModelName,
|
|
24607
24726
|
resolveFetchBackend,
|
|
24608
24727
|
resolveLLMConfig,
|
|
24728
|
+
resolveModel,
|
|
24609
24729
|
resolveSearchBackend,
|
|
24610
24730
|
searchWeb,
|
|
24611
24731
|
stripCitations,
|