openclaw
Version:
Multi-channel AI gateway with extensible messaging integrations
38 lines (37 loc) • 1.52 kB
JavaScript
//#region src/llm/providers/cloudflare.ts
function isCloudflareProvider(provider) {
return provider === "cloudflare-workers-ai" || provider === "cloudflare-ai-gateway";
}
/** Substitute `{VAR}` placeholders in a Cloudflare baseUrl from process.env. */
function resolveCloudflareBaseUrl(model) {
const url = model.baseUrl;
if (!url.includes("{")) return url;
return url.replace(/\{([A-Z_][A-Z0-9_]*)\}/g, (_match, name) => {
const value = process.env[name];
if (!value) throw new Error(`${name} is required for provider ${model.provider} but is not set.`);
return value;
});
}
//#endregion
//#region src/llm/providers/github-copilot-headers.ts
function inferCopilotInitiator(messages) {
const last = messages[messages.length - 1];
return last && last.role !== "user" ? "agent" : "user";
}
function hasCopilotVisionInput(messages) {
return messages.some((msg) => {
if (msg.role === "user" && Array.isArray(msg.content)) return msg.content.some((c) => c.type === "image");
if (msg.role === "toolResult" && Array.isArray(msg.content)) return msg.content.some((c) => c.type === "image");
return false;
});
}
function buildCopilotDynamicHeaders(params) {
const headers = {
"X-Initiator": inferCopilotInitiator(params.messages),
"Openai-Intent": "conversation-edits"
};
if (params.hasImages) headers["Copilot-Vision-Request"] = "true";
return headers;
}
//#endregion
export { resolveCloudflareBaseUrl as i, hasCopilotVisionInput as n, isCloudflareProvider as r, buildCopilotDynamicHeaders as t };