variant.ts 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. export * as VariantPlugin from "./variant"
  2. import type { ModelV2Info } from "@opencode-ai/sdk/v2/types"
  3. import { Effect } from "effect"
  4. import { define } from "./internal"
  5. export const Plugin = define({
  6. id: "variant",
  7. effect: Effect.fn(function* (ctx) {
  8. yield* ctx.catalog.transform((catalog) => {
  9. for (const record of catalog.provider.list()) {
  10. for (const model of record.models.values()) {
  11. catalog.model.update(model.providerID, model.id, (draft) => {
  12. const generated = generate(draft)
  13. if (generated.length === 0) return
  14. const explicit = new Map(draft.variants.map((variant) => [variant.id, variant]))
  15. const generatedIDs = new Set(generated.map((variant) => variant.id))
  16. draft.variants = [
  17. ...generated.map((variant) => explicit.get(variant.id) ?? variant),
  18. ...draft.variants.filter((variant) => !generatedIDs.has(variant.id)),
  19. ]
  20. })
  21. }
  22. }
  23. })
  24. }),
  25. })
  26. export function generate(model: ModelV2Info): ModelV2Info["variants"] {
  27. if (model.api.type !== "aisdk" || model.api.package !== "@ai-sdk/openai-compatible") return []
  28. const ids = `${model.id} ${model.api.id}`.toLowerCase()
  29. if (!["glm-5.2", "glm-5-2", "glm-5p2"].some((name) => ids.includes(name))) return []
  30. return ["high", "max"].map((id) => ({
  31. id,
  32. headers: {},
  33. body: { reasoning_effort: id },
  34. }))
  35. }