@revojs/ai 0.2.21 → 0.2.23

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/README.md CHANGED
@@ -207,10 +207,37 @@ server-side `opencodeApiKey` variable. Supply a stable `x-opencode-session` head
207
207
  for every request, normally the conversation ID. Caller headers cannot override
208
208
  authorization, and Responses requests always use `store: false`.
209
209
 
210
- The provider includes all 45 IDs returned by the
211
- [Go model catalog](https://opencode.ai/zen/go/v1/models) on October 10, 2026,
212
- including legacy IDs. Protocol mappings use the [models.dev catalog](https://models.dev/api.json):
213
- Grok, GPT Luna, and Muse Spark use Responses; Claude Haiku 5.5, MiniMax M3/M2.7,
214
- and Qwen3.8 Max/Flash and Qwen3.7 Plus use Anthropic Messages. The remaining IDs
215
- use Chat Completions. Live availability and subscription limits are controlled
216
- by OpenCode Go; the model catalog may change.
210
+ Each model's protocol follows its models.dev `provider.npm`: `@ai-sdk/openai` uses Responses
211
+ (or Chat Completions when `provider.shape` is `completions`), `@ai-sdk/anthropic` uses
212
+ Anthropic Messages, and `@ai-sdk/openai-compatible` uses Chat Completions.
213
+
214
+ ## Model catalogs
215
+
216
+ Every bundled provider takes its models from the [models.dev catalog](https://models.dev)
217
+ at runtime instead of a hard-coded list, so new models work as soon as models.dev lists
218
+ them, without a package release. IDs that models.dev does not list are rejected as unknown
219
+ models.
220
+
221
+ | Provider | models.dev ID | Protocol |
222
+ | ----------------------------------------- | ---------------- | ----------------------------------------------------------------- |
223
+ | `anthropic` | `anthropic` | Anthropic Messages |
224
+ | `openai` | `openai` | Responses |
225
+ | `deepseek`, `google`, `moonshotai`, `xai` | same as provider | Chat Completions (OpenAI-compatible endpoints) |
226
+ | `opencode` | `opencode` | Per model: Chat Completions, Responses, Messages or Google Models |
227
+ | `opencode-go` | `opencode-go` | Per model: Chat Completions, Responses or Messages |
228
+
229
+ `models()` returns the routable chat models as `Description`s (name, status, tool-call,
230
+ reasoning and attachment support, input/output modalities, limits and cost), so
231
+ applications can build model pickers and validate selections without hard-coded lists.
232
+ Filter on `status` (`deprecated`) and `toolCall` yourself.
233
+
234
+ The catalog is fetched once per isolate and cached. Configure it through the module's
235
+ `catalog` settings (defaults: `url` `https://models.dev/api.json?type=chat`, `maxAge`
236
+ 3,600,000 ms, `timeout` 10,000 ms). A failed refresh keeps the previous catalog; without
237
+ one, provider setup throws.
238
+
239
+ Custom providers use the same mechanism: `useModelsDev(id, resolve)` returns `models`,
240
+ `textGenerate` and `textStream` for a models.dev provider, where `resolve(model, provider)`
241
+ returns the `TextProtocols` for a model or `undefined` to skip it.
242
+ `modelsDevProtocol(model, provider)` maps a model's AI SDK package to a protocol name.
243
+ Live availability and subscription limits stay controlled by the provider.
package/dist/index.d.ts CHANGED
@@ -588,7 +588,72 @@ export type LanguageModelFilePart = Omit<LanguageModelFile, "providerMetadata" |
588
588
  providerOptions?: Record<string, JSONObject>;
589
589
  };
590
590
  export type Protocol<TOptions, TResult> = (options: TOptions) => PromiseLike<TResult>;
591
+ export type Modality = "text" | "audio" | "image" | "video" | "pdf";
592
+ export type Status = "alpha" | "beta" | "deprecated";
593
+ export type ModelsDevCatalog = Record<string, ModelsDevProvider>;
594
+ export type ModelsDevProtocol = "chat-completions" | "responses" | "messages" | "google-models";
595
+ export interface Description {
596
+ id: string;
597
+ name: string;
598
+ family?: string;
599
+ status?: Status;
600
+ toolCall: boolean;
601
+ reasoning: boolean;
602
+ attachment: boolean;
603
+ input: Array<Modality>;
604
+ output: Array<Modality>;
605
+ contextTokens?: number;
606
+ outputTokens?: number;
607
+ cost?: Cost;
608
+ }
609
+ export interface Cost {
610
+ input: number;
611
+ output: number;
612
+ cacheRead?: number;
613
+ cacheWrite?: number;
614
+ }
615
+ export interface TextProtocols {
616
+ textGenerate: Protocol<LanguageModelCallOptions, LanguageModelGenerateResult>;
617
+ textStream: Protocol<LanguageModelCallOptions, LanguageModelStreamResult>;
618
+ }
619
+ export interface ModelsDevModel {
620
+ id: string;
621
+ name: string;
622
+ type?: string;
623
+ family?: string;
624
+ status?: Status;
625
+ tool_call: boolean;
626
+ reasoning: boolean;
627
+ attachment: boolean;
628
+ modalities?: {
629
+ input: Array<Modality>;
630
+ output: Array<Modality>;
631
+ };
632
+ limit?: {
633
+ context?: number;
634
+ output?: number;
635
+ };
636
+ cost?: {
637
+ input: number;
638
+ output: number;
639
+ cache_read?: number;
640
+ cache_write?: number;
641
+ };
642
+ provider?: {
643
+ npm?: string;
644
+ api?: string;
645
+ shape?: "responses" | "completions";
646
+ };
647
+ }
648
+ export interface ModelsDevProvider {
649
+ id: string;
650
+ name: string;
651
+ npm: string;
652
+ api?: string;
653
+ models: Record<string, ModelsDevModel>;
654
+ }
591
655
  export interface ProviderConnection {
656
+ models?: () => PromiseLike<Array<Description>>;
592
657
  textGenerate?: Record<string, Protocol<LanguageModelCallOptions, LanguageModelGenerateResult>>;
593
658
  textStream?: Record<string, Protocol<LanguageModelCallOptions, LanguageModelStreamResult>>;
594
659
  embed?: Record<string, Protocol<EmbeddingModelCallOptions, EmbeddingModelResult>>;
@@ -670,7 +735,7 @@ export interface SkillsUploadSkillResult {
670
735
  warnings: Array<SharedWarning>;
671
736
  }
672
737
  export interface Provider {
673
- setup: (scope: Scope) => ProviderConnection;
738
+ setup: (scope: Scope) => Awaitable<ProviderConnection>;
674
739
  }
675
740
  export declare class ModelContextProtocolConnection {
676
741
  readonly client: Client;
@@ -690,6 +755,13 @@ export declare function handleModelContextProtocol(scope: Scope, options?: Model
690
755
  export declare function useModelContextProtocol(options: ModelContextProtocolConnectOptions): Promise<ModelContextProtocolConnection>;
691
756
  export declare function defineProvider<TProvider extends Provider>(provider: TProvider): TProvider;
692
757
  export declare function useAi<TSource extends Source<Provider> = typeof import("#providers").default>(scope: Scope): AiConnections<TSource>;
758
+ export declare function useModelsDev(id: string, resolve: (model: ModelsDevModel, provider: ModelsDevProvider) => TextProtocols | undefined): Promise<{
759
+ models: () => Promise<Description[]>;
760
+ textGenerate: Record<string, Protocol<LanguageModelCallOptions<string>, LanguageModelGenerateResult>>;
761
+ textStream: Record<string, Protocol<LanguageModelCallOptions<string>, LanguageModelStreamResult>>;
762
+ }>;
763
+ export declare function modelsDevProtocol(model: ModelsDevModel, provider: ModelsDevProvider): ModelsDevProtocol | undefined;
764
+ export declare function toToolInput(value: string | undefined): string;
693
765
  export declare function mergeHeaders(...headers: Array<Record<string, string | undefined> | undefined>): Record<string, string>;
694
766
  export declare function postJson(url: string, body: unknown, options?: {
695
767
  headers?: Record<string, string | undefined>;
package/dist/index.js CHANGED
@@ -297,6 +297,7 @@ function useAi(scope) {
297
297
  return protocol(options);
298
298
  };
299
299
  const provide = (name) => ({
300
+ models: () => invoke(name, "models", void 0),
300
301
  textGenerate: (options) => invoke(name, "textGenerate", options),
301
302
  textStream: (options) => invoke(name, "textStream", options),
302
303
  embed: (options) => invoke(name, "embed", options),
@@ -310,6 +311,69 @@ function useAi(scope) {
310
311
  });
311
312
  return Object.fromEntries(names.map((name) => [name, provide(name)]));
312
313
  }
314
+ async function useModelsDev(id, resolve) {
315
+ const now = Date.now();
316
+ if (!modelsDevCache.catalog || now - modelsDevCache.loadedAt >= config.catalog.maxAge) try {
317
+ const response = await globalThis.fetch(config.catalog.url, {
318
+ headers: { Accept: "application/json" },
319
+ signal: AbortSignal.timeout(config.catalog.timeout)
320
+ });
321
+ if (!response.ok) throw new Error(`models.dev responded with ${response.status}`);
322
+ const catalog = await response.json();
323
+ if (typeof catalog !== "object" || catalog === null || Array.isArray(catalog)) throw new Error("models.dev returned an unexpected catalog");
324
+ modelsDevCache.catalog = catalog;
325
+ modelsDevCache.loadedAt = now;
326
+ } catch (error) {
327
+ if (!modelsDevCache.catalog) throw new Error("The models.dev catalog is unavailable.", { cause: error });
328
+ }
329
+ const provider = modelsDevCache.catalog?.[id];
330
+ if (provider === void 0 || typeof provider.models !== "object" || provider.models === null) throw new Error(`models.dev has no provider "${id}".`);
331
+ const models = new Array();
332
+ const textGenerate = {};
333
+ const textStream = {};
334
+ for (const model of Object.values(provider.models)) {
335
+ if ((model.type ?? "chat") !== "chat" || !(model.modalities?.output ?? ["text"]).includes("text")) continue;
336
+ const protocols = resolve(model, provider);
337
+ if (protocols === void 0) continue;
338
+ const description = {
339
+ id: model.id,
340
+ name: model.name,
341
+ family: model.family,
342
+ status: model.status,
343
+ toolCall: model.tool_call === true,
344
+ reasoning: model.reasoning === true,
345
+ attachment: model.attachment === true,
346
+ input: model.modalities?.input ?? ["text"],
347
+ output: model.modalities?.output ?? ["text"],
348
+ contextTokens: model.limit?.context,
349
+ outputTokens: model.limit?.output
350
+ };
351
+ if (model.cost) description.cost = {
352
+ input: model.cost.input,
353
+ output: model.cost.output,
354
+ cacheRead: model.cost.cache_read,
355
+ cacheWrite: model.cost.cache_write
356
+ };
357
+ models.push(description);
358
+ textGenerate[model.id] = protocols.textGenerate;
359
+ textStream[model.id] = protocols.textStream;
360
+ }
361
+ return {
362
+ models: () => Promise.resolve(models),
363
+ textGenerate,
364
+ textStream
365
+ };
366
+ }
367
+ function modelsDevProtocol(model, provider) {
368
+ const npm = model.provider?.npm ?? provider.npm;
369
+ if (npm === "@ai-sdk/anthropic") return "messages";
370
+ if (npm === "@ai-sdk/google") return "google-models";
371
+ if (npm === "@ai-sdk/openai") return model.provider?.shape === "completions" ? "chat-completions" : "responses";
372
+ if (npm === "@ai-sdk/openai-compatible") return "chat-completions";
373
+ }
374
+ function toToolInput(value) {
375
+ return value === void 0 || value.trim() === "" ? "{}" : value;
376
+ }
313
377
  function mergeHeaders(...headers) {
314
378
  const merged = {};
315
379
  for (const record of headers) for (const [name, value] of Object.entries(record ?? {})) if (value !== void 0) merged[name] = value;
@@ -358,5 +422,6 @@ function toStream(read) {
358
422
  }
359
423
  });
360
424
  }
425
+ var modelsDevCache = { loadedAt: 0 };
361
426
  //#endregion
362
- export { ModelContextProtocolConnection, defineProvider, defineTool, handleModelContextProtocol, mergeHeaders, postJson, readDataFrames, toStream, useAi, useModelContextProtocol, useTools };
427
+ export { ModelContextProtocolConnection, defineProvider, defineTool, handleModelContextProtocol, mergeHeaders, modelsDevProtocol, postJson, readDataFrames, toStream, toToolInput, useAi, useModelContextProtocol, useModelsDev, useTools };
@@ -1,4 +1,9 @@
1
1
  export interface AiConfig {
2
+ catalog: {
3
+ url: string;
4
+ maxAge: number;
5
+ timeout: number;
6
+ };
2
7
  modelContextProtocol: {
3
8
  name: string;
4
9
  version: string;
@@ -3,10 +3,17 @@ import { defineModule, useModule } from "revojs/module";
3
3
  //#region src/module/index.ts
4
4
  var module_default = defineModule({
5
5
  name: "ai",
6
- config: () => ({ modelContextProtocol: {
7
- name: "revojs",
8
- version: "1.0.0"
9
- } }),
6
+ config: () => ({
7
+ catalog: {
8
+ url: "https://models.dev/api.json?type=chat",
9
+ maxAge: 36e5,
10
+ timeout: 1e4
11
+ },
12
+ modelContextProtocol: {
13
+ name: "revojs",
14
+ version: "1.0.0"
15
+ }
16
+ }),
10
17
  modules: [server],
11
18
  setup(config) {
12
19
  const { fromModule } = useModule(import.meta.url);
@@ -1,4 +1,4 @@
1
- import { mergeHeaders, postJson, readDataFrames, toStream } from "../index.js";
1
+ import { mergeHeaders, postJson, readDataFrames, toStream, toToolInput } from "../index.js";
2
2
  import { toJsonSchema } from "revojs/shared";
3
3
  //#region src/protocols/anthropic-messages.ts
4
4
  function toUsage(inputTokens, cacheRead, cacheWrite, outputTokens) {
@@ -299,7 +299,7 @@ async function* readParts(response, warnings) {
299
299
  type: "tool-call",
300
300
  toolCallId: record.callId,
301
301
  toolName: record.name,
302
- input: record.json
302
+ input: toToolInput(record.json)
303
303
  };
304
304
  yield {
305
305
  type: "finish",
@@ -1,4 +1,4 @@
1
- import { mergeHeaders, postJson, readDataFrames, toStream } from "../index.js";
1
+ import { mergeHeaders, postJson, readDataFrames, toStream, toToolInput } from "../index.js";
2
2
  import { toJsonSchema } from "revojs/shared";
3
3
  //#region src/protocols/openai-chat-completions.ts
4
4
  function toMessages(prompt) {
@@ -256,7 +256,7 @@ async function* readParts(response, warnings) {
256
256
  type: "tool-call",
257
257
  toolCallId: accumulator.callId.length > 0 ? accumulator.callId : accumulator.streamId,
258
258
  toolName: accumulator.name,
259
- input: accumulator.arguments
259
+ input: toToolInput(accumulator.arguments)
260
260
  };
261
261
  }
262
262
  yield {
@@ -289,7 +289,7 @@ function chatCompletionsGenerateProtocol(config) {
289
289
  type: "tool-call",
290
290
  toolCallId: call.id ?? "",
291
291
  toolName: call.function?.name ?? "",
292
- input: call.function?.arguments ?? ""
292
+ input: toToolInput(call.function?.arguments)
293
293
  });
294
294
  return {
295
295
  content,
@@ -1,4 +1,4 @@
1
- import { mergeHeaders, postJson, readDataFrames, toStream } from "../index.js";
1
+ import { mergeHeaders, postJson, readDataFrames, toStream, toToolInput } from "../index.js";
2
2
  import { toJsonSchema } from "revojs/shared";
3
3
  //#region src/protocols/openai-responses.ts
4
4
  function toUsage(usage) {
@@ -276,7 +276,7 @@ async function* readParts(response, warnings) {
276
276
  type: "tool-call",
277
277
  toolCallId: event.item.call_id ?? streamId,
278
278
  toolName: event.item.name ?? record?.name ?? "",
279
- input: event.item.arguments ?? record?.arguments ?? ""
279
+ input: toToolInput(event.item.arguments ?? record?.arguments)
280
280
  };
281
281
  continue;
282
282
  }
@@ -318,7 +318,7 @@ async function* readParts(response, warnings) {
318
318
  type: "tool-call",
319
319
  toolCallId: record.callId || id,
320
320
  toolName: record.name,
321
- input: record.arguments
321
+ input: toToolInput(record.arguments)
322
322
  };
323
323
  }
324
324
  yield {
@@ -359,7 +359,7 @@ function responsesGenerateProtocol(config) {
359
359
  type: "tool-call",
360
360
  toolCallId: item.call_id ?? "",
361
361
  toolName: item.name ?? "",
362
- input: item.arguments ?? ""
362
+ input: toToolInput(item.arguments)
363
363
  });
364
364
  continue;
365
365
  }
@@ -1,29 +1,8 @@
1
1
  declare const _default: {
2
- setup: (scope: import("revojs").Scope) => {
3
- textGenerate: {
4
- "claude-sonnet-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
5
- "claude-opus-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
6
- "claude-fable-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
7
- "claude-opus-4-8": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
8
- "claude-opus-4-7": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
9
- "claude-opus-4-6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
10
- "claude-opus-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
11
- "claude-sonnet-4-6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
12
- "claude-sonnet-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
13
- "claude-haiku-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
14
- };
15
- textStream: {
16
- "claude-sonnet-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
17
- "claude-opus-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
18
- "claude-fable-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
19
- "claude-opus-4-8": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
20
- "claude-opus-4-7": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
21
- "claude-opus-4-6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
22
- "claude-opus-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
23
- "claude-sonnet-4-6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
24
- "claude-sonnet-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
25
- "claude-haiku-4-5": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
26
- };
27
- };
2
+ setup: (scope: import("revojs").Scope) => Promise<{
3
+ models: () => Promise<import("../index").Description[]>;
4
+ textGenerate: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>>;
5
+ textStream: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>>;
6
+ }>;
28
7
  };
29
8
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineProvider } from "../index.js";
1
+ import { defineProvider, useModelsDev } from "../index.js";
2
2
  import { messagesGenerateProtocol, messagesStreamProtocol } from "../protocols/anthropic-messages.js";
3
3
  import { useVariables } from "revojs";
4
4
  //#region src/providers/anthropic.ts
@@ -7,34 +7,11 @@ var anthropic_default = defineProvider({ setup: (scope) => {
7
7
  baseURL: "https://api.anthropic.com/v1",
8
8
  apiKey: useVariables(scope).anthropicApiKey
9
9
  };
10
- const messagesGenerate = messagesGenerateProtocol(config);
11
- const messagesStream = messagesStreamProtocol(config);
12
- return {
13
- textGenerate: {
14
- "claude-sonnet-5": messagesGenerate,
15
- "claude-opus-5": messagesGenerate,
16
- "claude-fable-5": messagesGenerate,
17
- "claude-opus-4-8": messagesGenerate,
18
- "claude-opus-4-7": messagesGenerate,
19
- "claude-opus-4-6": messagesGenerate,
20
- "claude-opus-4-5": messagesGenerate,
21
- "claude-sonnet-4-6": messagesGenerate,
22
- "claude-sonnet-4-5": messagesGenerate,
23
- "claude-haiku-4-5": messagesGenerate
24
- },
25
- textStream: {
26
- "claude-sonnet-5": messagesStream,
27
- "claude-opus-5": messagesStream,
28
- "claude-fable-5": messagesStream,
29
- "claude-opus-4-8": messagesStream,
30
- "claude-opus-4-7": messagesStream,
31
- "claude-opus-4-6": messagesStream,
32
- "claude-opus-4-5": messagesStream,
33
- "claude-sonnet-4-6": messagesStream,
34
- "claude-sonnet-4-5": messagesStream,
35
- "claude-haiku-4-5": messagesStream
36
- }
10
+ const protocols = {
11
+ textGenerate: messagesGenerateProtocol(config),
12
+ textStream: messagesStreamProtocol(config)
37
13
  };
14
+ return useModelsDev("anthropic", () => protocols);
38
15
  } });
39
16
  //#endregion
40
17
  export { anthropic_default as default };
@@ -1,15 +1,8 @@
1
1
  declare const _default: {
2
- setup: (scope: import("revojs").Scope) => {
3
- textGenerate: {
4
- "deepseek-v4-pro": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
5
- "deepseek-v4-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
6
- "deepseek-v4-flash-vision-exp": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
7
- };
8
- textStream: {
9
- "deepseek-v4-pro": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
10
- "deepseek-v4-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
11
- "deepseek-v4-flash-vision-exp": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
12
- };
13
- };
2
+ setup: (scope: import("revojs").Scope) => Promise<{
3
+ models: () => Promise<import("../index").Description[]>;
4
+ textGenerate: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>>;
5
+ textStream: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>>;
6
+ }>;
14
7
  };
15
8
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineProvider } from "../index.js";
1
+ import { defineProvider, useModelsDev } from "../index.js";
2
2
  import { chatCompletionsGenerateProtocol, chatCompletionsStreamProtocol } from "../protocols/openai-chat-completions.js";
3
3
  import { useVariables } from "revojs";
4
4
  //#region src/providers/deepseek.ts
@@ -7,20 +7,11 @@ var deepseek_default = defineProvider({ setup: (scope) => {
7
7
  baseURL: "https://api.deepseek.com/v1",
8
8
  apiKey: useVariables(scope).deepseekApiKey
9
9
  };
10
- const chatCompletionsGenerate = chatCompletionsGenerateProtocol(config);
11
- const chatCompletionsStream = chatCompletionsStreamProtocol(config);
12
- return {
13
- textGenerate: {
14
- "deepseek-v4-pro": chatCompletionsGenerate,
15
- "deepseek-v4-flash": chatCompletionsGenerate,
16
- "deepseek-v4-flash-vision-exp": chatCompletionsGenerate
17
- },
18
- textStream: {
19
- "deepseek-v4-pro": chatCompletionsStream,
20
- "deepseek-v4-flash": chatCompletionsStream,
21
- "deepseek-v4-flash-vision-exp": chatCompletionsStream
22
- }
10
+ const protocols = {
11
+ textGenerate: chatCompletionsGenerateProtocol(config),
12
+ textStream: chatCompletionsStreamProtocol(config)
23
13
  };
14
+ return useModelsDev("deepseek", () => protocols);
24
15
  } });
25
16
  //#endregion
26
17
  export { deepseek_default as default };
@@ -1,25 +1,8 @@
1
1
  declare const _default: {
2
- setup: (scope: import("revojs").Scope) => {
3
- textGenerate: {
4
- "gemini-3.7-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
5
- "gemini-3.6-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
6
- "gemini-3.5-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
7
- "gemini-3.5-flash-lite": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
8
- "gemini-3.1-pro-preview": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
9
- "gemini-2.5-pro": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
10
- "gemini-2.5-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
11
- "gemini-2.5-flash-lite": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
12
- };
13
- textStream: {
14
- "gemini-3.7-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
15
- "gemini-3.6-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
16
- "gemini-3.5-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
17
- "gemini-3.5-flash-lite": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
18
- "gemini-3.1-pro-preview": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
19
- "gemini-2.5-pro": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
20
- "gemini-2.5-flash": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
21
- "gemini-2.5-flash-lite": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
22
- };
23
- };
2
+ setup: (scope: import("revojs").Scope) => Promise<{
3
+ models: () => Promise<import("../index").Description[]>;
4
+ textGenerate: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>>;
5
+ textStream: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>>;
6
+ }>;
24
7
  };
25
8
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineProvider } from "../index.js";
1
+ import { defineProvider, useModelsDev } from "../index.js";
2
2
  import { chatCompletionsGenerateProtocol, chatCompletionsStreamProtocol } from "../protocols/openai-chat-completions.js";
3
3
  import { useVariables } from "revojs";
4
4
  //#region src/providers/google.ts
@@ -7,30 +7,11 @@ var google_default = defineProvider({ setup: (scope) => {
7
7
  baseURL: "https://generativelanguage.googleapis.com/v1beta/openai",
8
8
  apiKey: useVariables(scope).googleApiKey
9
9
  };
10
- const chatCompletionsGenerate = chatCompletionsGenerateProtocol(config);
11
- const chatCompletionsStream = chatCompletionsStreamProtocol(config);
12
- return {
13
- textGenerate: {
14
- "gemini-3.7-flash": chatCompletionsGenerate,
15
- "gemini-3.6-flash": chatCompletionsGenerate,
16
- "gemini-3.5-flash": chatCompletionsGenerate,
17
- "gemini-3.5-flash-lite": chatCompletionsGenerate,
18
- "gemini-3.1-pro-preview": chatCompletionsGenerate,
19
- "gemini-2.5-pro": chatCompletionsGenerate,
20
- "gemini-2.5-flash": chatCompletionsGenerate,
21
- "gemini-2.5-flash-lite": chatCompletionsGenerate
22
- },
23
- textStream: {
24
- "gemini-3.7-flash": chatCompletionsStream,
25
- "gemini-3.6-flash": chatCompletionsStream,
26
- "gemini-3.5-flash": chatCompletionsStream,
27
- "gemini-3.5-flash-lite": chatCompletionsStream,
28
- "gemini-3.1-pro-preview": chatCompletionsStream,
29
- "gemini-2.5-pro": chatCompletionsStream,
30
- "gemini-2.5-flash": chatCompletionsStream,
31
- "gemini-2.5-flash-lite": chatCompletionsStream
32
- }
10
+ const protocols = {
11
+ textGenerate: chatCompletionsGenerateProtocol(config),
12
+ textStream: chatCompletionsStreamProtocol(config)
33
13
  };
14
+ return useModelsDev("google", () => protocols);
34
15
  } });
35
16
  //#endregion
36
17
  export { google_default as default };
@@ -1,21 +1,8 @@
1
1
  declare const _default: {
2
- setup: (scope: import("revojs").Scope) => {
3
- textGenerate: {
4
- "kimi-k3": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
5
- "kimi-k2.7-code": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
6
- "kimi-k2.7-code-highspeed": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
7
- "kimi-k2.6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
8
- "kimi-k2-thinking": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
9
- "kimi-k2-thinking-turbo": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>;
10
- };
11
- textStream: {
12
- "kimi-k3": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
13
- "kimi-k2.7-code": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
14
- "kimi-k2.7-code-highspeed": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
15
- "kimi-k2.6": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
16
- "kimi-k2-thinking": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
17
- "kimi-k2-thinking-turbo": import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>;
18
- };
19
- };
2
+ setup: (scope: import("revojs").Scope) => Promise<{
3
+ models: () => Promise<import("../index").Description[]>;
4
+ textGenerate: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelGenerateResult>>;
5
+ textStream: Record<string, import("../index").Protocol<import("../index").LanguageModelCallOptions<string>, import("../index").LanguageModelStreamResult>>;
6
+ }>;
20
7
  };
21
8
  export default _default;
@@ -1,4 +1,4 @@
1
- import { defineProvider } from "../index.js";
1
+ import { defineProvider, useModelsDev } from "../index.js";
2
2
  import { chatCompletionsGenerateProtocol, chatCompletionsStreamProtocol } from "../protocols/openai-chat-completions.js";
3
3
  import { useVariables } from "revojs";
4
4
  //#region src/providers/moonshotai.ts
@@ -7,26 +7,11 @@ var moonshotai_default = defineProvider({ setup: (scope) => {
7
7
  baseURL: "https://api.moonshot.ai/v1",
8
8
  apiKey: useVariables(scope).moonshotaiApiKey
9
9
  };
10
- const chatCompletionsGenerate = chatCompletionsGenerateProtocol(config);
11
- const chatCompletionsStream = chatCompletionsStreamProtocol(config);
12
- return {
13
- textGenerate: {
14
- "kimi-k3": chatCompletionsGenerate,
15
- "kimi-k2.7-code": chatCompletionsGenerate,
16
- "kimi-k2.7-code-highspeed": chatCompletionsGenerate,
17
- "kimi-k2.6": chatCompletionsGenerate,
18
- "kimi-k2-thinking": chatCompletionsGenerate,
19
- "kimi-k2-thinking-turbo": chatCompletionsGenerate
20
- },
21
- textStream: {
22
- "kimi-k3": chatCompletionsStream,
23
- "kimi-k2.7-code": chatCompletionsStream,
24
- "kimi-k2.7-code-highspeed": chatCompletionsStream,
25
- "kimi-k2.6": chatCompletionsStream,
26
- "kimi-k2-thinking": chatCompletionsStream,
27
- "kimi-k2-thinking-turbo": chatCompletionsStream
28
- }
10
+ const protocols = {
11
+ textGenerate: chatCompletionsGenerateProtocol(config),
12
+ textStream: chatCompletionsStreamProtocol(config)
29
13
  };
14
+ return useModelsDev("moonshotai", () => protocols);
30
15
  } });
31
16
  //#endregion
32
17
  export { moonshotai_default as default };