earendil-works/pi · error
Invalid Mistral streaming event
Error message
Invalid Mistral streaming event
What it means
Error "Invalid Mistral streaming event" thrown in earendil-works/pi.
Source
Thrown at packages/ai/src/api/mistral-conversations.ts:498
function findMistralEventBoundary(buffer: string): { index: number; length: number } | undefined {
const match = /\r\n\r\n|\r\n\r|\r\n\n|\r\r\n|\n\r\n|\r\r|\n\r|\n\n/u.exec(buffer);
return match?.index === undefined ? undefined : { index: match.index, length: match[0].length };
}
function parseMistralEvent(raw: string): MistralCompletionEvent | typeof MISTRAL_STREAM_DONE | undefined {
const data = raw
.split(/\r\n|\r|\n/u)
.filter((line) => line.startsWith("data:"))
.map((line) => line.slice(5).trimStart())
.join("\n")
.trim();
if (!data) return undefined;
if (data === "[DONE]") return MISTRAL_STREAM_DONE;
const parsed: unknown = JSON.parse(data);
if (!isMistralRecord(parsed) || !Array.isArray(parsed.choices)) {
throw new Error("Invalid Mistral streaming event");
}
return { data: parsed as MistralCompletionEvent["data"] };
}
function buildChatPayload(
model: Model<"mistral-conversations">,
context: Context,
messages: Message[],
options?: MistralOptions,
): MistralChatPayload {
const payload: MistralChatPayload = {
model: model.id,
stream: true,
messages: toChatMessages(messages, model.input.includes("image")),
};
if (context.tools?.length) payload.tools = toFunctionTools(context.tools);
if (options?.temperature !== undefined) payload.temperature = options.temperature;View on GitHub (pinned to 4af9d21d3b)
Solutions
- Log the raw event; update the parser if Mistral changed the streaming event shape.
When it happens
Trigger: Thrown at packages/ai/src/api/mistral-conversations.ts:498 when the library encounters an invalid state.
Common situations: See trigger scenarios.
AI-assisted analysis of earendil-works/pi@4af9d21d3b (2026-08-24).
Data as JSON: /api/errors/bf9da07291490058.
Report an issue: GitHub.