diff --git a/packages/core/src/plugin/variant.ts b/packages/core/src/plugin/variant.ts index 05e1653b6e53..e608c29af167 100644 --- a/packages/core/src/plugin/variant.ts +++ b/packages/core/src/plugin/variant.ts @@ -30,8 +30,15 @@ export const Plugin = define({ export function generate(model: ModelV2Info): ModelV2Info["variants"] { if (model.api.type !== "aisdk" || model.api.package !== "@ai-sdk/openai-compatible") return [] const ids = `${model.id} ${model.api.id}`.toLowerCase() - if (!["glm-5.2", "glm-5-2", "glm-5p2"].some((name) => ids.includes(name))) return [] - return ["high", "max"].map((id) => ({ + + const isGLM = ["glm-5.2", "glm-5-2", "glm-5p2"].some((name) => ids.includes(name)) + const isHy3 = ["hy3"].some((name) => ids.includes(name)) + + if (!isGLM && !isHy3) return [] + + const efforts = isHy3 ? ["low", "medium", "high"] : ["high", "max"] + + return efforts.map((id) => ({ id, headers: {}, body: { reasoning_effort: id }, diff --git a/packages/core/test/plugin/variant.test.ts b/packages/core/test/plugin/variant.test.ts index 84af04a4df98..d01bbc064b02 100644 --- a/packages/core/test/plugin/variant.test.ts +++ b/packages/core/test/plugin/variant.test.ts @@ -64,4 +64,29 @@ describe("VariantPlugin", () => { ]) }), ) + + it.effect("adds Hy3 variants after catalog sources", () => + Effect.gen(function* () { + const service = yield* Catalog.Service + yield* service.transform((catalog) => { + catalog.provider.update(ProviderV2.ID.opencode, (provider) => { + provider.api = { type: "aisdk", package: "@ai-sdk/openai-compatible" } + }) + catalog.model.update(ProviderV2.ID.opencode, ModelV2.ID.make("hy3"), (model) => { + model.api = { + id: ModelV2.ID.make("hy3"), + type: "aisdk", + package: "@ai-sdk/openai-compatible", + } + }) + }) + yield* VariantPlugin.Plugin.effect(host({ catalog: catalogHost(service) })) + + expect((yield* service.model.get(ProviderV2.ID.opencode, ModelV2.ID.make("hy3")))?.variants).toEqual([ + expect.objectContaining({ id: "low", body: { reasoning_effort: "low" } }), + expect.objectContaining({ id: "medium", body: { reasoning_effort: "medium" } }), + expect.objectContaining({ id: "high", body: { reasoning_effort: "high" } }), + ]) + }), + ) })