diff --git a/packages/core/src/catalog.ts b/packages/core/src/catalog.ts index 9f63444790..9b8f916e70 100644 --- a/packages/core/src/catalog.ts +++ b/packages/core/src/catalog.ts @@ -116,7 +116,7 @@ const layer = Layer.effect( draft.providers.set(providerID, record) } const model = - record.models.get(modelID) ?? (ModelV2.Info.empty(providerID, modelID) as ModelV2.MutableInfo) + record.models.get(modelID) ?? (ModelV2.Info.default(providerID, modelID) as ModelV2.MutableInfo) if (!record.models.has(modelID)) record.models.set(modelID, model) fn(model) model.id = modelID diff --git a/packages/core/src/github-copilot/models.ts b/packages/core/src/github-copilot/models.ts index 8790cefba2..52f98753b5 100644 --- a/packages/core/src/github-copilot/models.ts +++ b/packages/core/src/github-copilot/models.ts @@ -135,7 +135,7 @@ function build(id: ModelV2.ID, remote: UsableModel, baseURL: string, previous?: const released = previous?.time.released || Date.parse(version) return ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.githubCopilot, id), + ...ModelV2.Info.default(ProviderV2.ID.githubCopilot, id), id, modelID: ModelV2.ID.make(remote.id), providerID: ProviderV2.ID.githubCopilot, diff --git a/packages/core/test/aisdk.test.ts b/packages/core/test/aisdk.test.ts index 0bc16e8f59..9e7e0d0c6e 100644 --- a/packages/core/test/aisdk.test.ts +++ b/packages/core/test/aisdk.test.ts @@ -12,7 +12,7 @@ const it = testEffect(AISDK.locationLayer) const model = (packageName: string, settings: Record = {}) => ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("test-provider"), ModelV2.ID.make("catalog-model")), + ...ModelV2.Info.default(ProviderV2.ID.make("test-provider"), ModelV2.ID.make("catalog-model")), modelID: ModelV2.ID.make("api-model"), package: ProviderV2.aisdk(packageName), settings, diff --git a/packages/core/test/config/provider.test.ts b/packages/core/test/config/provider.test.ts index c3c5b9c420..60597836f2 100644 --- a/packages/core/test/config/provider.test.ts +++ b/packages/core/test/config/provider.test.ts @@ -49,6 +49,86 @@ function withEnv(vars: Record, effect: () = const decode = Schema.decodeUnknownSync(Config.Info) describe("ConfigProviderPlugin.Plugin", () => { + it.effect("defaults custom models to agent capabilities", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("custom") + const modelID = ModelV2.ID.make("chat") + const config = Config.Service.of({ + entries: () => + Effect.succeed([ + new Config.Document({ + type: "document", + info: decode({ + providers: { + custom: { + package: "aisdk:@ai-sdk/openai-compatible", + models: { chat: {} }, + }, + }, + }), + }), + ]), + }) + + yield* addPlugin(config) + + const model = required(yield* catalog.model.get(providerID, modelID)) + expect(model.capabilities).toEqual({ tools: true, input: ["text", "image"], output: ["text"] }) + }), + ) + + it.effect("preserves catalog capabilities unless config overrides them", () => + Effect.gen(function* () { + const catalog = yield* Catalog.Service + const providerID = ProviderV2.ID.make("custom") + const inheritedID = ModelV2.ID.make("inherited") + const overriddenID = ModelV2.ID.make("overridden") + yield* catalog.transform((draft) => { + draft.model.update(providerID, inheritedID, (model) => { + model.capabilities = { tools: false, input: ["text"], output: ["text"] } + }) + draft.model.update(providerID, overriddenID, (model) => { + model.capabilities = { tools: false, input: ["text"], output: ["text"] } + }) + }) + const config = Config.Service.of({ + entries: () => + Effect.succeed([ + new Config.Document({ + type: "document", + info: decode({ + providers: { + custom: { + package: "aisdk:@ai-sdk/openai-compatible", + models: { + inherited: { name: "Inherited" }, + overridden: { + capabilities: { tools: true, input: ["text", "image"], output: ["text"] }, + }, + }, + }, + }, + }), + }), + ]), + }) + + yield* addPlugin(config) + + expect((yield* catalog.model.get(providerID, inheritedID))?.capabilities).toEqual({ + tools: false, + input: ["text"], + output: ["text"], + }) + expect((yield* catalog.model.get(providerID, overriddenID))?.capabilities).toEqual({ + tools: true, + input: ["text", "image"], + output: ["text"], + }) + }), + ) + it.effect("keeps configured model variant bodies unchanged", () => Effect.gen(function* () { const catalog = yield* Catalog.Service diff --git a/packages/core/test/generate.test.ts b/packages/core/test/generate.test.ts index d990f96ace..c0ad30d383 100644 --- a/packages/core/test/generate.test.ts +++ b/packages/core/test/generate.test.ts @@ -13,7 +13,7 @@ import { Effect, Layer, Stream } from "effect" import { testEffect } from "./lib/effect" const selected = ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("test-provider"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("test-provider"), ModelV2.ID.make("gemini")), package: ProviderV2.aisdk("@ai-sdk/google"), }) const runtime = Model.make({ id: "gemini", provider: "test-provider", route: OpenAIChat.route }) diff --git a/packages/core/test/github-copilot/models.test.ts b/packages/core/test/github-copilot/models.test.ts index 31d8f710cd..9bd07971fd 100644 --- a/packages/core/test/github-copilot/models.test.ts +++ b/packages/core/test/github-copilot/models.test.ts @@ -49,12 +49,12 @@ test("defensively syncs advertised Copilot models", async () => { try { const existing = ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.githubCopilot, ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.githubCopilot, ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), name: "GPT-5 local", }) const stale = ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.githubCopilot, ModelV2.ID.make("stale")), + ...ModelV2.Info.default(ProviderV2.ID.githubCopilot, ModelV2.ID.make("stale")), modelID: ModelV2.ID.make("stale"), }) const models = await CopilotModels.get(server.url.origin, {}, [existing, stale]) diff --git a/packages/core/test/plugin/provider-amazon-bedrock.test.ts b/packages/core/test/plugin/provider-amazon-bedrock.test.ts index db63910c33..39f46c49a2 100644 --- a/packages/core/test/plugin/provider-amazon-bedrock.test.ts +++ b/packages/core/test/plugin/provider-amazon-bedrock.test.ts @@ -108,7 +108,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -134,7 +134,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -169,7 +169,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -190,7 +190,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -210,7 +210,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -230,7 +230,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -251,7 +251,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -281,7 +281,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -310,7 +310,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")), modelID: ModelV2.ID.make("openai.gpt-5.5"), package: ProviderV2.aisdk("@ai-sdk/amazon-bedrock/mantle"), }), @@ -338,7 +338,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")), modelID: ModelV2.ID.make("openai.gpt-5.5"), package: ProviderV2.aisdk("@ai-sdk/amazon-bedrock/mantle"), }), @@ -347,7 +347,7 @@ describe("AmazonBedrockPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-oss-safeguard-120b")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-oss-safeguard-120b")), modelID: ModelV2.ID.make("openai.gpt-oss-safeguard-120b"), package: ProviderV2.aisdk("@ai-sdk/amazon-bedrock/mantle"), }), @@ -365,7 +365,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("@ai-sdk/amazon-bedrock/anthropic"), }), @@ -393,7 +393,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -425,7 +425,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -434,7 +434,7 @@ describe("AmazonBedrockPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -443,7 +443,7 @@ describe("AmazonBedrockPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("global.anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("global.anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("global.anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -452,7 +452,7 @@ describe("AmazonBedrockPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -461,7 +461,7 @@ describe("AmazonBedrockPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -487,7 +487,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -574,7 +574,7 @@ describe("AmazonBedrockPlugin", () => { for (const item of cases) { yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make(item.modelID)), + ...ModelV2.Info.default(ProviderV2.ID.amazonBedrock, ModelV2.ID.make(item.modelID)), modelID: ModelV2.ID.make(item.modelID), package: ProviderV2.aisdk("test-provider"), }), @@ -594,7 +594,7 @@ describe("AmazonBedrockPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("anthropic.claude-sonnet-4-5")), modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"), package: ProviderV2.aisdk("test-provider"), }), diff --git a/packages/core/test/plugin/provider-anthropic.test.ts b/packages/core/test/plugin/provider-anthropic.test.ts index af7b80dc67..0c0bcba461 100644 --- a/packages/core/test/plugin/provider-anthropic.test.ts +++ b/packages/core/test/plugin/provider-anthropic.test.ts @@ -63,7 +63,7 @@ describe("AnthropicPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-anthropic"), ModelV2.ID.make("claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-anthropic"), ModelV2.ID.make("claude-sonnet-4-5")), modelID: ModelV2.ID.make("claude-sonnet-4-5"), package: ProviderV2.aisdk("@ai-sdk/anthropic"), }), @@ -81,7 +81,7 @@ describe("AnthropicPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.anthropic, ModelV2.ID.make("claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.anthropic, ModelV2.ID.make("claude-sonnet-4-5")), modelID: ModelV2.ID.make("claude-sonnet-4-5"), package: ProviderV2.aisdk("@ai-sdk/anthropic"), }), diff --git a/packages/core/test/plugin/provider-azure-cognitive-services.test.ts b/packages/core/test/plugin/provider-azure-cognitive-services.test.ts index f52f013105..5b9ca4bf86 100644 --- a/packages/core/test/plugin/provider-azure-cognitive-services.test.ts +++ b/packages/core/test/plugin/provider-azure-cognitive-services.test.ts @@ -121,7 +121,7 @@ describe("AzureCognitiveServicesPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: "aisdk:test-provider", }), @@ -140,7 +140,7 @@ describe("AzureCognitiveServicesPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: "aisdk:test-provider", }), @@ -149,7 +149,7 @@ describe("AzureCognitiveServicesPlugin", () => { }) const ignored = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: "aisdk:test-provider", }), @@ -170,7 +170,7 @@ describe("AzureCognitiveServicesPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("messages-deployment")), + ...ModelV2.Info.default(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("messages-deployment")), modelID: ModelV2.ID.make("messages-deployment"), package: "aisdk:test-provider", }), @@ -179,7 +179,7 @@ describe("AzureCognitiveServicesPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("chat-deployment")), + ...ModelV2.Info.default(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("chat-deployment")), modelID: ModelV2.ID.make("chat-deployment"), package: "aisdk:test-provider", }), @@ -188,7 +188,7 @@ describe("AzureCognitiveServicesPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("language-deployment")), + ...ModelV2.Info.default(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("language-deployment")), modelID: ModelV2.ID.make("language-deployment"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-azure.test.ts b/packages/core/test/plugin/provider-azure.test.ts index 6cf515c0c6..227e3bfa78 100644 --- a/packages/core/test/plugin/provider-azure.test.ts +++ b/packages/core/test/plugin/provider-azure.test.ts @@ -148,7 +148,7 @@ describe("AzurePlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -168,7 +168,7 @@ describe("AzurePlugin", () => { const exit = yield* aisdk .runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -189,7 +189,7 @@ describe("AzurePlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -208,7 +208,7 @@ describe("AzurePlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -227,7 +227,7 @@ describe("AzurePlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), body: { useCompletionUrls: true }, @@ -247,7 +247,7 @@ describe("AzurePlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -256,7 +256,7 @@ describe("AzurePlugin", () => { }) const ignored = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("deployment")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("deployment")), modelID: ModelV2.ID.make("deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -280,7 +280,7 @@ describe("AzurePlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("messages-deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("messages-deployment")), modelID: ModelV2.ID.make("messages-deployment"), package: ProviderV2.aisdk("test-provider"), }), @@ -289,7 +289,7 @@ describe("AzurePlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("language-deployment")), + ...ModelV2.Info.default(ProviderV2.ID.azure, ModelV2.ID.make("language-deployment")), modelID: ModelV2.ID.make("language-deployment"), package: ProviderV2.aisdk("test-provider"), }), diff --git a/packages/core/test/plugin/provider-cerebras.test.ts b/packages/core/test/plugin/provider-cerebras.test.ts index eb5c4ec1bf..6722f48996 100644 --- a/packages/core/test/plugin/provider-cerebras.test.ts +++ b/packages/core/test/plugin/provider-cerebras.test.ts @@ -65,7 +65,7 @@ describe("CerebrasPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("custom-cerebras"), ModelV2.ID.make("llama-4-scout-17b-16e-instruct"), ), @@ -88,7 +88,7 @@ describe("CerebrasPlugin", () => { yield* addPlugin() yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("custom-cerebras"), ModelV2.ID.make("llama-4-scout-17b-16e-instruct"), ), @@ -110,7 +110,7 @@ describe("CerebrasPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("custom-cerebras"), ModelV2.ID.make("llama-4-scout-17b-16e-instruct"), ), diff --git a/packages/core/test/plugin/provider-cloudflare-ai-gateway.test.ts b/packages/core/test/plugin/provider-cloudflare-ai-gateway.test.ts index cbd2b95c9e..bd9d9e80cd 100644 --- a/packages/core/test/plugin/provider-cloudflare-ai-gateway.test.ts +++ b/packages/core/test/plugin/provider-cloudflare-ai-gateway.test.ts @@ -117,7 +117,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -139,7 +139,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -184,7 +184,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -214,7 +214,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -252,7 +252,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -284,7 +284,7 @@ describe("CloudflareAIGatewayPlugin", () => { yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -307,7 +307,7 @@ describe("CloudflareAIGatewayPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -331,7 +331,7 @@ describe("CloudflareAIGatewayPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -361,7 +361,7 @@ describe("CloudflareAIGatewayPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), @@ -385,7 +385,7 @@ describe("CloudflareAIGatewayPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("anthropic/claude-sonnet-4-5"), ), @@ -417,7 +417,7 @@ describe("CloudflareAIGatewayPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-cloudflare-workers-ai.test.ts b/packages/core/test/plugin/provider-cloudflare-workers-ai.test.ts index d67b8d91cc..5f4e3bc276 100644 --- a/packages/core/test/plugin/provider-cloudflare-workers-ai.test.ts +++ b/packages/core/test/plugin/provider-cloudflare-workers-ai.test.ts @@ -94,7 +94,7 @@ describe("CloudflareWorkersAIPlugin", () => { const provider = required(yield* catalog.provider.get(ProviderV2.ID.make("cloudflare-workers-ai"))) const sdk = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), modelID: ModelV2.ID.make("@cf/model"), package: provider.package, settings: provider.settings, @@ -138,7 +138,7 @@ describe("CloudflareWorkersAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), modelID: ModelV2.ID.make("@cf/model"), package: "aisdk:@ai-sdk/openai-compatible", settings: { baseURL: "https://proxy.example/v1" }, @@ -178,7 +178,7 @@ describe("CloudflareWorkersAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), modelID: ModelV2.ID.make("@cf/model"), package: "aisdk:@ai-sdk/openai-compatible", settings: { baseURL: "https://proxy.example/v1" }, @@ -207,7 +207,7 @@ describe("CloudflareWorkersAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), modelID: ModelV2.ID.make("@cf/model"), package: "aisdk:@ai-sdk/openai-compatible", settings: { baseURL: "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1" }, @@ -233,7 +233,7 @@ describe("CloudflareWorkersAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("@cf/api-model"), package: "aisdk:test-provider", }), @@ -253,7 +253,7 @@ describe("CloudflareWorkersAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")), modelID: ModelV2.ID.make("@cf/model"), package: "aisdk:@ai-sdk/anthropic", settings: { baseURL: "https://proxy.example/v1" }, diff --git a/packages/core/test/plugin/provider-dynamic.test.ts b/packages/core/test/plugin/provider-dynamic.test.ts index d0b1a8af5a..341878e6de 100644 --- a/packages/core/test/plugin/provider-dynamic.test.ts +++ b/packages/core/test/plugin/provider-dynamic.test.ts @@ -53,7 +53,7 @@ describe("DynamicProviderPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")), modelID: ModelV2.ID.make("test-model"), package: ProviderV2.aisdk(fixtureProvider), }), @@ -72,7 +72,7 @@ describe("DynamicProviderPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")), modelID: ModelV2.ID.make("test-model"), package: ProviderV2.aisdk(fixtureProvider), }), @@ -90,7 +90,7 @@ describe("DynamicProviderPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("test-model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("test-model")), modelID: ModelV2.ID.make("test-model"), package: ProviderV2.aisdk(fixtureProvider), }), @@ -107,7 +107,7 @@ describe("DynamicProviderPlugin", () => { yield* addPlugin(npmEntrypoint(fixtureProviderPath)) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("npm-provider"), ModelV2.ID.make("test-model")), + ...ModelV2.Info.default(ProviderV2.ID.make("npm-provider"), ModelV2.ID.make("test-model")), modelID: ModelV2.ID.make("test-model"), package: "aisdk:fixture-provider", }), @@ -125,7 +125,7 @@ describe("DynamicProviderPlugin", () => { const exit = yield* aisdk .language( ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("missing-entrypoint"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("missing-entrypoint"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("alias"), package: "aisdk:fixture-provider", }), @@ -143,7 +143,7 @@ describe("DynamicProviderPlugin", () => { const exit = yield* aisdk .language( ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("bad-import"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("bad-import"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("alias"), package: "aisdk:file:///missing/provider-factory.js", }), @@ -163,7 +163,7 @@ describe("DynamicProviderPlugin", () => { const exit = yield* aisdk .language( ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("missing-factory"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("missing-factory"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("alias"), package: "aisdk:fixture-provider", }), @@ -181,7 +181,7 @@ describe("DynamicProviderPlugin", () => { yield* addPlugin() const language = yield* aisdk.language( ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("test-model-api"), package: ProviderV2.aisdk(fixtureProvider), }), diff --git a/packages/core/test/plugin/provider-factory.test.ts b/packages/core/test/plugin/provider-factory.test.ts index a884fd0ce0..d51d4900b4 100644 --- a/packages/core/test/plugin/provider-factory.test.ts +++ b/packages/core/test/plugin/provider-factory.test.ts @@ -41,7 +41,7 @@ providers.forEach((item) => const host = yield* PluginHost.make(plugin) yield* item.plugin.effect(host) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make(item.id), modelID), + ...ModelV2.Info.default(ProviderV2.ID.make(item.id), modelID), modelID, package: ProviderV2.aisdk(item.package), }) diff --git a/packages/core/test/plugin/provider-github-copilot.test.ts b/packages/core/test/plugin/provider-github-copilot.test.ts index bb2443ae41..b39e06ac7b 100644 --- a/packages/core/test/plugin/provider-github-copilot.test.ts +++ b/packages/core/test/plugin/provider-github-copilot.test.ts @@ -99,7 +99,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() const ignored = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", }), @@ -108,7 +108,7 @@ describe("GithubCopilotPlugin", () => { }) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", }), @@ -128,7 +128,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("claude-sonnet-4")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("claude-sonnet-4")), modelID: ModelV2.ID.make("claude-sonnet-4"), package: "aisdk:test-provider", }), @@ -147,7 +147,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("claude-sonnet-4"), package: "aisdk:test-provider", }), @@ -166,7 +166,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", }), @@ -175,7 +175,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5.1-codex")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5.1-codex")), modelID: ModelV2.ID.make("gpt-5.1-codex"), package: "aisdk:test-provider", }), @@ -184,7 +184,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-4o")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-4o")), modelID: ModelV2.ID.make("gpt-4o"), package: "aisdk:test-provider", }), @@ -193,7 +193,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini")), modelID: ModelV2.ID.make("gpt-5-mini"), package: "aisdk:test-provider", }), @@ -202,7 +202,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini-2025-08-07")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini-2025-08-07")), modelID: ModelV2.ID.make("gpt-5-mini-2025-08-07"), package: "aisdk:test-provider", }), @@ -227,7 +227,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("mai-code-1-flash-picker")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("mai-code-1-flash-picker")), modelID: ModelV2.ID.make("mai-code-1-flash-picker"), package: "aisdk:test-provider", settings: { endpoint: "responses" }, @@ -237,7 +237,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", settings: { endpoint: "chat" }, @@ -257,7 +257,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("default")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("default")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", }), @@ -266,7 +266,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("small")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("small")), modelID: ModelV2.ID.make("gpt-5-mini"), package: "aisdk:test-provider", }), @@ -275,7 +275,7 @@ describe("GithubCopilotPlugin", () => { }) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("sonnet")), + ...ModelV2.Info.default(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("sonnet")), modelID: ModelV2.ID.make("claude-sonnet-4"), package: "aisdk:test-provider", }), @@ -324,7 +324,7 @@ describe("GithubCopilotPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-gitlab.test.ts b/packages/core/test/plugin/provider-gitlab.test.ts index ae66a61aa8..ac12ebfc9d 100644 --- a/packages/core/test/plugin/provider-gitlab.test.ts +++ b/packages/core/test/plugin/provider-gitlab.test.ts @@ -69,7 +69,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), modelID: ModelV2.ID.make("claude"), package: "aisdk:test-provider", }), @@ -107,7 +107,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), modelID: ModelV2.ID.make("claude"), package: "aisdk:test-provider", }), @@ -133,7 +133,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), modelID: ModelV2.ID.make("claude"), package: "aisdk:test-provider", }), @@ -175,7 +175,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), modelID: ModelV2.ID.make("claude"), package: "aisdk:test-provider", }), @@ -195,7 +195,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")), modelID: ModelV2.ID.make("duo-workflow-custom"), package: "aisdk:test-provider", headers: {}, @@ -229,7 +229,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-exact")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-exact")), modelID: ModelV2.ID.make("duo-workflow-exact"), package: "aisdk:test-provider", }), @@ -257,7 +257,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")), modelID: ModelV2.ID.make("duo-workflow-custom"), package: "aisdk:test-provider", headers: {}, @@ -284,7 +284,7 @@ describe("GitLabPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), + ...ModelV2.Info.default(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")), modelID: ModelV2.ID.make("claude"), package: "aisdk:test-provider", headers: { h: "v" }, diff --git a/packages/core/test/plugin/provider-google-vertex-anthropic.test.ts b/packages/core/test/plugin/provider-google-vertex-anthropic.test.ts index 090abb945c..3b6726d373 100644 --- a/packages/core/test/plugin/provider-google-vertex-anthropic.test.ts +++ b/packages/core/test/plugin/provider-google-vertex-anthropic.test.ts @@ -116,7 +116,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("google-vertex-anthropic"), ModelV2.ID.make("claude-sonnet-4-5"), ), @@ -143,7 +143,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty( + ...ModelV2.Info.default( ProviderV2.ID.make("google-vertex-anthropic"), ModelV2.ID.make("claude-sonnet-4-5"), ), @@ -167,7 +167,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), modelID: ModelV2.ID.make("claude-sonnet-4-5"), package: "aisdk:test-provider", }), @@ -187,7 +187,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), modelID: ModelV2.ID.make("claude-sonnet-4-5"), package: "aisdk:test-provider", }), @@ -206,7 +206,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const sdkResult = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")), modelID: ModelV2.ID.make(" claude-sonnet-4-5 "), package: "aisdk:test-provider", }), @@ -215,7 +215,7 @@ describe("GoogleVertexAnthropicPlugin", () => { }) const languageResult = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")), modelID: ModelV2.ID.make(" claude-sonnet-4-5 "), package: "aisdk:test-provider", }), @@ -238,7 +238,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex-anthropic"), ModelV2.ID.make(" claude-sonnet-4-5 ")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex-anthropic"), ModelV2.ID.make(" claude-sonnet-4-5 ")), modelID: ModelV2.ID.make(" claude-sonnet-4-5 "), package: "aisdk:test-provider", }), @@ -257,7 +257,7 @@ describe("GoogleVertexAnthropicPlugin", () => { yield* addPlugin(GoogleVertexAnthropicPlugin) const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")), modelID: ModelV2.ID.make("claude-sonnet-4-5"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-google-vertex.test.ts b/packages/core/test/plugin/provider-google-vertex.test.ts index 635beba3c1..15949b4945 100644 --- a/packages/core/test/plugin/provider-google-vertex.test.ts +++ b/packages/core/test/plugin/provider-google-vertex.test.ts @@ -172,7 +172,7 @@ describe("GoogleVertexPlugin", () => { const provider = required(yield* catalog.provider.get(ProviderV2.ID.make("google-vertex"))) yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), modelID: ModelV2.ID.make("gemini"), package: "aisdk:@ai-sdk/google-vertex", }), @@ -294,7 +294,7 @@ describe("GoogleVertexPlugin", () => { yield* addPlugin() yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), modelID: ModelV2.ID.make("gemini"), package: "aisdk:@ai-sdk/google-vertex", }), @@ -339,7 +339,7 @@ describe("GoogleVertexPlugin", () => { () => aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")), modelID: ModelV2.ID.make("gemini"), package: "aisdk:@ai-sdk/openai-compatible", }), @@ -367,7 +367,7 @@ describe("GoogleVertexPlugin", () => { yield* addPlugin() yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" gemini-2.5-pro ")), + ...ModelV2.Info.default(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" gemini-2.5-pro ")), modelID: ModelV2.ID.make(" gemini-2.5-pro "), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-google.test.ts b/packages/core/test/plugin/provider-google.test.ts index d04e00e3b3..2dea12a2e6 100644 --- a/packages/core/test/plugin/provider-google.test.ts +++ b/packages/core/test/plugin/provider-google.test.ts @@ -26,7 +26,7 @@ describe("GooglePlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("gemini")), modelID: ModelV2.ID.make("gemini"), package: "aisdk:@ai-sdk/google", }), @@ -45,7 +45,7 @@ describe("GooglePlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("google"), ModelV2.ID.make("gemini")), + ...ModelV2.Info.default(ProviderV2.ID.make("google"), ModelV2.ID.make("gemini")), modelID: ModelV2.ID.make("gemini"), package: "aisdk:@ai-sdk/google", }), @@ -63,7 +63,7 @@ describe("GooglePlugin", () => { yield* addPlugin() const sdkEvent = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("gemini-api"), package: "aisdk:@ai-sdk/google", }), @@ -88,7 +88,7 @@ describe("GooglePlugin", () => { const resolved = yield* aisdk.model( ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("gemini-api"), package: "aisdk:@ai-sdk/google", settings: { apiKey: "test" }, diff --git a/packages/core/test/plugin/provider-openai-compatible.test.ts b/packages/core/test/plugin/provider-openai-compatible.test.ts index a954af9f00..e1cf1ed6c8 100644 --- a/packages/core/test/plugin/provider-openai-compatible.test.ts +++ b/packages/core/test/plugin/provider-openai-compatible.test.ts @@ -26,7 +26,7 @@ describe("OpenAICompatiblePlugin", () => { yield* addPlugin() const defaulted = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), modelID: ModelV2.ID.make("model"), package: "aisdk:test-provider", }), @@ -35,7 +35,7 @@ describe("OpenAICompatiblePlugin", () => { }) const disabled = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), modelID: ModelV2.ID.make("model"), package: "aisdk:test-provider", }), @@ -54,7 +54,7 @@ describe("OpenAICompatiblePlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")), modelID: ModelV2.ID.make("model"), package: "aisdk:test-provider", }), @@ -78,7 +78,7 @@ describe("OpenAICompatiblePlugin", () => { ) yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("model")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("model")), modelID: ModelV2.ID.make("model"), package: "aisdk:test-provider", }), @@ -99,7 +99,7 @@ describe("OpenAICompatiblePlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("model")), + ...ModelV2.Info.default(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("model")), modelID: ModelV2.ID.make("model"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-openai.test.ts b/packages/core/test/plugin/provider-openai.test.ts index cd0c943442..741966eebe 100644 --- a/packages/core/test/plugin/provider-openai.test.ts +++ b/packages/core/test/plugin/provider-openai.test.ts @@ -68,7 +68,7 @@ describe("OpenAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-openai"), ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-openai"), ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -86,7 +86,7 @@ describe("OpenAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -105,7 +105,7 @@ describe("OpenAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("gpt-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -125,7 +125,7 @@ describe("OpenAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.anthropic, ModelV2.ID.make("gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.anthropic, ModelV2.ID.make("gpt-5")), modelID: ModelV2.ID.make("gpt-5"), package: ProviderV2.aisdk("test-provider"), }), diff --git a/packages/core/test/plugin/provider-opencode.test.ts b/packages/core/test/plugin/provider-opencode.test.ts index 1de22a03dd..f0b9fff8d7 100644 --- a/packages/core/test/plugin/provider-opencode.test.ts +++ b/packages/core/test/plugin/provider-opencode.test.ts @@ -293,7 +293,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("paid")), modelID: ModelV2.ID.make("paid"), package: ProviderV2.aisdk("test-provider"), cost: cost(1), @@ -320,7 +320,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("free")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("free")), modelID: ModelV2.ID.make("free"), package: ProviderV2.aisdk("test-provider"), cost: cost(0), @@ -347,7 +347,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("output-only")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("output-only")), modelID: ModelV2.ID.make("output-only"), package: ProviderV2.aisdk("test-provider"), cost: cost(0, 1), @@ -376,7 +376,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("paid")), modelID: ModelV2.ID.make("paid"), package: ProviderV2.aisdk("test-provider"), cost: cost(1), @@ -410,7 +410,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("paid")), modelID: ModelV2.ID.make("paid"), package: ProviderV2.aisdk("test-provider"), cost: cost(1), @@ -438,7 +438,7 @@ describe("OpencodePlugin", () => { settings: { apiKey: "configured" }, }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("paid")), modelID: ModelV2.ID.make("paid"), package: ProviderV2.aisdk("test-provider"), cost: cost(1), @@ -468,7 +468,7 @@ describe("OpencodePlugin", () => { package: ProviderV2.aisdk("test-provider"), }) const model = ModelV2.Info.make({ - ...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")), + ...ModelV2.Info.default(provider.id, ModelV2.ID.make("paid")), modelID: ModelV2.ID.make("paid"), package: ProviderV2.aisdk("test-provider"), cost: cost(1), diff --git a/packages/core/test/plugin/provider-openrouter.test.ts b/packages/core/test/plugin/provider-openrouter.test.ts index 21ee3ae216..63520e01d3 100644 --- a/packages/core/test/plugin/provider-openrouter.test.ts +++ b/packages/core/test/plugin/provider-openrouter.test.ts @@ -54,7 +54,7 @@ describe("OpenRouterPlugin", () => { const ignored = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openrouter, ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.openrouter, ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: ProviderV2.aisdk("test-provider"), }), @@ -65,7 +65,7 @@ describe("OpenRouterPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("openai/gpt-5")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom"), ModelV2.ID.make("openai/gpt-5")), modelID: ModelV2.ID.make("openai/gpt-5"), package: ProviderV2.aisdk("test-provider"), }), diff --git a/packages/core/test/plugin/provider-sap-ai-core.test.ts b/packages/core/test/plugin/provider-sap-ai-core.test.ts index 26dc3ac86c..09d99867f2 100644 --- a/packages/core/test/plugin/provider-sap-ai-core.test.ts +++ b/packages/core/test/plugin/provider-sap-ai-core.test.ts @@ -48,7 +48,7 @@ function withEnv(vars: Record, effect: () = function model(providerID: string) { return ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make(providerID), ModelV2.ID.make("sap-model")), + ...ModelV2.Info.default(ProviderV2.ID.make(providerID), ModelV2.ID.make("sap-model")), modelID: ModelV2.ID.make("sap-model"), package: ProviderV2.aisdk(fixtureProvider), }) diff --git a/packages/core/test/plugin/provider-snowflake-cortex.test.ts b/packages/core/test/plugin/provider-snowflake-cortex.test.ts index 92af623756..749f4c5520 100644 --- a/packages/core/test/plugin/provider-snowflake-cortex.test.ts +++ b/packages/core/test/plugin/provider-snowflake-cortex.test.ts @@ -58,7 +58,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-4")), + ...ModelV2.Info.default(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-4")), modelID: ModelV2.ID.make("gpt-4"), package: "aisdk:test-provider", }), @@ -77,7 +77,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), + ...ModelV2.Info.default(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), modelID: ModelV2.ID.make("claude-sonnet-4-6"), package: "aisdk:test-provider", }), @@ -97,7 +97,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), + ...ModelV2.Info.default(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), modelID: ModelV2.ID.make("claude-sonnet-4-6"), package: "aisdk:test-provider", }), @@ -121,7 +121,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), + ...ModelV2.Info.default(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), modelID: ModelV2.ID.make("claude-sonnet-4-6"), package: "aisdk:test-provider", }), @@ -141,7 +141,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), + ...ModelV2.Info.default(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), modelID: ModelV2.ID.make("claude-sonnet-4-6"), package: "aisdk:test-provider", }), @@ -165,7 +165,7 @@ describe("SnowflakeCortexPlugin", () => { yield* addPlugin() const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), + ...ModelV2.Info.default(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")), modelID: ModelV2.ID.make("claude-sonnet-4-6"), package: "aisdk:test-provider", }), diff --git a/packages/core/test/plugin/provider-vercel.test.ts b/packages/core/test/plugin/provider-vercel.test.ts index 46d5fe25b8..29820b714c 100644 --- a/packages/core/test/plugin/provider-vercel.test.ts +++ b/packages/core/test/plugin/provider-vercel.test.ts @@ -59,7 +59,7 @@ describe("VercelPlugin", () => { yield* addPlugin() const event = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-vercel"), ModelV2.ID.make("v0-1.0-md")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-vercel"), ModelV2.ID.make("v0-1.0-md")), modelID: ModelV2.ID.make("v0-1.0-md"), package: "aisdk:@ai-sdk/vercel", }), diff --git a/packages/core/test/plugin/provider-xai.test.ts b/packages/core/test/plugin/provider-xai.test.ts index 04bfc508f7..4b3e672c1e 100644 --- a/packages/core/test/plugin/provider-xai.test.ts +++ b/packages/core/test/plugin/provider-xai.test.ts @@ -62,7 +62,7 @@ describe("XAIPlugin", () => { const ignored = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")), + ...ModelV2.Info.default(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")), modelID: ModelV2.ID.make("grok-4"), package: "aisdk:@ai-sdk/xai", }), @@ -72,7 +72,7 @@ describe("XAIPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")), + ...ModelV2.Info.default(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")), modelID: ModelV2.ID.make("grok-4"), package: "aisdk:@ai-sdk/xai", }), @@ -92,7 +92,7 @@ describe("XAIPlugin", () => { const result = yield* aisdk.runSDK({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("custom-xai"), ModelV2.ID.make("grok-4")), + ...ModelV2.Info.default(ProviderV2.ID.make("custom-xai"), ModelV2.ID.make("grok-4")), modelID: ModelV2.ID.make("grok-4"), package: "aisdk:@ai-sdk/xai", }), @@ -112,7 +112,7 @@ describe("XAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("alias")), + ...ModelV2.Info.default(ProviderV2.ID.make("xai"), ModelV2.ID.make("alias")), modelID: ModelV2.ID.make("grok-4"), package: "aisdk:@ai-sdk/xai", }), @@ -133,7 +133,7 @@ describe("XAIPlugin", () => { yield* addPlugin() const result = yield* aisdk.runLanguage({ model: ModelV2.Info.make({ - ...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("grok-4")), + ...ModelV2.Info.default(ProviderV2.ID.openai, ModelV2.ID.make("grok-4")), modelID: ModelV2.ID.make("grok-4"), package: "aisdk:@ai-sdk/xai", }), diff --git a/packages/core/test/shared-schema.test.ts b/packages/core/test/shared-schema.test.ts index 37b67c63a8..937cd3e1f0 100644 --- a/packages/core/test/shared-schema.test.ts +++ b/packages/core/test/shared-schema.test.ts @@ -170,8 +170,8 @@ test("Core reuses the canonical shared schemas", async () => { for (const [core, shared] of schemas) expect(core).toBe(shared) expect(Agent.Info.empty(Agent.ID.make("test"))).toEqual(AgentV2.Info.empty(AgentV2.ID.make("test"))) - expect(Model.Info.empty(Provider.ID.make("test"), Model.ID.make("model"))).toEqual( - ModelV2.Info.empty(ProviderV2.ID.make("test"), ModelV2.ID.make("model")), + expect(Model.Info.default(Provider.ID.make("test"), Model.ID.make("model"))).toEqual( + ModelV2.Info.default(ProviderV2.ID.make("test"), ModelV2.ID.make("model")), ) expect(Provider.Info.empty(Provider.ID.make("test"))).toEqual(ProviderV2.Info.empty(ProviderV2.ID.make("test"))) expect(Skill.Source.key(Skill.DirectorySource.make({ type: "directory", path: AbsolutePath.make("/tmp") }))).toBe( diff --git a/packages/docs/models.mdx b/packages/docs/models.mdx index 60fd63812a..213bfac523 100644 --- a/packages/docs/models.mdx +++ b/packages/docs/models.mdx @@ -94,9 +94,10 @@ You can also map a friendly catalog ID to a different API model ID with `modelID } ``` -Here `openai/coding-default` is the selectable catalog reference, while `gpt-5.2` is sent to the provider. When adding a -model that is not already in the catalog, set accurate `capabilities` and `limit` values so OpenCode can expose tools and -enforce the correct context limits. Set `disabled: true` on a model entry to hide it from the available catalog. +Here `openai/coding-default` is the selectable catalog reference, while `gpt-5.2` is sent to the provider. A model that is +not already in the catalog defaults to tool support, text and image input, and text output. Set accurate `capabilities` +and `limit` values when those defaults do not match the model or OpenCode needs to enforce its context limits. Set +`disabled: true` on a model entry to hide it from the available catalog. OpenAI-compatible models that stream reasoning through a custom assistant-message field can set `compatibility.reasoningField`: @@ -193,8 +194,9 @@ For an OpenAI-compatible server, define a provider package, endpoint, and at lea } ``` -Use the server's real model name, limits, modalities, and tool support. OpenCode cannot infer these for a model you add -manually. If the endpoint requires a key, add `apiKey` to provider `settings` using an environment substitution such as +Use the server's real model name, limits, modalities, and tool support. OpenCode applies the custom-model capability +defaults described above but cannot infer the server's actual limits or whether those defaults are accurate. If the +endpoint requires a key, add `apiKey` to provider `settings` using an environment substitution such as `"apiKey": "{env:LOCAL_API_KEY}"`; do not commit secrets. ### Model references diff --git a/packages/schema/src/model.ts b/packages/schema/src/model.ts index 81caea654f..2f9d1dd7cc 100644 --- a/packages/schema/src/model.ts +++ b/packages/schema/src/model.ts @@ -106,13 +106,13 @@ export const Info = Schema.Struct({ .annotate({ identifier: "Model.Info" }) .pipe( statics(() => ({ - empty: (providerID: Provider.ID, id: ID) => + default: (providerID: Provider.ID, id: ID) => ({ id, modelID: id, providerID, name: id, - capabilities: { tools: false, input: [], output: [] }, + capabilities: { tools: true, input: ["text", "image"], output: ["text"] }, variants: [], time: { released: 0 }, cost: [], diff --git a/packages/schema/test/contract-hygiene.test.ts b/packages/schema/test/contract-hygiene.test.ts index c662870269..46784ee27d 100644 --- a/packages/schema/test/contract-hygiene.test.ts +++ b/packages/schema/test/contract-hygiene.test.ts @@ -83,7 +83,7 @@ describe("contract hygiene", () => { test("model defaults and provider overlays preserve public invariants", () => { const id = Model.ID.make("model") - expect(Model.Info.empty(Provider.ID.make("provider"), id)).toMatchObject({ modelID: id, variants: [] }) + expect(Model.Info.default(Provider.ID.make("provider"), id)).toMatchObject({ modelID: id, variants: [] }) expect(() => Schema.decodeUnknownSync(Provider.Info)({ id: "provider",