@zhivex-ai/core 1.7.0 → 1.9.0

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.
@@ -0,0 +1,105 @@
1
+ import type { ModelCatalog, ModelCatalogEntry } from "./catalog.js";
2
+ import { ConfigurationError } from "./errors.js";
3
+ import type { LanguageModel, ModelCapabilities, ProviderAdapter } from "./types.js";
4
+ export type ModelResolutionErrorCode = "invalid_configuration" | "invalid_identifier" | "alias_collision" | "unknown_alias" | "unknown_provider" | "unknown_model" | "invalid_resolved_model";
5
+ /** Typed, preflight-only failure raised by the optional model resolver. */
6
+ export declare class ModelResolutionError extends ConfigurationError {
7
+ readonly code: ModelResolutionErrorCode;
8
+ readonly details: {
9
+ identifier?: string;
10
+ provider?: string;
11
+ modelId?: string;
12
+ alias?: string;
13
+ };
14
+ constructor(code: ModelResolutionErrorCode, message: string, details?: {
15
+ identifier?: string;
16
+ provider?: string;
17
+ modelId?: string;
18
+ alias?: string;
19
+ }, options?: {
20
+ cause?: unknown;
21
+ });
22
+ }
23
+ export interface ModelReference {
24
+ readonly provider: string;
25
+ readonly modelId: string;
26
+ }
27
+ export interface ModelResolverAlias {
28
+ /** Application-owned shorthand. Aliases cannot contain `/`, so they never shadow explicit identifiers. */
29
+ readonly alias: string;
30
+ /** Explicit provider/model target or its structured equivalent. Alias chains are intentionally unsupported. */
31
+ readonly target: string | ModelReference;
32
+ }
33
+ export interface ModelResolverBackend<TLanguageModel extends LanguageModel = LanguageModel> {
34
+ /** Safe, application-defined label emitted in resolution metadata. Never use an endpoint or credential here. */
35
+ readonly name: string;
36
+ languageModel(reference: ModelReference): TLanguageModel;
37
+ }
38
+ export interface ModelResolutionCatalogMetadata {
39
+ readonly schemaVersion: number;
40
+ readonly contractVersion: string;
41
+ readonly snapshotVersion: string;
42
+ readonly pricingVersion?: string;
43
+ readonly currency?: string;
44
+ }
45
+ export interface ModelResolutionSourceMetadata {
46
+ readonly kind: "adapter" | "backend";
47
+ readonly name: string;
48
+ }
49
+ export type ModelResolutionCatalogEntry = Readonly<Omit<ModelCatalogEntry, "aliases" | "longContextPricing" | "recommendedFor">> & {
50
+ readonly aliases?: ReadonlyArray<NonNullable<ModelCatalogEntry["aliases"]>[number]>;
51
+ readonly longContextPricing?: Readonly<NonNullable<ModelCatalogEntry["longContextPricing"]>>;
52
+ readonly recommendedFor?: ReadonlyArray<NonNullable<ModelCatalogEntry["recommendedFor"]>[number]>;
53
+ };
54
+ export type ModelResolutionCapabilities = Readonly<Omit<ModelCapabilities, "reasoningEfforts" | "reasoningModes" | "reasoningContexts" | "realtime" | "agentCapabilities">> & {
55
+ readonly reasoningEfforts?: ReadonlyArray<NonNullable<ModelCapabilities["reasoningEfforts"]>[number]>;
56
+ readonly reasoningModes?: ReadonlyArray<NonNullable<ModelCapabilities["reasoningModes"]>[number]>;
57
+ readonly reasoningContexts?: ReadonlyArray<NonNullable<ModelCapabilities["reasoningContexts"]>[number]>;
58
+ readonly realtime?: Readonly<NonNullable<ModelCapabilities["realtime"]>>;
59
+ readonly agentCapabilities?: Readonly<NonNullable<ModelCapabilities["agentCapabilities"]>>;
60
+ };
61
+ export interface ModelResolutionMetadata {
62
+ readonly schemaVersion: 1;
63
+ /** Exact, validated application input. */
64
+ readonly identifier: string;
65
+ /** Explicit target after expanding an application alias, before catalog aliases are canonicalized. */
66
+ readonly requested: Readonly<ModelReference>;
67
+ /** Canonical identity from the injected catalog. */
68
+ readonly resolved: Readonly<ModelReference>;
69
+ readonly alias?: string;
70
+ readonly source: Readonly<ModelResolutionSourceMetadata>;
71
+ readonly catalog: Readonly<ModelResolutionCatalogMetadata>;
72
+ readonly catalogEntry: ModelResolutionCatalogEntry;
73
+ readonly capabilities: ModelResolutionCapabilities;
74
+ }
75
+ export interface ModelResolution<TLanguageModel extends LanguageModel = LanguageModel> {
76
+ readonly model: TLanguageModel;
77
+ readonly metadata: ModelResolutionMetadata;
78
+ }
79
+ export interface ModelResolver<TLanguageModel extends LanguageModel = LanguageModel> {
80
+ /** Resolve both the existing provider model and immutable trace/budget metadata. */
81
+ resolve(identifier: string): ModelResolution<TLanguageModel>;
82
+ /** Convenience path for passing a resolved model directly to generateText, Agent, or another runtime API. */
83
+ model(identifier: string): TLanguageModel;
84
+ }
85
+ interface ModelResolverSharedOptions {
86
+ /** Explicit immutable inventory used to reject unknown providers/models before adapter or backend execution. */
87
+ catalog: ModelCatalog;
88
+ aliases?: readonly ModelResolverAlias[];
89
+ /** Receives frozen, secret-free metadata after a successful local resolution. */
90
+ onResolve?: (metadata: ModelResolutionMetadata) => void;
91
+ }
92
+ export type CreateModelResolverOptions<TLanguageModel extends LanguageModel = LanguageModel> = ModelResolverSharedOptions & ({
93
+ adapters: Readonly<Record<string, ProviderAdapter<TLanguageModel>>>;
94
+ backend?: never;
95
+ } | {
96
+ adapters?: never;
97
+ backend: ModelResolverBackend<TLanguageModel>;
98
+ });
99
+ /**
100
+ * Creates an instance-local, immutable Beta registry for optional provider/model identifiers.
101
+ * Direct provider factories remain the canonical low-level path.
102
+ */
103
+ export declare const createModelResolver: <TLanguageModel extends LanguageModel = LanguageModel>(options: CreateModelResolverOptions<TLanguageModel>) => ModelResolver<TLanguageModel>;
104
+ export {};
105
+ //# sourceMappingURL=model-resolver.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-resolver.d.ts","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,396 @@
1
+ import { ConfigurationError } from "./errors.js";
2
+ const MAX_PROVIDER_LENGTH = 128;
3
+ const MAX_MODEL_ID_LENGTH = 256;
4
+ const MAX_ALIAS_LENGTH = 128;
5
+ /** Typed, preflight-only failure raised by the optional model resolver. */
6
+ export class ModelResolutionError extends ConfigurationError {
7
+ code;
8
+ details;
9
+ constructor(code, message, details = {}, options) {
10
+ super(message, options);
11
+ this.code = code;
12
+ this.details = details;
13
+ }
14
+ }
15
+ const isObject = (value) => typeof value === "object" && value !== null && !Array.isArray(value);
16
+ const isObjectOrFunction = (value) => (typeof value === "object" && value !== null) || typeof value === "function";
17
+ const hasControlCharacters = (value) => /[\u0000-\u001f\u007f]/u.test(value);
18
+ const validateProvider = (provider) => typeof provider === "string" &&
19
+ provider.length > 0 &&
20
+ provider.length <= MAX_PROVIDER_LENGTH &&
21
+ provider === provider.trim() &&
22
+ /^[A-Za-z0-9][A-Za-z0-9._-]*$/u.test(provider);
23
+ const validateModelId = (modelId) => typeof modelId === "string" &&
24
+ modelId.length > 0 &&
25
+ modelId.length <= MAX_MODEL_ID_LENGTH &&
26
+ modelId === modelId.trim() &&
27
+ !modelId.includes("://") &&
28
+ !hasControlCharacters(modelId);
29
+ const invalidIdentifier = (message) => {
30
+ throw new ModelResolutionError("invalid_identifier", message);
31
+ };
32
+ const normalizeReference = (input) => {
33
+ if (typeof input === "string") {
34
+ if (input.length === 0 || input !== input.trim() || hasControlCharacters(input)) {
35
+ return invalidIdentifier("Model identifiers must be non-empty and must not contain surrounding whitespace or control characters.");
36
+ }
37
+ const separator = input.indexOf("/");
38
+ if (separator <= 0 || separator === input.length - 1) {
39
+ return invalidIdentifier('Model identifiers must use the explicit "provider/model" format.');
40
+ }
41
+ return normalizeReference({
42
+ provider: input.slice(0, separator),
43
+ modelId: input.slice(separator + 1)
44
+ });
45
+ }
46
+ if (!isObject(input) || !validateProvider(input.provider) || !validateModelId(input.modelId)) {
47
+ return invalidIdentifier(`Model references require a provider of at most ${MAX_PROVIDER_LENGTH} safe characters and a modelId of at most ${MAX_MODEL_ID_LENGTH} characters.`);
48
+ }
49
+ return Object.freeze({ provider: input.provider, modelId: input.modelId });
50
+ };
51
+ const normalizeAlias = (alias) => {
52
+ if (typeof alias !== "string" ||
53
+ alias.length === 0 ||
54
+ alias.length > MAX_ALIAS_LENGTH ||
55
+ alias !== alias.trim() ||
56
+ alias.includes("/") ||
57
+ hasControlCharacters(alias)) {
58
+ throw new ModelResolutionError("invalid_configuration", `Model aliases must be non-empty, contain no slash, and be at most ${MAX_ALIAS_LENGTH} characters.`);
59
+ }
60
+ return alias;
61
+ };
62
+ const requiredCapabilityBooleans = [
63
+ "streaming",
64
+ "tools",
65
+ "structuredOutput",
66
+ "jsonMode",
67
+ "toolChoice",
68
+ "parallelToolCalls",
69
+ "vision",
70
+ "files",
71
+ "audioInput",
72
+ "audioOutput",
73
+ "embeddings",
74
+ "reasoning",
75
+ "webSearch"
76
+ ];
77
+ const optionalCapabilityBooleans = [
78
+ "imageGeneration",
79
+ "videoGeneration",
80
+ "musicGeneration",
81
+ "fileSearch",
82
+ "urlContext",
83
+ "contextCaching",
84
+ "explicitPromptCaching",
85
+ "batch",
86
+ "interactions",
87
+ "rawPrediction",
88
+ "computerUse"
89
+ ];
90
+ const hasBooleanFields = (value, fields) => fields.every((field) => typeof value[field] === "boolean");
91
+ const hasOptionalBooleanFields = (value, fields) => fields.every((field) => value[field] === undefined || typeof value[field] === "boolean");
92
+ const isStringArrayOrUndefined = (value) => value === undefined || (Array.isArray(value) && value.every((entry) => typeof entry === "string"));
93
+ const isModelCapabilities = (value) => {
94
+ if (!isObject(value) ||
95
+ !hasBooleanFields(value, requiredCapabilityBooleans) ||
96
+ !hasOptionalBooleanFields(value, optionalCapabilityBooleans) ||
97
+ !isStringArrayOrUndefined(value.reasoningEfforts) ||
98
+ !isStringArrayOrUndefined(value.reasoningModes) ||
99
+ !isStringArrayOrUndefined(value.reasoningContexts)) {
100
+ return false;
101
+ }
102
+ if (value.realtime !== undefined &&
103
+ (!isObject(value.realtime) ||
104
+ !hasBooleanFields(value.realtime, [
105
+ "sessions",
106
+ "audioInput",
107
+ "audioOutput",
108
+ "imageInput",
109
+ "tools",
110
+ "browserTokens"
111
+ ]))) {
112
+ return false;
113
+ }
114
+ if (value.agentCapabilities !== undefined) {
115
+ const agent = value.agentCapabilities;
116
+ if (!isObject(agent) ||
117
+ (agent.supportTier !== "tier-a" && agent.supportTier !== "tier-b" && agent.supportTier !== "tier-c") ||
118
+ !hasBooleanFields(agent, [
119
+ "toolChoiceNone",
120
+ "approvalRequests",
121
+ "hostedWebSearch",
122
+ "hostedFileSearch",
123
+ "remoteMcp",
124
+ "computerUse",
125
+ "codeExecution",
126
+ "toolsets"
127
+ ]) ||
128
+ !hasOptionalBooleanFields(agent, [
129
+ "shell",
130
+ "applyPatch",
131
+ "toolSearch",
132
+ "webExtraction",
133
+ "skills",
134
+ "programmaticToolCalling",
135
+ "multiAgent"
136
+ ])) {
137
+ return false;
138
+ }
139
+ }
140
+ return true;
141
+ };
142
+ const cloneCatalogEntry = (entry) => {
143
+ const clone = {
144
+ provider: entry.provider,
145
+ modelId: entry.modelId,
146
+ ...(entry.aliases === undefined ? {} : { aliases: Object.freeze([...entry.aliases]) }),
147
+ ...(entry.inputCostPer1kTokens === undefined ? {} : { inputCostPer1kTokens: entry.inputCostPer1kTokens }),
148
+ ...(entry.cachedInputCostPer1kTokens === undefined
149
+ ? {}
150
+ : { cachedInputCostPer1kTokens: entry.cachedInputCostPer1kTokens }),
151
+ ...(entry.cacheWriteCostPer1kTokens === undefined
152
+ ? {}
153
+ : { cacheWriteCostPer1kTokens: entry.cacheWriteCostPer1kTokens }),
154
+ ...(entry.outputCostPer1kTokens === undefined ? {} : { outputCostPer1kTokens: entry.outputCostPer1kTokens }),
155
+ ...(entry.costPer1kTokens === undefined ? {} : { costPer1kTokens: entry.costPer1kTokens }),
156
+ ...(entry.longContextPricing === undefined
157
+ ? {}
158
+ : { longContextPricing: Object.freeze({ ...entry.longContextPricing }) }),
159
+ ...(entry.recommendedFor === undefined
160
+ ? {}
161
+ : { recommendedFor: Object.freeze([...entry.recommendedFor]) })
162
+ };
163
+ return Object.freeze(clone);
164
+ };
165
+ const cloneCapabilities = (capabilities) => {
166
+ const clone = {
167
+ streaming: capabilities.streaming,
168
+ tools: capabilities.tools,
169
+ structuredOutput: capabilities.structuredOutput,
170
+ jsonMode: capabilities.jsonMode,
171
+ toolChoice: capabilities.toolChoice,
172
+ parallelToolCalls: capabilities.parallelToolCalls,
173
+ vision: capabilities.vision,
174
+ files: capabilities.files,
175
+ audioInput: capabilities.audioInput,
176
+ audioOutput: capabilities.audioOutput,
177
+ embeddings: capabilities.embeddings,
178
+ reasoning: capabilities.reasoning,
179
+ webSearch: capabilities.webSearch,
180
+ ...(capabilities.imageGeneration === undefined ? {} : { imageGeneration: capabilities.imageGeneration }),
181
+ ...(capabilities.videoGeneration === undefined ? {} : { videoGeneration: capabilities.videoGeneration }),
182
+ ...(capabilities.musicGeneration === undefined ? {} : { musicGeneration: capabilities.musicGeneration }),
183
+ ...(capabilities.fileSearch === undefined ? {} : { fileSearch: capabilities.fileSearch }),
184
+ ...(capabilities.urlContext === undefined ? {} : { urlContext: capabilities.urlContext }),
185
+ ...(capabilities.contextCaching === undefined ? {} : { contextCaching: capabilities.contextCaching }),
186
+ ...(capabilities.explicitPromptCaching === undefined
187
+ ? {}
188
+ : { explicitPromptCaching: capabilities.explicitPromptCaching }),
189
+ ...(capabilities.batch === undefined ? {} : { batch: capabilities.batch }),
190
+ ...(capabilities.interactions === undefined ? {} : { interactions: capabilities.interactions }),
191
+ ...(capabilities.rawPrediction === undefined ? {} : { rawPrediction: capabilities.rawPrediction }),
192
+ ...(capabilities.computerUse === undefined ? {} : { computerUse: capabilities.computerUse }),
193
+ ...(capabilities.reasoningEfforts === undefined
194
+ ? {}
195
+ : { reasoningEfforts: Object.freeze([...capabilities.reasoningEfforts]) }),
196
+ ...(capabilities.reasoningModes === undefined
197
+ ? {}
198
+ : { reasoningModes: Object.freeze([...capabilities.reasoningModes]) }),
199
+ ...(capabilities.reasoningContexts === undefined
200
+ ? {}
201
+ : { reasoningContexts: Object.freeze([...capabilities.reasoningContexts]) }),
202
+ ...(capabilities.realtime === undefined
203
+ ? {}
204
+ : {
205
+ realtime: Object.freeze({
206
+ sessions: capabilities.realtime.sessions,
207
+ audioInput: capabilities.realtime.audioInput,
208
+ audioOutput: capabilities.realtime.audioOutput,
209
+ imageInput: capabilities.realtime.imageInput,
210
+ tools: capabilities.realtime.tools,
211
+ browserTokens: capabilities.realtime.browserTokens
212
+ })
213
+ }),
214
+ ...(capabilities.agentCapabilities === undefined
215
+ ? {}
216
+ : {
217
+ agentCapabilities: Object.freeze({
218
+ supportTier: capabilities.agentCapabilities.supportTier,
219
+ toolChoiceNone: capabilities.agentCapabilities.toolChoiceNone,
220
+ approvalRequests: capabilities.agentCapabilities.approvalRequests,
221
+ hostedWebSearch: capabilities.agentCapabilities.hostedWebSearch,
222
+ hostedFileSearch: capabilities.agentCapabilities.hostedFileSearch,
223
+ remoteMcp: capabilities.agentCapabilities.remoteMcp,
224
+ computerUse: capabilities.agentCapabilities.computerUse,
225
+ codeExecution: capabilities.agentCapabilities.codeExecution,
226
+ toolsets: capabilities.agentCapabilities.toolsets,
227
+ ...(capabilities.agentCapabilities.shell === undefined
228
+ ? {}
229
+ : { shell: capabilities.agentCapabilities.shell }),
230
+ ...(capabilities.agentCapabilities.applyPatch === undefined
231
+ ? {}
232
+ : { applyPatch: capabilities.agentCapabilities.applyPatch }),
233
+ ...(capabilities.agentCapabilities.toolSearch === undefined
234
+ ? {}
235
+ : { toolSearch: capabilities.agentCapabilities.toolSearch }),
236
+ ...(capabilities.agentCapabilities.webExtraction === undefined
237
+ ? {}
238
+ : { webExtraction: capabilities.agentCapabilities.webExtraction }),
239
+ ...(capabilities.agentCapabilities.skills === undefined
240
+ ? {}
241
+ : { skills: capabilities.agentCapabilities.skills }),
242
+ ...(capabilities.agentCapabilities.programmaticToolCalling === undefined
243
+ ? {}
244
+ : { programmaticToolCalling: capabilities.agentCapabilities.programmaticToolCalling }),
245
+ ...(capabilities.agentCapabilities.multiAgent === undefined
246
+ ? {}
247
+ : { multiAgent: capabilities.agentCapabilities.multiAgent })
248
+ })
249
+ })
250
+ };
251
+ return Object.freeze(clone);
252
+ };
253
+ const assertResolvedModel = (model) => {
254
+ if (!isObject(model) ||
255
+ !validateProvider(model.provider) ||
256
+ !validateModelId(model.modelId) ||
257
+ !isModelCapabilities(model.capabilities) ||
258
+ typeof model.generate !== "function") {
259
+ throw new ModelResolutionError("invalid_resolved_model", "The configured adapter or backend returned an invalid language model before any model call was made.");
260
+ }
261
+ return model;
262
+ };
263
+ const assertCatalog = (catalog) => {
264
+ if (!isObject(catalog) || typeof catalog.find !== "function" || typeof catalog.list !== "function") {
265
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver requires an explicit ModelCatalog instance.");
266
+ }
267
+ };
268
+ /**
269
+ * Creates an instance-local, immutable Beta registry for optional provider/model identifiers.
270
+ * Direct provider factories remain the canonical low-level path.
271
+ */
272
+ export const createModelResolver = (options) => {
273
+ if (!isObject(options)) {
274
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver options must be an object.");
275
+ }
276
+ assertCatalog(options.catalog);
277
+ const catalog = options.catalog;
278
+ const onResolve = options.onResolve;
279
+ const hasAdapters = options.adapters !== undefined;
280
+ const hasBackend = options.backend !== undefined;
281
+ if (hasAdapters === hasBackend) {
282
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver requires exactly one explicit source: adapters or backend.");
283
+ }
284
+ if (options.onResolve !== undefined && typeof options.onResolve !== "function") {
285
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver onResolve must be a function.");
286
+ }
287
+ const catalogEntries = catalog.list();
288
+ const catalogProviders = new Set(catalogEntries.map((entry) => entry.provider));
289
+ const catalogMetadata = catalog.metadata;
290
+ const catalogTraceMetadata = Object.freeze({
291
+ schemaVersion: catalogMetadata.schemaVersion,
292
+ contractVersion: catalogMetadata.contractVersion,
293
+ snapshotVersion: catalogMetadata.snapshotVersion,
294
+ ...(catalogMetadata.pricing?.version === undefined
295
+ ? {}
296
+ : { pricingVersion: catalogMetadata.pricing.version }),
297
+ ...(catalogMetadata.pricing?.currency === undefined ? {} : { currency: catalogMetadata.pricing.currency })
298
+ });
299
+ let adapters;
300
+ let backend;
301
+ if (hasAdapters) {
302
+ if (!isObject(options.adapters)) {
303
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver adapters must be an object.");
304
+ }
305
+ const adapterSnapshot = {};
306
+ for (const [provider, adapter] of Object.entries(options.adapters)) {
307
+ if (!validateProvider(provider) || !isObjectOrFunction(adapter) || typeof adapter.languageModel !== "function") {
308
+ throw new ModelResolutionError("invalid_configuration", "Every model resolver adapter requires a safe provider key and a languageModel factory.");
309
+ }
310
+ adapterSnapshot[provider] = adapter;
311
+ }
312
+ adapters = Object.freeze(adapterSnapshot);
313
+ }
314
+ else {
315
+ if (!isObject(options.backend) ||
316
+ !validateProvider(options.backend.name) ||
317
+ typeof options.backend.languageModel !== "function") {
318
+ throw new ModelResolutionError("invalid_configuration", "A model resolver backend requires a safe name and a languageModel factory.");
319
+ }
320
+ backend = options.backend;
321
+ }
322
+ const findCatalogEntry = (reference) => {
323
+ if (!catalogProviders.has(reference.provider)) {
324
+ throw new ModelResolutionError("unknown_provider", "The requested model provider is not present in the configured catalog.");
325
+ }
326
+ if (adapters !== undefined && !Object.prototype.hasOwnProperty.call(adapters, reference.provider)) {
327
+ throw new ModelResolutionError("unknown_provider", "The requested model provider is not configured in this resolver.");
328
+ }
329
+ const entry = catalog.find(reference.provider, reference.modelId);
330
+ if (entry === undefined) {
331
+ throw new ModelResolutionError("unknown_model", "The requested model is not present for its provider in the configured catalog.");
332
+ }
333
+ return entry;
334
+ };
335
+ const aliases = new Map();
336
+ if (options.aliases !== undefined) {
337
+ if (!Array.isArray(options.aliases)) {
338
+ throw new ModelResolutionError("invalid_configuration", "createModelResolver aliases must be an array.");
339
+ }
340
+ for (const aliasDefinition of options.aliases) {
341
+ if (!isObject(aliasDefinition)) {
342
+ throw new ModelResolutionError("invalid_configuration", "Every model resolver alias must be an object.");
343
+ }
344
+ const alias = normalizeAlias(aliasDefinition.alias);
345
+ if (aliases.has(alias)) {
346
+ throw new ModelResolutionError("alias_collision", "A model alias is configured more than once.");
347
+ }
348
+ const rawTarget = aliasDefinition.target;
349
+ if (typeof rawTarget !== "string" && !isObject(rawTarget)) {
350
+ throw new ModelResolutionError("invalid_configuration", "Every model resolver alias target must be an explicit provider/model string or reference.");
351
+ }
352
+ const target = normalizeReference(rawTarget);
353
+ findCatalogEntry(target);
354
+ aliases.set(alias, target);
355
+ }
356
+ }
357
+ const resolve = (identifier) => {
358
+ if (typeof identifier !== "string") {
359
+ return invalidIdentifier("Model identifiers must be strings.");
360
+ }
361
+ const aliasTarget = aliases.get(identifier);
362
+ if (!identifier.includes("/") && aliasTarget === undefined) {
363
+ const alias = normalizeAlias(identifier);
364
+ throw new ModelResolutionError("unknown_alias", "The requested model alias is not configured in this resolver.");
365
+ }
366
+ const requested = aliasTarget ?? normalizeReference(identifier);
367
+ const entry = findCatalogEntry(requested);
368
+ const canonical = Object.freeze({ provider: entry.provider, modelId: entry.modelId });
369
+ const source = adapters === undefined
370
+ ? Object.freeze({ kind: "backend", name: backend.name })
371
+ : Object.freeze({ kind: "adapter", name: canonical.provider });
372
+ const model = assertResolvedModel(adapters === undefined
373
+ ? backend.languageModel(canonical)
374
+ : adapters[canonical.provider].languageModel(canonical.modelId));
375
+ const metadata = Object.freeze({
376
+ schemaVersion: 1,
377
+ identifier,
378
+ requested: Object.freeze({ ...requested }),
379
+ resolved: canonical,
380
+ ...(aliasTarget === undefined ? {} : { alias: identifier }),
381
+ source,
382
+ catalog: catalogTraceMetadata,
383
+ catalogEntry: cloneCatalogEntry(entry),
384
+ capabilities: cloneCapabilities(model.capabilities)
385
+ });
386
+ onResolve?.(metadata);
387
+ return Object.freeze({ model, metadata });
388
+ };
389
+ return Object.freeze({
390
+ resolve,
391
+ model(identifier) {
392
+ return resolve(identifier).model;
393
+ }
394
+ });
395
+ };
396
+ //# sourceMappingURL=model-resolver.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"model-resolver.js","sourceRoot":"","sources":["../src/model-resolver.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,20 @@
1
+ declare const experimentalRawProviderOptionsBrand: unique symbol;
2
+ type DeepReadonly<T> = T extends readonly (infer TItem)[] ? readonly DeepReadonly<TItem>[] : T extends object ? {
3
+ readonly [TKey in keyof T]: DeepReadonly<T[TKey]>;
4
+ } : T;
5
+ /**
6
+ * Explicitly branded provider passthrough options.
7
+ *
8
+ * The SDK validates that the input is a plain JSON-like record, but the
9
+ * provider remains responsible for deciding which fields are accepted.
10
+ */
11
+ export type ExperimentalRawProviderOptions<T extends Record<string, unknown> = Record<string, unknown>> = DeepReadonly<T> & {
12
+ readonly [experimentalRawProviderOptionsBrand]: true;
13
+ };
14
+ /**
15
+ * Marks arbitrary provider request fields as an intentional Experimental
16
+ * dependency and returns an immutable, JSON-compatible copy.
17
+ */
18
+ export declare const experimentalRawProviderOptions: <T extends Record<string, unknown>>(options: T) => ExperimentalRawProviderOptions<T>;
19
+ export {};
20
+ //# sourceMappingURL=raw-provider-options.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-provider-options.d.ts","sourceRoot":"","sources":["../src/raw-provider-options.ts"],"names":[],"mappings":"AAEA,OAAO,CAAC,MAAM,mCAAmC,EAAE,OAAO,MAAM,CAAC;AAEjE,KAAK,YAAY,CAAC,CAAC,IAAI,CAAC,SAAS,SAAS,CAAC,MAAM,KAAK,CAAC,EAAE,GACrD,SAAS,YAAY,CAAC,KAAK,CAAC,EAAE,GAC9B,CAAC,SAAS,MAAM,GACd;IAAE,QAAQ,EAAE,IAAI,IAAI,MAAM,CAAC,GAAG,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,CAAC;CAAE,GACrD,CAAC,CAAC;AAER;;;;;GAKG;AACH,MAAM,MAAM,8BAA8B,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,IACpG,YAAY,CAAC,CAAC,CAAC,GAAG;IAAE,QAAQ,CAAC,CAAC,mCAAmC,CAAC,EAAE,IAAI,CAAA;CAAE,CAAC;AAsD7E;;;GAGG;AACH,eAAO,MAAM,8BAA8B,GAAI,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EAC9E,SAAS,CAAC,KACT,8BAA8B,CAAC,CAAC,CAKlC,CAAC"}
@@ -0,0 +1,63 @@
1
+ import { ValidationError } from "./errors.js";
2
+ const cloneRawValue = (value, path, seen) => {
3
+ if (value === null || typeof value === "string" || typeof value === "boolean") {
4
+ return value;
5
+ }
6
+ if (typeof value === "number") {
7
+ if (!Number.isFinite(value)) {
8
+ throw new ValidationError(`${path} must contain only finite JSON numbers.`);
9
+ }
10
+ return value;
11
+ }
12
+ if (Array.isArray(value)) {
13
+ if (seen.has(value)) {
14
+ throw new ValidationError(`${path} must not contain circular references.`);
15
+ }
16
+ seen.add(value);
17
+ const cloned = value.map((item, index) => cloneRawValue(item, `${path}[${index}]`, seen));
18
+ seen.delete(value);
19
+ return Object.freeze(cloned);
20
+ }
21
+ if (typeof value !== "object" || value === null) {
22
+ throw new ValidationError(`${path} must contain JSON-compatible values.`);
23
+ }
24
+ const prototype = Object.getPrototypeOf(value);
25
+ if (prototype !== Object.prototype && prototype !== null) {
26
+ throw new ValidationError(`${path} must contain plain objects only.`);
27
+ }
28
+ if (Object.getOwnPropertySymbols(value).length > 0) {
29
+ throw new ValidationError(`${path} must not contain symbol properties.`);
30
+ }
31
+ if (seen.has(value)) {
32
+ throw new ValidationError(`${path} must not contain circular references.`);
33
+ }
34
+ seen.add(value);
35
+ const cloned = {};
36
+ for (const key of Object.keys(value)) {
37
+ if (!key || /[\u0000-\u001f\u007f]/u.test(key)) {
38
+ throw new ValidationError(`${path} contains an invalid property name.`);
39
+ }
40
+ if (key === "__proto__" || key === "prototype" || key === "constructor") {
41
+ throw new ValidationError(`${path}.${key} is not allowed.`);
42
+ }
43
+ const descriptor = Object.getOwnPropertyDescriptor(value, key);
44
+ if (!descriptor || !("value" in descriptor)) {
45
+ throw new ValidationError(`${path}.${key} must be a data property.`);
46
+ }
47
+ const item = descriptor.value;
48
+ cloned[key] = cloneRawValue(item, `${path}.${key}`, seen);
49
+ }
50
+ seen.delete(value);
51
+ return Object.freeze(cloned);
52
+ };
53
+ /**
54
+ * Marks arbitrary provider request fields as an intentional Experimental
55
+ * dependency and returns an immutable, JSON-compatible copy.
56
+ */
57
+ export const experimentalRawProviderOptions = (options) => {
58
+ if (typeof options !== "object" || options === null || Array.isArray(options)) {
59
+ throw new ValidationError("Raw provider options must be a plain object.");
60
+ }
61
+ return cloneRawValue(options, "providerOptions", new Set());
62
+ };
63
+ //# sourceMappingURL=raw-provider-options.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"raw-provider-options.js","sourceRoot":"","sources":["../src/raw-provider-options.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -559,6 +559,11 @@ export type GenerateInputSource = {
559
559
  prompt?: undefined;
560
560
  messages?: undefined;
561
561
  };
562
+ /**
563
+ * Provider-specific request fields. Known provider adapters expose narrower
564
+ * generic option types. Arbitrary passthrough fields are Experimental; wrap
565
+ * them with `experimentalRawProviderOptions()` so the dependency is explicit.
566
+ */
562
567
  export type ProviderOptions = Record<string, unknown>;
563
568
  export interface ModelGenerateInput<TProviderOptions extends ProviderOptions = ProviderOptions> extends RetryOptions {
564
569
  messages: ModelMessage[];