feat(core): load native provider packages

This commit is contained in:
Shoubhit Dash 2026-06-25 20:24:53 +05:30
commit cd3885910d
66 changed files with 588 additions and 693 deletions

View file

@ -29,8 +29,7 @@ describe("AlibabaPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("alibaba"), ModelV2.ID.make("qwen")),
modelID: ModelV2.ID.make("qwen"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/alibaba",
options: { name: "alibaba" },
@ -48,8 +47,7 @@ describe("AlibabaPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("alibaba"), ModelV2.ID.make("qwen")),
modelID: ModelV2.ID.make("qwen"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "alibaba" },
@ -67,8 +65,7 @@ describe("AlibabaPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-alibaba"), ModelV2.ID.make("qwen")),
modelID: ModelV2.ID.make("qwen"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/alibaba",
options: { name: "custom-alibaba", apiKey: "test" },
@ -88,8 +85,7 @@ describe("AlibabaPlugin", () => {
const item = ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("alibaba"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("qwen-plus"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const result = yield* aisdk.runSDK({ model: item, package: "@ai-sdk/alibaba", options: {} })
const language = result.sdk?.languageModel(item.modelID ?? item.id)

View file

@ -85,13 +85,12 @@ describe("AmazonBedrockPlugin", () => {
yield* catalog.transform((catalog) => {
const bedrock = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.amazonBedrock),
aisdk: true,
package: "@ai-sdk/amazon-bedrock",
package: "aisdk:@ai-sdk/amazon-bedrock",
headers: {},
settings: { endpoint: "https://bedrock.example" },
})
catalog.provider.update(bedrock.id, (item) => {
item.aisdk = bedrock.aisdk
item.package = bedrock.package
item.package = bedrock.package
item.headers = bedrock.headers
item.settings = { endpoint: "https://bedrock.example" }
@ -100,8 +99,7 @@ describe("AmazonBedrockPlugin", () => {
yield* addPlugin()
const result = required(yield* catalog.provider.get(ProviderV2.ID.amazonBedrock))
expect(result).toMatchObject({
aisdk: true,
package: "@ai-sdk/amazon-bedrock",
package: "aisdk:@ai-sdk/amazon-bedrock",
settings: { baseURL: "https://bedrock.example" },
})
expect(result.settings?.endpoint).toBeUndefined()
@ -118,8 +116,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: {
@ -145,8 +142,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: {
@ -181,8 +177,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: { name: "amazon-bedrock" },
@ -203,8 +198,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: { name: "amazon-bedrock", region: "eu-west-1" },
@ -224,8 +218,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: { name: "amazon-bedrock" },
@ -245,8 +238,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: { name: "amazon-bedrock" },
@ -267,8 +259,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: {
@ -298,8 +289,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: {
@ -328,8 +318,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")),
modelID: ModelV2.ID.make("openai.gpt-5.5"),
aisdk: true,
package: "@ai-sdk/amazon-bedrock/mantle",
package: "aisdk:@ai-sdk/amazon-bedrock/mantle",
}),
package: "@ai-sdk/amazon-bedrock/mantle",
options: {
@ -357,8 +346,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-5.5")),
modelID: ModelV2.ID.make("openai.gpt-5.5"),
aisdk: true,
package: "@ai-sdk/amazon-bedrock/mantle",
package: "aisdk:@ai-sdk/amazon-bedrock/mantle",
}),
sdk: fakeSelectorSdk(calls),
options: { baseURL: "https://bedrock-mantle.us-east-2.api.aws/openai/v1", region: "us-east-2" },
@ -367,8 +355,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("openai.gpt-oss-safeguard-120b")),
modelID: ModelV2.ID.make("openai.gpt-oss-safeguard-120b"),
aisdk: true,
package: "@ai-sdk/amazon-bedrock/mantle",
package: "aisdk:@ai-sdk/amazon-bedrock/mantle",
}),
sdk: fakeSelectorSdk(calls),
options: { region: "us-east-1" },
@ -386,8 +373,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "@ai-sdk/amazon-bedrock/anthropic",
package: "aisdk:@ai-sdk/amazon-bedrock/anthropic",
}),
package: "@ai-sdk/amazon-bedrock/anthropic",
options: { name: "amazon-bedrock" },
@ -415,8 +401,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/amazon-bedrock",
options: {
@ -448,8 +433,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},
@ -458,8 +442,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: "eu-west-1" },
@ -468,8 +451,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("global.anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("global.anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: "eu-west-1" },
@ -478,8 +460,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: "ap-northeast-1" },
@ -488,8 +469,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: "ap-southeast-2" },
@ -515,8 +495,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},
@ -603,8 +582,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.amazonBedrock, ModelV2.ID.make(item.modelID)),
modelID: ModelV2.ID.make(item.modelID),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: item.region },
@ -624,8 +602,7 @@ describe("AmazonBedrockPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("anthropic.claude-sonnet-4-5")),
modelID: ModelV2.ID.make("anthropic.claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: { region: "eu-west-1" },

View file

@ -31,13 +31,12 @@ describe("AnthropicPlugin", () => {
yield* catalog.transform((catalog) => {
const item = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.anthropic),
aisdk: true,
package: "@ai-sdk/anthropic",
package: "aisdk:@ai-sdk/anthropic",
headers: { Existing: "1" },
settings: {},
})
catalog.provider.update(item.id, (draft) => {
draft.aisdk = item.aisdk
draft.package = item.package
draft.package = item.package
draft.headers = item.headers
})
@ -68,8 +67,7 @@ describe("AnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-anthropic"), ModelV2.ID.make("claude-sonnet-4-5")),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "@ai-sdk/anthropic",
package: "aisdk:@ai-sdk/anthropic",
}),
package: "@ai-sdk/anthropic",
options: { name: "custom-anthropic", apiKey: "test" },
@ -87,8 +85,7 @@ describe("AnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.anthropic, ModelV2.ID.make("claude-sonnet-4-5")),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "@ai-sdk/anthropic",
package: "aisdk:@ai-sdk/anthropic",
}),
package: "@ai-sdk/anthropic",
options: { name: "anthropic", apiKey: "test" },

View file

@ -66,15 +66,13 @@ describe("AzureCognitiveServicesPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("azure-cognitive-services"), (item) => {
item.aisdk = true
item.package = "@ai-sdk/openai-compatible"
item.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
})
})
yield* addPlugin()
const result = required(yield* catalog.provider.get(ProviderV2.ID.make("azure-cognitive-services")))
expect(result).toMatchObject({
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://cognitive.cognitiveservices.azure.com/openai" },
})
expect(result.settings?.resourceName).toBeUndefined()
@ -89,20 +87,18 @@ describe("AzureCognitiveServicesPlugin", () => {
yield* catalog.transform((catalog) => {
const azure = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services")),
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
})
const openai = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.openai),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
catalog.provider.update(azure.id, (item) => {
item.aisdk = azure.aisdk
item.package = azure.package
item.package = azure.package
})
catalog.provider.update(openai.id, (item) => {
item.aisdk = openai.aisdk
item.package = openai.package
item.package = openai.package
})
})
@ -110,9 +106,9 @@ describe("AzureCognitiveServicesPlugin", () => {
const azure = required(yield* catalog.provider.get(ProviderV2.ID.make("azure-cognitive-services")))
const openai = required(yield* catalog.provider.get(ProviderV2.ID.openai))
expect(azure.settings?.baseURL).toBeUndefined()
expect(azure).toMatchObject({ aisdk: true, package: "@ai-sdk/openai-compatible" })
expect(azure).toMatchObject({ package: "aisdk:@ai-sdk/openai-compatible" })
expect(openai.settings?.baseURL).toBeUndefined()
expect(openai).toMatchObject({ aisdk: true, package: "test-provider" })
expect(openai).toMatchObject({ package: "aisdk:test-provider" })
}),
),
)
@ -127,8 +123,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: { useCompletionUrls: true },
@ -147,8 +142,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -157,8 +151,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -179,8 +172,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("messages-deployment")),
modelID: ModelV2.ID.make("messages-deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { messages: sdk.messages, chat: sdk.chat, languageModel: sdk.languageModel },
options: {},
@ -189,8 +181,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("chat-deployment")),
modelID: ModelV2.ID.make("chat-deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { chat: sdk.chat, languageModel: sdk.languageModel },
options: {},
@ -199,8 +190,7 @@ describe("AzureCognitiveServicesPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("azure-cognitive-services"), ModelV2.ID.make("language-deployment")),
modelID: ModelV2.ID.make("language-deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: sdk.languageModel },
options: {},

View file

@ -66,8 +66,7 @@ describe("AzurePlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.azure, (item) => {
item.aisdk = true
item.package = "@ai-sdk/azure"
item.package = ProviderV2.aisdk("@ai-sdk/azure")
})
})
yield* addPlugin()
@ -83,13 +82,12 @@ describe("AzurePlugin", () => {
yield* catalog.transform((catalog) => {
const azure = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.azure),
aisdk: true,
package: "@ai-sdk/azure",
package: "aisdk:@ai-sdk/azure",
headers: {},
settings: { resourceName: "from-config" },
})
catalog.provider.update(azure.id, (item) => {
item.aisdk = azure.aisdk
item.package = azure.package
item.package = azure.package
item.headers = azure.headers
item.settings = { resourceName: "from-config" }
@ -110,13 +108,12 @@ describe("AzurePlugin", () => {
yield* catalog.transform((catalog) => {
const azure = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.azure),
aisdk: true,
package: "@ai-sdk/azure",
package: "aisdk:@ai-sdk/azure",
headers: {},
settings: { resourceName: "" },
})
catalog.provider.update(azure.id, (item) => {
item.aisdk = azure.aisdk
item.package = azure.package
item.package = azure.package
item.headers = azure.headers
item.settings = { resourceName: "" }
@ -135,13 +132,12 @@ describe("AzurePlugin", () => {
yield* catalog.transform((catalog) => {
const azure = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.azure),
aisdk: true,
package: "@ai-sdk/azure",
package: "aisdk:@ai-sdk/azure",
headers: {},
settings: { resourceName: " " },
})
catalog.provider.update(azure.id, (item) => {
item.aisdk = azure.aisdk
item.package = azure.package
item.package = azure.package
item.headers = azure.headers
item.settings = { resourceName: " " }
@ -163,8 +159,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/azure",
options: { name: "azure", baseURL: "https://proxy.example.com/openai" },
@ -184,8 +179,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/azure",
options: { name: "azure" },
@ -206,8 +200,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: { useCompletionUrls: true },
@ -226,8 +219,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: { useCompletionUrls: true },
@ -246,8 +238,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
headers: {},
settings: { useCompletionUrls: true },
}),
@ -268,8 +259,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -278,8 +268,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("deployment")),
modelID: ModelV2.ID.make("deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -303,8 +292,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("messages-deployment")),
modelID: ModelV2.ID.make("messages-deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { messages: make("messages"), chat: make("chat"), languageModel: make("languageModel") },
options: {},
@ -313,8 +301,7 @@ describe("AzurePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.azure, ModelV2.ID.make("language-deployment")),
modelID: ModelV2.ID.make("language-deployment"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: make("languageModel") },
options: {},

View file

@ -36,8 +36,7 @@ describe("CerebrasPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("cerebras"), (item) => {
item.aisdk = true
item.package = "@ai-sdk/cerebras"
item.package = ProviderV2.aisdk("@ai-sdk/cerebras")
item.headers = { ...item.headers, Existing: "1" }
})
})
@ -71,8 +70,7 @@ describe("CerebrasPlugin", () => {
ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
),
modelID: ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/cerebras",
options: { name: "custom-cerebras", apiKey: "test" },
@ -95,8 +93,7 @@ describe("CerebrasPlugin", () => {
ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
),
modelID: ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/cerebras",
options: { name: "configured-cerebras", apiKey: "test" },
@ -118,8 +115,7 @@ describe("CerebrasPlugin", () => {
ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
),
modelID: ModelV2.ID.make("llama-4-scout-17b-16e-instruct"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/groq",
options: { name: "custom-cerebras", apiKey: "test" },

View file

@ -119,8 +119,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway" },
@ -142,8 +141,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: {
@ -188,8 +186,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: {
@ -219,8 +216,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: {
@ -258,8 +254,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: {
@ -291,8 +286,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway" },
@ -315,8 +309,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway" },
@ -340,8 +333,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway" },
@ -371,8 +363,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway", baseURL: "https://proxy.example/v1" },
@ -399,8 +390,7 @@ describe("CloudflareAIGatewayPlugin", () => {
ModelV2.ID.make("anthropic/claude-sonnet-4-5"),
),
modelID: ModelV2.ID.make("anthropic/claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "ai-gateway-provider",
options: { name: "cloudflare-ai-gateway" },
@ -429,8 +419,7 @@ describe("CloudflareAIGatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-ai-gateway"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "cloudflare-ai-gateway" },

View file

@ -87,8 +87,7 @@ describe("CloudflareWorkersAIPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("cloudflare-workers-ai"), (provider) => {
provider.aisdk = true
provider.package = "test-provider"
provider.package = ProviderV2.aisdk("test-provider")
}),
)
yield* addPlugin()
@ -97,7 +96,6 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")),
modelID: ModelV2.ID.make("@cf/model"),
aisdk: provider.aisdk,
package: provider.package,
settings: provider.settings,
}),
@ -105,8 +103,7 @@ describe("CloudflareWorkersAIPlugin", () => {
options: { name: "cloudflare-workers-ai", headers: { custom: "header" } },
})
expect(provider).toMatchObject({
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
settings: { baseURL: "https://api.cloudflare.com/client/v4/accounts/acct/ai/v1" },
})
expect(sdk.sdk).toBeDefined()
@ -120,15 +117,13 @@ describe("CloudflareWorkersAIPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("cloudflare-workers-ai"), (provider) => {
provider.aisdk = true
provider.package = "test-provider"
provider.package = ProviderV2.aisdk("test-provider")
provider.settings = { ...provider.settings, baseURL: "https://proxy.example/v1" }
}),
)
yield* addPlugin()
expect(required(yield* catalog.provider.get(ProviderV2.ID.make("cloudflare-workers-ai")))).toMatchObject({
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
settings: { baseURL: "https://proxy.example/v1" },
})
}),
@ -145,8 +140,7 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")),
modelID: ModelV2.ID.make("@cf/model"),
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://proxy.example/v1" },
}),
package: "@ai-sdk/openai-compatible",
@ -163,15 +157,13 @@ describe("CloudflareWorkersAIPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("cloudflare-workers-ai"), (provider) => {
provider.aisdk = true
provider.package = "test-provider"
provider.package = ProviderV2.aisdk("test-provider")
provider.settings = { ...provider.settings, accountId: "configured-acct" }
}),
)
yield* addPlugin()
expect(required(yield* catalog.provider.get(ProviderV2.ID.make("cloudflare-workers-ai")))).toMatchObject({
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
settings: { baseURL: "https://api.cloudflare.com/client/v4/accounts/env-acct/ai/v1" },
})
}),
@ -188,8 +180,7 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")),
modelID: ModelV2.ID.make("@cf/model"),
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://proxy.example/v1" },
}),
package: "@ai-sdk/openai-compatible",
@ -218,8 +209,7 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")),
modelID: ModelV2.ID.make("@cf/model"),
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://api.cloudflare.com/client/v4/accounts/${CLOUDFLARE_ACCOUNT_ID}/ai/v1" },
}),
package: "@ai-sdk/openai-compatible",
@ -245,8 +235,7 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("@cf/api-model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -266,8 +255,7 @@ describe("CloudflareWorkersAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("@cf/model")),
modelID: ModelV2.ID.make("@cf/model"),
aisdk: true,
package: "@ai-sdk/anthropic",
package: "aisdk:@ai-sdk/anthropic",
settings: { baseURL: "https://proxy.example/v1" },
}),
package: "@ai-sdk/anthropic",

