aieo 0.1.37 → 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);
@@ -23501,7 +23505,8 @@ function getModel(provider, opts) {
23501
23505
  usage: { include: true },
23502
23506
  ...isMoonshot ? { provider: { order: ["moonshotai"], allow_fallbacks: true } } : {}
23503
23507
  };
23504
- return openrouter(modelId, settings);
23508
+ const gatewayModelId = baseURL ? `openrouter/${modelId}` : modelId;
23509
+ return openrouter(gatewayModelId, settings);
23505
23510
  }
23506
23511
  case "xai": {
23507
23512
  if (baseURL) {
@@ -23744,6 +23749,95 @@ function resolveLLMConfig(opts) {
23744
23749
  return { provider, apiKey, model, modelName: effectiveModelName };
23745
23750
  }
23746
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
+
23747
23841
  // src/stream.ts
23748
23842
  var import_ai = require("ai");
23749
23843
 
@@ -24560,9 +24654,12 @@ function consoleLogger(name19) {
24560
24654
  }
24561
24655
  // Annotate the CommonJS export names for ESM import in node:
24562
24656
  0 && (module.exports = {
24657
+ API_KEY_ENV,
24563
24658
  ConversationStorage,
24659
+ DEFAULT_MODELS,
24564
24660
  GATEWAY_PATHS,
24565
24661
  MAX_CONVERSATIONS,
24662
+ MODELS,
24566
24663
  OUTRO,
24567
24664
  PROVIDERS,
24568
24665
  SYSTEM,
@@ -24572,6 +24669,7 @@ function consoleLogger(name19) {
24572
24669
  callGenerateObject,
24573
24670
  callGenerateText,
24574
24671
  callModel,
24672
+ canonicalModelName,
24575
24673
  captureNativeFetchResults,
24576
24674
  captureNativeResults,
24577
24675
  computeSessionCost,
@@ -24599,12 +24697,16 @@ function consoleLogger(name19) {
24599
24697
  htmlToText,
24600
24698
  isPrivateAddress,
24601
24699
  linkifyCitations,
24700
+ listModels,
24602
24701
  loadModelPricing,
24702
+ maxOutputTokensFor,
24603
24703
  normalizeApiKey,
24604
24704
  normalizeCallerBaseURL,
24605
24705
  normalizeUsage,
24706
+ parseModelName,
24606
24707
  resolveFetchBackend,
24607
24708
  resolveLLMConfig,
24709
+ resolveModel,
24608
24710
  resolveSearchBackend,
24609
24711
  searchWeb,
24610
24712
  stripCitations,