openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
43 lines (42 loc) • 1.94 kB
JavaScript
//#region extensions/cloudflare-ai-gateway/models.ts
/** Provider id used in model refs and auth profiles. */
const CLOUDFLARE_AI_GATEWAY_PROVIDER_ID = "cloudflare-ai-gateway";
/** Default Cloudflare AI Gateway model id exposed by the bundled provider. */
const CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID = "claude-sonnet-4-6";
/** Fully-qualified default model ref used by onboarding. */
const CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF = `${CLOUDFLARE_AI_GATEWAY_PROVIDER_ID}/${CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID}`;
const CLOUDFLARE_AI_GATEWAY_DEFAULT_CONTEXT_WINDOW = 2e5;
const CLOUDFLARE_AI_GATEWAY_DEFAULT_MAX_TOKENS = 64e3;
const CLOUDFLARE_AI_GATEWAY_DEFAULT_COST = {
input: 3,
output: 15,
cacheRead: .3,
cacheWrite: 3.75
};
/**
* Builds a provider model definition, allowing tests/catalog code to override
* the model id while preserving Cloudflare defaults.
*/
function buildCloudflareAiGatewayModelDefinition(params) {
return {
id: params?.id?.trim() || "claude-sonnet-4-6",
name: params?.name ?? "Claude Sonnet 4.6",
reasoning: params?.reasoning ?? true,
input: params?.input ?? ["text", "image"],
cost: CLOUDFLARE_AI_GATEWAY_DEFAULT_COST,
contextWindow: CLOUDFLARE_AI_GATEWAY_DEFAULT_CONTEXT_WINDOW,
maxTokens: CLOUDFLARE_AI_GATEWAY_DEFAULT_MAX_TOKENS
};
}
/**
* Constructs the Anthropic Messages base URL for a Cloudflare account/gateway
* pair, returning an empty string for incomplete metadata.
*/
function resolveCloudflareAiGatewayBaseUrl(params) {
const accountId = params.accountId.trim();
const gatewayId = params.gatewayId.trim();
if (!accountId || !gatewayId) return "";
return `https://gateway.ai.cloudflare.com/v1/${accountId}/${gatewayId}/anthropic`;
}
//#endregion
export { resolveCloudflareAiGatewayBaseUrl as a, buildCloudflareAiGatewayModelDefinition as i, CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_REF as n, CLOUDFLARE_AI_GATEWAY_PROVIDER_ID as r, CLOUDFLARE_AI_GATEWAY_DEFAULT_MODEL_ID as t };