Files
openclaw/extensions/xai/provider-routing.ts
Vincent Koc e35d22807e perf(xai): lazy-load optional capability runtimes (#119374)
Punchcard-Session: coral-workshop-workshop-3f
2026-08-05 11:26:40 +08:00

49 lines
1.4 KiB
TypeScript

import { normalizeOptionalString } from "openclaw/plugin-sdk/string-coerce-runtime";
import { XAI_BASE_URL } from "./model-definitions.js";
import { isXaiProviderId } from "./provider-id.js";
const XAI_NATIVE_ENDPOINT_HOSTS = new Set(["api.x.ai"]);
function resolveHostname(value: string): string | undefined {
try {
return new URL(value).hostname.toLowerCase();
} catch {
return undefined;
}
}
function isXaiNativeEndpoint(baseUrl: unknown): boolean {
return (
typeof baseUrl === "string" && XAI_NATIVE_ENDPOINT_HOSTS.has(resolveHostname(baseUrl) ?? "")
);
}
function shouldUseXaiResponsesTransport(params: {
provider: string;
api?: unknown;
baseUrl?: unknown;
}): boolean {
const hasDefaultXaiRoute =
isXaiProviderId(params.provider) && !normalizeOptionalString(params.baseUrl);
return params.api === "openai-responses"
? hasDefaultXaiRoute
: params.api === "openai-completions" &&
(isXaiNativeEndpoint(params.baseUrl) || hasDefaultXaiRoute);
}
export function resolveXaiTransport(params: {
provider: string;
api?: unknown;
baseUrl?: unknown;
}): { api: "openai-responses"; baseUrl?: string } | undefined {
if (!shouldUseXaiResponsesTransport(params)) {
return undefined;
}
return {
api: "openai-responses",
baseUrl:
normalizeOptionalString(params.baseUrl) ??
(isXaiProviderId(params.provider) ? XAI_BASE_URL : undefined),
};
}