View file

@ -57,8 +57,7 @@ describe("CoherePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cohere"), ModelV2.ID.make("command")),
modelID: ModelV2.ID.make("command"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "cohere" },
@ -69,8 +68,7 @@ describe("CoherePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cohere"), ModelV2.ID.make("command")),
modelID: ModelV2.ID.make("command"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/cohere",
options: { name: "cohere" },
@ -88,8 +86,7 @@ describe("CoherePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-cohere"), ModelV2.ID.make("command-r-plus")),
modelID: ModelV2.ID.make("command-r-plus"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/cohere",
options: { name: "custom-cohere", apiKey: "test", baseURL: "https://cohere.example" },
@ -115,8 +112,7 @@ describe("CoherePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cohere"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("command-r-plus"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk,
options: {},

View file

@ -49,8 +49,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("deepinfra"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: "@ai-sdk/deepinfra",
options: { name: "deepinfra" },
@ -69,8 +68,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-deepinfra"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: "@ai-sdk/deepinfra",
options: { name: "custom-deepinfra", apiKey: "test" },
@ -90,8 +88,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("deepinfra"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: "@ai-sdk/deepinfra",
options: { name: "deepinfra", apiKey: "test" },
@ -118,8 +115,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("deepinfra"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: item,
options: { name: "deepinfra" },
@ -131,8 +127,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("deepinfra"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: "@ai-sdk/deepinfra",
options: { name: "deepinfra" },
@ -152,8 +147,7 @@ describe("DeepInfraPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("deepinfra"), ModelV2.ID.make("meta-llama/Llama-3.3-70B-Instruct")),
modelID: ModelV2.ID.make("meta-llama/Llama-3.3-70B-Instruct"),
aisdk: true,
package: "@ai-sdk/deepinfra",
package: "aisdk:@ai-sdk/deepinfra",
}),
package: "@ai-sdk/deepinfra",
options: { name: "deepinfra" },

View file

@ -54,8 +54,7 @@ describe("DynamicProviderPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")),
modelID: ModelV2.ID.make("test-model"),
aisdk: true,
package: fixtureProvider,
package: ProviderV2.aisdk(fixtureProvider),
}),
package: fixtureProvider,
options: { name: "custom", marker: "dynamic" },
@ -74,8 +73,7 @@ describe("DynamicProviderPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("test-model")),
modelID: ModelV2.ID.make("test-model"),
aisdk: true,
package: fixtureProvider,
package: ProviderV2.aisdk(fixtureProvider),
}),
package: fixtureProvider,
options: { name: "custom", marker: "dynamic" },
@ -93,8 +91,7 @@ describe("DynamicProviderPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("test-model")),
modelID: ModelV2.ID.make("test-model"),
aisdk: true,
package: fixtureProvider,
package: ProviderV2.aisdk(fixtureProvider),
}),
package: fixtureProvider,
options: { name: "custom-provider", marker: "dynamic" },
@ -111,8 +108,7 @@ describe("DynamicProviderPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("npm-provider"), ModelV2.ID.make("test-model")),
modelID: ModelV2.ID.make("test-model"),
aisdk: true,
package: "fixture-provider",
package: "aisdk:fixture-provider",
}),
package: "fixture-provider",
options: { name: "npm-provider", marker: "npm" },
@ -130,8 +126,7 @@ describe("DynamicProviderPlugin", () => {
ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("missing-entrypoint"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("alias"),
aisdk: true,
package: "fixture-provider",
package: "aisdk:fixture-provider",
}),
)
.pipe(Effect.exit)
@ -149,8 +144,7 @@ describe("DynamicProviderPlugin", () => {
ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("bad-import"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("alias"),
aisdk: true,
package: "file:///missing/provider-factory.js",
package: "aisdk:file:///missing/provider-factory.js",
}),
)
.pipe(Effect.exit)
@ -170,8 +164,7 @@ describe("DynamicProviderPlugin", () => {
ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("missing-factory"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("alias"),
aisdk: true,
package: "fixture-provider",
package: "aisdk:fixture-provider",
}),
)
.pipe(Effect.exit)
@ -189,8 +182,7 @@ describe("DynamicProviderPlugin", () => {
ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("test-model-api"),
aisdk: true,
package: fixtureProvider,
package: ProviderV2.aisdk(fixtureProvider),
}),
)
expect(language).toMatchObject({ modelID: "test-model-api", options: { name: "custom" } })

