provider-nvidia.test.ts 3.5 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. import { describe, expect } from "bun:test"
  2. import { Effect } from "effect"
  3. import { Catalog } from "@opencode-ai/core/catalog"
  4. import { PluginV2 } 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 { ProviderV2 } 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* PluginV2.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(PluginV2.ID.make("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(ProviderV2.ID.make("nvidia"), (provider) => {
  26. provider.api = {
  27. type: "aisdk",
  28. package: "@ai-sdk/openai-compatible",
  29. url: "https://integrate.api.nvidia.com/v1",
  30. }
  31. provider.request = { headers: { Existing: "value" }, body: {} }
  32. })
  33. catalog.provider.update(ProviderV2.ID.openrouter, () => {})
  34. })
  35. yield* addPlugin()
  36. expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({
  37. Existing: "value",
  38. "HTTP-Referer": "https://opencode.ai/",
  39. "X-Title": "opencode",
  40. "X-BILLING-INVOKE-ORIGIN": "OpenCode",
  41. })
  42. expect((yield* catalog.provider.get(ProviderV2.ID.openrouter))?.request.headers).toEqual({})
  43. }),
  44. )
  45. it.effect("adds billing origin for custom NVIDIA endpoints", () =>
  46. Effect.gen(function* () {
  47. const catalog = yield* Catalog.Service
  48. yield* catalog.transform((catalog) => {
  49. catalog.provider.update(ProviderV2.ID.make("nvidia"), (provider) => {
  50. provider.api = {
  51. type: "aisdk",
  52. package: "@ai-sdk/openai-compatible",
  53. url: "https://integrate.api.nvidia.com/v1",
  54. }
  55. })
  56. })
  57. yield* addPlugin()
  58. expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({
  59. "HTTP-Referer": "https://opencode.ai/",
  60. "X-Title": "opencode",
  61. "X-BILLING-INVOKE-ORIGIN": "OpenCode",
  62. })
  63. }),
  64. )
  65. it.effect("preserves an explicit NVIDIA billing origin header", () =>
  66. Effect.gen(function* () {
  67. const catalog = yield* Catalog.Service
  68. yield* catalog.transform((catalog) => {
  69. catalog.provider.update(ProviderV2.ID.make("nvidia"), (provider) => {
  70. provider.api = {
  71. type: "aisdk",
  72. package: "@ai-sdk/openai-compatible",
  73. url: "https://integrate.api.nvidia.com/v1",
  74. }
  75. provider.request = {
  76. headers: { "X-BILLING-INVOKE-ORIGIN": "CustomOrigin" },
  77. body: { baseURL: "https://integrate.api.nvidia.com/v1" },
  78. }
  79. })
  80. })
  81. yield* addPlugin()
  82. expect((yield* catalog.provider.get(ProviderV2.ID.make("nvidia")))?.request.headers).toEqual({
  83. "HTTP-Referer": "https://opencode.ai/",
  84. "X-Title": "opencode",
  85. "X-BILLING-INVOKE-ORIGIN": "CustomOrigin",
  86. })
  87. }),
  88. )
  89. })