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.d.cts
CHANGED
|
@@ -126,6 +126,9 @@ declare function gatewayEnvForProviders(baseUrl: string): {
|
|
|
126
126
|
declare const normalizeCallerBaseURL: typeof gatewayUrlFor;
|
|
127
127
|
declare const PROVIDERS: Provider[];
|
|
128
128
|
type ModelName = "sonnet" | "opus" | "haiku" | "gemini" | "gpt" | "kimi" | "grok";
|
|
129
|
+
type ModelId = string;
|
|
130
|
+
declare const MODELS: Record<Provider, Partial<Record<ModelName, ModelId>>>;
|
|
131
|
+
declare const DEFAULT_MODELS: Record<Provider, string>;
|
|
129
132
|
declare function getLightModelForProvider(provider: Provider): string;
|
|
130
133
|
interface TokenPricing {
|
|
131
134
|
inputTokenPrice: number;
|
|
@@ -152,6 +155,11 @@ declare function getProviderForModel(modelName?: ModelName | string): Provider;
|
|
|
152
155
|
* pasted with a trailing space still authenticates.
|
|
153
156
|
*/
|
|
154
157
|
declare function normalizeApiKey(key?: string | null): string | undefined;
|
|
158
|
+
/**
|
|
159
|
+
* The env var each provider's API key is read from. Exported so a host with
|
|
160
|
+
* its own secret store knows which NAME to look up (see resolve.ts).
|
|
161
|
+
*/
|
|
162
|
+
declare const API_KEY_ENV: Record<Provider, string>;
|
|
155
163
|
declare function hasApiKeyForProvider(provider: Provider | string): boolean;
|
|
156
164
|
declare function getApiKeyForProvider(provider: Provider | string): string;
|
|
157
165
|
interface GetModelOptions {
|
|
@@ -253,6 +261,91 @@ declare function resolveLLMConfig(opts?: {
|
|
|
253
261
|
light?: boolean;
|
|
254
262
|
}): LLMConfig;
|
|
255
263
|
|
|
264
|
+
interface ModelOption {
|
|
265
|
+
provider: Provider;
|
|
266
|
+
alias: ModelName;
|
|
267
|
+
modelId: string;
|
|
268
|
+
/** The provider's default — what you get with no model name at all. */
|
|
269
|
+
default: boolean;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Every alias in the MODELS table, in PROVIDERS order. Pure and keyless,
|
|
273
|
+
* which is what a UI picker or a server-config endpoint needs.
|
|
274
|
+
*/
|
|
275
|
+
declare function listModels(): ModelOption[];
|
|
276
|
+
interface ParsedModelName {
|
|
277
|
+
/** Set only when the name carries an explicit "<provider>/" prefix. */
|
|
278
|
+
provider?: Provider;
|
|
279
|
+
/** The name with that prefix stripped. Aliases are NOT resolved here.
|
|
280
|
+
* undefined for an empty name (or a bare "<provider>/"). */
|
|
281
|
+
modelId?: string;
|
|
282
|
+
}
|
|
283
|
+
/** Pure syntax: strip an explicit provider prefix, nothing else. */
|
|
284
|
+
declare function parseModelName(name?: string): ParsedModelName;
|
|
285
|
+
interface ModelRef {
|
|
286
|
+
provider: Provider;
|
|
287
|
+
/** Concrete id as the provider knows it (alias resolved, prefix stripped). */
|
|
288
|
+
modelId: string;
|
|
289
|
+
/** Canonical "<provider>/<modelId>" — unambiguous, itself a valid model name. */
|
|
290
|
+
name: string;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Resolve a model name to its provider + concrete id WITHOUT an API key.
|
|
294
|
+
* Follows getModel's rules — explicit `provider` wins, then an explicit
|
|
295
|
+
* prefix, then getProviderForModel's inference; aliases map through MODELS;
|
|
296
|
+
* no name → the provider's default — so what this reports is what
|
|
297
|
+
* resolveModel / getModel will build. (One deliberate extra: an alias after
|
|
298
|
+
* a prefix, "anthropic/sonnet", resolves too.)
|
|
299
|
+
*
|
|
300
|
+
* Rejects the one input getModel silently gets wrong: a slashed name whose
|
|
301
|
+
* first segment is NOT a provider ("moonshotai/kimi-k2.6") with nothing
|
|
302
|
+
* else naming the provider — inference falls to the default and the request
|
|
303
|
+
* 404s at the wrong API. Say so up front, with the fix. LLM_PROVIDER, when
|
|
304
|
+
* set, counts as "something naming the provider", exactly as it does for
|
|
305
|
+
* getProviderForModel.
|
|
306
|
+
*/
|
|
307
|
+
declare function canonicalModelName(model?: string, provider?: Provider | string): ModelRef;
|
|
308
|
+
/**
|
|
309
|
+
* Per-call output-token cap. An explicit MAX_OUTPUT_TOKENS env always wins.
|
|
310
|
+
* Otherwise the default is provider-aware: Anthropic runs at 128k because
|
|
311
|
+
* @ai-sdk/anthropic clamps known models down to their true per-model max
|
|
312
|
+
* instead of erroring, while OpenAI-compatible hosts (OpenRouter et al)
|
|
313
|
+
* reject max_tokens above the model limit rather than clamping, so they keep
|
|
314
|
+
* the conservative 64k default. Thinking tokens count against this same
|
|
315
|
+
* budget, so headroom matters more than the visible text length suggests.
|
|
316
|
+
*/
|
|
317
|
+
declare function maxOutputTokensFor(provider?: string): number;
|
|
318
|
+
interface ResolveOptions {
|
|
319
|
+
/** alias | id | "provider/id" | "openrouter/org/id". Omit for the provider's default. */
|
|
320
|
+
model?: string;
|
|
321
|
+
/** Explicit provider; otherwise inferred from `model`. */
|
|
322
|
+
provider?: Provider | string;
|
|
323
|
+
apiKey?: string;
|
|
324
|
+
/**
|
|
325
|
+
* Async key source consulted by env-var NAME ("OPENAI_API_KEY", …) before
|
|
326
|
+
* process.env — a host's own secret store. Only called when `apiKey` is
|
|
327
|
+
* absent.
|
|
328
|
+
*/
|
|
329
|
+
getSecret?: (envName: string) => Promise<string | undefined>;
|
|
330
|
+
baseUrl?: string;
|
|
331
|
+
headers?: Record<string, string>;
|
|
332
|
+
abortSignal?: AbortSignal;
|
|
333
|
+
timeoutMs?: number;
|
|
334
|
+
}
|
|
335
|
+
interface ResolvedModel extends ModelRef {
|
|
336
|
+
model: LanguageModel;
|
|
337
|
+
apiKey: string;
|
|
338
|
+
contextLimit: number;
|
|
339
|
+
maxOutputTokens: number;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Name → everything a caller needs to run: provider, concrete id, canonical
|
|
343
|
+
* name, the API key that was used, the LanguageModel, its context window,
|
|
344
|
+
* and the output-token cap. Key precedence: `apiKey` → `getSecret(envName)`
|
|
345
|
+
* → process.env; none → an error that names the env var. Logs nothing.
|
|
346
|
+
*/
|
|
347
|
+
declare function resolveModel(opts?: ResolveOptions): Promise<ResolvedModel>;
|
|
348
|
+
|
|
256
349
|
interface AiUsage {
|
|
257
350
|
input: number;
|
|
258
351
|
cache_read: number;
|
|
@@ -750,4 +843,4 @@ declare function createWebFetch(opts: CreateWebFetchOptions): WebFetchHandle;
|
|
|
750
843
|
*/
|
|
751
844
|
declare function captureNativeFetchResults(stepContent: unknown, target: WebFetchResult[]): void;
|
|
752
845
|
|
|
753
|
-
export { type AiUsage, type AiUsageWithLegacy, type Conversation, type ConversationData, ConversationStorage, type CreateWebFetchOptions, type CreateWebSearchOptions, type FetchBackend, type FetchUrlOptions, GATEWAY_PATHS, type GetModelOptions, type HostLookup, type LLMConfig, type Logger, MAX_CONVERSATIONS, type ModelName, OUTRO, PROVIDERS, type Provider, type ProviderTool, SYSTEM, type SearchBackend, type ThinkingSpeed, type TokenPricing, type TokenUsageForCost, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, type WebFetchHandle, type WebFetchOptions, type WebFetchResult, type WebSearchHandle, type WebSearchOptions, type WebSearchResult, addUsage, callGenerateObject, callGenerateText, callModel, captureNativeFetchResults, captureNativeResults, computeSessionCost, consoleLogger, createWebFetch, createWebSearch, emptyUsage, fetchUrl, gatewayEnvForProviders, gatewayUrlFor, gatewayUrlForModel, getApiKeyForProvider, getContextLimit, getGatewayBaseURL, getLightModelForProvider, getModel, getModelDetails, getProviderForModel, getProviderOptions, getProviderTool, getSearchApiKey, getTokenPricing, hasApiKeyForProvider, hasSearchApiKey, htmlToText, isPrivateAddress, linkifyCitations, loadModelPricing, normalizeApiKey, normalizeCallerBaseURL, normalizeUsage, resolveFetchBackend, resolveLLMConfig, resolveSearchBackend, searchWeb, stripCitations, validateFetchUrl, withLegacyUsage, withProviderCacheUsage };
|
|
846
|
+
export { API_KEY_ENV, type AiUsage, type AiUsageWithLegacy, type Conversation, type ConversationData, ConversationStorage, type CreateWebFetchOptions, type CreateWebSearchOptions, DEFAULT_MODELS, type FetchBackend, type FetchUrlOptions, GATEWAY_PATHS, type GetModelOptions, type HostLookup, type LLMConfig, type Logger, MAX_CONVERSATIONS, MODELS, type ModelName, type ModelOption, type ModelRef, OUTRO, PROVIDERS, type ParsedModelName, type Provider, type ProviderTool, type ResolveOptions, type ResolvedModel, SYSTEM, type SearchBackend, type ThinkingSpeed, type TokenPricing, type TokenUsageForCost, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, type WebFetchHandle, type WebFetchOptions, type WebFetchResult, type WebSearchHandle, type WebSearchOptions, type WebSearchResult, addUsage, callGenerateObject, callGenerateText, callModel, canonicalModelName, captureNativeFetchResults, captureNativeResults, computeSessionCost, consoleLogger, createWebFetch, createWebSearch, emptyUsage, fetchUrl, gatewayEnvForProviders, gatewayUrlFor, gatewayUrlForModel, getApiKeyForProvider, getContextLimit, getGatewayBaseURL, getLightModelForProvider, getModel, getModelDetails, getProviderForModel, getProviderOptions, getProviderTool, getSearchApiKey, getTokenPricing, hasApiKeyForProvider, hasSearchApiKey, htmlToText, isPrivateAddress, linkifyCitations, listModels, loadModelPricing, maxOutputTokensFor, normalizeApiKey, normalizeCallerBaseURL, normalizeUsage, parseModelName, resolveFetchBackend, resolveLLMConfig, resolveModel, resolveSearchBackend, searchWeb, stripCitations, validateFetchUrl, withLegacyUsage, withProviderCacheUsage };
|
package/dist/index.d.ts
CHANGED
|
@@ -126,6 +126,9 @@ declare function gatewayEnvForProviders(baseUrl: string): {
|
|
|
126
126
|
declare const normalizeCallerBaseURL: typeof gatewayUrlFor;
|
|
127
127
|
declare const PROVIDERS: Provider[];
|
|
128
128
|
type ModelName = "sonnet" | "opus" | "haiku" | "gemini" | "gpt" | "kimi" | "grok";
|
|
129
|
+
type ModelId = string;
|
|
130
|
+
declare const MODELS: Record<Provider, Partial<Record<ModelName, ModelId>>>;
|
|
131
|
+
declare const DEFAULT_MODELS: Record<Provider, string>;
|
|
129
132
|
declare function getLightModelForProvider(provider: Provider): string;
|
|
130
133
|
interface TokenPricing {
|
|
131
134
|
inputTokenPrice: number;
|
|
@@ -152,6 +155,11 @@ declare function getProviderForModel(modelName?: ModelName | string): Provider;
|
|
|
152
155
|
* pasted with a trailing space still authenticates.
|
|
153
156
|
*/
|
|
154
157
|
declare function normalizeApiKey(key?: string | null): string | undefined;
|
|
158
|
+
/**
|
|
159
|
+
* The env var each provider's API key is read from. Exported so a host with
|
|
160
|
+
* its own secret store knows which NAME to look up (see resolve.ts).
|
|
161
|
+
*/
|
|
162
|
+
declare const API_KEY_ENV: Record<Provider, string>;
|
|
155
163
|
declare function hasApiKeyForProvider(provider: Provider | string): boolean;
|
|
156
164
|
declare function getApiKeyForProvider(provider: Provider | string): string;
|
|
157
165
|
interface GetModelOptions {
|
|
@@ -253,6 +261,91 @@ declare function resolveLLMConfig(opts?: {
|
|
|
253
261
|
light?: boolean;
|
|
254
262
|
}): LLMConfig;
|
|
255
263
|
|
|
264
|
+
interface ModelOption {
|
|
265
|
+
provider: Provider;
|
|
266
|
+
alias: ModelName;
|
|
267
|
+
modelId: string;
|
|
268
|
+
/** The provider's default — what you get with no model name at all. */
|
|
269
|
+
default: boolean;
|
|
270
|
+
}
|
|
271
|
+
/**
|
|
272
|
+
* Every alias in the MODELS table, in PROVIDERS order. Pure and keyless,
|
|
273
|
+
* which is what a UI picker or a server-config endpoint needs.
|
|
274
|
+
*/
|
|
275
|
+
declare function listModels(): ModelOption[];
|
|
276
|
+
interface ParsedModelName {
|
|
277
|
+
/** Set only when the name carries an explicit "<provider>/" prefix. */
|
|
278
|
+
provider?: Provider;
|
|
279
|
+
/** The name with that prefix stripped. Aliases are NOT resolved here.
|
|
280
|
+
* undefined for an empty name (or a bare "<provider>/"). */
|
|
281
|
+
modelId?: string;
|
|
282
|
+
}
|
|
283
|
+
/** Pure syntax: strip an explicit provider prefix, nothing else. */
|
|
284
|
+
declare function parseModelName(name?: string): ParsedModelName;
|
|
285
|
+
interface ModelRef {
|
|
286
|
+
provider: Provider;
|
|
287
|
+
/** Concrete id as the provider knows it (alias resolved, prefix stripped). */
|
|
288
|
+
modelId: string;
|
|
289
|
+
/** Canonical "<provider>/<modelId>" — unambiguous, itself a valid model name. */
|
|
290
|
+
name: string;
|
|
291
|
+
}
|
|
292
|
+
/**
|
|
293
|
+
* Resolve a model name to its provider + concrete id WITHOUT an API key.
|
|
294
|
+
* Follows getModel's rules — explicit `provider` wins, then an explicit
|
|
295
|
+
* prefix, then getProviderForModel's inference; aliases map through MODELS;
|
|
296
|
+
* no name → the provider's default — so what this reports is what
|
|
297
|
+
* resolveModel / getModel will build. (One deliberate extra: an alias after
|
|
298
|
+
* a prefix, "anthropic/sonnet", resolves too.)
|
|
299
|
+
*
|
|
300
|
+
* Rejects the one input getModel silently gets wrong: a slashed name whose
|
|
301
|
+
* first segment is NOT a provider ("moonshotai/kimi-k2.6") with nothing
|
|
302
|
+
* else naming the provider — inference falls to the default and the request
|
|
303
|
+
* 404s at the wrong API. Say so up front, with the fix. LLM_PROVIDER, when
|
|
304
|
+
* set, counts as "something naming the provider", exactly as it does for
|
|
305
|
+
* getProviderForModel.
|
|
306
|
+
*/
|
|
307
|
+
declare function canonicalModelName(model?: string, provider?: Provider | string): ModelRef;
|
|
308
|
+
/**
|
|
309
|
+
* Per-call output-token cap. An explicit MAX_OUTPUT_TOKENS env always wins.
|
|
310
|
+
* Otherwise the default is provider-aware: Anthropic runs at 128k because
|
|
311
|
+
* @ai-sdk/anthropic clamps known models down to their true per-model max
|
|
312
|
+
* instead of erroring, while OpenAI-compatible hosts (OpenRouter et al)
|
|
313
|
+
* reject max_tokens above the model limit rather than clamping, so they keep
|
|
314
|
+
* the conservative 64k default. Thinking tokens count against this same
|
|
315
|
+
* budget, so headroom matters more than the visible text length suggests.
|
|
316
|
+
*/
|
|
317
|
+
declare function maxOutputTokensFor(provider?: string): number;
|
|
318
|
+
interface ResolveOptions {
|
|
319
|
+
/** alias | id | "provider/id" | "openrouter/org/id". Omit for the provider's default. */
|
|
320
|
+
model?: string;
|
|
321
|
+
/** Explicit provider; otherwise inferred from `model`. */
|
|
322
|
+
provider?: Provider | string;
|
|
323
|
+
apiKey?: string;
|
|
324
|
+
/**
|
|
325
|
+
* Async key source consulted by env-var NAME ("OPENAI_API_KEY", …) before
|
|
326
|
+
* process.env — a host's own secret store. Only called when `apiKey` is
|
|
327
|
+
* absent.
|
|
328
|
+
*/
|
|
329
|
+
getSecret?: (envName: string) => Promise<string | undefined>;
|
|
330
|
+
baseUrl?: string;
|
|
331
|
+
headers?: Record<string, string>;
|
|
332
|
+
abortSignal?: AbortSignal;
|
|
333
|
+
timeoutMs?: number;
|
|
334
|
+
}
|
|
335
|
+
interface ResolvedModel extends ModelRef {
|
|
336
|
+
model: LanguageModel;
|
|
337
|
+
apiKey: string;
|
|
338
|
+
contextLimit: number;
|
|
339
|
+
maxOutputTokens: number;
|
|
340
|
+
}
|
|
341
|
+
/**
|
|
342
|
+
* Name → everything a caller needs to run: provider, concrete id, canonical
|
|
343
|
+
* name, the API key that was used, the LanguageModel, its context window,
|
|
344
|
+
* and the output-token cap. Key precedence: `apiKey` → `getSecret(envName)`
|
|
345
|
+
* → process.env; none → an error that names the env var. Logs nothing.
|
|
346
|
+
*/
|
|
347
|
+
declare function resolveModel(opts?: ResolveOptions): Promise<ResolvedModel>;
|
|
348
|
+
|
|
256
349
|
interface AiUsage {
|
|
257
350
|
input: number;
|
|
258
351
|
cache_read: number;
|
|
@@ -750,4 +843,4 @@ declare function createWebFetch(opts: CreateWebFetchOptions): WebFetchHandle;
|
|
|
750
843
|
*/
|
|
751
844
|
declare function captureNativeFetchResults(stepContent: unknown, target: WebFetchResult[]): void;
|
|
752
845
|
|
|
753
|
-
export { type AiUsage, type AiUsageWithLegacy, type Conversation, type ConversationData, ConversationStorage, type CreateWebFetchOptions, type CreateWebSearchOptions, type FetchBackend, type FetchUrlOptions, GATEWAY_PATHS, type GetModelOptions, type HostLookup, type LLMConfig, type Logger, MAX_CONVERSATIONS, type ModelName, OUTRO, PROVIDERS, type Provider, type ProviderTool, SYSTEM, type SearchBackend, type ThinkingSpeed, type TokenPricing, type TokenUsageForCost, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, type WebFetchHandle, type WebFetchOptions, type WebFetchResult, type WebSearchHandle, type WebSearchOptions, type WebSearchResult, addUsage, callGenerateObject, callGenerateText, callModel, captureNativeFetchResults, captureNativeResults, computeSessionCost, consoleLogger, createWebFetch, createWebSearch, emptyUsage, fetchUrl, gatewayEnvForProviders, gatewayUrlFor, gatewayUrlForModel, getApiKeyForProvider, getContextLimit, getGatewayBaseURL, getLightModelForProvider, getModel, getModelDetails, getProviderForModel, getProviderOptions, getProviderTool, getSearchApiKey, getTokenPricing, hasApiKeyForProvider, hasSearchApiKey, htmlToText, isPrivateAddress, linkifyCitations, loadModelPricing, normalizeApiKey, normalizeCallerBaseURL, normalizeUsage, resolveFetchBackend, resolveLLMConfig, resolveSearchBackend, searchWeb, stripCitations, validateFetchUrl, withLegacyUsage, withProviderCacheUsage };
|
|
846
|
+
export { API_KEY_ENV, type AiUsage, type AiUsageWithLegacy, type Conversation, type ConversationData, ConversationStorage, type CreateWebFetchOptions, type CreateWebSearchOptions, DEFAULT_MODELS, type FetchBackend, type FetchUrlOptions, GATEWAY_PATHS, type GetModelOptions, type HostLookup, type LLMConfig, type Logger, MAX_CONVERSATIONS, MODELS, type ModelName, type ModelOption, type ModelRef, OUTRO, PROVIDERS, type ParsedModelName, type Provider, type ProviderTool, type ResolveOptions, type ResolvedModel, SYSTEM, type SearchBackend, type ThinkingSpeed, type TokenPricing, type TokenUsageForCost, WEB_FETCH_TOOL_NAME, WEB_SEARCH_TOOL_NAME, type WebFetchHandle, type WebFetchOptions, type WebFetchResult, type WebSearchHandle, type WebSearchOptions, type WebSearchResult, addUsage, callGenerateObject, callGenerateText, callModel, canonicalModelName, captureNativeFetchResults, captureNativeResults, computeSessionCost, consoleLogger, createWebFetch, createWebSearch, emptyUsage, fetchUrl, gatewayEnvForProviders, gatewayUrlFor, gatewayUrlForModel, getApiKeyForProvider, getContextLimit, getGatewayBaseURL, getLightModelForProvider, getModel, getModelDetails, getProviderForModel, getProviderOptions, getProviderTool, getSearchApiKey, getTokenPricing, hasApiKeyForProvider, hasSearchApiKey, htmlToText, isPrivateAddress, linkifyCitations, listModels, loadModelPricing, maxOutputTokensFor, normalizeApiKey, normalizeCallerBaseURL, normalizeUsage, parseModelName, resolveFetchBackend, resolveLLMConfig, resolveModel, resolveSearchBackend, searchWeb, stripCitations, validateFetchUrl, withLegacyUsage, withProviderCacheUsage };
|
package/dist/index.js
CHANGED
|
@@ -23178,23 +23178,19 @@ function normalizeApiKey(key) {
|
|
|
23178
23178
|
const trimmed = key.trim();
|
|
23179
23179
|
return trimmed.length > 0 ? trimmed : void 0;
|
|
23180
23180
|
}
|
|
23181
|
+
var API_KEY_ENV = {
|
|
23182
|
+
anthropic: "ANTHROPIC_API_KEY",
|
|
23183
|
+
google: "GOOGLE_API_KEY",
|
|
23184
|
+
openai: "OPENAI_API_KEY",
|
|
23185
|
+
openrouter: "OPENROUTER_API_KEY",
|
|
23186
|
+
xai: "XAI_API_KEY"
|
|
23187
|
+
};
|
|
23181
23188
|
function lookupApiKeyForProvider(provider) {
|
|
23182
|
-
|
|
23183
|
-
|
|
23184
|
-
return normalizeApiKey(process.env.ANTHROPIC_API_KEY);
|
|
23185
|
-
case "google":
|
|
23186
|
-
return normalizeApiKey(process.env.GOOGLE_API_KEY);
|
|
23187
|
-
case "openai":
|
|
23188
|
-
return normalizeApiKey(process.env.OPENAI_API_KEY);
|
|
23189
|
-
case "openrouter":
|
|
23190
|
-
return normalizeApiKey(process.env.OPENROUTER_API_KEY);
|
|
23191
|
-
case "xai":
|
|
23192
|
-
return normalizeApiKey(process.env.XAI_API_KEY);
|
|
23193
|
-
case "claude_code":
|
|
23194
|
-
return normalizeApiKey(process.env.CLAUDE_CODE_API_KEY);
|
|
23195
|
-
default:
|
|
23196
|
-
return void 0;
|
|
23189
|
+
if (provider === "claude_code") {
|
|
23190
|
+
return normalizeApiKey(process.env.CLAUDE_CODE_API_KEY);
|
|
23197
23191
|
}
|
|
23192
|
+
if (!PROVIDERS.includes(provider)) return void 0;
|
|
23193
|
+
return normalizeApiKey(process.env[API_KEY_ENV[provider]]);
|
|
23198
23194
|
}
|
|
23199
23195
|
function hasApiKeyForProvider(provider) {
|
|
23200
23196
|
return !!lookupApiKeyForProvider(provider);
|
|
@@ -23665,6 +23661,95 @@ function resolveLLMConfig(opts) {
|
|
|
23665
23661
|
return { provider, apiKey, model, modelName: effectiveModelName };
|
|
23666
23662
|
}
|
|
23667
23663
|
|
|
23664
|
+
// src/resolve.ts
|
|
23665
|
+
function listModels() {
|
|
23666
|
+
const out = [];
|
|
23667
|
+
for (const provider of PROVIDERS) {
|
|
23668
|
+
for (const [alias, modelId] of Object.entries(MODELS[provider])) {
|
|
23669
|
+
if (!modelId) continue;
|
|
23670
|
+
out.push({
|
|
23671
|
+
provider,
|
|
23672
|
+
alias,
|
|
23673
|
+
modelId,
|
|
23674
|
+
default: DEFAULT_MODELS[provider] === modelId
|
|
23675
|
+
});
|
|
23676
|
+
}
|
|
23677
|
+
}
|
|
23678
|
+
return out;
|
|
23679
|
+
}
|
|
23680
|
+
function parseModelName(name19) {
|
|
23681
|
+
if (!name19) return {};
|
|
23682
|
+
const slash = name19.indexOf("/");
|
|
23683
|
+
if (slash > 0) {
|
|
23684
|
+
const head = name19.slice(0, slash);
|
|
23685
|
+
if (PROVIDERS.includes(head)) {
|
|
23686
|
+
return { provider: head, modelId: name19.slice(slash + 1) || void 0 };
|
|
23687
|
+
}
|
|
23688
|
+
}
|
|
23689
|
+
return { modelId: name19 };
|
|
23690
|
+
}
|
|
23691
|
+
var ALIASES = new Set(Object.values(MODELS).flatMap((m) => Object.keys(m)));
|
|
23692
|
+
function envProvider() {
|
|
23693
|
+
const v = process.env.LLM_PROVIDER;
|
|
23694
|
+
return v && PROVIDERS.includes(v) ? v : void 0;
|
|
23695
|
+
}
|
|
23696
|
+
function canonicalModelName(model, provider) {
|
|
23697
|
+
const parsed = parseModelName(model);
|
|
23698
|
+
const chosen = provider ?? parsed.provider ?? getProviderForModel(model);
|
|
23699
|
+
if (!PROVIDERS.includes(chosen)) {
|
|
23700
|
+
throw new Error(`Unknown LLM provider: "${chosen}". Supported: ${PROVIDERS.join(", ")}`);
|
|
23701
|
+
}
|
|
23702
|
+
const p = chosen;
|
|
23703
|
+
if (model && !provider && !parsed.provider && model.includes("/") && !envProvider()) {
|
|
23704
|
+
const head = model.split("/")[0];
|
|
23705
|
+
throw new Error(
|
|
23706
|
+
`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.`
|
|
23707
|
+
);
|
|
23708
|
+
}
|
|
23709
|
+
let modelId = parsed.modelId;
|
|
23710
|
+
if (modelId && ALIASES.has(modelId)) {
|
|
23711
|
+
const hit = MODELS[p][modelId];
|
|
23712
|
+
if (!hit) {
|
|
23713
|
+
throw new Error(
|
|
23714
|
+
`Model "${modelId}" is not available for provider "${p}". Available models: ${Object.keys(MODELS[p]).join(", ")}`
|
|
23715
|
+
);
|
|
23716
|
+
}
|
|
23717
|
+
modelId = hit;
|
|
23718
|
+
}
|
|
23719
|
+
if (!modelId) modelId = DEFAULT_MODELS[p];
|
|
23720
|
+
return { provider: p, modelId, name: `${p}/${modelId}` };
|
|
23721
|
+
}
|
|
23722
|
+
function maxOutputTokensFor(provider) {
|
|
23723
|
+
const env = Number(process.env.MAX_OUTPUT_TOKENS);
|
|
23724
|
+
if (env > 0) return env;
|
|
23725
|
+
return provider === "anthropic" ? 128e3 : 64e3;
|
|
23726
|
+
}
|
|
23727
|
+
async function resolveModel(opts = {}) {
|
|
23728
|
+
const ref = canonicalModelName(opts.model, opts.provider);
|
|
23729
|
+
const envName = API_KEY_ENV[ref.provider];
|
|
23730
|
+
const apiKey = normalizeApiKey(opts.apiKey) ?? normalizeApiKey(await opts.getSecret?.(envName)) ?? normalizeApiKey(process.env[envName]);
|
|
23731
|
+
if (!apiKey) {
|
|
23732
|
+
throw new Error(
|
|
23733
|
+
`No API key for provider "${ref.provider}": set ${envName} (or pass apiKey / getSecret)`
|
|
23734
|
+
);
|
|
23735
|
+
}
|
|
23736
|
+
const model = getModel(ref.provider, {
|
|
23737
|
+
modelName: ref.name,
|
|
23738
|
+
apiKey,
|
|
23739
|
+
baseUrl: opts.baseUrl,
|
|
23740
|
+
headers: opts.headers,
|
|
23741
|
+
abortSignal: opts.abortSignal,
|
|
23742
|
+
timeoutMs: opts.timeoutMs
|
|
23743
|
+
});
|
|
23744
|
+
return {
|
|
23745
|
+
...ref,
|
|
23746
|
+
model,
|
|
23747
|
+
apiKey,
|
|
23748
|
+
contextLimit: getContextLimit(ref.modelId, ref.provider),
|
|
23749
|
+
maxOutputTokens: maxOutputTokensFor(ref.provider)
|
|
23750
|
+
};
|
|
23751
|
+
}
|
|
23752
|
+
|
|
23668
23753
|
// src/stream.ts
|
|
23669
23754
|
import {
|
|
23670
23755
|
streamText,
|
|
@@ -24484,9 +24569,12 @@ function consoleLogger(name19) {
|
|
|
24484
24569
|
};
|
|
24485
24570
|
}
|
|
24486
24571
|
export {
|
|
24572
|
+
API_KEY_ENV,
|
|
24487
24573
|
ConversationStorage,
|
|
24574
|
+
DEFAULT_MODELS,
|
|
24488
24575
|
GATEWAY_PATHS,
|
|
24489
24576
|
MAX_CONVERSATIONS,
|
|
24577
|
+
MODELS,
|
|
24490
24578
|
OUTRO,
|
|
24491
24579
|
PROVIDERS,
|
|
24492
24580
|
SYSTEM,
|
|
@@ -24496,6 +24584,7 @@ export {
|
|
|
24496
24584
|
callGenerateObject,
|
|
24497
24585
|
callGenerateText,
|
|
24498
24586
|
callModel,
|
|
24587
|
+
canonicalModelName,
|
|
24499
24588
|
captureNativeFetchResults,
|
|
24500
24589
|
captureNativeResults,
|
|
24501
24590
|
computeSessionCost,
|
|
@@ -24523,12 +24612,16 @@ export {
|
|
|
24523
24612
|
htmlToText,
|
|
24524
24613
|
isPrivateAddress,
|
|
24525
24614
|
linkifyCitations,
|
|
24615
|
+
listModels,
|
|
24526
24616
|
loadModelPricing,
|
|
24617
|
+
maxOutputTokensFor,
|
|
24527
24618
|
normalizeApiKey,
|
|
24528
24619
|
normalizeCallerBaseURL,
|
|
24529
24620
|
normalizeUsage,
|
|
24621
|
+
parseModelName,
|
|
24530
24622
|
resolveFetchBackend,
|
|
24531
24623
|
resolveLLMConfig,
|
|
24624
|
+
resolveModel,
|
|
24532
24625
|
resolveSearchBackend,
|
|
24533
24626
|
searchWeb,
|
|
24534
24627
|
stripCitations,
|