| import { AI_PROVIDERS } from "../shared/constants/providers.js"; | |
| /** | |
| * Detect xAI Grok models by id pattern (grok-*, Grok_*, etc). | |
| * @param {string} modelId | |
| * @returns {boolean} | |
| */ | |
| export function isXaiModel(modelId) { | |
| return typeof modelId === "string" && /^grok[-_]/i.test(modelId.trim()); | |
| } | |
| export function normalizeProviderId(provider) { | |
| if (typeof provider !== "string") return provider; | |
| const trimmed = provider.trim(); | |
| if (AI_PROVIDERS[trimmed]) return trimmed; | |
| const slug = trimmed.toLowerCase().replace(/[^a-z0-9]+/g, "-").replace(/^-|-$/g, ""); | |
| if (AI_PROVIDERS[slug]) return slug; | |
| const providerByName = Object.values(AI_PROVIDERS).find( | |
| (entry) => entry.name?.toLowerCase() === trimmed.toLowerCase() | |
| ); | |
| return providerByName?.id || trimmed; | |
| } | |
| export function normalizeProviderSpecificData(provider, body = {}, providerSpecificData = null) { | |
| const next = providerSpecificData && typeof providerSpecificData === "object" | |
| ? { ...providerSpecificData } | |
| : {}; | |
| if (provider === "ollama-local") { | |
| const baseUrl = ( | |
| next.baseUrl || | |
| body.baseUrl || | |
| body.baseURL || | |
| body.ollamaHostUrl || | |
| "" | |
| ).trim(); | |
| if (baseUrl) next.baseUrl = baseUrl; | |
| } | |
| return Object.keys(next).length > 0 ? next : null; | |
| } | |