mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-21 06:02:13 +00:00
test: speed up mistral api tests
This commit is contained in:
@@ -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",
|
||||
|
||||
@@ -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) {
|
||||
|
||||
59
extensions/mistral/provider-compat.ts
Normal file
59
extensions/mistral/provider-compat.ts
Normal 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;
|
||||
}
|
||||
Reference in New Issue
Block a user