@openclaw/mistral-provider 2026.10.10 → 2026.11.5-beta.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -18,6 +18,7 @@ var openclaw_plugin_default = {
18
18
  "baseUrl": "https://api.mistral.ai/v1",
19
19
  "api": "openai-completions",
20
20
  "defaultModel": "mistral-large-latest",
21
+ "family": "mistral",
21
22
  "models": [
22
23
  {
23
24
  "id": "codestral-latest",
@@ -0,0 +1 @@
1
+ {"version":3,"entries":[{"output":"api.js","source":"extensions/mistral/api.ts"},{"output":"capability-catalog.js","source":"extensions/mistral/capability-catalog.ts"},{"output":"index.js","source":"extensions/mistral/index.ts"},{"output":"media-understanding-provider.js","source":"extensions/mistral/media-understanding-provider.ts"},{"output":"memory-embedding-adapter.js","source":"extensions/mistral/memory-embedding-adapter.ts"},{"output":"model-definitions.js","source":"extensions/mistral/model-definitions.ts"},{"output":"onboard.js","source":"extensions/mistral/onboard.ts"},{"output":"provider-catalog.js","source":"extensions/mistral/provider-catalog.ts"},{"output":"provider-policy-api.js","source":"extensions/mistral/provider-policy-api.ts"},{"output":"realtime-transcription-provider-factory.js","source":"extensions/mistral/realtime-transcription-provider-factory.ts"}],"chunks":[{"output":".setup/provider-catalog-CfC25-Ae.mjs","sha256":"6038013aee0866716f5b247cf07a561f1d1d1e9dfbe7ad74cd6610f11d7d6b7a","facadeSource":null,"sources":["extensions/mistral/openclaw.plugin.json","extensions/mistral/provider-catalog.ts"]},{"output":"api.js","sha256":"51afdc5f0a71a4aaa74fe0c984973a479498a55e5c4d3c82fcfe852434bd0d1a","facadeSource":"extensions/mistral/api.ts","sources":["extensions/mistral/api.ts"]},{"output":"capability-catalog.js","sha256":"249f1c5c1fb1475d8b2382b7523532cb39bb0f4e9204d70905be0997962af345","facadeSource":"extensions/mistral/capability-catalog.ts","sources":["extensions/mistral/capability-catalog.ts"]},{"output":"index.js","sha256":"77ca43cf46d0ff2ceaef82ab688ef09429ede575727f636582ac649d11a55c86","facadeSource":"extensions/mistral/index.ts","sources":["extensions/mistral/index.ts"]},{"output":"media-understanding-provider.js","sha256":"2c8ecc082d2fed68b6ab340b402c5b768345e5444f82cc1efc97cfff5e5bda05","facadeSource":"extensions/mistral/media-understanding-provider.ts","sources":["extensions/mistral/media-understanding-provider.ts"]},{"output":"memory-embedding-adapter.js","sha256":"a090d59d86a204cee94668f5394a7c6f94f0a3b3f6045835670c26098d01858c","facadeSource":"extensions/mistral/memory-embedding-adapter.ts","sources":["extensions/mistral/memory-embedding-adapter.ts"]},{"output":"model-definitions.js","sha256":"f2fe5d26256c4cfb0fcbf8f2656554d6cb5727b125755f7c3bd675553e4e80c8","facadeSource":"extensions/mistral/model-definitions.ts","sources":["extensions/mistral/model-definitions.ts"]},{"output":"onboard.js","sha256":"075f7b44d632f19ffd457754082e6a30584d42734ed3062a90617fc7bb5ef746","facadeSource":"extensions/mistral/onboard.ts","sources":["extensions/mistral/onboard.ts"]},{"output":"provider-catalog.js","sha256":"f92a1c3697eef3280be4e56673a1dadc850a0173078d5b9eae5d0502977bbd31","facadeSource":"extensions/mistral/provider-catalog.ts","sources":[]},{"output":"provider-policy-api.js","sha256":"4f476bb684d00f2e67a75307dedaebea1b30bd9e799ef5942fe4d5f347e93f25","facadeSource":"extensions/mistral/provider-policy-api.ts","sources":["extensions/mistral/provider-policy-api.ts"]},{"output":"realtime-transcription-provider-factory.js","sha256":"039e13b15e21b5df5392d53081ded70714c5da68d19019bf928cdb9fc63764c3","facadeSource":"extensions/mistral/realtime-transcription-provider-factory.ts","sources":["extensions/mistral/realtime-transcription-provider-factory.ts"]}],"unrenderedSources":[]}
package/dist/api.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { MISTRAL_MEDIUM_3_5_ID, MISTRAL_SMALL_4_ID, MISTRAL_SMALL_LATEST_ID, resolveMistralReasoningEffortMap } from "./provider-policy-api.js";
2
- import { t as buildMistralProvider } from "./.setup/provider-catalog-FxQGDjmD.mjs";
2
+ import { t as buildMistralProvider } from "./.setup/provider-catalog-CfC25-Ae.mjs";
3
3
  import { MISTRAL_BASE_URL, MISTRAL_DEFAULT_MODEL_ID, MISTRAL_DEFAULT_MODEL_REF, buildMistralModelDefinition } from "./model-definitions.js";
4
4
  import { applyMistralConfig, applyMistralProviderConfig } from "./onboard.js";
5
5
  import { asOptionalObjectRecord } from "openclaw/plugin-sdk/string-coerce-runtime";
package/dist/index.js CHANGED
@@ -1,5 +1,5 @@
1
1
  import { resolveThinkingProfile } from "./provider-policy-api.js";
2
- import { n as openclaw_plugin_default } from "./.setup/provider-catalog-FxQGDjmD.mjs";
2
+ import { n as openclaw_plugin_default } from "./.setup/provider-catalog-CfC25-Ae.mjs";
3
3
  import { applyMistralConnectionConfig } from "./onboard.js";
4
4
  import { applyMistralModelCompat } from "./api.js";
5
5
  import { mistralMediaUnderstandingProvider } from "./media-understanding-provider.js";
@@ -1,7 +1,7 @@
1
1
  import { MISTRAL_BASE_URL } from "./model-definitions.js";
2
- import { DEFAULT_MISTRAL_EMBEDDING_MODEL, createMistralEmbeddingProvider } from "./embedding-provider.js";
3
- import { embeddingProviderOwnsDestination, isMissingEmbeddingApiKeyError, sanitizeEmbeddingCacheHeaders } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
2
+ import { createRemoteEmbeddingProvider, embeddingProviderOwnsDestination, isMissingEmbeddingApiKeyError, normalizeEmbeddingModelWithPrefixes, resolveRemoteEmbeddingClient, sanitizeEmbeddingCacheHeaders } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
4
3
  // extensions/mistral/memory-embedding-adapter.ts
4
+ const DEFAULT_MISTRAL_EMBEDDING_MODEL = "mistral-embed";
5
5
  const EXCLUDED_EMBEDDING_HEADERS = [
6
6
  "authorization",
7
7
  "content-type",
@@ -17,10 +17,25 @@ const mistralMemoryEmbeddingProviderAdapter = {
17
17
  allowExplicitWhenConfiguredAuto: true,
18
18
  shouldContinueAutoSelection: isMissingEmbeddingApiKeyError,
19
19
  create: async (options) => {
20
- const { provider, client } = await createMistralEmbeddingProvider({
20
+ const preparedOptions = {
21
21
  ...options,
22
22
  provider: "mistral",
23
23
  fallback: "none"
24
+ };
25
+ const client = await resolveRemoteEmbeddingClient({
26
+ provider: "mistral",
27
+ options: preparedOptions,
28
+ defaultBaseUrl: MISTRAL_BASE_URL,
29
+ normalizeModel: (model) => normalizeEmbeddingModelWithPrefixes({
30
+ model,
31
+ defaultModel: DEFAULT_MISTRAL_EMBEDDING_MODEL,
32
+ prefixes: ["mistral/"]
33
+ })
34
+ });
35
+ const provider = createRemoteEmbeddingProvider({
36
+ id: "mistral",
37
+ client,
38
+ errorPrefix: "mistral embeddings failed"
24
39
  });
25
40
  const headers = sanitizeEmbeddingCacheHeaders(client.headers, EXCLUDED_EMBEDDING_HEADERS);
26
41
  const usesDefaultIdentity = headers.length === 0 && embeddingProviderOwnsDestination({
@@ -1,4 +1,4 @@
1
- import { n as openclaw_plugin_default, t as buildMistralProvider } from "./.setup/provider-catalog-FxQGDjmD.mjs";
1
+ import { n as openclaw_plugin_default, t as buildMistralProvider } from "./.setup/provider-catalog-CfC25-Ae.mjs";
2
2
  import { readManifestProviderDefaultModelRef } from "openclaw/plugin-sdk/provider-catalog-shared";
3
3
  const MISTRAL_BASE_URL = openclaw_plugin_default.modelCatalog.providers.mistral.baseUrl;
4
4
  const MISTRAL_DEFAULT_MODEL_REF = readManifestProviderDefaultModelRef(openclaw_plugin_default, "mistral");
@@ -1 +1 @@
1
- export { t as buildMistralProvider } from "./.setup/provider-catalog-FxQGDjmD.mjs";
1
+ export { t as buildMistralProvider } from "./.setup/provider-catalog-CfC25-Ae.mjs";
@@ -1,4 +1,5 @@
1
1
  import { asOptionalRecord, normalizeOptionalString, parseFiniteNumber } from "openclaw/plugin-sdk/string-coerce-runtime";
2
+ import { measureTranscriptDeltaBytes } from "openclaw/plugin-sdk/realtime-transcription-provider";
2
3
  import { normalizeResolvedSecretInputString, normalizeSecretInput } from "openclaw/plugin-sdk/secret-input";
3
4
  // extensions/mistral/realtime-transcription-provider-factory.ts
4
5
  const MISTRAL_REALTIME_DEFAULT_BASE_URL = "wss://api.mistral.ai";
@@ -6,11 +7,6 @@ const MISTRAL_REALTIME_DEFAULT_MODEL = "voxtral-mini-transcribe-realtime-2602";
6
7
  const MISTRAL_REALTIME_DEFAULT_SAMPLE_RATE = 8e3;
7
8
  const MISTRAL_REALTIME_DEFAULT_ENCODING = "pcm_mulaw";
8
9
  const MISTRAL_REALTIME_DEFAULT_DELAY_MS = 800;
9
- const MISTRAL_REALTIME_CONNECT_TIMEOUT_MS = 1e4;
10
- const MISTRAL_REALTIME_CLOSE_TIMEOUT_MS = 5e3;
11
- const MISTRAL_REALTIME_MAX_RECONNECT_ATTEMPTS = 5;
12
- const MISTRAL_REALTIME_RECONNECT_DELAY_MS = 1e3;
13
- const MISTRAL_REALTIME_MAX_QUEUED_BYTES = 2097152;
14
10
  const MISTRAL_REALTIME_SPEECH_CONTENT = /[\p{L}\p{N}]/u;
15
11
  const MISTRAL_REALTIME_MAX_PARTIAL_TRANSCRIPT_BYTES = 262144;
16
12
  const MISTRAL_REALTIME_PARTIAL_TRANSCRIPT_OVERFLOW_MESSAGE = "Mistral realtime transcription exceeded the 256 KiB in-progress transcript limit";
@@ -74,12 +70,6 @@ function readErrorDetail(event) {
74
70
  if (typeof event.error?.code === "number") return `Mistral realtime transcription error (${event.error.code})`;
75
71
  return "Mistral realtime transcription error";
76
72
  }
77
- function measureTranscriptDeltaBytes(partialText, delta) {
78
- const previousCodeUnit = partialText.charCodeAt(partialText.length - 1);
79
- const nextCodeUnit = delta.charCodeAt(0);
80
- const completesSplitSurrogatePair = previousCodeUnit >= 55296 && previousCodeUnit <= 56319 && nextCodeUnit >= 56320 && nextCodeUnit <= 57343;
81
- return Buffer.byteLength(delta, "utf8") - (completesSplitSurrogatePair ? 2 : 0);
82
- }
83
73
  function buildMistralRealtimeTranscriptionProvider({ createRealtimeTranscriptionWebSocketSession }) {
84
74
  const isConfigured = ({ providerConfig }) => Boolean(normalizeProviderConfig(providerConfig).apiKey || normalizeMistralApiKey(process.env.MISTRAL_API_KEY));
85
75
  return {
@@ -96,7 +86,6 @@ function buildMistralRealtimeTranscriptionProvider({ createRealtimeTranscription
96
86
  const apiKey = config.apiKey || normalizeMistralApiKey(process.env.MISTRAL_API_KEY);
97
87
  if (!apiKey) throw new Error("Mistral API key missing");
98
88
  const baseUrl = normalizeMistralRealtimeBaseUrl(config.baseUrl);
99
- const callbacks = { ...req };
100
89
  let partialText = "";
101
90
  let partialBytes = 0;
102
91
  let hasFinalSegment = false;
@@ -108,31 +97,26 @@ function buildMistralRealtimeTranscriptionProvider({ createRealtimeTranscription
108
97
  const emitFinalTranscript = (text, source) => {
109
98
  if (!text.trim() || source === "pending" && !MISTRAL_REALTIME_SPEECH_CONTENT.test(text)) return;
110
99
  hasFinalSegment ||= source === "segment";
111
- callbacks.onTranscript?.(text);
100
+ req.onTranscript?.(text);
112
101
  };
113
102
  const failTerminal = (error, transport) => {
114
103
  if (terminal) return;
115
104
  terminal = true;
116
105
  clearPartial();
117
106
  transport.closeNow();
118
- callbacks.onError?.(error);
107
+ req.onError?.(error);
119
108
  };
120
109
  return createRealtimeTranscriptionWebSocketSession({
121
110
  providerId: "mistral",
122
- callbacks,
111
+ callbacks: req,
123
112
  url: () => {
124
- const base = new URL(`${normalizeMistralRealtimeBaseUrl(baseUrl)}/`);
113
+ const base = new URL(`${baseUrl}/`);
125
114
  const url = new URL("v1/audio/transcriptions/realtime", base);
126
115
  url.searchParams.set("model", config.model ?? MISTRAL_REALTIME_DEFAULT_MODEL);
127
116
  url.searchParams.set("target_streaming_delay_ms", String(config.targetStreamingDelayMs ?? MISTRAL_REALTIME_DEFAULT_DELAY_MS));
128
117
  return url.toString();
129
118
  },
130
119
  headers: { Authorization: `Bearer ${apiKey}` },
131
- connectTimeoutMs: MISTRAL_REALTIME_CONNECT_TIMEOUT_MS,
132
- closeTimeoutMs: MISTRAL_REALTIME_CLOSE_TIMEOUT_MS,
133
- maxReconnectAttempts: MISTRAL_REALTIME_MAX_RECONNECT_ATTEMPTS,
134
- reconnectDelayMs: MISTRAL_REALTIME_RECONNECT_DELAY_MS,
135
- maxQueuedBytes: MISTRAL_REALTIME_MAX_QUEUED_BYTES,
136
120
  connectTimeoutMessage: "Mistral realtime transcription connection timeout",
137
121
  reconnectLimitMessage: "Mistral realtime transcription reconnect limit reached",
138
122
  sendAudio: (audio, transport) => {
@@ -174,7 +158,7 @@ function buildMistralRealtimeTranscriptionProvider({ createRealtimeTranscription
174
158
  }
175
159
  partialText += event.text;
176
160
  partialBytes += deltaBytes;
177
- callbacks.onPartial?.(partialText);
161
+ req.onPartial?.(partialText);
178
162
  }
179
163
  return;
180
164
  case "transcription.segment":
@@ -35,6 +35,7 @@
35
35
  "baseUrl": "https://api.mistral.ai/v1",
36
36
  "api": "openai-completions",
37
37
  "defaultModel": "mistral-large-latest",
38
+ "family": "mistral",
38
39
  "models": [
39
40
  {
40
41
  "id": "codestral-latest",
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@openclaw/mistral-provider",
3
- "version": "2026.10.10",
3
+ "version": "2026.11.5-beta.1",
4
4
  "description": "OpenClaw Mistral provider plugin",
5
5
  "repository": {
6
6
  "type": "git",
@@ -18,10 +18,10 @@
18
18
  "minHostVersion": ">=2026.7.2"
19
19
  },
20
20
  "compat": {
21
- "pluginApi": ">=2026.10.10"
21
+ "pluginApi": ">=2026.11.5-beta.1"
22
22
  },
23
23
  "build": {
24
- "openclawVersion": "2026.10.10",
24
+ "openclawVersion": "2026.11.5-beta.1",
25
25
  "bundledDist": false
26
26
  },
27
27
  "release": {
@@ -40,7 +40,7 @@
40
40
  "assets/activity.svg"
41
41
  ],
42
42
  "peerDependencies": {
43
- "openclaw": ">=2026.10.10"
43
+ "openclaw": ">=2026.11.5-beta.1"
44
44
  },
45
45
  "peerDependenciesMeta": {
46
46
  "openclaw": {
@@ -1 +0,0 @@
1
- {"version":3,"entries":[{"output":"api.js","source":"extensions/mistral/api.ts"},{"output":"capability-catalog.js","source":"extensions/mistral/capability-catalog.ts"},{"output":"embedding-provider.js","source":"extensions/mistral/embedding-provider.ts"},{"output":"index.js","source":"extensions/mistral/index.ts"},{"output":"media-understanding-provider.js","source":"extensions/mistral/media-understanding-provider.ts"},{"output":"memory-embedding-adapter.js","source":"extensions/mistral/memory-embedding-adapter.ts"},{"output":"model-definitions.js","source":"extensions/mistral/model-definitions.ts"},{"output":"onboard.js","source":"extensions/mistral/onboard.ts"},{"output":"provider-catalog.js","source":"extensions/mistral/provider-catalog.ts"},{"output":"provider-policy-api.js","source":"extensions/mistral/provider-policy-api.ts"},{"output":"realtime-transcription-provider-factory.js","source":"extensions/mistral/realtime-transcription-provider-factory.ts"}],"chunks":[{"output":".setup/provider-catalog-FxQGDjmD.mjs","sha256":"17c7a3cb313650d7ae040bfa3e7aaa6291a69f412a2dc9308d6d234a9fb9af32","facadeSource":null,"sources":["extensions/mistral/openclaw.plugin.json","extensions/mistral/provider-catalog.ts"]},{"output":"api.js","sha256":"97201ea26d714fffd1823c51c6f2e7e9d07958325eb033132be8e32f4f4d3427","facadeSource":"extensions/mistral/api.ts","sources":["extensions/mistral/api.ts"]},{"output":"capability-catalog.js","sha256":"249f1c5c1fb1475d8b2382b7523532cb39bb0f4e9204d70905be0997962af345","facadeSource":"extensions/mistral/capability-catalog.ts","sources":["extensions/mistral/capability-catalog.ts"]},{"output":"embedding-provider.js","sha256":"ec9471f6b7cc061ad5f90140d147a19bc031788c342ed5081acee8c6433a2e5e","facadeSource":"extensions/mistral/embedding-provider.ts","sources":["extensions/mistral/embedding-provider.ts"]},{"output":"index.js","sha256":"b50db1397716e03baa67059d516a93966e4e2a7e78c9f9287dc122f9f02a2f16","facadeSource":"extensions/mistral/index.ts","sources":["extensions/mistral/index.ts"]},{"output":"media-understanding-provider.js","sha256":"2c8ecc082d2fed68b6ab340b402c5b768345e5444f82cc1efc97cfff5e5bda05","facadeSource":"extensions/mistral/media-understanding-provider.ts","sources":["extensions/mistral/media-understanding-provider.ts"]},{"output":"memory-embedding-adapter.js","sha256":"03a461d77a4fd073bc649223240fcb36b7b9508c35e71ed3735eb61b968ea34a","facadeSource":"extensions/mistral/memory-embedding-adapter.ts","sources":["extensions/mistral/memory-embedding-adapter.ts"]},{"output":"model-definitions.js","sha256":"95d599909e25bff706becaf4e20b00f1c0f6ae7b6922e3cfef5a057b44e742f0","facadeSource":"extensions/mistral/model-definitions.ts","sources":["extensions/mistral/model-definitions.ts"]},{"output":"onboard.js","sha256":"075f7b44d632f19ffd457754082e6a30584d42734ed3062a90617fc7bb5ef746","facadeSource":"extensions/mistral/onboard.ts","sources":["extensions/mistral/onboard.ts"]},{"output":"provider-catalog.js","sha256":"f6c82b9aff90e9d9d266ce98b285510ce638d8840885481803a7dc8e6d664c16","facadeSource":"extensions/mistral/provider-catalog.ts","sources":[]},{"output":"provider-policy-api.js","sha256":"4f476bb684d00f2e67a75307dedaebea1b30bd9e799ef5942fe4d5f347e93f25","facadeSource":"extensions/mistral/provider-policy-api.ts","sources":["extensions/mistral/provider-policy-api.ts"]},{"output":"realtime-transcription-provider-factory.js","sha256":"9f085a61b3db85817711432d774b2299b76d6469e85e9c5ebd69d5d8f794dbaf","facadeSource":"extensions/mistral/realtime-transcription-provider-factory.ts","sources":["extensions/mistral/realtime-transcription-provider-factory.ts"]}],"unrenderedSources":[]}
@@ -1,28 +0,0 @@
1
- import { MISTRAL_BASE_URL } from "./model-definitions.js";
2
- import { createRemoteEmbeddingProvider, normalizeEmbeddingModelWithPrefixes, resolveRemoteEmbeddingClient } from "openclaw/plugin-sdk/memory-core-host-engine-embeddings";
3
- // extensions/mistral/embedding-provider.ts
4
- const DEFAULT_MISTRAL_EMBEDDING_MODEL = "mistral-embed";
5
- function normalizeMistralModel(model) {
6
- return normalizeEmbeddingModelWithPrefixes({
7
- model,
8
- defaultModel: DEFAULT_MISTRAL_EMBEDDING_MODEL,
9
- prefixes: ["mistral/"]
10
- });
11
- }
12
- async function createMistralEmbeddingProvider(options) {
13
- const client = await resolveRemoteEmbeddingClient({
14
- provider: "mistral",
15
- options,
16
- defaultBaseUrl: MISTRAL_BASE_URL,
17
- normalizeModel: normalizeMistralModel
18
- });
19
- return {
20
- provider: createRemoteEmbeddingProvider({
21
- id: "mistral",
22
- client,
23
- errorPrefix: "mistral embeddings failed"
24
- }),
25
- client
26
- };
27
- }
28
- export { DEFAULT_MISTRAL_EMBEDDING_MODEL, createMistralEmbeddingProvider };