View file

@ -46,8 +46,7 @@ describe("GatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gateway"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/gateway",
options: { name: "gateway" },
@ -68,8 +67,7 @@ describe("GatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("vercel"), ModelV2.ID.make("anthropic/claude-sonnet-4")),
modelID: ModelV2.ID.make("anthropic/claude-sonnet-4"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/gateway",
options: { name: "vercel", apiKey: "test-key" },
@ -92,8 +90,7 @@ describe("GatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("vercel"), ModelV2.ID.make(modelID)),
modelID: ModelV2.ID.make(modelID),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/vercel",
options: { name: "vercel" },
@ -104,8 +101,7 @@ describe("GatewayPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("vercel"), ModelV2.ID.make(modelID)),
modelID: ModelV2.ID.make(modelID),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/gateway",
options: { name: "vercel" },

View file

@ -48,8 +48,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "github-copilot" },
@ -58,8 +57,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/github-copilot",
options: { name: "github-copilot" },
@ -79,8 +77,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("claude-sonnet-4")),
modelID: ModelV2.ID.make("claude-sonnet-4"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},
@ -99,8 +96,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("claude-sonnet-4"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},
@ -119,8 +115,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -129,8 +124,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5.1-codex")),
modelID: ModelV2.ID.make("gpt-5.1-codex"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -139,8 +133,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-4o")),
modelID: ModelV2.ID.make("gpt-4o"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -149,8 +142,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini")),
modelID: ModelV2.ID.make("gpt-5-mini"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -159,8 +151,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("gpt-5-mini-2025-08-07")),
modelID: ModelV2.ID.make("gpt-5-mini-2025-08-07"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -185,8 +176,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("default")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -195,8 +185,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("small")),
modelID: ModelV2.ID.make("gpt-5-mini"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -205,8 +194,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("github-copilot"), ModelV2.ID.make("sonnet")),
modelID: ModelV2.ID.make("claude-sonnet-4"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -255,8 +243,7 @@ describe("GithubCopilotPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},

View file

@ -71,8 +71,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")),
modelID: ModelV2.ID.make("claude"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "gitlab-ai-provider",
options: { name: "gitlab" },
@ -110,8 +109,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")),
modelID: ModelV2.ID.make("claude"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "gitlab-ai-provider",
options: { name: "gitlab" },
@ -137,8 +135,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")),
modelID: ModelV2.ID.make("claude"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "gitlab-ai-provider",
options: {
@ -180,8 +177,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")),
modelID: ModelV2.ID.make("claude"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai",
options: { name: "gitlab" },
@ -201,8 +197,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")),
modelID: ModelV2.ID.make("duo-workflow-custom"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
headers: {},
settings: { workflowRef: "ref", workflowDefinition: "definition" },
}),
@ -236,8 +231,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-exact")),
modelID: ModelV2.ID.make("duo-workflow-exact"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: {
workflowChat: (id: string, options: unknown) => {
@ -265,8 +259,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("duo-workflow-custom")),
modelID: ModelV2.ID.make("duo-workflow-custom"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
headers: {},
settings: { featureFlags: { request_flag: true } },
}),
@ -293,8 +286,7 @@ describe("GitLabPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("gitlab"), ModelV2.ID.make("claude")),
modelID: ModelV2.ID.make("claude"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
headers: { h: "v" },
settings: {},
}),

View file

@ -64,8 +64,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex-anthropic"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/google-vertex/anthropic"
provider.package = ProviderV2.aisdk("@ai-sdk/google-vertex/anthropic")
}),
)
yield* addPlugin(GoogleVertexAnthropicPlugin)
@ -85,8 +84,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex-anthropic"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/google-vertex/anthropic"
provider.package = ProviderV2.aisdk("@ai-sdk/google-vertex/anthropic")
provider.settings = { ...provider.settings, project: "configured-project", location: "configured-location" }
}),
)
@ -123,8 +121,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
ModelV2.ID.make("claude-sonnet-4-5"),
),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/google-vertex/anthropic",
options: { name: "google-vertex-anthropic" },
@ -151,8 +148,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
ModelV2.ID.make("claude-sonnet-4-5"),
),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/google-vertex/anthropic",
options: { name: "google-vertex-anthropic" },
@ -173,8 +169,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/google-vertex/anthropic",
options: { name: "google-vertex", project: "project", location: "eu" },
@ -194,8 +189,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/google-vertex/anthropic",
options: { name: "google-vertex", project: "project", location: "eu", baseURL: "https://proxy.example/v1" },
@ -214,8 +208,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")),
modelID: ModelV2.ID.make(" claude-sonnet-4-5 "),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/google-vertex/anthropic",
options: { name: "google-vertex", project: "project", location: "us" },
@ -224,8 +217,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" claude-sonnet-4-5 ")),
modelID: ModelV2.ID.make(" claude-sonnet-4-5 "),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: sdkResult.sdk,
options: {},
@ -248,8 +240,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex-anthropic"), ModelV2.ID.make(" claude-sonnet-4-5 ")),
modelID: ModelV2.ID.make(" claude-sonnet-4-5 "),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: selector(calls) },
options: {},
@ -268,8 +259,7 @@ describe("GoogleVertexAnthropicPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("claude-sonnet-4-5")),
modelID: ModelV2.ID.make("claude-sonnet-4-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: selector(calls) },
options: {},

View file

@ -92,8 +92,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.opencode, (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://opencode.ai/zen/v1" }
}),
)
@ -119,8 +118,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = {
...provider.settings,
baseURL:
@ -133,8 +131,7 @@ describe("GoogleVertexPlugin", () => {
expect(provider.settings?.project).toBe("google-cloud-project")
expect(provider.settings?.location).toBe("google-vertex-location")
expect(provider).toMatchObject({
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: {
baseURL:
"https://google-vertex-location-aiplatform.googleapis.com/v1/projects/google-cloud-project/locations/google-vertex-location",
@ -163,8 +160,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = {
...provider.settings,
baseURL:
@ -178,8 +174,7 @@ describe("GoogleVertexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")),
modelID: ModelV2.ID.make("gemini"),
aisdk: true,
package: "@ai-sdk/google-vertex",
package: "aisdk:@ai-sdk/google-vertex",
}),
package: "@ai-sdk/google-vertex",
options: { name: "google-vertex" },
@ -187,8 +182,7 @@ describe("GoogleVertexPlugin", () => {
expect(provider.settings?.project).toBe("vertex-project")
expect(provider).toMatchObject({
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: {
baseURL:
"https://europe-west4-aiplatform.googleapis.com/v1/projects/vertex-project/locations/europe-west4",
@ -215,8 +209,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = {
...provider.settings,
baseURL:
@ -230,8 +223,7 @@ describe("GoogleVertexPlugin", () => {
expect(provider.settings?.project).toBe("config-project")
expect(provider.settings?.location).toBe("global")
expect(provider).toMatchObject({
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://aiplatform.googleapis.com/v1/projects/config-project/locations/global" },
})
}),
@ -243,8 +235,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = {
...provider.settings,
baseURL:
@ -256,8 +247,7 @@ describe("GoogleVertexPlugin", () => {
yield* addPlugin()
const provider = required(yield* catalog.provider.get(ProviderV2.ID.make("google-vertex")))
expect(provider).toMatchObject({
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: "https://eu-aiplatform.googleapis.com/v1/projects/config-project/locations/eu" },
})
}),
@ -278,8 +268,7 @@ describe("GoogleVertexPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("google-vertex"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/google-vertex"
provider.package = ProviderV2.aisdk("@ai-sdk/google-vertex")
provider.settings = { ...provider.settings, project: "config-project" }
}),
)
@ -307,8 +296,7 @@ describe("GoogleVertexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")),
modelID: ModelV2.ID.make("gemini"),
aisdk: true,
package: "@ai-sdk/google-vertex",
package: "aisdk:@ai-sdk/google-vertex",
}),
package: "@ai-sdk/google-vertex",
options: { name: "google-vertex" },
@ -353,8 +341,7 @@ describe("GoogleVertexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make("gemini")),
modelID: ModelV2.ID.make("gemini"),
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "google-vertex" },
@ -382,8 +369,7 @@ describe("GoogleVertexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google-vertex"), ModelV2.ID.make(" gemini-2.5-pro ")),
modelID: ModelV2.ID.make(" gemini-2.5-pro "),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},

View file

@ -28,8 +28,7 @@ describe("GooglePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("gemini")),
modelID: ModelV2.ID.make("gemini"),
aisdk: true,
package: "@ai-sdk/google",
package: "aisdk:@ai-sdk/google",
}),
package: "@ai-sdk/google",
options: { name: "custom-google", apiKey: "test" },
@ -48,8 +47,7 @@ describe("GooglePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("google"), ModelV2.ID.make("gemini")),
modelID: ModelV2.ID.make("gemini"),
aisdk: true,
package: "@ai-sdk/google",
package: "aisdk:@ai-sdk/google",
}),
package: "@ai-sdk/google-vertex",
options: { name: "google" },
@ -67,8 +65,7 @@ describe("GooglePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-google"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("gemini-api"),
aisdk: true,
package: "@ai-sdk/google",
package: "aisdk:@ai-sdk/google",
}),
package: "@ai-sdk/google",
options: { name: "custom-google", apiKey: "test" },

View file

@ -29,8 +29,7 @@ describe("GroqPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("groq"), ModelV2.ID.make("llama")),
modelID: ModelV2.ID.make("llama"),
aisdk: true,
package: "@ai-sdk/groq",
package: "aisdk:@ai-sdk/groq",
}),
package: "@ai-sdk/groq",
options: { name: "groq" },
@ -48,8 +47,7 @@ describe("GroqPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("groq"), ModelV2.ID.make("llama")),
modelID: ModelV2.ID.make("llama"),
aisdk: true,
package: "@ai-sdk/groq",
package: "aisdk:@ai-sdk/groq",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "groq" },
@ -67,8 +65,7 @@ describe("GroqPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("groq"), ModelV2.ID.make("llama")),
modelID: ModelV2.ID.make("llama"),
aisdk: true,
package: "@ai-sdk/groq",
package: "aisdk:@ai-sdk/groq",
}),
package: "@ai-sdk/groq/compat",
options: { name: "groq" },
@ -86,8 +83,7 @@ describe("GroqPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-groq"), ModelV2.ID.make("llama")),
modelID: ModelV2.ID.make("llama"),
aisdk: true,
package: "@ai-sdk/groq",
package: "aisdk:@ai-sdk/groq",
}),
package: "@ai-sdk/groq",
options: { name: "custom-groq", apiKey: "test" },
@ -113,8 +109,7 @@ describe("GroqPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("groq"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("llama-api"),
aisdk: true,
package: "@ai-sdk/groq",
package: "aisdk:@ai-sdk/groq",
}),
sdk,
options: { name: "groq", apiKey: "test" },

