mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-05-15 22:30:38 +08:00
81 lines
3.6 KiB
JavaScript
81 lines
3.6 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import { installResolveHooks, toDataModuleUrl } from "./helpers/register-hooks-compat.mjs";
|
|
|
|
installResolveHooks([
|
|
{ specifiers: ["../../../../../script.js"], url: toDataModuleUrl("export function getRequestHeaders() { return {}; }") },
|
|
{ specifiers: ["../../../../extensions.js"], url: toDataModuleUrl("export const extension_settings = { st_bme: {} };") },
|
|
]);
|
|
|
|
const { embedBatch } = await import("../vector/embedding.js");
|
|
|
|
function jsonResponse(payload) {
|
|
return new Response(JSON.stringify(payload), { status: 200, headers: { "Content-Type": "application/json" } });
|
|
}
|
|
|
|
async function withFetch(handler, fn) {
|
|
const previousFetch = globalThis.fetch;
|
|
globalThis.fetch = handler;
|
|
try { return await fn(); } finally { globalThis.fetch = previousFetch; }
|
|
}
|
|
|
|
const plain = (vectors) => vectors.map((vector) => (vector ? Array.from(vector) : null));
|
|
|
|
{
|
|
const calls = [];
|
|
await withFetch(async (_url, options = {}) => {
|
|
const body = JSON.parse(String(options.body || "{}"));
|
|
calls.push(body);
|
|
return jsonResponse({ data: body.input.map((text, index) => ({ index, embedding: [String(text).length, index] })) });
|
|
}, async () => {
|
|
const vectors = await embedBatch(["alpha", "beta", "gamma"], { mode: "direct", apiUrl: "https://example.com/v1", apiKey: "sk-test", model: "test-embedding", embeddingBatchSize: 2 });
|
|
assert.deepEqual(plain(vectors), [[5, 0], [4, 1], [5, 0]]);
|
|
});
|
|
assert.deepEqual(calls.map((call) => call.input), [["alpha", "beta"], ["gamma"]]);
|
|
}
|
|
|
|
{
|
|
const calls = [];
|
|
await withFetch(async (_url, options = {}) => {
|
|
const body = JSON.parse(String(options.body || "{}"));
|
|
calls.push(body);
|
|
if (Array.isArray(body.input)) return new Response("batch schema rejected", { status: 400 });
|
|
return jsonResponse({ data: [{ index: 0, embedding: [String(body.input).length, 9] }] });
|
|
}, async () => {
|
|
const vectors = await embedBatch(["first", "second"], { mode: "direct", apiUrl: "https://example.com/v1/embeddings", model: "test-embedding", embeddingBatchSize: 2 });
|
|
assert.deepEqual(plain(vectors), [[5, 9], [6, 9]]);
|
|
});
|
|
assert.deepEqual(calls.map((call) => call.input), [["first", "second"], "first", "second"]);
|
|
}
|
|
|
|
{
|
|
const calls = [];
|
|
await withFetch(async (_url, options = {}) => {
|
|
const body = JSON.parse(String(options.body || "{}"));
|
|
calls.push(body);
|
|
if (Array.isArray(body.texts)) return new Response("backend batch rejected", { status: 400 });
|
|
return jsonResponse({ vector: [String(body.text).length, 3] });
|
|
}, async () => {
|
|
const vectors = await embedBatch(["uno", "dos"], { mode: "backend", source: "openai", model: "text-embedding-3-small", embeddingBatchSize: 2 });
|
|
assert.deepEqual(plain(vectors), [[3, 3], [3, 3]]);
|
|
});
|
|
assert.deepEqual(calls.map((call) => [call.texts, call.text]), [[["uno", "dos"], undefined], [undefined, "uno"], [undefined, "dos"]]);
|
|
}
|
|
|
|
{
|
|
const calls = [];
|
|
await withFetch(async (_url, options = {}) => {
|
|
const body = JSON.parse(String(options.body || "{}"));
|
|
calls.push(body);
|
|
if (Array.isArray(body.input)) {
|
|
return jsonResponse({ data: [{ index: 0, embedding: [1, 1] }] });
|
|
}
|
|
return jsonResponse({ data: [{ index: 0, embedding: [String(body.input).length, 7] }] });
|
|
}, async () => {
|
|
const vectors = await embedBatch(["kept", "fallback"], { mode: "direct", apiUrl: "https://example.com/v1", model: "test-embedding", embeddingBatchSize: 2 });
|
|
assert.deepEqual(plain(vectors), [[1, 1], [8, 7]]);
|
|
});
|
|
assert.deepEqual(calls.map((call) => call.input), [["kept", "fallback"], "fallback"]);
|
|
}
|
|
|
|
console.log("embedding-batch tests passed");
|