provider-nvidia.test.ts 3.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import { describe, expect } from "bun:test"
  2. import { Effect } from "effect"
  3. import { Catalog } from "@opencode-ai/core/catalog"
  4. import { Plugin } from "@opencode-ai/core/plugin"
  5. import { PluginHost } from "@opencode-ai/core/plugin/host"
  6. import { ProviderPlugins } from "@opencode-ai/core/plugin/provider"
  7. import { NvidiaPlugin } from "@opencode-ai/core/plugin/provider/nvidia"
  8. import { Provider } from "@opencode-ai/core/provider"
  9. import { testEffect } from "../lib/effect"
  10. import { PluginTestLayer } from "./fixture"
  11. const it = testEffect(PluginTestLayer)
  12. const addPlugin = Effect.fn(function* () {
  13. const plugin = yield* Plugin.Service
  14. const host = yield* PluginHost.make(plugin)
  15. yield* NvidiaPlugin.effect(host)
  16. })
  17. describe("NvidiaPlugin", () => {
  18. it.effect("is registered so legacy referer headers can be applied", () =>
  19. Effect.sync(() => expect(ProviderPlugins.map((item) => item.id)).toContain("opencode.provider.nvidia")),
  20. )
  21. it.effect("applies NVIDIA tracking headers only to nvidia", () =>
  22. Effect.gen(function* () {
  23. const catalog = yield* Catalog.Service
  24. yield* catalog.transform((catalog) => {
  25. catalog.provider.update(Provider.ID.make("nvidia"), (provider) => {
  26. provider.package = Provider.aisdk("@ai-sdk/openai-compatible")
  27. provider.settings = { baseURL: "https://integrate.api.nvidia.com/v1" }
  28. provider.headers = { Existing: "value" }
  29. })
  30. catalog.provider.update(Provider.ID.openrouter, () => {})
  31. })
  32. yield* addPlugin()
  33. expect((yield* catalog.provider.get(Provider.ID.make("nvidia")))?.headers).toEqual({
  34. Existing: "value",
  35. "HTTP-Referer": "https://opencode.ai/",
  36. "X-Title": "opencode",
  37. "X-BILLING-INVOKE-ORIGIN": "OpenCode",
  38. })
  39. expect((yield* catalog.provider.get(Provider.ID.openrouter))?.headers).toBeUndefined()
  40. }),
  41. )
  42. it.effect("adds billing origin for custom NVIDIA endpoints", () =>
  43. Effect.gen(function* () {
  44. const catalog = yield* Catalog.Service
  45. yield* catalog.transform((catalog) => {
  46. catalog.provider.update(Provider.ID.make("nvidia"), (provider) => {
  47. provider.package = Provider.aisdk("@ai-sdk/openai-compatible")
  48. provider.settings = { baseURL: "https://integrate.api.nvidia.com/v1" }
  49. })
  50. })
  51. yield* addPlugin()
  52. expect((yield* catalog.provider.get(Provider.ID.make("nvidia")))?.headers).toEqual({
  53. "HTTP-Referer": "https://opencode.ai/",
  54. "X-Title": "opencode",
  55. "X-BILLING-INVOKE-ORIGIN": "OpenCode",
  56. })
  57. }),
  58. )
  59. it.effect("preserves an explicit NVIDIA billing origin header", () =>
  60. Effect.gen(function* () {
  61. const catalog = yield* Catalog.Service
  62. yield* catalog.transform((catalog) => {
  63. catalog.provider.update(Provider.ID.make("nvidia"), (provider) => {
  64. provider.package = Provider.aisdk("@ai-sdk/openai-compatible")
  65. provider.settings = { baseURL: "https://integrate.api.nvidia.com/v1" }
  66. provider.headers = { "X-BILLING-INVOKE-ORIGIN": "CustomOrigin" }
  67. })
  68. })
  69. yield* addPlugin()
  70. expect((yield* catalog.provider.get(Provider.ID.make("nvidia")))?.headers).toEqual({
  71. "HTTP-Referer": "https://opencode.ai/",
  72. "X-Title": "opencode",
  73. "X-BILLING-INVOKE-ORIGIN": "CustomOrigin",
  74. })
  75. }),
  76. )
  77. })