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 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
- switch (provider) {
23263
- case "anthropic":
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,