View file

@ -27,8 +27,7 @@ describe("KiloPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("kilo"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://api.kilo.ai/api/gateway" }
provider.headers = { Existing: "value" }
})
@ -49,8 +48,7 @@ describe("KiloPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("kilo"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://api.kilo.ai/api/gateway" }
})
})
@ -71,13 +69,11 @@ describe("KiloPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("kilo"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://api.kilo.ai/api/gateway" }
})
catalog.provider.update(ProviderV2.ID.make("custom-kilo"), (provider) => {
provider.aisdk = true
provider.package = "kilo"
provider.package = ProviderV2.aisdk("kilo")
})
})
yield* addPlugin()

View file

@ -34,8 +34,7 @@ describe("LLMGatewayPlugin", () => {
})
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("llmgateway"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://api.llmgateway.io/v1" }
provider.headers = { Existing: "value" }
})
@ -62,8 +61,7 @@ describe("LLMGatewayPlugin", () => {
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("llmgateway"), (provider) => {
provider.disabled = true
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://api.llmgateway.io/v1" }
})
})

View file

@ -29,8 +29,7 @@ describe("MistralPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("mistral"), ModelV2.ID.make("mistral-large")),
modelID: ModelV2.ID.make("mistral-large"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/mistral",
options: { name: "mistral" },
@ -48,8 +47,7 @@ describe("MistralPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("mistral"), ModelV2.ID.make("mistral-large")),
modelID: ModelV2.ID.make("mistral-large"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "mistral" },
@ -73,8 +71,7 @@ describe("MistralPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("mistral"), ModelV2.ID.make("mistral-large")),
modelID: ModelV2.ID.make("mistral-large"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/mistral",
options: { name: "mistral" },
@ -99,8 +96,7 @@ describe("MistralPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-mistral"), ModelV2.ID.make("mistral-large")),
modelID: ModelV2.ID.make("mistral-large"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/mistral",
options: { name: "custom-mistral" },
@ -125,8 +121,7 @@ describe("MistralPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("mistral"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("mistral-large"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk,
options: {},

View file

@ -27,8 +27,7 @@ describe("NvidiaPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("nvidia"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://integrate.api.nvidia.com/v1" }
provider.headers = { Existing: "value" }
})
@ -50,8 +49,7 @@ describe("NvidiaPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("nvidia"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://integrate.api.nvidia.com/v1" }
})
})
@ -70,8 +68,7 @@ describe("NvidiaPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("nvidia"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://integrate.api.nvidia.com/v1" }
provider.headers = { "X-BILLING-INVOKE-ORIGIN": "CustomOrigin" }
})

