|
|
@@ -21,6 +21,8 @@ describe("provider package entrypoints", () => {
|
|
|
import("@opencode-ai/ai/providers/google-vertex/chat"),
|
|
|
import("@opencode-ai/ai/providers/google-vertex/responses"),
|
|
|
import("@opencode-ai/ai/providers/google-vertex/messages"),
|
|
|
+ import("@opencode-ai/ai/providers/openrouter"),
|
|
|
+ import("@opencode-ai/ai/providers/xai"),
|
|
|
])
|
|
|
|
|
|
for (const module of modules) expect(module.model).toBeFunction()
|
|
|
@@ -29,6 +31,35 @@ describe("provider package entrypoints", () => {
|
|
|
expect(modules[12].model).toBe(modules[13].model)
|
|
|
})
|
|
|
|
|
|
+ test("maps OpenRouter and xAI package settings onto executable models", async () => {
|
|
|
+ const OpenRouter = await import("@opencode-ai/ai/providers/openrouter")
|
|
|
+ const XAI = await import("@opencode-ai/ai/providers/xai")
|
|
|
+ const settings = {
|
|
|
+ apiKey: "fixture",
|
|
|
+ baseURL: "https://provider.example.test/v1",
|
|
|
+ headers: { "x-application": "opencode" },
|
|
|
+ body: { service_tier: "priority" },
|
|
|
+ limits: { context: 200_000, output: 64_000 },
|
|
|
+ }
|
|
|
+ const openrouter = OpenRouter.model("anthropic/claude-sonnet-4", {
|
|
|
+ ...settings,
|
|
|
+ providerOptions: { openrouter: { usage: true } },
|
|
|
+ })
|
|
|
+ const xai = XAI.model("grok-4", {
|
|
|
+ ...settings,
|
|
|
+ providerOptions: { openai: { reasoningEffort: "high" } },
|
|
|
+ })
|
|
|
+
|
|
|
+ for (const selected of [openrouter, xai]) {
|
|
|
+ expect(selected.route.endpoint.baseURL).toBe(settings.baseURL)
|
|
|
+ expect(selected.route.defaults.headers).toEqual(settings.headers)
|
|
|
+ expect(selected.route.defaults.http?.body).toEqual(settings.body)
|
|
|
+ expect(selected.route.defaults.limits).toEqual(settings.limits)
|
|
|
+ }
|
|
|
+ expect(openrouter.route.defaults.providerOptions).toEqual({ openrouter: { usage: true } })
|
|
|
+ expect(xai.route.defaults.providerOptions).toEqual({ openai: { reasoningEffort: "high", store: false } })
|
|
|
+ })
|
|
|
+
|
|
|
test("maps package settings onto the executable model", () => {
|
|
|
const selected = model("gpt-5", {
|
|
|
apiKey: "fixture",
|