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"
|
return "gateway"
|
||||||
case "@openrouter/ai-sdk-provider":
|
case "@openrouter/ai-sdk-provider":
|
||||||
return "openrouter"
|
return "openrouter"
|
||||||
|
case "merge-gateway-ai-sdk-provider":
|
||||||
|
return "mergeGateway"
|
||||||
case "ai-gateway-provider":
|
case "ai-gateway-provider":
|
||||||
// ai-gateway-provider/unified wraps createOpenAICompatible({ name: "Unified" }),
|
// ai-gateway-provider/unified wraps createOpenAICompatible({ name: "Unified" }),
|
||||||
// and @ai-sdk/openai-compatible parses compatibleOptions from one of
|
// 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 "@ai-sdk/togetherai":
|
||||||
case "venice-ai-sdk-provider":
|
case "venice-ai-sdk-provider":
|
||||||
case "ai-gateway-provider":
|
case "ai-gateway-provider":
|
||||||
|
case "merge-gateway-ai-sdk-provider":
|
||||||
return { reasoningEffort: effort }
|
return { reasoningEffort: effort }
|
||||||
case "@ai-sdk/cohere":
|
case "@ai-sdk/cohere":
|
||||||
case "@ai-sdk/perplexity":
|
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)
|
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", () => {
|
test("public provider info omits invalid models", () => {
|
||||||
const provider = Provider.fromModelsDevProvider({
|
const provider = Provider.fromModelsDevProvider({
|
||||||
id: "test",
|
id: "test",
|
||||||
|
|||||||
@@ -3370,6 +3370,7 @@ describe("ProviderTransform.reasoningVariants", () => {
|
|||||||
["@ai-sdk/togetherai", { reasoningEffort: "high" }],
|
["@ai-sdk/togetherai", { reasoningEffort: "high" }],
|
||||||
["venice-ai-sdk-provider", { reasoningEffort: "high" }],
|
["venice-ai-sdk-provider", { reasoningEffort: "high" }],
|
||||||
["ai-gateway-provider", { reasoningEffort: "high" }],
|
["ai-gateway-provider", { reasoningEffort: "high" }],
|
||||||
|
["merge-gateway-ai-sdk-provider", { reasoningEffort: "high" }],
|
||||||
["@ai-sdk/amazon-bedrock", { reasoningConfig: { type: "enabled", maxReasoningEffort: "high" } }],
|
["@ai-sdk/amazon-bedrock", { reasoningConfig: { type: "enabled", maxReasoningEffort: "high" } }],
|
||||||
])("converts effort for %s", (npm, expected, ...args) => {
|
])("converts effort for %s", (npm, expected, ...args) => {
|
||||||
const id = args[0] as string | undefined
|
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", () => {
|
describe("ProviderTransform.options - kimi family adaptive thinking", () => {
|
||||||
const createModel = (overrides: Record<string, any> = {}) =>
|
const createModel = (overrides: Record<string, any> = {}) =>
|
||||||
({
|
({
|
||||||
|
|||||||
Reference in New Issue
Block a user