| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768 |
- import { expect, test } from "bun:test"
- import { CloudflareAIGatewayAuthPlugin } from "@/plugin/cloudflare"
- const pluginInput = {
- client: {} as never,
- project: {} as never,
- directory: "",
- worktree: "",
- experimental_workspace: {
- register() {},
- },
- serverUrl: new URL("https://example.com"),
- $: {} as never,
- }
- function makeHookInput(overrides: { providerID?: string; apiId?: string; reasoning?: boolean }) {
- return {
- sessionID: "s",
- agent: "a",
- provider: {} as never,
- message: {} as never,
- model: {
- providerID: overrides.providerID ?? "cloudflare-ai-gateway",
- api: { id: overrides.apiId ?? "openai/gpt-5.2-codex", url: "", npm: "ai-gateway-provider" },
- capabilities: {
- reasoning: overrides.reasoning ?? true,
- temperature: false,
- attachment: true,
- toolcall: true,
- input: { text: true, audio: false, image: false, video: false, pdf: false },
- output: { text: true, audio: false, image: false, video: false, pdf: false },
- interleaved: false,
- },
- } as never,
- }
- }
- function makeHookOutput() {
- return { temperature: 0, topP: 1, topK: 0, maxOutputTokens: 32_000 as number | undefined, options: {} }
- }
- test("omits maxOutputTokens for openai reasoning models on cloudflare-ai-gateway", async () => {
- const hooks = await CloudflareAIGatewayAuthPlugin(pluginInput)
- const out = makeHookOutput()
- await hooks["chat.params"]!(makeHookInput({ apiId: "openai/gpt-5.2-codex", reasoning: true }), out)
- expect(out.maxOutputTokens).toBeUndefined()
- })
- test("keeps maxOutputTokens for openai non-reasoning models", async () => {
- const hooks = await CloudflareAIGatewayAuthPlugin(pluginInput)
- const out = makeHookOutput()
- await hooks["chat.params"]!(makeHookInput({ apiId: "openai/gpt-4-turbo", reasoning: false }), out)
- expect(out.maxOutputTokens).toBe(32_000)
- })
- test("keeps maxOutputTokens for non-openai reasoning models on cloudflare-ai-gateway", async () => {
- const hooks = await CloudflareAIGatewayAuthPlugin(pluginInput)
- const out = makeHookOutput()
- await hooks["chat.params"]!(makeHookInput({ apiId: "anthropic/claude-sonnet-4-5", reasoning: true }), out)
- expect(out.maxOutputTokens).toBe(32_000)
- })
- test("ignores non-cloudflare-ai-gateway providers", async () => {
- const hooks = await CloudflareAIGatewayAuthPlugin(pluginInput)
- const out = makeHookOutput()
- await hooks["chat.params"]!(makeHookInput({ providerID: "openai", apiId: "gpt-5.2-codex", reasoning: true }), out)
- expect(out.maxOutputTokens).toBe(32_000)
- })
|