@wirecat/cli-core 0.434.0 → 0.435.0
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.
- package/CHANGELOG.md +35 -1
- package/dist/cli/messenger/context.js +1 -0
- package/dist/cli/messenger/conversation-answers.d.ts +1 -0
- package/dist/cli/messenger/conversations-command.js +2 -2
- package/dist/cli/messenger/message-answers.d.ts +1 -0
- package/dist/cli/messenger/message-writes.d.ts +2 -0
- package/dist/cli/messenger/messages-search-command.js +6 -10
- package/dist/cli/messenger/models-command.js +34 -7
- package/dist/cli/messenger/search-answers.d.ts +3 -0
- package/dist/cli/messenger/search-answers.js +40 -8
- package/dist/cli/messenger/search-command.js +3 -1
- package/dist/cli/messenger/store-maintenance-command.js +7 -4
- package/dist/cli/model-catalogue-command.js +1 -1
- package/dist/cli/settings.d.ts +4 -0
- package/dist/cli/settings.js +5 -0
- package/dist/cli/shared-command-exports.d.ts +4 -0
- package/dist/embeddings/child.js +15 -5
- package/dist/embeddings/embed.d.ts +16 -2
- package/dist/embeddings/embed.js +57 -28
- package/dist/embeddings/models.d.ts +18 -0
- package/dist/embeddings/models.js +69 -0
- package/dist/embeddings/process.d.ts +6 -1
- package/dist/embeddings/process.js +23 -7
- package/dist/embeddings/rerank.d.ts +10 -0
- package/dist/embeddings/rerank.js +31 -0
- package/dist/entities/conversation-results.d.ts +2 -0
- package/dist/entities/evidence.d.ts +8 -0
- package/dist/entities/index.d.ts +27 -1
- package/dist/entities/listener.d.ts +4 -0
- package/dist/entities/message-context.d.ts +3 -0
- package/dist/entities/message-write.d.ts +4 -0
- package/dist/entities/message.d.ts +2 -0
- package/dist/entities/message.js +2 -0
- package/dist/entities/model.d.ts +5 -2
- package/dist/entities/model.js +5 -2
- package/dist/entities/store-maintenance.d.ts +1 -0
- package/dist/entities/store-maintenance.js +8 -1
- package/dist/entities/store-records.d.ts +1 -0
- package/dist/mcp/tool.d.ts +1 -1
- package/dist/mcp/tool.js +1 -0
- package/dist/services/deps.d.ts +3 -0
- package/dist/services/embeddings-maintenance.d.ts +10 -2
- package/dist/services/index.d.ts +2 -0
- package/dist/services/index.js +1 -0
- package/dist/services/messages-archive-search.d.ts +2 -2
- package/dist/services/messages-archive-search.js +4 -4
- package/dist/services/messages-discovery.d.ts +33 -4
- package/dist/services/messages-discovery.js +88 -3
- package/dist/services/messages-meaning.d.ts +2 -1
- package/dist/services/messages-meaning.js +7 -3
- package/dist/services/messages-rerank.d.ts +7 -0
- package/dist/services/messages-rerank.js +42 -0
- package/dist/services/messages-search.d.ts +5 -0
- package/dist/services/messages.d.ts +6 -2
- package/dist/services/messages.js +4 -3
- package/dist/services/model-downloads.d.ts +3 -1
- package/dist/services/model-downloads.js +20 -1
- package/dist/services/notes-search.d.ts +7 -2
- package/dist/services/notes-search.js +7 -4
- package/dist/services/search-all-meetings.d.ts +3 -2
- package/dist/services/search-all-meetings.js +8 -8
- package/dist/services/search-all.d.ts +7 -1
- package/dist/services/search-all.js +109 -45
- package/dist/store/exports.d.ts +1 -1
- package/dist/store/exports.js +1 -1
- package/dist/store/sqlite/accounts.js +2 -2
- package/dist/store/sqlite/chats.d.ts +1 -1
- package/dist/store/sqlite/chats.js +11 -4
- package/dist/store/sqlite/document-pictures.js +2 -7
- package/dist/store/sqlite/email-index.d.ts +1 -3
- package/dist/store/sqlite/email-index.js +5 -21
- package/dist/store/sqlite/emails.js +4 -3
- package/dist/store/sqlite/image-chunks.d.ts +2 -2
- package/dist/store/sqlite/image-chunks.js +10 -13
- package/dist/store/sqlite/meeting-vectors.js +11 -9
- package/dist/store/sqlite/message-chunks.js +3 -8
- package/dist/store/sqlite/note-index.js +2 -7
- package/dist/store/sqlite/schema.d.ts +1 -1
- package/dist/store/sqlite/schema.js +1 -1
- package/dist/store/sqlite/vector-index.d.ts +9 -0
- package/dist/store/sqlite/vector-index.js +25 -0
- package/dist/store/sqlite/vectors.d.ts +2 -2
- package/dist/store/sqlite/vectors.js +11 -8
- package/package.json +1 -1
package/dist/embeddings/embed.js
CHANGED
|
@@ -8,6 +8,20 @@ export const isTextModelInstalled = (model, directory) => filesPresent(placedTex
|
|
|
8
8
|
/** Past 8 threads one session gains nothing; Bun takes 1 unless told (`2026-10-02-embeddings.md`). */
|
|
9
9
|
export const defaultThreads = () => Math.min(8, availableParallelism());
|
|
10
10
|
export const WARM_IDLE_MS = 10 * 60_000;
|
|
11
|
+
/** One search's models, so the parts of a search that need the same model load it once; closed when it ends. */
|
|
12
|
+
export const runEmbedders = () => {
|
|
13
|
+
const held = new Map();
|
|
14
|
+
return {
|
|
15
|
+
get: (key, open) => {
|
|
16
|
+
const one = held.get(key) ?? open();
|
|
17
|
+
held.set(key, one);
|
|
18
|
+
return one;
|
|
19
|
+
},
|
|
20
|
+
close: async () => {
|
|
21
|
+
await Promise.allSettled([...held.values()].map(async (one) => (await one).close()));
|
|
22
|
+
},
|
|
23
|
+
};
|
|
24
|
+
};
|
|
11
25
|
export const warmEmbedders = ({ idleMs = WARM_IDLE_MS } = {}) => {
|
|
12
26
|
const held = new Map();
|
|
13
27
|
const timers = new Map();
|
|
@@ -33,28 +47,38 @@ export const warmEmbedders = ({ idleMs = WARM_IDLE_MS } = {}) => {
|
|
|
33
47
|
timer.unref?.();
|
|
34
48
|
timers.set(key, timer);
|
|
35
49
|
};
|
|
50
|
+
const hold = (key, open, serial) => {
|
|
51
|
+
let opening = held.get(key);
|
|
52
|
+
if (!opening) {
|
|
53
|
+
const started = open().then((one) => serial(one, queue({
|
|
54
|
+
starts: () => running.set(key, (running.get(key) ?? 0) + 1),
|
|
55
|
+
ends: () => {
|
|
56
|
+
running.set(key, (running.get(key) ?? 1) - 1);
|
|
57
|
+
rearm(key);
|
|
58
|
+
},
|
|
59
|
+
})));
|
|
60
|
+
held.set(key, started);
|
|
61
|
+
// A model not downloaded yet must not stay refused once it is.
|
|
62
|
+
started.catch(() => {
|
|
63
|
+
if (held.get(key) === started)
|
|
64
|
+
drop(key);
|
|
65
|
+
});
|
|
66
|
+
opening = started;
|
|
67
|
+
}
|
|
68
|
+
rearm(key);
|
|
69
|
+
return opening;
|
|
70
|
+
};
|
|
36
71
|
return {
|
|
37
|
-
get: (key, open) => {
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
held.set(key, started);
|
|
48
|
-
// A model not downloaded yet must not stay refused once it is.
|
|
49
|
-
started.catch(() => {
|
|
50
|
-
if (held.get(key) === started)
|
|
51
|
-
drop(key);
|
|
52
|
-
});
|
|
53
|
-
opening = started;
|
|
54
|
-
}
|
|
55
|
-
rearm(key);
|
|
56
|
-
return opening;
|
|
57
|
-
},
|
|
72
|
+
get: (key, open) => hold(key, open, (embedder, run) => ({
|
|
73
|
+
model: embedder.model,
|
|
74
|
+
embed: (texts, kind) => run.next(() => embedder.embed(texts, kind)),
|
|
75
|
+
close: run.closing(() => embedder.close()),
|
|
76
|
+
})),
|
|
77
|
+
reranker: (key, open) => hold(key, open, (reranker, run) => ({
|
|
78
|
+
model: reranker.model,
|
|
79
|
+
score: (question, passages) => run.next(() => reranker.score(question, passages)),
|
|
80
|
+
close: run.closing(() => reranker.close()),
|
|
81
|
+
})),
|
|
58
82
|
close: async () => {
|
|
59
83
|
const all = [...held.keys()].map(drop);
|
|
60
84
|
await Promise.allSettled(all.map(async (one) => (await one)?.close()));
|
|
@@ -62,19 +86,19 @@ export const warmEmbedders = ({ idleMs = WARM_IDLE_MS } = {}) => {
|
|
|
62
86
|
};
|
|
63
87
|
};
|
|
64
88
|
/** Two MCP calls may arrive at once; a session is not documented to take overlapping runs. */
|
|
65
|
-
const
|
|
89
|
+
const queue = ({ starts, ends }) => {
|
|
66
90
|
let last = Promise.resolve();
|
|
67
91
|
return {
|
|
68
|
-
|
|
69
|
-
embed: (texts, kind) => {
|
|
92
|
+
next: (work) => {
|
|
70
93
|
starts();
|
|
71
|
-
const next = last.then(
|
|
94
|
+
const next = last.then(work);
|
|
72
95
|
last = next.then(ends, ends);
|
|
73
96
|
return next;
|
|
74
97
|
},
|
|
75
|
-
|
|
98
|
+
/** Closing waits for the run in progress. */
|
|
99
|
+
closing: (close) => async () => {
|
|
76
100
|
await last;
|
|
77
|
-
await
|
|
101
|
+
await close();
|
|
78
102
|
},
|
|
79
103
|
};
|
|
80
104
|
};
|
|
@@ -96,7 +120,8 @@ export const meanOf = (data, tokens, dims) => {
|
|
|
96
120
|
}
|
|
97
121
|
return mean;
|
|
98
122
|
};
|
|
99
|
-
|
|
123
|
+
/** A model's tokenizer and ONNX session, from its folder. */
|
|
124
|
+
export const loadModel = async (model, directory, threads) => {
|
|
100
125
|
const [{ Tokenizer }, ort] = await Promise.all([import("@huggingface/tokenizers"), import("@wirecat/cli-core-onnx")]);
|
|
101
126
|
const path = (name) => join(directory, model.id, name);
|
|
102
127
|
const tokenizer = new Tokenizer(JSON.parse(readFileSync(path("tokenizer.json"), "utf8")), JSON.parse(readFileSync(path("tokenizer_config.json"), "utf8")));
|
|
@@ -104,6 +129,10 @@ export const openEmbedder = async (model, directory, { threads = defaultThreads(
|
|
|
104
129
|
const session = await ort.InferenceSession.create(readFileSync(path(model.onnx)), model.externalData
|
|
105
130
|
? { externalData: [{ path: basename(model.externalData), data: readFileSync(path(model.externalData)) }] }
|
|
106
131
|
: {});
|
|
132
|
+
return { ort, tokenizer, session };
|
|
133
|
+
};
|
|
134
|
+
export const openEmbedder = async (model, directory, { threads = defaultThreads() } = {}) => {
|
|
135
|
+
const { ort, tokenizer, session } = await loadModel(model, directory, threads);
|
|
107
136
|
const typeIds = session.inputNames.includes("token_type_ids");
|
|
108
137
|
const one = async (text) => {
|
|
109
138
|
const ids = truncated(tokenizer.encode(text).ids, model.maxTokens);
|
|
@@ -32,6 +32,24 @@ export interface TextModel {
|
|
|
32
32
|
export declare const TEXT_MODELS: TextModel[];
|
|
33
33
|
export declare const DEFAULT_TEXT_MODEL = "e5-small";
|
|
34
34
|
export declare const textModel: (id: string) => TextModel;
|
|
35
|
+
/**
|
|
36
|
+
* Cross-encoders that read a question and one hit together and score how well the hit answers it: discovery's
|
|
37
|
+
* last step. Pinned and checked as the text models are, and kept beside them. Picked in the evidence-pipeline
|
|
38
|
+
* benchmark (cli-testing performance/search/evidence-pipeline, "Reranker variants").
|
|
39
|
+
*/
|
|
40
|
+
export interface RerankModel {
|
|
41
|
+
id: string;
|
|
42
|
+
title: string;
|
|
43
|
+
languages: string;
|
|
44
|
+
licence: string;
|
|
45
|
+
/** Question and hit together; a longer pair loses the end of the hit. */
|
|
46
|
+
maxTokens: number;
|
|
47
|
+
files: ModelFile[];
|
|
48
|
+
onnx: string;
|
|
49
|
+
}
|
|
50
|
+
export declare const RERANK_MODELS: RerankModel[];
|
|
51
|
+
export declare const DEFAULT_RERANK_MODEL = "mmarco";
|
|
52
|
+
export declare const rerankModel: (id: string) => RerankModel;
|
|
35
53
|
/** The cosine a meaning hit must beat, measured in bench/search-quality; an unmeasured model keeps every hit. */
|
|
36
54
|
/** A vector's model: the provider, the model and its size — vectors of two of them never mix. */
|
|
37
55
|
export declare const vectorModelKey: (model: TextModel) => string;
|
|
@@ -85,6 +85,75 @@ export const textModel = (id) => {
|
|
|
85
85
|
}
|
|
86
86
|
return found;
|
|
87
87
|
};
|
|
88
|
+
const mmarco = huggingFace("cross-encoder/mmarco-mMiniLMv2-L12-H384-v1", "1427fd652930e4ba29e8149678df786c240d8825");
|
|
89
|
+
const bge = huggingFace("onnx-community/bge-reranker-v2-m3-ONNX", "6f5ff65298512715a1e669753bc754d2bc8f367b");
|
|
90
|
+
export const RERANK_MODELS = [
|
|
91
|
+
{
|
|
92
|
+
id: "mmarco",
|
|
93
|
+
title: "mMARCO mMiniLMv2-L12 cross-encoder, 8-bit",
|
|
94
|
+
languages: "about 100 languages, Russian and English among them",
|
|
95
|
+
licence: "Apache-2.0",
|
|
96
|
+
maxTokens: 512,
|
|
97
|
+
// The x86 name is the quantizer's target; Core runs every model as WebAssembly, on any processor.
|
|
98
|
+
onnx: "onnx/model_quint8_avx2.onnx",
|
|
99
|
+
files: [
|
|
100
|
+
{
|
|
101
|
+
name: "onnx/model_quint8_avx2.onnx",
|
|
102
|
+
url: mmarco("onnx/model_quint8_avx2.onnx"),
|
|
103
|
+
sha256: "6c2513767fb63d008a4377bef7a7a3555433d9436342bb53e35a3a72ffc52d4b",
|
|
104
|
+
bytes: 118_620_016,
|
|
105
|
+
},
|
|
106
|
+
{
|
|
107
|
+
name: "tokenizer.json",
|
|
108
|
+
url: mmarco("tokenizer.json"),
|
|
109
|
+
sha256: "62c24cdc13d4c9952d63718d6c9fa4c287974249e16b7ade6d5a85e7bbb75626",
|
|
110
|
+
bytes: 17_082_660,
|
|
111
|
+
},
|
|
112
|
+
{
|
|
113
|
+
name: "tokenizer_config.json",
|
|
114
|
+
url: mmarco("tokenizer_config.json"),
|
|
115
|
+
sha256: "e7fbfbfa6347b4e414c1cee50d142e2c2f9a895dad68b068ae83a8b564c3837e",
|
|
116
|
+
bytes: 435,
|
|
117
|
+
},
|
|
118
|
+
],
|
|
119
|
+
},
|
|
120
|
+
{
|
|
121
|
+
id: "bge-reranker-v2-m3",
|
|
122
|
+
title: "BGE reranker v2 m3, 8-bit",
|
|
123
|
+
languages: "over 100 languages — better than mmarco in the benchmark, about seven times slower",
|
|
124
|
+
licence: "Apache-2.0 (BAAI's; the ONNX export declares none)",
|
|
125
|
+
maxTokens: 512,
|
|
126
|
+
onnx: "onnx/model_quantized.onnx",
|
|
127
|
+
files: [
|
|
128
|
+
{
|
|
129
|
+
name: "onnx/model_quantized.onnx",
|
|
130
|
+
url: bge("onnx/model_quantized.onnx"),
|
|
131
|
+
sha256: "912fc1215c2dbff6499700534bd8d31253af01573861abbfc43afd1fab6cce5d",
|
|
132
|
+
bytes: 570_727_094,
|
|
133
|
+
},
|
|
134
|
+
{
|
|
135
|
+
name: "tokenizer.json",
|
|
136
|
+
url: bge("tokenizer.json"),
|
|
137
|
+
sha256: "8bf8afbfd11306bd872018c53bfdf2e160a56f8edbcf49933324404791c148d3",
|
|
138
|
+
bytes: 17_082_900,
|
|
139
|
+
},
|
|
140
|
+
{
|
|
141
|
+
name: "tokenizer_config.json",
|
|
142
|
+
url: bge("tokenizer_config.json"),
|
|
143
|
+
sha256: "b87c8703482b0300d3da30e201519aa641f6a450f5eb5bf1e624afbf70c74d80",
|
|
144
|
+
bytes: 1_203,
|
|
145
|
+
},
|
|
146
|
+
],
|
|
147
|
+
},
|
|
148
|
+
];
|
|
149
|
+
export const DEFAULT_RERANK_MODEL = "mmarco";
|
|
150
|
+
export const rerankModel = (id) => {
|
|
151
|
+
const found = RERANK_MODELS.find((model) => model.id === id);
|
|
152
|
+
if (!found) {
|
|
153
|
+
throw new CliError("validation_error", `no reranker ${id} — one of: ${RERANK_MODELS.map((model) => model.id).join(", ")}`);
|
|
154
|
+
}
|
|
155
|
+
return found;
|
|
156
|
+
};
|
|
88
157
|
/** The cosine a meaning hit must beat, measured in bench/search-quality; an unmeasured model keeps every hit. */
|
|
89
158
|
/** A vector's model: the provider, the model and its size — vectors of two of them never mix. */
|
|
90
159
|
export const vectorModelKey = (model) => `local:${model.id}:${model.dims}`;
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import type { Embedder } from "./embed.js";
|
|
2
|
-
import type { TextModel } from "./models.js";
|
|
2
|
+
import type { RerankModel, TextModel } from "./models.js";
|
|
3
|
+
import type { Reranker } from "./rerank.js";
|
|
3
4
|
/**
|
|
4
5
|
* One session in a process of its own, run by the same runtime. When it exits, all of its memory goes back:
|
|
5
6
|
* closing the session gives back ~0.1 of ~1 GB, and on Bun ending a worker thread gives back none for good
|
|
@@ -8,3 +9,7 @@ import type { TextModel } from "./models.js";
|
|
|
8
9
|
export declare const openProcess: (model: TextModel, directory: string, { threads }: {
|
|
9
10
|
threads: number;
|
|
10
11
|
}) => Promise<Embedder>;
|
|
12
|
+
/** The reranker the same way, for the MCP server. */
|
|
13
|
+
export declare const openRerankerProcess: (model: RerankModel, directory: string, { threads }: {
|
|
14
|
+
threads: number;
|
|
15
|
+
}) => Promise<Reranker>;
|
|
@@ -7,7 +7,24 @@ import { fileURLToPath } from "node:url";
|
|
|
7
7
|
* (measured 2026-10-02, docs/storage/search-indexes.md).
|
|
8
8
|
*/
|
|
9
9
|
export const openProcess = async (model, directory, { threads }) => {
|
|
10
|
-
const child =
|
|
10
|
+
const child = await modelProcess({ model, directory, threads });
|
|
11
|
+
return {
|
|
12
|
+
model,
|
|
13
|
+
embed: async (texts, kind) => ((await child.ask({ texts, kind })).vectors ?? []).map((vector) => Float32Array.from(vector)),
|
|
14
|
+
close: child.close,
|
|
15
|
+
};
|
|
16
|
+
};
|
|
17
|
+
/** The reranker the same way, for the MCP server. */
|
|
18
|
+
export const openRerankerProcess = async (model, directory, { threads }) => {
|
|
19
|
+
const child = await modelProcess({ model, directory, threads, rerank: true });
|
|
20
|
+
return {
|
|
21
|
+
model,
|
|
22
|
+
score: async (question, passages) => (await child.ask({ question, texts: passages })).scores ?? [],
|
|
23
|
+
close: child.close,
|
|
24
|
+
};
|
|
25
|
+
};
|
|
26
|
+
const modelProcess = async (setup) => {
|
|
27
|
+
const child = spawn(process.execPath, [fileURLToPath(new URL("./child.js", import.meta.url)), JSON.stringify(setup)], { stdio: ["pipe", "pipe", "pipe"] });
|
|
11
28
|
const pending = new Map();
|
|
12
29
|
let said = "";
|
|
13
30
|
child.stderr.setEncoding("utf8").on("data", (text) => {
|
|
@@ -41,21 +58,20 @@ export const openProcess = async (model, directory, { threads }) => {
|
|
|
41
58
|
return ready();
|
|
42
59
|
const job = pending.get(answer.id);
|
|
43
60
|
pending.delete(answer.id);
|
|
44
|
-
if (answer.error !== undefined || !answer.vectors)
|
|
45
|
-
job?.reject(new Error(answer.error ?? "no
|
|
61
|
+
if (answer.error !== undefined || !(answer.vectors ?? answer.scores))
|
|
62
|
+
job?.reject(new Error(answer.error ?? "no answer"));
|
|
46
63
|
else
|
|
47
|
-
job?.resolve(answer
|
|
64
|
+
job?.resolve(answer);
|
|
48
65
|
});
|
|
49
66
|
await started;
|
|
50
67
|
let next = 0;
|
|
51
68
|
return {
|
|
52
|
-
|
|
53
|
-
embed: (texts, kind) => new Promise((resolve, reject) => {
|
|
69
|
+
ask: (request) => new Promise((resolve, reject) => {
|
|
54
70
|
if (gone)
|
|
55
71
|
return reject(gone);
|
|
56
72
|
const id = next++;
|
|
57
73
|
pending.set(id, { resolve, reject });
|
|
58
|
-
child.stdin.write(`${JSON.stringify({ id,
|
|
74
|
+
child.stdin.write(`${JSON.stringify({ id, ...request })}\n`);
|
|
59
75
|
}),
|
|
60
76
|
close: async () => {
|
|
61
77
|
if (child.exitCode === null && child.signalCode === null)
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
import type { RerankModel } from "./models.js";
|
|
2
|
+
export interface Reranker {
|
|
3
|
+
readonly model: RerankModel;
|
|
4
|
+
/** How well each passage answers the question, in order: the model's raw logit, higher is better. */
|
|
5
|
+
score(question: string, passages: string[]): Promise<number[]>;
|
|
6
|
+
close(): Promise<void>;
|
|
7
|
+
}
|
|
8
|
+
export declare const openReranker: (model: RerankModel, directory: string, { threads }?: {
|
|
9
|
+
threads?: number;
|
|
10
|
+
}) => Promise<Reranker>;
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
import { defaultThreads, loadModel, truncated } from "./embed.js";
|
|
2
|
+
export const openReranker = async (model, directory, { threads = defaultThreads() } = {}) => {
|
|
3
|
+
const { ort, tokenizer, session } = await loadModel(model, directory, threads);
|
|
4
|
+
const typeIds = session.inputNames.includes("token_type_ids");
|
|
5
|
+
const output = session.outputNames[0];
|
|
6
|
+
const one = async (question, passage) => {
|
|
7
|
+
const encoded = tokenizer.encode(question, { text_pair: passage, return_token_type_ids: true });
|
|
8
|
+
const ids = truncated(encoded.ids, model.maxTokens);
|
|
9
|
+
const shape = [1, ids.length];
|
|
10
|
+
const feeds = {
|
|
11
|
+
input_ids: new ort.Tensor("int64", BigInt64Array.from(ids, BigInt), shape),
|
|
12
|
+
attention_mask: new ort.Tensor("int64", new BigInt64Array(ids.length).fill(1n), shape),
|
|
13
|
+
};
|
|
14
|
+
if (typeIds)
|
|
15
|
+
feeds.token_type_ids = new ort.Tensor("int64", BigInt64Array.from(truncated(encoded.token_type_ids, model.maxTokens), BigInt), shape);
|
|
16
|
+
const logit = (await session.run(feeds))[output]?.data[0];
|
|
17
|
+
if (typeof logit !== "number" || !Number.isFinite(logit))
|
|
18
|
+
throw new Error(`${model.id} gave no score`);
|
|
19
|
+
return logit;
|
|
20
|
+
};
|
|
21
|
+
return {
|
|
22
|
+
model,
|
|
23
|
+
score: async (question, passages) => {
|
|
24
|
+
const scores = [];
|
|
25
|
+
for (const passage of passages)
|
|
26
|
+
scores.push(await one(question, passage));
|
|
27
|
+
return scores;
|
|
28
|
+
},
|
|
29
|
+
close: () => session.release(),
|
|
30
|
+
};
|
|
31
|
+
};
|
|
@@ -42,6 +42,7 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
42
42
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
43
43
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
44
44
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
45
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
45
46
|
}, undefined>, undefined>;
|
|
46
47
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
47
48
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -229,6 +230,7 @@ export declare const conversationDetails: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
229
230
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
230
231
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
231
232
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
233
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
232
234
|
}, undefined>, undefined>;
|
|
233
235
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
234
236
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -33,6 +33,7 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
33
33
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
34
34
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
35
35
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
36
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
36
37
|
}, undefined>, undefined>;
|
|
37
38
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
38
39
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -220,6 +221,7 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
220
221
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
221
222
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
222
223
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
224
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
223
225
|
}, undefined>, undefined>;
|
|
224
226
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
225
227
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -445,6 +447,7 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
445
447
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
446
448
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
447
449
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
450
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
448
451
|
}, undefined>, undefined>;
|
|
449
452
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
450
453
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -632,6 +635,7 @@ export declare const contribution: v.StrictObjectSchema<{
|
|
|
632
635
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
633
636
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
634
637
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
638
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
635
639
|
}, undefined>, undefined>;
|
|
636
640
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
637
641
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -893,6 +897,7 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
893
897
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
894
898
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
895
899
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
900
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
896
901
|
}, undefined>, undefined>;
|
|
897
902
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
898
903
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -1080,6 +1085,7 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1080
1085
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
1081
1086
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
1082
1087
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
1088
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1083
1089
|
}, undefined>, undefined>;
|
|
1084
1090
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
1085
1091
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -1305,6 +1311,7 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1305
1311
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
1306
1312
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
1307
1313
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
1314
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1308
1315
|
}, undefined>, undefined>;
|
|
1309
1316
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
1310
1317
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|
|
@@ -1492,6 +1499,7 @@ export declare const evidence: v.UnionSchema<[v.StrictObjectSchema<{
|
|
|
1492
1499
|
readonly missing_terms: v.ArraySchema<v.StringSchema<undefined>, undefined>;
|
|
1493
1500
|
readonly parent: v.OptionalSchema<v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>, undefined>;
|
|
1494
1501
|
readonly found_by: v.OptionalSchema<v.ArraySchema<v.PicklistSchema<["words", "meaning"], undefined>, undefined>, undefined>;
|
|
1502
|
+
readonly reranker_score: v.OptionalSchema<v.NumberSchema<undefined>, undefined>;
|
|
1495
1503
|
}, undefined>, undefined>;
|
|
1496
1504
|
readonly context: v.OptionalSchema<v.ArraySchema<v.StrictObjectSchema<{
|
|
1497
1505
|
readonly ref: v.SchemaWithPipe<readonly [v.StringSchema<undefined>, v.RegexAction<string, "a reference such as `note:42`">]>;
|