provider-cerebras.test.ts 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import { describe, expect, mock } from "bun:test"
  2. import { Effect } from "effect"
  3. import { PluginV2 } from "@opencode-ai/core/plugin"
  4. import { CerebrasPlugin } from "@opencode-ai/core/plugin/provider/cerebras"
  5. import { it, model, provider } from "./provider-helper"
  6. const cerebrasOptions: Record<string, unknown>[] = []
  7. void mock.module("@ai-sdk/cerebras", () => ({
  8. createCerebras: (options: Record<string, unknown>) => {
  9. const snapshot = { ...options }
  10. cerebrasOptions.push(snapshot)
  11. return {
  12. languageModel: (modelID: string) => ({ modelID, provider: snapshot.name, specificationVersion: "v3" }),
  13. }
  14. },
  15. }))
  16. describe("CerebrasPlugin", () => {
  17. it.effect("applies the legacy integration header", () =>
  18. Effect.gen(function* () {
  19. const plugin = yield* PluginV2.Service
  20. yield* plugin.add(CerebrasPlugin)
  21. const result = yield* plugin.trigger(
  22. "provider.update",
  23. {},
  24. {
  25. provider: provider("cerebras", {
  26. options: { headers: { Existing: "1" }, body: {}, aisdk: { provider: {}, request: {} } },
  27. }),
  28. cancel: false,
  29. },
  30. )
  31. expect(result.provider.options.headers).toEqual({ Existing: "1", "X-Cerebras-3rd-Party-Integration": "opencode" })
  32. }),
  33. )
  34. it.effect("ignores non-Cerebras providers", () =>
  35. Effect.gen(function* () {
  36. const plugin = yield* PluginV2.Service
  37. yield* plugin.add(CerebrasPlugin)
  38. const result = yield* plugin.trigger("provider.update", {}, { provider: provider("groq"), cancel: false })
  39. expect(result.provider.options.headers).toEqual({})
  40. }),
  41. )
  42. it.effect("creates a bundled Cerebras SDK with the model provider ID as the SDK name", () =>
  43. Effect.gen(function* () {
  44. cerebrasOptions.length = 0
  45. const plugin = yield* PluginV2.Service
  46. yield* plugin.add(CerebrasPlugin)
  47. const result = yield* plugin.trigger(
  48. "aisdk.sdk",
  49. {
  50. model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"),
  51. package: "@ai-sdk/cerebras",
  52. options: { name: "custom-cerebras", apiKey: "test" },
  53. },
  54. {},
  55. )
  56. expect(cerebrasOptions).toEqual([{ name: "custom-cerebras", apiKey: "test" }])
  57. expect(result.sdk.languageModel("llama-4-scout-17b-16e-instruct").provider).toBe("custom-cerebras")
  58. }),
  59. )
  60. it.effect("preserves an explicit bundled Cerebras SDK name option", () =>
  61. Effect.gen(function* () {
  62. cerebrasOptions.length = 0
  63. const plugin = yield* PluginV2.Service
  64. yield* plugin.add(CerebrasPlugin)
  65. yield* plugin.trigger(
  66. "aisdk.sdk",
  67. {
  68. model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"),
  69. package: "@ai-sdk/cerebras",
  70. options: { name: "configured-cerebras", apiKey: "test" },
  71. },
  72. {},
  73. )
  74. expect(cerebrasOptions).toEqual([{ name: "configured-cerebras", apiKey: "test" }])
  75. }),
  76. )
  77. it.effect("ignores non-Cerebras SDK packages", () =>
  78. Effect.gen(function* () {
  79. cerebrasOptions.length = 0
  80. const plugin = yield* PluginV2.Service
  81. yield* plugin.add(CerebrasPlugin)
  82. const result = yield* plugin.trigger(
  83. "aisdk.sdk",
  84. {
  85. model: model("custom-cerebras", "llama-4-scout-17b-16e-instruct"),
  86. package: "@ai-sdk/groq",
  87. options: { name: "custom-cerebras", apiKey: "test" },
  88. },
  89. {},
  90. )
  91. expect(cerebrasOptions).toEqual([])
  92. expect(result.sdk).toBeUndefined()
  93. }),
  94. )
  95. })