View file

@ -28,8 +28,7 @@ describe("OpenAICompatiblePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "custom" },
@ -38,8 +37,7 @@ describe("OpenAICompatiblePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "custom", includeUsage: false },
@ -58,8 +56,7 @@ describe("OpenAICompatiblePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "file:///tmp/@ai-sdk/openai-compatible-provider.js",
options: { name: "custom" },
@ -83,8 +80,7 @@ describe("OpenAICompatiblePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-provider"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "custom-provider", baseURL: "https://example.com/v1" },
@ -105,8 +101,7 @@ describe("OpenAICompatiblePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("cloudflare-workers-ai"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "cloudflare-workers-ai" },

View file

@ -68,8 +68,7 @@ describe("OpenAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-openai"), ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai",
options: { name: "custom-openai", apiKey: "test" },
@ -87,8 +86,7 @@ describe("OpenAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "openai" },
@ -107,8 +105,7 @@ describe("OpenAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -128,8 +125,7 @@ describe("OpenAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.anthropic, ModelV2.ID.make("gpt-5")),
modelID: ModelV2.ID.make("gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -145,11 +141,10 @@ describe("OpenAIPlugin", () => {
yield* catalog.transform((catalog) => {
const item = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.openai),
aisdk: true,
package: "@ai-sdk/openai",
package: "aisdk:@ai-sdk/openai",
})
catalog.provider.update(item.id, (draft) => {
draft.aisdk = item.aisdk
draft.package = item.package
draft.package = item.package
})
catalog.model.update(item.id, ModelV2.ID.make("gpt-5"), () => {})
@ -169,11 +164,10 @@ describe("OpenAIPlugin", () => {
yield* catalog.transform((catalog) => {
const item = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.make("custom-openai")),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
catalog.provider.update(item.id, (draft) => {
draft.aisdk = item.aisdk
draft.package = item.package
draft.package = item.package
})
catalog.model.update(item.id, ModelV2.ID.make("gpt-5-chat-latest"), () => {})

View file

@ -133,8 +133,7 @@ describe("OpencodePlugin", () => {
expect(provider).toMatchObject({
name: "Remote",
integrationID: "opencode",
aisdk: true,
package: "@ai-sdk/openai-compatible",
package: "aisdk:@ai-sdk/openai-compatible",
settings: { baseURL: `${server.url.origin}/v1` },
})
expect(provider.headers).toEqual({ "x-org-id": "org" })
@ -178,14 +177,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")),
modelID: ModelV2.ID.make("paid"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(1),
})
catalog.provider.update(provider.id, () => {})
@ -207,14 +204,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("free")),
modelID: ModelV2.ID.make("free"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(0),
})
catalog.provider.update(provider.id, () => {})
@ -236,14 +231,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("output-only")),
modelID: ModelV2.ID.make("output-only"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(0, 1),
})
catalog.provider.update(provider.id, () => {})
@ -267,14 +260,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")),
modelID: ModelV2.ID.make("paid"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(1),
})
catalog.provider.update(provider.id, () => {})
@ -303,14 +294,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")),
modelID: ModelV2.ID.make("paid"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(1),
})
catalog.provider.update(provider.id, () => {})
@ -332,16 +321,14 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.opencode),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
headers: {},
settings: { apiKey: "configured" },
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")),
modelID: ModelV2.ID.make("paid"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(1),
})
catalog.provider.update(provider.id, (draft) => {
@ -366,14 +353,12 @@ describe("OpencodePlugin", () => {
yield* catalog.transform((catalog) => {
const provider = ProviderV2.Info.make({
...ProviderV2.Info.empty(ProviderV2.ID.openai),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
})
const model = ModelV2.Info.make({
...ModelV2.Info.empty(provider.id, ModelV2.ID.make("paid")),
modelID: ModelV2.ID.make("paid"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
cost: cost(1),
})
catalog.provider.update(provider.id, () => {})

View file

@ -30,8 +30,7 @@ describe("OpenRouterPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.openrouter, (provider) => {
provider.aisdk = true
provider.package = "@openrouter/ai-sdk-provider"
provider.package = ProviderV2.aisdk("@openrouter/ai-sdk-provider")
provider.headers = { Existing: "value" }
provider.settings = {}
})
@ -58,8 +57,7 @@ describe("OpenRouterPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openrouter, ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "openrouter" },
@ -70,8 +68,7 @@ describe("OpenRouterPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom"), ModelV2.ID.make("openai/gpt-5")),
modelID: ModelV2.ID.make("openai/gpt-5"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@openrouter/ai-sdk-provider",
options: { name: "custom" },
@ -85,8 +82,7 @@ describe("OpenRouterPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.openrouter, (provider) => {
provider.aisdk = true
provider.package = "@openrouter/ai-sdk-provider"
provider.package = ProviderV2.aisdk("@openrouter/ai-sdk-provider")
})
catalog.provider.update(ProviderV2.ID.openai, () => {})
catalog.model.update(ProviderV2.ID.openrouter, ModelV2.ID.make("openai/gpt-5-chat"), () => {})

View file

@ -42,8 +42,7 @@ describe("PerplexityPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("perplexity"), ModelV2.ID.make("sonar")),
modelID: ModelV2.ID.make("sonar"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/perplexity",
options: { name: "perplexity" },
@ -61,8 +60,7 @@ describe("PerplexityPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("perplexity"), ModelV2.ID.make("sonar")),
modelID: ModelV2.ID.make("sonar"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/perplexity-compatible",
options: { name: "perplexity" },
@ -80,8 +78,7 @@ describe("PerplexityPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("perplexity"), ModelV2.ID.make("sonar")),
modelID: ModelV2.ID.make("sonar"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/perplexity",
options: { name: "perplexity" },
@ -99,8 +96,7 @@ describe("PerplexityPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-perplexity"), ModelV2.ID.make("sonar")),
modelID: ModelV2.ID.make("sonar"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/perplexity",
options: { name: "custom-perplexity" },
@ -119,8 +115,7 @@ describe("PerplexityPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("perplexity"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("sonar"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},

View file

@ -50,8 +50,7 @@ function model(providerID: string) {
return ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make(providerID), ModelV2.ID.make("sap-model")),
modelID: ModelV2.ID.make("sap-model"),
aisdk: true,
package: fixtureProvider,
package: ProviderV2.aisdk(fixtureProvider),
})
}

View file

@ -58,8 +58,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("openai"), ModelV2.ID.make("gpt-4")),
modelID: ModelV2.ID.make("gpt-4"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai",
options: { name: "openai" },
@ -78,8 +77,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")),
modelID: ModelV2.ID.make("claude-sonnet-4-6"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "snowflake-cortex", baseURL: "https://test.snowflakecomputing.com/api/v2/cortex/v1" },
@ -99,8 +97,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")),
modelID: ModelV2.ID.make("claude-sonnet-4-6"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: {
@ -124,8 +121,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")),
modelID: ModelV2.ID.make("claude-sonnet-4-6"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "snowflake-cortex", baseURL: "https://test.snowflakecomputing.com/api/v2/cortex/v1" },
@ -145,8 +141,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")),
modelID: ModelV2.ID.make("claude-sonnet-4-6"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: {
@ -170,8 +165,7 @@ describe("SnowflakeCortexPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("snowflake-cortex"), ModelV2.ID.make("claude-sonnet-4-6")),
modelID: ModelV2.ID.make("claude-sonnet-4-6"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "snowflake-cortex", baseURL: "https://test.snowflakecomputing.com/api/v2/cortex/v1" },

View file

@ -42,8 +42,7 @@ describe("TogetherAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("togetherai"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/togetherai",
options: { name: "togetherai" },
@ -62,8 +61,7 @@ describe("TogetherAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("togetherai"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "file:///tmp/@ai-sdk/togetherai-provider.js",
options: { name: "togetherai" },
@ -74,8 +72,7 @@ describe("TogetherAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("togetherai"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/togetherai",
options: { name: "togetherai" },
@ -94,8 +91,7 @@ describe("TogetherAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-togetherai"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/togetherai",
options: { name: "custom-togetherai" },
@ -119,8 +115,7 @@ describe("TogetherAIPlugin", () => {
ModelV2.ID.make("meta-llama/Llama-3.3-70B-Instruct-Turbo"),
),
modelID: ModelV2.ID.make("meta-llama/Llama-3.3-70B-Instruct-Turbo"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: { languageModel: fakeSelectorSdk(calls).languageModel },
options: {},

View file

@ -42,8 +42,7 @@ describe("VenicePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("venice"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "venice-ai-sdk-provider",
options: { name: "venice" },
@ -61,8 +60,7 @@ describe("VenicePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-venice"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "venice-ai-sdk-provider",
options: { name: "custom-venice", apiKey: "test" },
@ -81,8 +79,7 @@ describe("VenicePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("venice"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "file:///tmp/venice-ai-sdk-provider.js",
options: { name: "venice" },
@ -91,8 +88,7 @@ describe("VenicePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("venice"), ModelV2.ID.make("model")),
modelID: ModelV2.ID.make("model"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
package: "@ai-sdk/openai-compatible",
options: { name: "venice" },
@ -112,8 +108,7 @@ describe("VenicePlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("venice"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("alias"),
aisdk: true,
package: "test-provider",
package: "aisdk:test-provider",
}),
sdk: fakeSelectorSdk(calls),
options: {},

View file

@ -25,8 +25,7 @@ describe("VercelPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("vercel"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/vercel"
provider.package = ProviderV2.aisdk("@ai-sdk/vercel")
provider.headers = { ...provider.headers, Existing: "1" }
})
})
@ -44,8 +43,7 @@ describe("VercelPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) =>
catalog.provider.update(ProviderV2.ID.make("vercel"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/vercel"
provider.package = ProviderV2.aisdk("@ai-sdk/vercel")
}),
)
yield* addPlugin()
@ -63,8 +61,7 @@ describe("VercelPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-vercel"), ModelV2.ID.make("v0-1.0-md")),
modelID: ModelV2.ID.make("v0-1.0-md"),
aisdk: true,
package: "@ai-sdk/vercel",
package: "aisdk:@ai-sdk/vercel",
}),
package: "@ai-sdk/vercel",
options: { name: "custom-vercel" },

View file

@ -43,8 +43,7 @@ describe("XAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")),
modelID: ModelV2.ID.make("grok-4"),
aisdk: true,
package: "@ai-sdk/xai",
package: "aisdk:@ai-sdk/xai",
}),
package: "@ai-sdk/openai-compatible",
options: {},
@ -54,8 +53,7 @@ describe("XAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("grok-4")),
modelID: ModelV2.ID.make("grok-4"),
aisdk: true,
package: "@ai-sdk/xai",
package: "aisdk:@ai-sdk/xai",
}),
package: "@ai-sdk/xai",
options: {},
@ -76,8 +74,7 @@ describe("XAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("custom-xai"), ModelV2.ID.make("grok-4")),
modelID: ModelV2.ID.make("grok-4"),
aisdk: true,
package: "@ai-sdk/xai",
package: "aisdk:@ai-sdk/xai",
}),
package: "@ai-sdk/xai",
options: {},
@ -98,8 +95,7 @@ describe("XAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.make("xai"), ModelV2.ID.make("alias")),
modelID: ModelV2.ID.make("grok-4"),
aisdk: true,
package: "@ai-sdk/xai",
package: "aisdk:@ai-sdk/xai",
}),
sdk: fakeSelectorSdk(calls),
options: {},
@ -121,8 +117,7 @@ describe("XAIPlugin", () => {
model: ModelV2.Info.make({
...ModelV2.Info.empty(ProviderV2.ID.openai, ModelV2.ID.make("grok-4")),
modelID: ModelV2.ID.make("grok-4"),
aisdk: true,
package: "@ai-sdk/xai",
package: "aisdk:@ai-sdk/xai",
}),
sdk: fakeSelectorSdk(calls),
options: {},

View file

@ -32,8 +32,7 @@ describe("ZenmuxPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("zenmux"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://zenmux.ai/api/v1" }
})
})
@ -49,8 +48,7 @@ describe("ZenmuxPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("zenmux"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://zenmux.ai/api/v1" }
provider.headers = { ...provider.headers, Existing: "value" }
})
@ -70,8 +68,7 @@ describe("ZenmuxPlugin", () => {
const catalog = yield* Catalog.Service
yield* catalog.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.make("zenmux"), (provider) => {
provider.aisdk = true
provider.package = "@ai-sdk/openai-compatible"
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
provider.settings = { ...provider.settings, baseURL: "https://zenmux.ai/api/v1" }
provider.headers = { "HTTP-Referer": "https://example.com/", "X-Title": "custom-title" }
})

View file

@ -23,13 +23,7 @@ const connections = Credential.defaultLayer.pipe(Layer.fresh)
const integrations = Integration.locationLayer.pipe(Layer.provide(events), Layer.provide(connections))
const catalog = Catalog.layer.pipe(
Layer.provide(
Layer.mergeAll(
events,
locationLayer,
Policy.layer.pipe(Layer.provide(locationLayer)),
connections,
integrations,
),
Layer.mergeAll(events, locationLayer, Policy.layer.pipe(Layer.provide(locationLayer)), connections, integrations),
),
)
const it = testEffect(
@ -42,13 +36,11 @@ describe("VariantPlugin", () => {
const service = yield* Catalog.Service
yield* service.transform((catalog) => {
catalog.provider.update(ProviderV2.ID.opencode, (provider) => {
provider.package = "@ai-sdk/openai-compatible"
provider.aisdk = true
provider.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
})
catalog.model.update(ProviderV2.ID.opencode, ModelV2.ID.make("glm-5.2"), (model) => {
model.modelID = ModelV2.ID.make("glm-5.2")
model.package = "@ai-sdk/openai-compatible"
model.aisdk = true
model.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
})
})
yield* VariantPlugin.Plugin.effect(host({ catalog: catalogHost(service) }))
@ -66,11 +58,8 @@ describe("VariantPlugin", () => {
yield* service.transform((catalog) => {
catalog.model.update(ProviderV2.ID.opencode, ModelV2.ID.make("glm-5.2"), (model) => {
model.modelID = ModelV2.ID.make("glm-5.2")
model.package = "@ai-sdk/openai-compatible"
model.aisdk = true
model.variants = [
{ id: ModelV2.VariantID.make("high"), headers: { custom: "true" } },
]
model.package = ProviderV2.aisdk("@ai-sdk/openai-compatible")
model.variants = [{ id: ModelV2.VariantID.make("high"), headers: { custom: "true" } }]
})
})
yield* VariantPlugin.Plugin.effect(host({ catalog: catalogHost(service) }))