fix(provider): forward metadata options to cloudflare-ai-gateway provider (#15619)

This commit is contained in:
Ryan Skidmore 2026-03-02 21:53:03 -06:00 committed by GitHub
parent fd6f7133c5
commit 96d6fb78da
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 80 additions and 1 deletions

View File

@ -555,7 +555,25 @@ export namespace Provider {
const { createAiGateway } = await import("ai-gateway-provider")
const { createUnified } = await import("ai-gateway-provider/providers/unified")
const aigateway = createAiGateway({ accountId, gateway, apiKey: apiToken })
const metadata = iife(() => {
if (input.options?.metadata) return input.options.metadata
try { return JSON.parse(input.options?.headers?.["cf-aig-metadata"]) }
catch { return undefined }
})
const opts = {
metadata,
cacheTtl: input.options?.cacheTtl,
cacheKey: input.options?.cacheKey,
skipCache: input.options?.skipCache,
collectLog: input.options?.collectLog,
}
const aigateway = createAiGateway({
accountId,
gateway,
apiKey: apiToken,
...(Object.values(opts).some(v => v !== undefined) ? { options: opts } : {}),
})
const unified = createUnified()
return {

View File

@ -2218,3 +2218,64 @@ test("Google Vertex: supports OpenAI compatible models", async () => {
},
})
})
test("cloudflare-ai-gateway loads with env variables", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
}),
)
},
})
await Instance.provide({
directory: tmp.path,
init: async () => {
Env.set("CLOUDFLARE_ACCOUNT_ID", "test-account")
Env.set("CLOUDFLARE_GATEWAY_ID", "test-gateway")
Env.set("CLOUDFLARE_API_TOKEN", "test-token")
},
fn: async () => {
const providers = await Provider.list()
expect(providers["cloudflare-ai-gateway"]).toBeDefined()
},
})
})
test("cloudflare-ai-gateway forwards config metadata options", async () => {
await using tmp = await tmpdir({
init: async (dir) => {
await Bun.write(
path.join(dir, "opencode.json"),
JSON.stringify({
$schema: "https://opencode.ai/config.json",
provider: {
"cloudflare-ai-gateway": {
options: {
metadata: { invoked_by: "test", project: "opencode" },
},
},
},
}),
)
},
})
await Instance.provide({
directory: tmp.path,
init: async () => {
Env.set("CLOUDFLARE_ACCOUNT_ID", "test-account")
Env.set("CLOUDFLARE_GATEWAY_ID", "test-gateway")
Env.set("CLOUDFLARE_API_TOKEN", "test-token")
},
fn: async () => {
const providers = await Provider.list()
expect(providers["cloudflare-ai-gateway"]).toBeDefined()
expect(providers["cloudflare-ai-gateway"].options.metadata).toEqual({
invoked_by: "test",
project: "opencode",
})
},
})
})