import { resolveProviderRequestCapabilities } from "openclaw/plugin-sdk/provider-http"; import { normalizeLowercaseStringOrEmpty, readStringValue } from "openclaw/plugin-sdk/text-runtime"; import { MISTRAL_MODEL_TRANSPORT_PATCH } from "./api.js"; const MISTRAL_MODEL_HINTS = [ "mistral", "mistralai", "mixtral", "codestral", "pixtral", "devstral", "ministral", ] as const; function isMistralModelHint(modelId: string): boolean { const normalized = normalizeLowercaseStringOrEmpty(modelId); return MISTRAL_MODEL_HINTS.some( (hint) => normalized === hint || normalized.startsWith(`${hint}/`) || normalized.startsWith(`${hint}-`) || normalized.startsWith(`${hint}:`), ); } export function shouldContributeMistralCompat(params: { modelId: string; model: { api?: unknown; baseUrl?: unknown; provider?: unknown; compat?: unknown }; }): boolean { if (params.model.api !== "openai-completions") { return false; } const capabilities = resolveProviderRequestCapabilities({ provider: readStringValue(params.model.provider), api: "openai-completions", baseUrl: readStringValue(params.model.baseUrl), capability: "llm", transport: "stream", modelId: params.modelId, compat: params.model.compat && typeof params.model.compat === "object" ? (params.model.compat as { supportsStore?: boolean }) : undefined, }); return ( capabilities.knownProviderFamily === "mistral" || capabilities.endpointClass === "mistral-public" || isMistralModelHint(params.modelId) ); } export function contributeMistralResolvedModelCompat(params: { modelId: string; model: { api?: unknown; baseUrl?: unknown; provider?: unknown; compat?: unknown }; }) { return shouldContributeMistralCompat(params) ? MISTRAL_MODEL_TRANSPORT_PATCH : undefined; }