@rowan-agent/models 0.4.4

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,109 @@
1
+ import { M as Model, L as LlmTokenUsage, P as Provider, A as Api, a as ApiStreamFn, S as StreamFn, b as LlmRequest, c as LlmStreamOptions, d as LlmStreamEvent } from './index-ChnUfIk1.cjs';
2
+ export { e as AgentContextMessage, f as AgentContextSkill, g as AgentEvent, h as AgentEventListener, i as AnthropicConfig, j as AssistantMessagePartial, B as BaseProviderConfig, C as ContentBlock, K as KnownApi, k as KnownProvider, l as LlmContentPart, m as LlmImageContent, n as LlmMessage, o as LlmModelRef, p as LlmModelUsage, q as LlmResponse, r as LlmStopReason, s as LlmTextContent, t as LlmThinkingContent, u as LlmToolCall, v as LlmToolChoice, w as LlmToolDefinition, x as LlmToolResultContent, y as LlmToolUseContent, z as ModelCost, O as OpenAICompletionsConfig, D as OpenAIResponsesConfig, E as Outcome, F as ProviderConfig, G as ProviderError, H as ProviderFetch, I as ProviderModelConfig, R as ResolveAnthropicConfigInput, J as ResolveOpenAICompletionsConfigInput, N as ResolveOpenAIResponsesConfigInput, T as TextBlock, Q as ThinkingBlock, U as ToolCall, V as ToolCallBlock, W as ToolResult, X as callOpenAICompletions, Y as createAnthropicStream, Z as createOpenAICompletionsStream, _ as createOpenAIResponsesStream, $ as resolveAnthropicConfig, a0 as resolveOpenAICompletionsConfig, a1 as resolveOpenAIResponsesConfig, a2 as streamAnthropic, a3 as streamOpenAICompletions, a4 as streamOpenAIResponses, a5 as textFromPartial, a6 as toolCallsFromPartial } from './index-ChnUfIk1.cjs';
3
+
4
+ interface ServerSentEvent {
5
+ event: string | null;
6
+ data: string;
7
+ }
8
+ declare function iterateSseMessages(body: ReadableStream<Uint8Array>, signal?: AbortSignal): AsyncGenerator<ServerSentEvent>;
9
+
10
+ /**
11
+ * Register a model in the registry. Models are keyed by (provider, id).
12
+ */
13
+ declare function registerModel(model: Model): void;
14
+ /**
15
+ * Look up a model by provider and model id.
16
+ */
17
+ declare function getModel(provider: string, modelId: string): Model | undefined;
18
+ /**
19
+ * Look up a model by a combined "provider/model" string (e.g. "anthropic/claude-sonnet-4-20250514").
20
+ */
21
+ declare function resolveModel(ref: string): Model | undefined;
22
+ /**
23
+ * Get all registered provider names.
24
+ */
25
+ declare function getProviders(): Provider[];
26
+ /**
27
+ * Get all models for a given provider.
28
+ */
29
+ declare function getModels(provider: string): Model[];
30
+ /**
31
+ * Get all registered models across all providers.
32
+ */
33
+ declare function getAllModels(): Model[];
34
+ /**
35
+ * Clear all registered models. Useful for testing.
36
+ */
37
+ declare function clearModels(): void;
38
+ /**
39
+ * Unregister all models for a given provider. Returns the number of models removed.
40
+ */
41
+ declare function unregisterProviderModels(provider: string): number;
42
+ declare function calculateCost(model: Model, usage: LlmTokenUsage): {
43
+ input: number;
44
+ output: number;
45
+ cacheRead: number;
46
+ cacheWrite: number;
47
+ total: number;
48
+ };
49
+
50
+ /**
51
+ * Static model catalog.
52
+ * This file is manually maintained. Run `bun run generate-models` to auto-generate
53
+ * from an upstream source when available.
54
+ */
55
+
56
+ declare const MODELS: Record<string, Record<string, Model>>;
57
+
58
+ interface ApiProvider {
59
+ api: Api;
60
+ stream: ApiStreamFn;
61
+ }
62
+ /**
63
+ * Register a provider for a given API protocol.
64
+ * When a model with `api === provider.api` is used, this provider handles it.
65
+ */
66
+ declare function registerApiProvider(provider: ApiProvider): void;
67
+ /**
68
+ * Look up a registered API provider by protocol name.
69
+ */
70
+ declare function getApiProvider(api: Api): ApiProvider | undefined;
71
+ /**
72
+ * List all registered API protocol names.
73
+ */
74
+ declare function listApiProviders(): Api[];
75
+ /**
76
+ * Clear all registered API providers.
77
+ */
78
+ declare function clearApiProviders(): void;
79
+ /**
80
+ * Unregister an API provider by protocol name.
81
+ * Returns true if a provider was removed.
82
+ */
83
+ declare function unregisterApiProvider(api: Api): boolean;
84
+ /**
85
+ * Register all built-in API providers.
86
+ * Each provider resolves its config from the Model descriptor and environment.
87
+ */
88
+ declare function registerBuiltInApiProviders(): void;
89
+ /**
90
+ * Resolve the API provider for a model and stream the request.
91
+ * This is the main entry point for model-based dispatch.
92
+ */
93
+ declare function stream(model: Model, request: LlmRequest, options: LlmStreamOptions): AsyncIterable<LlmStreamEvent>;
94
+ /**
95
+ * Convenience: resolve model from a "provider/model" string or LlmModelRef,
96
+ * then stream.
97
+ */
98
+ declare function streamByRef(ref: string | {
99
+ provider: string;
100
+ name: string;
101
+ }, request: Omit<LlmRequest, "model">, options?: LlmStreamOptions): AsyncIterable<LlmStreamEvent>;
102
+ type ProviderFactory = (model: {
103
+ provider: string;
104
+ name: string;
105
+ }) => StreamFn;
106
+ declare function registerProvider(name: string, factory: ProviderFactory): void;
107
+ declare function createDispatchStream(): StreamFn;
108
+
109
+ export { Api, type ApiProvider, ApiStreamFn, LlmRequest, LlmStreamEvent, LlmStreamOptions, LlmTokenUsage, MODELS, Model, Provider, type ProviderFactory, type ServerSentEvent, StreamFn, calculateCost, clearApiProviders, clearModels, createDispatchStream, getAllModels, getApiProvider, getModel, getModels, getProviders, iterateSseMessages, listApiProviders, registerApiProvider, registerBuiltInApiProviders, registerModel, registerProvider, resolveModel, stream, streamByRef, unregisterApiProvider, unregisterProviderModels };
@@ -0,0 +1,109 @@
1
+ import { M as Model, L as LlmTokenUsage, P as Provider, A as Api, a as ApiStreamFn, S as StreamFn, b as LlmRequest, c as LlmStreamOptions, d as LlmStreamEvent } from './index-ChnUfIk1.js';
2
+ export { e as AgentContextMessage, f as AgentContextSkill, g as AgentEvent, h as AgentEventListener, i as AnthropicConfig, j as AssistantMessagePartial, B as BaseProviderConfig, C as ContentBlock, K as KnownApi, k as KnownProvider, l as LlmContentPart, m as LlmImageContent, n as LlmMessage, o as LlmModelRef, p as LlmModelUsage, q as LlmResponse, r as LlmStopReason, s as LlmTextContent, t as LlmThinkingContent, u as LlmToolCall, v as LlmToolChoice, w as LlmToolDefinition, x as LlmToolResultContent, y as LlmToolUseContent, z as ModelCost, O as OpenAICompletionsConfig, D as OpenAIResponsesConfig, E as Outcome, F as ProviderConfig, G as ProviderError, H as ProviderFetch, I as ProviderModelConfig, R as ResolveAnthropicConfigInput, J as ResolveOpenAICompletionsConfigInput, N as ResolveOpenAIResponsesConfigInput, T as TextBlock, Q as ThinkingBlock, U as ToolCall, V as ToolCallBlock, W as ToolResult, X as callOpenAICompletions, Y as createAnthropicStream, Z as createOpenAICompletionsStream, _ as createOpenAIResponsesStream, $ as resolveAnthropicConfig, a0 as resolveOpenAICompletionsConfig, a1 as resolveOpenAIResponsesConfig, a2 as streamAnthropic, a3 as streamOpenAICompletions, a4 as streamOpenAIResponses, a5 as textFromPartial, a6 as toolCallsFromPartial } from './index-ChnUfIk1.js';
3
+
4
+ interface ServerSentEvent {
5
+ event: string | null;
6
+ data: string;
7
+ }
8
+ declare function iterateSseMessages(body: ReadableStream<Uint8Array>, signal?: AbortSignal): AsyncGenerator<ServerSentEvent>;
9
+
10
+ /**
11
+ * Register a model in the registry. Models are keyed by (provider, id).
12
+ */
13
+ declare function registerModel(model: Model): void;
14
+ /**
15
+ * Look up a model by provider and model id.
16
+ */
17
+ declare function getModel(provider: string, modelId: string): Model | undefined;
18
+ /**
19
+ * Look up a model by a combined "provider/model" string (e.g. "anthropic/claude-sonnet-4-20250514").
20
+ */
21
+ declare function resolveModel(ref: string): Model | undefined;
22
+ /**
23
+ * Get all registered provider names.
24
+ */
25
+ declare function getProviders(): Provider[];
26
+ /**
27
+ * Get all models for a given provider.
28
+ */
29
+ declare function getModels(provider: string): Model[];
30
+ /**
31
+ * Get all registered models across all providers.
32
+ */
33
+ declare function getAllModels(): Model[];
34
+ /**
35
+ * Clear all registered models. Useful for testing.
36
+ */
37
+ declare function clearModels(): void;
38
+ /**
39
+ * Unregister all models for a given provider. Returns the number of models removed.
40
+ */
41
+ declare function unregisterProviderModels(provider: string): number;
42
+ declare function calculateCost(model: Model, usage: LlmTokenUsage): {
43
+ input: number;
44
+ output: number;
45
+ cacheRead: number;
46
+ cacheWrite: number;
47
+ total: number;
48
+ };
49
+
50
+ /**
51
+ * Static model catalog.
52
+ * This file is manually maintained. Run `bun run generate-models` to auto-generate
53
+ * from an upstream source when available.
54
+ */
55
+
56
+ declare const MODELS: Record<string, Record<string, Model>>;
57
+
58
+ interface ApiProvider {
59
+ api: Api;
60
+ stream: ApiStreamFn;
61
+ }
62
+ /**
63
+ * Register a provider for a given API protocol.
64
+ * When a model with `api === provider.api` is used, this provider handles it.
65
+ */
66
+ declare function registerApiProvider(provider: ApiProvider): void;
67
+ /**
68
+ * Look up a registered API provider by protocol name.
69
+ */
70
+ declare function getApiProvider(api: Api): ApiProvider | undefined;
71
+ /**
72
+ * List all registered API protocol names.
73
+ */
74
+ declare function listApiProviders(): Api[];
75
+ /**
76
+ * Clear all registered API providers.
77
+ */
78
+ declare function clearApiProviders(): void;
79
+ /**
80
+ * Unregister an API provider by protocol name.
81
+ * Returns true if a provider was removed.
82
+ */
83
+ declare function unregisterApiProvider(api: Api): boolean;
84
+ /**
85
+ * Register all built-in API providers.
86
+ * Each provider resolves its config from the Model descriptor and environment.
87
+ */
88
+ declare function registerBuiltInApiProviders(): void;
89
+ /**
90
+ * Resolve the API provider for a model and stream the request.
91
+ * This is the main entry point for model-based dispatch.
92
+ */
93
+ declare function stream(model: Model, request: LlmRequest, options: LlmStreamOptions): AsyncIterable<LlmStreamEvent>;
94
+ /**
95
+ * Convenience: resolve model from a "provider/model" string or LlmModelRef,
96
+ * then stream.
97
+ */
98
+ declare function streamByRef(ref: string | {
99
+ provider: string;
100
+ name: string;
101
+ }, request: Omit<LlmRequest, "model">, options?: LlmStreamOptions): AsyncIterable<LlmStreamEvent>;
102
+ type ProviderFactory = (model: {
103
+ provider: string;
104
+ name: string;
105
+ }) => StreamFn;
106
+ declare function registerProvider(name: string, factory: ProviderFactory): void;
107
+ declare function createDispatchStream(): StreamFn;
108
+
109
+ export { Api, type ApiProvider, ApiStreamFn, LlmRequest, LlmStreamEvent, LlmStreamOptions, LlmTokenUsage, MODELS, Model, Provider, type ProviderFactory, type ServerSentEvent, StreamFn, calculateCost, clearApiProviders, clearModels, createDispatchStream, getAllModels, getApiProvider, getModel, getModels, getProviders, iterateSseMessages, listApiProviders, registerApiProvider, registerBuiltInApiProviders, registerModel, registerProvider, resolveModel, stream, streamByRef, unregisterApiProvider, unregisterProviderModels };
package/dist/index.js ADDED
@@ -0,0 +1,337 @@
1
+ import {
2
+ ProviderError,
3
+ callOpenAICompletions,
4
+ createAnthropicStream,
5
+ createOpenAICompletionsStream,
6
+ createOpenAIResponsesStream,
7
+ iterateSseMessages,
8
+ resolveAnthropicConfig,
9
+ resolveOpenAICompletionsConfig,
10
+ resolveOpenAIResponsesConfig,
11
+ streamAnthropic,
12
+ streamOpenAICompletions,
13
+ streamOpenAIResponses
14
+ } from "./chunk-J6S6ZJJA.js";
15
+
16
+ // src/protocol.ts
17
+ function textFromPartial(partial) {
18
+ return partial.contentBlocks.filter((b) => b.type === "text").map((b) => b.text).join("");
19
+ }
20
+ function toolCallsFromPartial(partial) {
21
+ return partial.contentBlocks.filter((b) => b.type === "tool_call");
22
+ }
23
+
24
+ // src/models.ts
25
+ var modelRegistry = /* @__PURE__ */ new Map();
26
+ function registerModel(model) {
27
+ let providerModels = modelRegistry.get(model.provider);
28
+ if (!providerModels) {
29
+ providerModels = /* @__PURE__ */ new Map();
30
+ modelRegistry.set(model.provider, providerModels);
31
+ }
32
+ providerModels.set(model.id, model);
33
+ }
34
+ function getModel(provider, modelId) {
35
+ return modelRegistry.get(provider)?.get(modelId);
36
+ }
37
+ function resolveModel(ref) {
38
+ const slashIndex = ref.indexOf("/");
39
+ if (slashIndex === -1) {
40
+ for (const models of modelRegistry.values()) {
41
+ const found = models.get(ref);
42
+ if (found) return found;
43
+ }
44
+ return void 0;
45
+ }
46
+ const provider = ref.slice(0, slashIndex);
47
+ const modelId = ref.slice(slashIndex + 1);
48
+ return getModel(provider, modelId);
49
+ }
50
+ function getProviders() {
51
+ return [...modelRegistry.keys()];
52
+ }
53
+ function getModels(provider) {
54
+ const models = modelRegistry.get(provider);
55
+ return models ? [...models.values()] : [];
56
+ }
57
+ function getAllModels() {
58
+ const result = [];
59
+ for (const models of modelRegistry.values()) {
60
+ result.push(...models.values());
61
+ }
62
+ return result;
63
+ }
64
+ function clearModels() {
65
+ modelRegistry.clear();
66
+ }
67
+ function unregisterProviderModels(provider) {
68
+ const models = modelRegistry.get(provider);
69
+ if (!models) return 0;
70
+ const count = models.size;
71
+ modelRegistry.delete(provider);
72
+ return count;
73
+ }
74
+ function calculateCost(model, usage) {
75
+ const input = (usage.inputTokens ?? 0) / 1e6 * model.cost.input;
76
+ const output = (usage.outputTokens ?? 0) / 1e6 * model.cost.output;
77
+ const cacheRead = (usage.cacheReadTokens ?? 0) / 1e6 * model.cost.cacheRead;
78
+ const cacheWrite = (usage.cacheWriteTokens ?? 0) / 1e6 * model.cost.cacheWrite;
79
+ return { input, output, cacheRead, cacheWrite, total: input + output + cacheRead + cacheWrite };
80
+ }
81
+
82
+ // src/models.generated.ts
83
+ var MODELS = {
84
+ anthropic: {
85
+ "claude-sonnet-4-20250514": {
86
+ id: "claude-sonnet-4-20250514",
87
+ name: "Claude Sonnet 4",
88
+ api: "anthropic-messages",
89
+ provider: "anthropic",
90
+ baseUrl: "https://api.anthropic.com",
91
+ reasoning: true,
92
+ input: ["text", "image"],
93
+ cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 3.75 },
94
+ contextWindow: 2e5,
95
+ maxTokens: 16e3
96
+ },
97
+ "claude-opus-4-20250514": {
98
+ id: "claude-opus-4-20250514",
99
+ name: "Claude Opus 4",
100
+ api: "anthropic-messages",
101
+ provider: "anthropic",
102
+ baseUrl: "https://api.anthropic.com",
103
+ reasoning: true,
104
+ input: ["text", "image"],
105
+ cost: { input: 15, output: 75, cacheRead: 1.5, cacheWrite: 18.75 },
106
+ contextWindow: 2e5,
107
+ maxTokens: 32e3
108
+ },
109
+ "claude-haiku-4-20250514": {
110
+ id: "claude-haiku-4-20250514",
111
+ name: "Claude Haiku 4",
112
+ api: "anthropic-messages",
113
+ provider: "anthropic",
114
+ baseUrl: "https://api.anthropic.com",
115
+ reasoning: false,
116
+ input: ["text", "image"],
117
+ cost: { input: 0.8, output: 4, cacheRead: 0.08, cacheWrite: 1 },
118
+ contextWindow: 2e5,
119
+ maxTokens: 8192
120
+ }
121
+ },
122
+ openai: {
123
+ "gpt-4o": {
124
+ id: "gpt-4o",
125
+ name: "GPT-4o",
126
+ api: "openai-completions",
127
+ provider: "openai",
128
+ baseUrl: "https://api.openai.com/v1",
129
+ reasoning: false,
130
+ input: ["text", "image"],
131
+ cost: { input: 2.5, output: 10, cacheRead: 1.25, cacheWrite: 0 },
132
+ contextWindow: 128e3,
133
+ maxTokens: 16384
134
+ },
135
+ "gpt-4o-mini": {
136
+ id: "gpt-4o-mini",
137
+ name: "GPT-4o Mini",
138
+ api: "openai-completions",
139
+ provider: "openai",
140
+ baseUrl: "https://api.openai.com/v1",
141
+ reasoning: false,
142
+ input: ["text", "image"],
143
+ cost: { input: 0.15, output: 0.6, cacheRead: 0.075, cacheWrite: 0 },
144
+ contextWindow: 128e3,
145
+ maxTokens: 16384
146
+ },
147
+ "o3": {
148
+ id: "o3",
149
+ name: "o3",
150
+ api: "openai-responses",
151
+ provider: "openai",
152
+ baseUrl: "https://api.openai.com/v1",
153
+ reasoning: true,
154
+ input: ["text", "image"],
155
+ cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },
156
+ contextWindow: 2e5,
157
+ maxTokens: 1e5
158
+ },
159
+ "o4-mini": {
160
+ id: "o4-mini",
161
+ name: "o4-mini",
162
+ api: "openai-responses",
163
+ provider: "openai",
164
+ baseUrl: "https://api.openai.com/v1",
165
+ reasoning: true,
166
+ input: ["text", "image"],
167
+ cost: { input: 1.1, output: 4.4, cacheRead: 0.275, cacheWrite: 0 },
168
+ contextWindow: 2e5,
169
+ maxTokens: 1e5
170
+ },
171
+ "gpt-4.1": {
172
+ id: "gpt-4.1",
173
+ name: "GPT-4.1",
174
+ api: "openai-completions",
175
+ provider: "openai",
176
+ baseUrl: "https://api.openai.com/v1",
177
+ reasoning: false,
178
+ input: ["text", "image"],
179
+ cost: { input: 2, output: 8, cacheRead: 0.5, cacheWrite: 0 },
180
+ contextWindow: 1047576,
181
+ maxTokens: 32768
182
+ },
183
+ "gpt-4.1-mini": {
184
+ id: "gpt-4.1-mini",
185
+ name: "GPT-4.1 Mini",
186
+ api: "openai-completions",
187
+ provider: "openai",
188
+ baseUrl: "https://api.openai.com/v1",
189
+ reasoning: false,
190
+ input: ["text", "image"],
191
+ cost: { input: 0.4, output: 1.6, cacheRead: 0.1, cacheWrite: 0 },
192
+ contextWindow: 1047576,
193
+ maxTokens: 32768
194
+ }
195
+ },
196
+ deepseek: {
197
+ "deepseek-chat": {
198
+ id: "deepseek-chat",
199
+ name: "DeepSeek V3",
200
+ api: "openai-completions",
201
+ provider: "deepseek",
202
+ baseUrl: "https://api.deepseek.com/v1",
203
+ reasoning: false,
204
+ input: ["text"],
205
+ cost: { input: 0.27, output: 1.1, cacheRead: 0.07, cacheWrite: 0 },
206
+ contextWindow: 64e3,
207
+ maxTokens: 8192
208
+ },
209
+ "deepseek-reasoner": {
210
+ id: "deepseek-reasoner",
211
+ name: "DeepSeek R1",
212
+ api: "openai-completions",
213
+ provider: "deepseek",
214
+ baseUrl: "https://api.deepseek.com/v1",
215
+ reasoning: true,
216
+ input: ["text"],
217
+ cost: { input: 0.55, output: 2.19, cacheRead: 0.14, cacheWrite: 0 },
218
+ contextWindow: 64e3,
219
+ maxTokens: 8192
220
+ }
221
+ },
222
+ openrouter: {
223
+ "anthropic/claude-sonnet-4": {
224
+ id: "anthropic/claude-sonnet-4",
225
+ name: "Claude Sonnet 4 (OpenRouter)",
226
+ api: "openai-completions",
227
+ provider: "openrouter",
228
+ baseUrl: "https://openrouter.ai/api/v1",
229
+ reasoning: true,
230
+ input: ["text", "image"],
231
+ cost: { input: 3, output: 15, cacheRead: 0.3, cacheWrite: 0 },
232
+ contextWindow: 2e5,
233
+ maxTokens: 16e3
234
+ }
235
+ }
236
+ };
237
+
238
+ // src/registry.ts
239
+ var apiProviderRegistry = /* @__PURE__ */ new Map();
240
+ function registerApiProvider(provider) {
241
+ apiProviderRegistry.set(provider.api, provider);
242
+ }
243
+ function getApiProvider(api) {
244
+ return apiProviderRegistry.get(api);
245
+ }
246
+ function listApiProviders() {
247
+ return [...apiProviderRegistry.keys()];
248
+ }
249
+ function clearApiProviders() {
250
+ apiProviderRegistry.clear();
251
+ }
252
+ function unregisterApiProvider(api) {
253
+ return apiProviderRegistry.delete(api);
254
+ }
255
+ function registerBuiltInApiProviders() {
256
+ registerApiProvider({ api: "openai-completions", stream: streamOpenAICompletions });
257
+ registerApiProvider({ api: "openai-responses", stream: streamOpenAIResponses });
258
+ registerApiProvider({ api: "anthropic-messages", stream: streamAnthropic });
259
+ }
260
+ function stream(model, request, options) {
261
+ const provider = apiProviderRegistry.get(model.api);
262
+ if (!provider) {
263
+ throw new Error(
264
+ `No API provider registered for api "${model.api}". Registered: ${[...apiProviderRegistry.keys()].join(", ") || "(none)"}. Call registerBuiltInApiProviders() or registerApiProvider() first.`
265
+ );
266
+ }
267
+ return provider.stream(model, request, options);
268
+ }
269
+ function streamByRef(ref, request, options = {}) {
270
+ const model = typeof ref === "string" ? resolveModel(ref) : getModel(ref.provider, ref.name);
271
+ if (!model) {
272
+ const key = typeof ref === "string" ? ref : `${ref.provider}/${ref.name}`;
273
+ throw new Error(`Model not found: "${key}". Register it with registerModel() first.`);
274
+ }
275
+ return stream(model, { ...request, model: { provider: model.provider, name: model.id } }, options);
276
+ }
277
+ var legacyProviders = /* @__PURE__ */ new Map();
278
+ function registerProvider(name, factory) {
279
+ legacyProviders.set(name, factory);
280
+ }
281
+ function createDispatchStream() {
282
+ if (apiProviderRegistry.size === 0) {
283
+ registerBuiltInApiProviders();
284
+ }
285
+ return async function* dispatchStream(request, options) {
286
+ const model = getModel(request.model.provider, request.model.name) ?? resolveModel(request.model.name);
287
+ if (model) {
288
+ yield* stream(model, request, options);
289
+ return;
290
+ }
291
+ const factory = legacyProviders.get(request.model.provider);
292
+ if (factory) {
293
+ const streamFn = factory(request.model);
294
+ yield* streamFn(request, options);
295
+ return;
296
+ }
297
+ throw new Error(
298
+ `No provider for "${request.model.provider}/${request.model.name}". Register a model with registerModel() or a provider with registerProvider().`
299
+ );
300
+ };
301
+ }
302
+ export {
303
+ MODELS,
304
+ ProviderError,
305
+ calculateCost,
306
+ callOpenAICompletions,
307
+ clearApiProviders,
308
+ clearModels,
309
+ createAnthropicStream,
310
+ createDispatchStream,
311
+ createOpenAICompletionsStream,
312
+ createOpenAIResponsesStream,
313
+ getAllModels,
314
+ getApiProvider,
315
+ getModel,
316
+ getModels,
317
+ getProviders,
318
+ iterateSseMessages,
319
+ listApiProviders,
320
+ registerApiProvider,
321
+ registerBuiltInApiProviders,
322
+ registerModel,
323
+ registerProvider,
324
+ resolveAnthropicConfig,
325
+ resolveModel,
326
+ resolveOpenAICompletionsConfig,
327
+ resolveOpenAIResponsesConfig,
328
+ stream,
329
+ streamAnthropic,
330
+ streamByRef,
331
+ streamOpenAICompletions,
332
+ streamOpenAIResponses,
333
+ textFromPartial,
334
+ toolCallsFromPartial,
335
+ unregisterApiProvider,
336
+ unregisterProviderModels
337
+ };