Files
2026-07-13 13:39:12 +08:00

44 lines
1.3 KiB
TypeScript

import { stripTrailingSlashes, normalizeBaseUrl } from "../utils/urlSanitize.ts";
export const WATSONX_DEFAULT_BASE_URL = "https://ca-tor.ml.cloud.ibm.com/ml/gateway/v1";
export function normalizeWatsonxBaseUrl(value: string | null | undefined): string {
const normalized = normalizeBaseUrl(value || WATSONX_DEFAULT_BASE_URL);
if (!normalized) return WATSONX_DEFAULT_BASE_URL;
const stripped = normalized.replace(
/\/(?:chat\/completions|completions|embeddings|models)$/i,
""
);
if (stripped.endsWith("/ml/gateway/v1")) {
return stripped;
}
if (stripped.endsWith("/ml/gateway")) {
return `${stripped}/v1`;
}
try {
const parsed = new URL(stripped);
if (!parsed.pathname || parsed.pathname === "/") {
parsed.pathname = "/ml/gateway/v1";
} else if (parsed.pathname.endsWith("/ml/gateway")) {
parsed.pathname = `${parsed.pathname}/v1`;
}
parsed.search = "";
parsed.hash = "";
return stripTrailingSlashes(parsed.toString());
} catch {
return stripped;
}
}
export function buildWatsonxChatUrl(value: string | null | undefined): string {
return `${normalizeWatsonxBaseUrl(value)}/chat/completions`;
}
export function buildWatsonxModelsUrl(value: string | null | undefined): string {
return `${normalizeWatsonxBaseUrl(value)}/models`;
}