provider-venice.test.ts 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. import { describe, expect } from "bun:test"
  2. import { Effect } from "effect"
  3. import { PluginV2 } from "@opencode-ai/core/plugin"
  4. import { VenicePlugin } from "@opencode-ai/core/plugin/provider/venice"
  5. import { fakeSelectorSdk, it, model } from "./provider-helper"
  6. describe("VenicePlugin", () => {
  7. it.effect("creates a Venice SDK for venice-ai-sdk-provider", () =>
  8. Effect.gen(function* () {
  9. const plugin = yield* PluginV2.Service
  10. yield* plugin.add(VenicePlugin)
  11. const result = yield* plugin.trigger(
  12. "aisdk.sdk",
  13. { model: model("venice", "model"), package: "venice-ai-sdk-provider", options: { name: "venice" } },
  14. {},
  15. )
  16. expect(result.sdk).toBeDefined()
  17. }),
  18. )
  19. it.effect("uses the model provider ID as the bundled Venice SDK name", () =>
  20. Effect.gen(function* () {
  21. const plugin = yield* PluginV2.Service
  22. const observed: string[] = []
  23. yield* plugin.add(VenicePlugin)
  24. yield* plugin.add({
  25. id: PluginV2.ID.make("inspector"),
  26. effect: Effect.succeed({
  27. "aisdk.sdk": (evt) =>
  28. Effect.sync(() => {
  29. observed.push(evt.sdk.languageModel("model").provider)
  30. }),
  31. }),
  32. })
  33. const result = yield* plugin.trigger(
  34. "aisdk.sdk",
  35. {
  36. model: model("custom-venice", "model"),
  37. package: "venice-ai-sdk-provider",
  38. options: { name: "custom-venice", apiKey: "test" },
  39. },
  40. {},
  41. )
  42. expect(result.sdk).toBeDefined()
  43. expect(observed).toEqual(["custom-venice.chat"])
  44. }),
  45. )
  46. it.effect("only handles the bundled venice-ai-sdk-provider package", () =>
  47. Effect.gen(function* () {
  48. const plugin = yield* PluginV2.Service
  49. yield* plugin.add(VenicePlugin)
  50. const similar = yield* plugin.trigger(
  51. "aisdk.sdk",
  52. {
  53. model: model("venice", "model"),
  54. package: "file:///tmp/venice-ai-sdk-provider.js",
  55. options: { name: "venice" },
  56. },
  57. {},
  58. )
  59. const other = yield* plugin.trigger(
  60. "aisdk.sdk",
  61. { model: model("venice", "model"), package: "@ai-sdk/openai-compatible", options: { name: "venice" } },
  62. {},
  63. )
  64. expect(similar.sdk).toBeUndefined()
  65. expect(other.sdk).toBeUndefined()
  66. }),
  67. )
  68. it.effect("leaves Venice language selection to the default languageModel fallback", () =>
  69. Effect.gen(function* () {
  70. const plugin = yield* PluginV2.Service
  71. const calls: string[] = []
  72. yield* plugin.add(VenicePlugin)
  73. const result = yield* plugin.trigger(
  74. "aisdk.language",
  75. { model: model("venice", "alias"), sdk: fakeSelectorSdk(calls), options: {} },
  76. {},
  77. )
  78. expect(calls).toEqual([])
  79. expect(result.language).toBeUndefined()
  80. }),
  81. )
  82. })