feat(ai): type Cloudflare request options (#39507)
This commit is contained in:
parent
9038e44a68
commit
fea17b4a0e
2 changed files with 23 additions and 4 deletions
|
|
@ -4,6 +4,7 @@ import { Auth } from "../route/auth"
|
||||||
import { AuthOptions, type AtLeastOne, type ProviderAuthOption } from "../route/auth-options"
|
import { AuthOptions, type AtLeastOne, type ProviderAuthOption } from "../route/auth-options"
|
||||||
import type { RouteDefaultsInput } from "../route/client"
|
import type { RouteDefaultsInput } from "../route/client"
|
||||||
import { ProviderID, type ModelID } from "../schema"
|
import { ProviderID, type ModelID } from "../schema"
|
||||||
|
import type { OpenAIProviderOptionsInput } from "./openai-options"
|
||||||
|
|
||||||
export const aiGatewayID = ProviderID.make("cloudflare-ai-gateway")
|
export const aiGatewayID = ProviderID.make("cloudflare-ai-gateway")
|
||||||
export const workersAIID = ProviderID.make("cloudflare-workers-ai")
|
export const workersAIID = ProviderID.make("cloudflare-workers-ai")
|
||||||
|
|
@ -20,10 +21,11 @@ type GatewayURL = AtLeastOne<{
|
||||||
}
|
}
|
||||||
|
|
||||||
export type AIGatewayOptions = GatewayURL &
|
export type AIGatewayOptions = GatewayURL &
|
||||||
RouteDefaultsInput &
|
Omit<RouteDefaultsInput, "providerOptions"> &
|
||||||
ProviderAuthOption<"optional"> & {
|
ProviderAuthOption<"optional"> & {
|
||||||
/** Cloudflare AI Gateway authentication token. Sent as `cf-aig-authorization`. */
|
/** Cloudflare AI Gateway authentication token. Sent as `cf-aig-authorization`. */
|
||||||
readonly gatewayApiKey?: CloudflareSecret
|
readonly gatewayApiKey?: CloudflareSecret
|
||||||
|
readonly providerOptions?: OpenAIProviderOptionsInput
|
||||||
}
|
}
|
||||||
|
|
||||||
type WorkersAIURL = AtLeastOne<{
|
type WorkersAIURL = AtLeastOne<{
|
||||||
|
|
@ -31,7 +33,11 @@ type WorkersAIURL = AtLeastOne<{
|
||||||
readonly baseURL: string
|
readonly baseURL: string
|
||||||
}>
|
}>
|
||||||
|
|
||||||
export type WorkersAIOptions = WorkersAIURL & RouteDefaultsInput & ProviderAuthOption<"optional">
|
export type WorkersAIOptions = WorkersAIURL &
|
||||||
|
Omit<RouteDefaultsInput, "providerOptions"> &
|
||||||
|
ProviderAuthOption<"optional"> & {
|
||||||
|
readonly providerOptions?: OpenAIProviderOptionsInput
|
||||||
|
}
|
||||||
|
|
||||||
export const aiGatewayBaseURL = (input: GatewayURL) => {
|
export const aiGatewayBaseURL = (input: GatewayURL) => {
|
||||||
if (input.baseURL) return input.baseURL
|
if (input.baseURL) return input.baseURL
|
||||||
|
|
@ -98,7 +104,7 @@ const configureAIGateway = (options: AIGatewayOptions) => {
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
id: aiGatewayID,
|
id: aiGatewayID,
|
||||||
model: (modelID: string | ModelID) => route.model({ id: modelID }),
|
model: (modelID: string | ModelID) => route.model<OpenAIProviderOptionsInput>({ id: modelID }),
|
||||||
configure: configureAIGateway,
|
configure: configureAIGateway,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
@ -111,7 +117,7 @@ const configureWorkersAI = (options: WorkersAIOptions) => {
|
||||||
})
|
})
|
||||||
return {
|
return {
|
||||||
id: workersAIID,
|
id: workersAIID,
|
||||||
model: (modelID: string | ModelID) => route.model({ id: modelID }),
|
model: (modelID: string | ModelID) => route.model<OpenAIProviderOptionsInput>({ id: modelID }),
|
||||||
configure: configureWorkersAI,
|
configure: configureWorkersAI,
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
13
packages/ai/test/provider-options/cloudflare.types.ts
Normal file
13
packages/ai/test/provider-options/cloudflare.types.ts
Normal file
|
|
@ -0,0 +1,13 @@
|
||||||
|
import { LLM } from "../../src"
|
||||||
|
import { CloudflareWorkersAI } from "../../src/providers"
|
||||||
|
|
||||||
|
const model = CloudflareWorkersAI.configure({ accountId: "account", apiKey: "test" }).model("model")
|
||||||
|
|
||||||
|
LLM.request({ model, prompt: "Hello", providerOptions: { openai: { promptCacheKey: "cache" } } })
|
||||||
|
|
||||||
|
LLM.request({
|
||||||
|
model,
|
||||||
|
prompt: "Hello",
|
||||||
|
// @ts-expect-error Cloudflare's OpenAI-compatible prompt cache key must be a string.
|
||||||
|
providerOptions: { openai: { promptCacheKey: 1 } },
|
||||||
|
})
|
||||||
Loading…
Add table
Add a link
Reference in a new issue