fix(provider): add Merge Gateway reasoning variants (#41867)
This commit is contained in:
@@ -84,6 +84,8 @@ function sdkKey(npm: string): string | undefined {
|
||||
return "gateway"
|
||||
case "@openrouter/ai-sdk-provider":
|
||||
return "openrouter"
|
||||
case "merge-gateway-ai-sdk-provider":
|
||||
return "mergeGateway"
|
||||
case "ai-gateway-provider":
|
||||
// ai-gateway-provider/unified wraps createOpenAICompatible({ name: "Unified" }),
|
||||
// and @ai-sdk/openai-compatible parses compatibleOptions from one of
|
||||
@@ -1772,6 +1774,7 @@ function reasoningEffort(model: Provider.Model, effort: string) {
|
||||
case "@ai-sdk/togetherai":
|
||||
case "venice-ai-sdk-provider":
|
||||
case "ai-gateway-provider":
|
||||
case "merge-gateway-ai-sdk-provider":
|
||||
return { reasoningEffort: effort }
|
||||
case "@ai-sdk/cohere":
|
||||
case "@ai-sdk/perplexity":
|
||||
|
||||
@@ -1548,6 +1548,33 @@ test("models.dev reasoning options replace generated variants and unsupported to
|
||||
expect(models["gemini-3-pro-fast"].variants).toEqual(models.override.variants)
|
||||
})
|
||||
|
||||
test("MERGE Gateway exposes declared effort variants without model-specific handling", () => {
|
||||
const provider = {
|
||||
id: "merge-gateway",
|
||||
name: "MERGE Gateway",
|
||||
env: ["MERGE_GATEWAY_API_KEY"],
|
||||
npm: "merge-gateway-ai-sdk-provider",
|
||||
models: {
|
||||
"openai/gpt-5.6-sol": {
|
||||
id: "openai/gpt-5.6-sol",
|
||||
name: "GPT-5.6 Sol",
|
||||
reasoning: true,
|
||||
reasoning_options: [{ type: "effort", values: ["none", "low", "medium", "high", "xhigh", "max"] }],
|
||||
limit: { context: 128_000, output: 64_000 },
|
||||
},
|
||||
},
|
||||
} as unknown as ModelsDev.Provider
|
||||
|
||||
expect(Provider.fromModelsDevProvider(provider).models["openai/gpt-5.6-sol"].variants).toEqual({
|
||||
none: { reasoningEffort: "none" },
|
||||
low: { reasoningEffort: "low" },
|
||||
medium: { reasoningEffort: "medium" },
|
||||
high: { reasoningEffort: "high" },
|
||||
xhigh: { reasoningEffort: "xhigh" },
|
||||
max: { reasoningEffort: "max" },
|
||||
})
|
||||
})
|
||||
|
||||
test("public provider info omits invalid models", () => {
|
||||
const provider = Provider.fromModelsDevProvider({
|
||||
id: "test",
|
||||
|
||||
@@ -3370,6 +3370,7 @@ describe("ProviderTransform.reasoningVariants", () => {
|
||||
["@ai-sdk/togetherai", { reasoningEffort: "high" }],
|
||||
["venice-ai-sdk-provider", { reasoningEffort: "high" }],
|
||||
["ai-gateway-provider", { reasoningEffort: "high" }],
|
||||
["merge-gateway-ai-sdk-provider", { reasoningEffort: "high" }],
|
||||
["@ai-sdk/amazon-bedrock", { reasoningConfig: { type: "enabled", maxReasoningEffort: "high" } }],
|
||||
])("converts effort for %s", (npm, expected, ...args) => {
|
||||
const id = args[0] as string | undefined
|
||||
@@ -5555,6 +5556,25 @@ describe("ProviderTransform.providerOptions - ai-gateway-provider", () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe("ProviderTransform.providerOptions - merge-gateway-ai-sdk-provider", () => {
|
||||
const model = {
|
||||
id: "merge-gateway/openai/gpt-5.6-sol",
|
||||
providerID: "merge-gateway",
|
||||
api: {
|
||||
id: "openai/gpt-5.6-sol",
|
||||
url: "https://api-gateway.merge.dev/v1/ai-sdk",
|
||||
npm: "merge-gateway-ai-sdk-provider",
|
||||
},
|
||||
capabilities: { reasoning: true },
|
||||
} as any
|
||||
|
||||
test("routes normalized effort under the adapter's mergeGateway key", () => {
|
||||
expect(ProviderTransform.providerOptions(model, { reasoningEffort: "high" })).toEqual({
|
||||
mergeGateway: { reasoningEffort: "high" },
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
describe("ProviderTransform.options - kimi family adaptive thinking", () => {
|
||||
const createModel = (overrides: Record<string, any> = {}) =>
|
||||
({
|
||||
|
||||
Reference in New Issue
Block a user