aieo 0.1.38 → 0.1.39
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 +116 -15
- 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 +108 -15
- 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,
|
|
@@ -23258,23 +23266,19 @@ function normalizeApiKey(key) {
|
|
|
23258
23266
|
const trimmed = key.trim();
|
|
23259
23267
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
23260
23268
|
}
|
|
23269
|
+
var API_KEY_ENV = {
|
|
23270
|
+
anthropic: "ANTHROPIC_API_KEY",
|
|
23271
|
+
google: "GOOGLE_API_KEY",
|
|
23272
|
+
openai: "OPENAI_API_KEY",
|
|
23273
|
+
openrouter: "OPENROUTER_API_KEY",
|
|
23274
|
+
xai: "XAI_API_KEY"
|
|
23275
|
+
};
|
|
23261
23276
|
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;
|
|
23277
|
+
if (provider === "claude_code") {
|
|
23278
|
+
return normalizeApiKey(process.env.CLAUDE_CODE_API_KEY);
|
|
23277
23279
|
}
|
|
23280
|
+
if (!PROVIDERS.includes(provider)) return void 0;
|
|
23281
|
+
return normalizeApiKey(process.env[API_KEY_ENV[provider]]);
|
|
23278
23282
|
}
|
|
23279
23283
|
function hasApiKeyForProvider(provider) {
|
|
23280
23284
|
return !!lookupApiKeyForProvider(provider);
|
|
@@ -23745,6 +23749,95 @@ function resolveLLMConfig(opts) {
|
|
|
23745
23749
|
return { provider, apiKey, model, modelName: effectiveModelName };
|
|
23746
23750
|
}
|
|
23747
23751
|
|
|
23752
|
+
// src/resolve.ts
|
|
23753
|
+
function listModels() {
|
|
23754
|
+
const out = [];
|
|
23755
|
+
for (const provider of PROVIDERS) {
|
|
23756
|
+
for (const [alias, modelId] of Object.entries(MODELS[provider])) {
|
|
23757
|
+
if (!modelId) continue;
|
|
23758
|
+
out.push({
|
|
23759
|
+
provider,
|
|
23760
|
+
alias,
|
|
23761
|
+
modelId,
|
|
23762
|
+
default: DEFAULT_MODELS[provider] === modelId
|
|
23763
|
+
});
|
|
23764
|
+
}
|
|
23765
|
+
}
|
|
23766
|
+
return out;
|
|
23767
|
+
}
|
|
23768
|
+
function parseModelName(name19) {
|
|
23769
|
+
if (!name19) return {};
|
|
23770
|
+
const slash = name19.indexOf("/");
|
|
23771
|
+
if (slash > 0) {
|
|
23772
|
+
const head = name19.slice(0, slash);
|
|
23773
|
+
if (PROVIDERS.includes(head)) {
|
|
23774
|
+
return { provider: head, modelId: name19.slice(slash + 1) || void 0 };
|
|
23775
|
+
}
|
|
23776
|
+
}
|
|
23777
|
+
return { modelId: name19 };
|
|
23778
|
+
}
|
|
23779
|
+
var ALIASES = new Set(Object.values(MODELS).flatMap((m) => Object.keys(m)));
|
|
23780
|
+
function envProvider() {
|
|
23781
|
+
const v = process.env.LLM_PROVIDER;
|
|
23782
|
+
return v && PROVIDERS.includes(v) ? v : void 0;
|
|
23783
|
+
}
|
|
23784
|
+
function canonicalModelName(model, provider) {
|
|
23785
|
+
const parsed = parseModelName(model);
|
|
23786
|
+
const chosen = provider ?? parsed.provider ?? getProviderForModel(model);
|
|
23787
|
+
if (!PROVIDERS.includes(chosen)) {
|
|
23788
|
+
throw new Error(`Unknown LLM provider: "${chosen}". Supported: ${PROVIDERS.join(", ")}`);
|
|
23789
|
+
}
|
|
23790
|
+
const p = chosen;
|
|
23791
|
+
if (model && !provider && !parsed.provider && model.includes("/") && !envProvider()) {
|
|
23792
|
+
const head = model.split("/")[0];
|
|
23793
|
+
throw new Error(
|
|
23794
|
+
`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.`
|
|
23795
|
+
);
|
|
23796
|
+
}
|
|
23797
|
+
let modelId = parsed.modelId;
|
|
23798
|
+
if (modelId && ALIASES.has(modelId)) {
|
|
23799
|
+
const hit = MODELS[p][modelId];
|
|
23800
|
+
if (!hit) {
|
|
23801
|
+
throw new Error(
|
|
23802
|
+
`Model "${modelId}" is not available for provider "${p}". Available models: ${Object.keys(MODELS[p]).join(", ")}`
|
|
23803
|
+
);
|
|
23804
|
+
}
|
|
23805
|
+
modelId = hit;
|
|
23806
|
+
}
|
|
23807
|
+
if (!modelId) modelId = DEFAULT_MODELS[p];
|
|
23808
|
+
return { provider: p, modelId, name: `${p}/${modelId}` };
|
|
23809
|
+
}
|
|
23810
|
+
function maxOutputTokensFor(provider) {
|
|
23811
|
+
const env = Number(process.env.MAX_OUTPUT_TOKENS);
|
|
23812
|
+
if (env > 0) return env;
|
|
23813
|
+
return provider === "anthropic" ? 128e3 : 64e3;
|
|
23814
|
+
}
|
|
23815
|
+
async function resolveModel(opts = {}) {
|
|
23816
|
+
const ref = canonicalModelName(opts.model, opts.provider);
|
|
23817
|
+
const envName = API_KEY_ENV[ref.provider];
|
|
23818
|
+
const apiKey = normalizeApiKey(opts.apiKey) ?? normalizeApiKey(await opts.getSecret?.(envName)) ?? normalizeApiKey(process.env[envName]);
|
|
23819
|
+
if (!apiKey) {
|
|
23820
|
+
throw new Error(
|
|
23821
|
+
`No API key for provider "${ref.provider}": set ${envName} (or pass apiKey / getSecret)`
|
|
23822
|
+
);
|
|
23823
|
+
}
|
|
23824
|
+
const model = getModel(ref.provider, {
|
|
23825
|
+
modelName: ref.name,
|
|
23826
|
+
apiKey,
|
|
23827
|
+
baseUrl: opts.baseUrl,
|
|
23828
|
+
headers: opts.headers,
|
|
23829
|
+
abortSignal: opts.abortSignal,
|
|
23830
|
+
timeoutMs: opts.timeoutMs
|
|
23831
|
+
});
|
|
23832
|
+
return {
|
|
23833
|
+
...ref,
|
|
23834
|
+
model,
|
|
23835
|
+
apiKey,
|
|
23836
|
+
contextLimit: getContextLimit(ref.modelId, ref.provider),
|
|
23837
|
+
maxOutputTokens: maxOutputTokensFor(ref.provider)
|
|
23838
|
+
};
|
|
23839
|
+
}
|
|
23840
|
+
|
|
23748
23841
|
// src/stream.ts
|
|
23749
23842
|
var import_ai = require("ai");
|
|
23750
23843
|
|
|
@@ -24561,9 +24654,12 @@ function consoleLogger(name19) {
|
|
|
24561
24654
|
}
|
|
24562
24655
|
// Annotate the CommonJS export names for ESM import in node:
|
|
24563
24656
|
0 && (module.exports = {
|
|
24657
|
+
API_KEY_ENV,
|
|
24564
24658
|
ConversationStorage,
|
|
24659
|
+
DEFAULT_MODELS,
|
|
24565
24660
|
GATEWAY_PATHS,
|
|
24566
24661
|
MAX_CONVERSATIONS,
|
|
24662
|
+
MODELS,
|
|
24567
24663
|
OUTRO,
|
|
24568
24664
|
PROVIDERS,
|
|
24569
24665
|
SYSTEM,
|
|
@@ -24573,6 +24669,7 @@ function consoleLogger(name19) {
|
|
|
24573
24669
|
callGenerateObject,
|
|
24574
24670
|
callGenerateText,
|
|
24575
24671
|
callModel,
|
|
24672
|
+
canonicalModelName,
|
|
24576
24673
|
captureNativeFetchResults,
|
|
24577
24674
|
captureNativeResults,
|
|
24578
24675
|
computeSessionCost,
|
|
@@ -24600,12 +24697,16 @@ function consoleLogger(name19) {
|
|
|
24600
24697
|
htmlToText,
|
|
24601
24698
|
isPrivateAddress,
|
|
24602
24699
|
linkifyCitations,
|
|
24700
|
+
listModels,
|
|
24603
24701
|
loadModelPricing,
|
|
24702
|
+
maxOutputTokensFor,
|
|
24604
24703
|
normalizeApiKey,
|
|
24605
24704
|
normalizeCallerBaseURL,
|
|
24606
24705
|
normalizeUsage,
|
|
24706
|
+
parseModelName,
|
|
24607
24707
|
resolveFetchBackend,
|
|
24608
24708
|
resolveLLMConfig,
|
|
24709
|
+
resolveModel,
|
|
24609
24710
|
resolveSearchBackend,
|
|
24610
24711
|
searchWeb,
|
|
24611
24712
|
stripCitations,
|