test: speed up mistral api tests

This commit is contained in:
Peter Steinberger
2026-04-07 17:11:19 +01:00
parent 76bc0ae32f
commit 904017814b
3 changed files with 67 additions and 72 deletions

View File

@@ -5,7 +5,7 @@ import {
MISTRAL_SMALL_LATEST_ID,
resolveMistralCompatPatch,
} from "./api.js";
import { default as mistralPlugin } from "./index.js";
import { contributeMistralResolvedModelCompat } from "./provider-compat.js";
function readCompat<T>(model: unknown): T | undefined {
return (model as { compat?: T }).compat;
@@ -109,22 +109,8 @@ describe("applyMistralModelCompat", () => {
});
it("contributes Mistral transport compat for native, provider-family, and hinted custom routes", () => {
const registerProvider = (mistralPlugin as { register?: (api: unknown) => void }).register;
let contributeResolvedModelCompat:
| ((params: { modelId: string; model: Record<string, unknown> }) => unknown)
| undefined;
registerProvider?.({
registerProvider: (provider: {
contributeResolvedModelCompat?: typeof contributeResolvedModelCompat;
}) => {
contributeResolvedModelCompat = provider.contributeResolvedModelCompat;
},
registerMediaUnderstandingProvider: () => {},
});
expect(
contributeResolvedModelCompat?.({
contributeMistralResolvedModelCompat({
modelId: "mistral-large-latest",
model: {
provider: "mistral",
@@ -135,7 +121,7 @@ describe("applyMistralModelCompat", () => {
).toEqual(MISTRAL_MODEL_TRANSPORT_PATCH);
expect(
contributeResolvedModelCompat?.({
contributeMistralResolvedModelCompat({
modelId: "custom-model",
model: {
provider: "custom-mistral-host",
@@ -146,7 +132,7 @@ describe("applyMistralModelCompat", () => {
).toEqual(MISTRAL_MODEL_TRANSPORT_PATCH);
expect(
contributeResolvedModelCompat?.({
contributeMistralResolvedModelCompat({
modelId: "mistralai/mistral-small-3.2",
model: {
provider: "openrouter",

View File

@@ -1,62 +1,12 @@
import { defineSingleProviderPluginEntry } from "openclaw/plugin-sdk/provider-entry";
import { resolveProviderRequestCapabilities } from "openclaw/plugin-sdk/provider-http";
import { normalizeLowercaseStringOrEmpty, readStringValue } from "openclaw/plugin-sdk/text-runtime";
import { applyMistralModelCompat, MISTRAL_MODEL_TRANSPORT_PATCH } from "./api.js";
import { applyMistralModelCompat } from "./api.js";
import { mistralMediaUnderstandingProvider } from "./media-understanding-provider.js";
import { applyMistralConfig, MISTRAL_DEFAULT_MODEL_REF } from "./onboard.js";
import { buildMistralProvider } from "./provider-catalog.js";
import { contributeMistralResolvedModelCompat } from "./provider-compat.js";
const PROVIDER_ID = "mistral";
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}:`),
);
}
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)
);
}
function buildMistralReplayPolicy() {
export function buildMistralReplayPolicy() {
return {
sanitizeToolCallIds: true,
toolCallIdMode: "strict9" as const,
@@ -94,7 +44,7 @@ export default defineSingleProviderPluginEntry({
/\bmistral\b.*(?:input.*too long|token limit.*exceeded)/i.test(errorMessage),
normalizeResolvedModel: ({ model }) => applyMistralModelCompat(model),
contributeResolvedModelCompat: ({ modelId, model }) =>
shouldContributeMistralCompat({ modelId, model }) ? MISTRAL_MODEL_TRANSPORT_PATCH : undefined,
contributeMistralResolvedModelCompat({ modelId, model }),
buildReplayPolicy: () => buildMistralReplayPolicy(),
},
register(api) {

View File

@@ -0,0 +1,59 @@
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;
}