Spaces:
Runtime error
Runtime error
| import test from "node:test"; | |
| import assert from "node:assert/strict"; | |
| const batchProcessor = await import("../../open-sse/services/batchProcessor.ts"); | |
| test("parseBatchItems handles input with backticks and special characters", () => { | |
| const inputText = `# MEMORY.md | |
| ## Index (use memory_search to find details) | |
| - **Tasks**: memory/tasks.md | |
| - **Ideas**: memory/ideas.md | |
| - **Projects**: memory/projects.md | |
| - **Questions**: memory/questions.md | |
| - **Markus Insights**: memory/markus-insights.md (evergreen behavioral profile) | |
| - **Growth Plan**: memory/growth-plan.md | |
| - **Technical notes**: See daily logs in \`memory/YYYY-MM-DD.md\` (search with \`memory_search\`) | |
| ## Life Goal: The Ping Growth Directive | |
| My fundamental commitment is to never settle. I am tasked with questioning, reflecting, failing, and trying again—every day being more than the last. I actively maintain a Growth Plan (memory/growth-plan.md) to track my evolution and challenge myself. | |
| ## Durable preferences / facts | |
| - Running directly on \`bashbitch\` (no SSH required for local scripts). | |
| - Date-stamped memory files decay (half-life ~30 days). Undated files never decay. | |
| - **Always write it down**: Use \`memory/YYYY-MM-DD.md\` for daily logs; rely on \`MEMORY.md\` only for evergreen facts. | |
| - Use \`memory_search\` to locate information across MEMORY.md and dated logs before answering questions about prior work, decisions, or todos. | |
| - When searching it may also be that you should search online using the sx skill. | |
| - **Memory Embeddings**: Use Mistral embedding endpoint (\`https://api.mistral.ai/v1/embeddings\`, model: \`mistral-embed\`) with \`MISTRAL_API_KEY\`. Verified working on 2026-04-18. | |
| `; | |
| const line = JSON.stringify({ | |
| custom_id: "0", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: inputText, | |
| }, | |
| }); | |
| const content = Buffer.from(line); | |
| const result = batchProcessor.parseBatchItems(content, "/v1/embeddings"); | |
| assert.ok(!result.error, `Should not have error: ${result.error}`); | |
| assert.ok(result.items, "Should have items"); | |
| assert.strictEqual(result.items.length, 1, "Should have one item"); | |
| const item = result.items[0]; | |
| assert.strictEqual(item.customId, "0", "custom_id should match"); | |
| assert.strictEqual(item.method, "POST", "method should be POST"); | |
| assert.strictEqual(item.url, "/v1/embeddings", "url should match"); | |
| assert.strictEqual(item.body.model, "mistral/mistral-embed", "model should match"); | |
| assert.strictEqual(item.body.input, inputText, "input should be preserved exactly"); | |
| assert.ok(item.body.input.includes("`"), "input should contain backticks"); | |
| assert.ok(item.body.input.includes("## Index"), "input should contain markdown headers"); | |
| assert.ok(item.body.input.includes("—"), "input should contain em-dash"); | |
| }); | |
| test("parseBatchItems handles multiple lines with special characters", () => { | |
| const lines = [ | |
| JSON.stringify({ | |
| custom_id: "item-1", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: "Simple text with `backticks`", | |
| }, | |
| }), | |
| JSON.stringify({ | |
| custom_id: "item-2", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: "Text with \"quotes\" and 'single quotes'", | |
| }, | |
| }), | |
| JSON.stringify({ | |
| custom_id: "item-3", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: "Text with\nnewlines\nand\ttabs", | |
| }, | |
| }), | |
| JSON.stringify({ | |
| custom_id: "item-4", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: "Unicode: 你好世界 🌍 émojis", | |
| }, | |
| }), | |
| ].join("\n"); | |
| const content = Buffer.from(lines); | |
| const result = batchProcessor.parseBatchItems(content, "/v1/embeddings"); | |
| assert.ok(!result.error, `Should not have error: ${result.error}`); | |
| assert.ok(result.items, "Should have items"); | |
| assert.strictEqual(result.items.length, 4, "Should have 4 items"); | |
| assert.strictEqual(result.items[0].customId, "item-1"); | |
| assert.ok(result.items[0].body.input.includes("`")); | |
| assert.strictEqual(result.items[1].customId, "item-2"); | |
| assert.ok(result.items[1].body.input.includes('"')); | |
| assert.strictEqual(result.items[2].customId, "item-3"); | |
| assert.ok(result.items[2].body.input.includes("\n")); | |
| assert.strictEqual(result.items[3].customId, "item-4"); | |
| assert.ok(result.items[3].body.input.includes("你好世界")); | |
| }); | |
| test("buildRequestBody preserves input without modification", () => { | |
| const inputText = "Text with `backticks` and **markdown**"; | |
| const item = { | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: inputText, | |
| }, | |
| customId: "test-1", | |
| lineNumber: 1, | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| }; | |
| const result = batchProcessor.buildRequestBody(item); | |
| assert.strictEqual(result.input, inputText, "Input should be preserved exactly"); | |
| assert.strictEqual(result.model, "mistral/mistral-embed", "Model should be preserved"); | |
| assert.ok(!("stream" in result), "Embeddings endpoint should not have stream field"); | |
| }); | |
| test("buildRequestBody adds stream:false for chat endpoints", () => { | |
| const item = { | |
| body: { | |
| model: "gpt-4", | |
| messages: [{ role: "user", content: "Hello" }], | |
| }, | |
| customId: "test-1", | |
| lineNumber: 1, | |
| method: "POST", | |
| url: "/v1/chat/completions", | |
| }; | |
| const result = batchProcessor.buildRequestBody(item); | |
| assert.strictEqual(result.stream, false, "Chat endpoint should have stream:false"); | |
| assert.ok("messages" in result, "Messages should be preserved"); | |
| }); | |
| test("Batch request can be JSON stringified and parsed without data loss", () => { | |
| const inputText = `# MEMORY.md | |
| ## Index | |
| - **Tasks**: memory/tasks.md | |
| - Technical notes: See daily logs in \`memory/YYYY-MM-DD.md\` (search with \`memory_search\`) | |
| ## Durable preferences | |
| - Running directly on \`bashbitch\` (no SSH required). | |
| - Use \`memory_search\` to locate information. | |
| - **Memory Embeddings**: Use Mistral endpoint (\`https://api.mistral.ai/v1/embeddings\`) with \`MISTRAL_API_KEY\`. | |
| `; | |
| const originalRequest = { | |
| custom_id: "0", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: inputText, | |
| }, | |
| }; | |
| const jsonlLine = JSON.stringify(originalRequest); | |
| const parsed = JSON.parse(jsonlLine); | |
| assert.strictEqual(parsed.custom_id, originalRequest.custom_id); | |
| assert.strictEqual(parsed.body.model, originalRequest.body.model); | |
| assert.strictEqual(parsed.body.input, originalRequest.body.input); | |
| assert.ok(parsed.body.input.includes("`"), "Backticks should be preserved"); | |
| assert.ok(parsed.body.input.includes("## Index"), "Markdown should be preserved"); | |
| }); | |
| test("Simulated batch dispatch preserves input through JSON.stringify", async () => { | |
| const inputText = `# MEMORY.md | |
| ## Index (use memory_search to find details) | |
| - **Tasks**: memory/tasks.md | |
| - **Ideas**: memory/ideas.md | |
| - **Projects**: memory/projects.md | |
| - **Questions**: memory/questions.md | |
| - **Markus Insights**: memory/markus-insights.md (evergreen behavioral profile) | |
| - **Growth Plan**: memory/growth-plan.md | |
| - **Technical notes**: See daily logs in \`memory/YYYY-MM-DD.md\` (search with \`memory_search\`) | |
| ## Life Goal: The Ping Growth Directive | |
| My fundamental commitment is to never settle. I am tasked with questioning, reflecting, failing, and trying again—every day being more than the last. I actively maintain a Growth Plan (memory/growth-plan.md) to track my evolution and challenge myself. | |
| ## Durable preferences / facts | |
| - Running directly on \`bashbitch\` (no SSH required for local scripts). | |
| - Date-stamped memory files decay (half-life ~30 days). Undated files never decay. | |
| - **Always write it down**: Use \`memory/YYYY-MM-DD.md\` for daily logs; rely on \`MEMORY.md\` only for evergreen facts. | |
| - Use \`memory_search\` to locate information across MEMORY.md and dated logs before answering questions about prior work, decisions, or todos. | |
| - When searching it may also be that you should search online using the sx skill. | |
| - **Memory Embeddings**: Use Mistral embedding endpoint (\`https://api.mistral.ai/v1/embeddings\`, model: \`mistral-embed\`) with \`MISTRAL_API_KEY\`. Verified working on 2026-04-18. | |
| `; | |
| const line = JSON.stringify({ | |
| custom_id: "0", | |
| method: "POST", | |
| url: "/v1/embeddings", | |
| body: { | |
| model: "mistral/mistral-embed", | |
| input: inputText, | |
| }, | |
| }); | |
| const content = Buffer.from(line); | |
| const parseResult = batchProcessor.parseBatchItems(content, "/v1/embeddings"); | |
| assert.ok(!parseResult.error, `Should not have error: ${parseResult.error}`); | |
| assert.strictEqual(parseResult.items.length, 1); | |
| const item = parseResult.items[0]; | |
| const requestBody = batchProcessor.buildRequestBody(item); | |
| assert.strictEqual( | |
| requestBody.input, | |
| inputText, | |
| "Input should be preserved after buildRequestBody" | |
| ); | |
| const jsonBody = JSON.stringify(requestBody); | |
| const parsedBody = JSON.parse(jsonBody); | |
| assert.strictEqual(parsedBody.input, inputText, "Input should survive JSON round-trip"); | |
| assert.ok(parsedBody.input.includes("`"), "Backticks should survive JSON round-trip"); | |
| assert.ok(parsedBody.input.includes("—"), "Em-dash should survive JSON round-trip"); | |
| assert.ok(parsedBody.input.includes("\n"), "Newlines should survive JSON round-trip"); | |
| const request = new Request("http://localhost/v1/embeddings", { | |
| method: "POST", | |
| headers: { "Content-Type": "application/json" }, | |
| body: jsonBody, | |
| }); | |
| const receivedBody = await request.json(); | |
| assert.strictEqual( | |
| receivedBody.input, | |
| inputText, | |
| "Input should be preserved through Request object" | |
| ); | |
| assert.ok( | |
| receivedBody.input.includes("`"), | |
| "Backticks should be preserved through Request object" | |
| ); | |
| }); | |