@genai-fi/nanogpt 0.22.0 → 0.23.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/dist/{DatasetBuilder-Ctb425Id.js → DatasetBuilder-C0iJT29K.js} +145 -116
- package/dist/Generator.js +2 -2
- package/dist/TeachableLLM.js +1 -1
- package/dist/Trainer-DBsyWJ4s.js +228 -0
- package/dist/Trainer.d.ts +2 -1
- package/dist/Trainer.js +1 -1
- package/dist/data/stream.js +1 -1
- package/dist/data/textLoader.js +1 -1
- package/dist/{BaseTokeniser-C9TSv4th.js → eventemitter3-D_qV3Lof.js} +2 -132
- package/dist/loader/load.js +2 -2
- package/dist/loader/loadHF.js +1 -1
- package/dist/loader/loadTransformers.js +2 -2
- package/dist/loader/newZipLoad.js +1 -1
- package/dist/loader/oldZipLoad.js +1 -1
- package/dist/loader/save.js +1 -1
- package/dist/{main-Bgc7_9kb.js → main-BSaDGH7I.js} +2686 -2913
- package/dist/main.d.ts +1 -0
- package/dist/main.js +20 -18
- package/dist/models/NanoGPTV1.js +1 -1
- package/dist/models/NanoGPTV2.js +1 -1
- package/dist/models/factory.js +1 -1
- package/dist/models/model.js +1 -1
- package/dist/{stream-DKl3GTDL.js → stream-BjdpSNqB.js} +31 -22
- package/dist/tokeniser/BaseTokeniser.js +135 -2
- package/dist/tokeniser/CharTokeniser.js +3 -3
- package/dist/tokeniser/bpe.js +8 -8
- package/dist/training/DatasetBuilder.d.ts +17 -1
- package/dist/training/DatasetBuilder.js +2 -2
- package/dist/training/PreTrainer.js +1 -1
- package/dist/training/SFTTrainer.js +1 -1
- package/dist/training/tasks/Task.d.ts +13 -4
- package/dist/training/tasks/Task.js +22 -14
- package/dist/training/tasks/TokenStore.d.ts +46 -0
- package/dist/training/tasks/TokenStore.js +215 -0
- package/dist/training/tasks/splitter.js +1 -1
- package/dist/training/validation.d.ts +4 -2
- package/dist/training/validation.js +21 -2
- package/package.json +1 -1
package/dist/main.d.ts
CHANGED
|
@@ -28,6 +28,7 @@ export type { GPTConfig } from './models/config';
|
|
|
28
28
|
export { estimateParameterCount, estimateMemoryUsage, estimateTrainingMemoryUsage, estimateResources, validateConfig, } from './utilities/parameters';
|
|
29
29
|
export { default as topP } from './utilities/topP';
|
|
30
30
|
export { sliceUint16Shards, sliceUint8Shards } from './utilities/tokens';
|
|
31
|
+
export { TokenStore, createTokenStore } from './training/tasks/TokenStore';
|
|
31
32
|
export { Task, tokensFromTasks } from './training/tasks/Task';
|
|
32
33
|
export declare const tasks: {
|
|
33
34
|
PretrainingTask: typeof PretrainingTask;
|
package/dist/main.js
CHANGED
|
@@ -1,18 +1,20 @@
|
|
|
1
|
-
import {
|
|
2
|
-
import
|
|
3
|
-
import
|
|
4
|
-
import { AdamWOptimizer as
|
|
5
|
-
import
|
|
6
|
-
import
|
|
7
|
-
import {
|
|
8
|
-
import h from "./
|
|
9
|
-
import g from "./
|
|
10
|
-
import
|
|
11
|
-
import v from "./
|
|
12
|
-
import {
|
|
13
|
-
import
|
|
14
|
-
import {
|
|
15
|
-
import D from "./utilities/
|
|
16
|
-
import O from "./
|
|
17
|
-
import
|
|
18
|
-
|
|
1
|
+
import { _ as e, a as t, i as n, n as r, r as i, t as a, v as o } from "./main-BSaDGH7I.js";
|
|
2
|
+
import s from "./tokeniser/CharTokeniser.js";
|
|
3
|
+
import c from "./tokeniser/bpe.js";
|
|
4
|
+
import { AdamWOptimizer as l } from "./training/AdamW.js";
|
|
5
|
+
import u from "./utilities/topP.js";
|
|
6
|
+
import d from "./training/Evaluator.js";
|
|
7
|
+
import { TokenStore as f, createTokenStore as p } from "./training/tasks/TokenStore.js";
|
|
8
|
+
import { Task as m, tokensFromTasks as h } from "./training/tasks/Task.js";
|
|
9
|
+
import { t as g } from "./Trainer-DBsyWJ4s.js";
|
|
10
|
+
import _ from "./utilities/waitForModel.js";
|
|
11
|
+
import v from "./utilities/datasetID.js";
|
|
12
|
+
import { n as y } from "./stream-BjdpSNqB.js";
|
|
13
|
+
import b from "./data/textLoader.js";
|
|
14
|
+
import { estimateMemoryUsage as x, estimateParameterCount as S, estimateResources as C, estimateTrainingMemoryUsage as w, validateConfig as T } from "./utilities/parameters.js";
|
|
15
|
+
import { sliceUint16Shards as E, sliceUint8Shards as D } from "./utilities/tokens.js";
|
|
16
|
+
import { selectBackend as O } from "./backend.js";
|
|
17
|
+
import k from "./utilities/performance.js";
|
|
18
|
+
import A from "./checks/index.js";
|
|
19
|
+
import { sentenceEmbeddings as j, sentenceEmbeddingsTensor as M } from "./utilities/sentences.js";
|
|
20
|
+
export { l as AdamWOptimizer, c as BPETokeniser, s as CharTokeniser, d as Evaluator, t as Generator, y as MemoryConversationStream, o as Model, e as NanoGPT, m as Task, n as TeachableLLM, f as TokenStore, g as Trainer, A as checks, p as createTokenStore, x as estimateMemoryUsage, S as estimateParameterCount, C as estimateResources, w as estimateTrainingMemoryUsage, v as generateDatasetID, a as layers, b as loadTextData, r as ops, k as performanceTest, O as selectBackend, j as sentenceEmbeddings, M as sentenceEmbeddingsTensor, E as sliceUint16Shards, D as sliceUint8Shards, i as tasks, h as tokensFromTasks, u as topP, T as validateConfig, _ as waitForModel };
|
package/dist/models/NanoGPTV1.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { _ as e } from "../main-BSaDGH7I.js";
|
|
2
2
|
export { e as default };
|
package/dist/models/NanoGPTV2.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { g as e } from "../main-BSaDGH7I.js";
|
|
2
2
|
export { e as default };
|
package/dist/models/factory.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { h as e } from "../main-BSaDGH7I.js";
|
|
2
2
|
export { e as default };
|
package/dist/models/model.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { v as e } from "../main-BSaDGH7I.js";
|
|
2
2
|
export { e as default };
|
|
@@ -2225,41 +2225,50 @@ function vi(e) {
|
|
|
2225
2225
|
}];
|
|
2226
2226
|
}
|
|
2227
2227
|
}
|
|
2228
|
-
var yi = class {
|
|
2228
|
+
var yi = 100, bi = 1e3, xi = class {
|
|
2229
2229
|
sourceFactory;
|
|
2230
2230
|
constructor(e) {
|
|
2231
2231
|
this.sourceFactory = e;
|
|
2232
2232
|
}
|
|
2233
2233
|
cursor() {
|
|
2234
|
-
let e = !1, t = null, n = new TextDecoder(), r = "", i = !1, a = [],
|
|
2234
|
+
let e = !1, t = null, n = new TextDecoder(), r = "", i = !1, a = !1, o = [], s = async () => {
|
|
2235
2235
|
e ||= (t = (await this.sourceFactory()).getReader(), !0);
|
|
2236
|
-
},
|
|
2237
|
-
|
|
2238
|
-
|
|
2239
|
-
|
|
2240
|
-
|
|
2241
|
-
|
|
2242
|
-
|
|
2243
|
-
|
|
2244
|
-
|
|
2245
|
-
|
|
2246
|
-
|
|
2247
|
-
|
|
2248
|
-
|
|
2249
|
-
let
|
|
2250
|
-
|
|
2236
|
+
}, c = null, l = async () => {
|
|
2237
|
+
if (!a) {
|
|
2238
|
+
for (a = !0, await s(); o.length < bi && !i;) {
|
|
2239
|
+
let e = await t.read();
|
|
2240
|
+
if (c && o.length > 0 && (c(), c = null), e.done) {
|
|
2241
|
+
r += n.decode(), i = !0;
|
|
2242
|
+
let e = r.trim();
|
|
2243
|
+
e.length > 0 && o.push(vi(e)), r = "";
|
|
2244
|
+
break;
|
|
2245
|
+
}
|
|
2246
|
+
r += n.decode(e.value, { stream: !0 });
|
|
2247
|
+
let a = r.split("\n");
|
|
2248
|
+
r = a.pop() ?? "";
|
|
2249
|
+
for (let e of a) {
|
|
2250
|
+
let t = e.trim();
|
|
2251
|
+
t.length !== 0 && o.push(vi(t));
|
|
2252
|
+
}
|
|
2251
2253
|
}
|
|
2254
|
+
a = !1, c && (o.length > 0 || i) && (c(), c = null);
|
|
2252
2255
|
}
|
|
2253
|
-
};
|
|
2256
|
+
}, u = null;
|
|
2254
2257
|
return { async next() {
|
|
2255
|
-
|
|
2258
|
+
o.length < yi && !i && !a && (u = l().then(() => {
|
|
2259
|
+
u = null;
|
|
2260
|
+
})), o.length === 0 && u && await new Promise((e) => {
|
|
2261
|
+
c = e;
|
|
2262
|
+
}), o.length === 0 && !i && console.warn("Queue is empty but not done");
|
|
2263
|
+
let e = o.length > 0 ? o.shift() ?? null : null;
|
|
2264
|
+
return e === null && !i && console.warn("Queue is empty and not done"), e;
|
|
2256
2265
|
} };
|
|
2257
2266
|
}
|
|
2258
|
-
},
|
|
2267
|
+
}, Si = class extends xi {
|
|
2259
2268
|
constructor(e) {
|
|
2260
2269
|
super(async () => e.stream());
|
|
2261
2270
|
}
|
|
2262
|
-
},
|
|
2271
|
+
}, Ci = class extends xi {
|
|
2263
2272
|
constructor(e, t) {
|
|
2264
2273
|
super(async () => {
|
|
2265
2274
|
let n = new wr(), r = e.stream().pipeThrough(n).getReader(), i = null;
|
|
@@ -2284,4 +2293,4 @@ var yi = class {
|
|
|
2284
2293
|
}
|
|
2285
2294
|
};
|
|
2286
2295
|
//#endregion
|
|
2287
|
-
export { gi as n,
|
|
2296
|
+
export { gi as n, Ci as r, Si as t };
|
|
@@ -1,2 +1,135 @@
|
|
|
1
|
-
import {
|
|
2
|
-
|
|
1
|
+
import { t as e } from "../eventemitter3-D_qV3Lof.js";
|
|
2
|
+
//#region lib/tokeniser/BaseTokeniser.ts
|
|
3
|
+
var t = [
|
|
4
|
+
"<eos>",
|
|
5
|
+
"<bos>",
|
|
6
|
+
"",
|
|
7
|
+
"<pad>",
|
|
8
|
+
"<|user_start|>",
|
|
9
|
+
"<|user_end|>",
|
|
10
|
+
"<|assistant_start|>",
|
|
11
|
+
"<|assistant_end|>",
|
|
12
|
+
"<|system_start|>",
|
|
13
|
+
"<|system_end|>"
|
|
14
|
+
], n = class extends e {
|
|
15
|
+
id = "untrained";
|
|
16
|
+
datasetID;
|
|
17
|
+
specialTokens = /* @__PURE__ */ new Map();
|
|
18
|
+
specialTokenSet = /* @__PURE__ */ new Set();
|
|
19
|
+
isSpecialToken(e) {
|
|
20
|
+
return this.specialTokenSet.has(e);
|
|
21
|
+
}
|
|
22
|
+
addSpecialTokens() {
|
|
23
|
+
t.forEach((e, t) => {
|
|
24
|
+
this.addToken(e, t), this.specialTokens.set(e, t), this.specialTokenSet.add(t);
|
|
25
|
+
});
|
|
26
|
+
}
|
|
27
|
+
addSpecialToken(e, t) {
|
|
28
|
+
this.specialTokens.set(e, t), this.specialTokenSet.add(t);
|
|
29
|
+
}
|
|
30
|
+
generateID() {
|
|
31
|
+
let e = this.getVocab(), t = 2166136261, n = 2654435769;
|
|
32
|
+
if (e.length === 0) {
|
|
33
|
+
this.id = "untrained";
|
|
34
|
+
return;
|
|
35
|
+
}
|
|
36
|
+
for (let r = 0; r < e.length; r++) {
|
|
37
|
+
let i = e[r];
|
|
38
|
+
t ^= i.length, t = Math.imul(t, 16777619), n ^= r, n = Math.imul(n, 2246822507);
|
|
39
|
+
for (let e = 0; e < i.length; e++) {
|
|
40
|
+
let r = i.charCodeAt(e);
|
|
41
|
+
t ^= r, t = Math.imul(t, 16777619), n ^= r, n = Math.imul(n, 3266489909);
|
|
42
|
+
}
|
|
43
|
+
}
|
|
44
|
+
let r = (t >>> 0).toString(36), i = (n >>> 0).toString(36);
|
|
45
|
+
this.id = "tokeniser_" + r + "_" + i;
|
|
46
|
+
}
|
|
47
|
+
encodeSequence(e) {
|
|
48
|
+
let t = this.encode(e);
|
|
49
|
+
return [
|
|
50
|
+
this.bosToken,
|
|
51
|
+
...t,
|
|
52
|
+
this.eosToken
|
|
53
|
+
];
|
|
54
|
+
}
|
|
55
|
+
encodeAsSequence(e, t) {
|
|
56
|
+
let n = e.flatMap((e) => this.encode(e.content));
|
|
57
|
+
return t ? [
|
|
58
|
+
this.bosToken,
|
|
59
|
+
...n,
|
|
60
|
+
this.eosToken,
|
|
61
|
+
this.bosToken
|
|
62
|
+
] : [
|
|
63
|
+
this.bosToken,
|
|
64
|
+
...n,
|
|
65
|
+
this.eosToken
|
|
66
|
+
];
|
|
67
|
+
}
|
|
68
|
+
encodeConversation(e, t, n) {
|
|
69
|
+
let r = [[this.bosToken]], i;
|
|
70
|
+
n && (i = [[!1]]);
|
|
71
|
+
let a = [
|
|
72
|
+
this.getSpecialTokenIndex("<|user_start|>"),
|
|
73
|
+
this.getSpecialTokenIndex("<|assistant_start|>"),
|
|
74
|
+
this.getSpecialTokenIndex("<|system_start|>")
|
|
75
|
+
], o = [
|
|
76
|
+
this.getSpecialTokenIndex("<|user_end|>"),
|
|
77
|
+
this.getSpecialTokenIndex("<|assistant_end|>"),
|
|
78
|
+
this.getSpecialTokenIndex("<|system_end|>")
|
|
79
|
+
];
|
|
80
|
+
for (let t of e) {
|
|
81
|
+
let e = !1, s = this.encode(t.content);
|
|
82
|
+
switch (t.role) {
|
|
83
|
+
case "user":
|
|
84
|
+
r.push([a[0]]), e = !0;
|
|
85
|
+
break;
|
|
86
|
+
case "assistant":
|
|
87
|
+
r.push([a[1]]);
|
|
88
|
+
break;
|
|
89
|
+
case "system":
|
|
90
|
+
r.push([a[2]]), e = !0;
|
|
91
|
+
break;
|
|
92
|
+
}
|
|
93
|
+
switch (r.push(s), t.role) {
|
|
94
|
+
case "user":
|
|
95
|
+
r.push([o[0]]);
|
|
96
|
+
break;
|
|
97
|
+
case "assistant":
|
|
98
|
+
r.push([o[1]]);
|
|
99
|
+
break;
|
|
100
|
+
case "system":
|
|
101
|
+
r.push([o[2]]);
|
|
102
|
+
break;
|
|
103
|
+
}
|
|
104
|
+
n && i && e ? (i.push([!1]), i.push(s.map(() => !1)), i.push([!1])) : n && i && (i.push([!1]), i.push(s.map(() => !0)), i.push([!0]));
|
|
105
|
+
}
|
|
106
|
+
let s = r.flat();
|
|
107
|
+
return t ? (s.push(a[1]), n && i && i.push([!1])) : (s.push(this.eosToken), n && i && i.push([!0])), n && i ? {
|
|
108
|
+
tokens: s,
|
|
109
|
+
mask: i.flat()
|
|
110
|
+
} : s;
|
|
111
|
+
}
|
|
112
|
+
decodeConversation(e) {
|
|
113
|
+
let t = [], n = 0;
|
|
114
|
+
for (; n < e.length;) {
|
|
115
|
+
let r = e[n], i = null;
|
|
116
|
+
if (r === this.getSpecialTokenIndex("<|user_start|>") ? i = "user" : r === this.getSpecialTokenIndex("<|assistant_start|>") ? i = "assistant" : r === this.getSpecialTokenIndex("<|system_start|>") ? i = "system" : r === this.bosToken || (r === this.eosToken ? i = null : (i = "text", n--)), i) {
|
|
117
|
+
n++;
|
|
118
|
+
let r = [];
|
|
119
|
+
for (; n < e.length && e[n] !== this.getSpecialTokenIndex(`<|${i}_end|>`) && e[n] !== this.eosToken;) r.push(e[n]), n++;
|
|
120
|
+
let a = this.decode(r);
|
|
121
|
+
t.push({
|
|
122
|
+
role: i,
|
|
123
|
+
content: a
|
|
124
|
+
});
|
|
125
|
+
}
|
|
126
|
+
n++;
|
|
127
|
+
}
|
|
128
|
+
return t;
|
|
129
|
+
}
|
|
130
|
+
getSpecialTokenIndex(e) {
|
|
131
|
+
return this.specialTokens.get(e);
|
|
132
|
+
}
|
|
133
|
+
};
|
|
134
|
+
//#endregion
|
|
135
|
+
export { t as SPECIALS, n as default };
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { yieldIfNeeded as e } from "../utilities/yielder.js";
|
|
2
|
-
import
|
|
2
|
+
import t, { SPECIALS as n } from "./BaseTokeniser.js";
|
|
3
3
|
//#region lib/tokeniser/CharTokeniser.ts
|
|
4
|
-
var r = ["<eos>", "<unk>"], i = class extends
|
|
4
|
+
var r = ["<eos>", "<unk>"], i = class extends t {
|
|
5
5
|
vocabSize = 0;
|
|
6
6
|
eosToken = 0;
|
|
7
7
|
bosToken = 0;
|
|
@@ -11,7 +11,7 @@ var r = ["<eos>", "<unk>"], i = class extends n {
|
|
|
11
11
|
_trained = !1;
|
|
12
12
|
constructor(e) {
|
|
13
13
|
if (super(), Array.isArray(e)) {
|
|
14
|
-
if (this.vocab = e, this.vocab.length > 0) this.vocabSize = this.vocab.length,
|
|
14
|
+
if (this.vocab = e, this.vocab.length > 0) this.vocabSize = this.vocab.length, n.forEach((e) => {
|
|
15
15
|
let t = this.vocab.indexOf(e);
|
|
16
16
|
t !== -1 && this.addSpecialToken(e, t);
|
|
17
17
|
}), this.eosToken = this.getSpecialTokenIndex("<eos>"), this.bosToken = this.getSpecialTokenIndex("<bos>") ?? this.eosToken, this.unkToken = this.getSpecialTokenIndex("") ?? -1, this.unkToken === -1 && (this.unkToken = this.vocab.indexOf("<unk>")), this.unkToken === -1 && (this.unkToken = this.vocab.indexOf("<pad>")), this.unkToken === -1 && (this.unkToken = this.vocab.indexOf("_")), this.unkToken === -1 && (this.unkToken = this.vocab.indexOf(" ")), this.unkToken === -1 && (this.unkToken = this.eosToken), this.vocab = this.vocab.map((e) => e === "<pad>" ? "" : e), this.vocab.forEach((e, t) => {
|
package/dist/tokeniser/bpe.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { yieldIfNeeded as e } from "../utilities/yielder.js";
|
|
2
|
-
import
|
|
2
|
+
import t, { SPECIALS as n } from "./BaseTokeniser.js";
|
|
3
3
|
import r from "../utilities/tokenParse.js";
|
|
4
4
|
//#region lib/tokeniser/bpe.ts
|
|
5
5
|
function i(e, t) {
|
|
@@ -58,16 +58,16 @@ function l(e, t) {
|
|
|
58
58
|
e.tokens[n] = i;
|
|
59
59
|
}), e.pairs.delete(i(t.a, t.b));
|
|
60
60
|
}
|
|
61
|
-
var u = class extends
|
|
61
|
+
var u = class extends t {
|
|
62
62
|
targetSize;
|
|
63
63
|
vocab = /* @__PURE__ */ new Set();
|
|
64
64
|
vocabIndex = /* @__PURE__ */ new Map();
|
|
65
65
|
merges = [];
|
|
66
66
|
pretokenMap = /* @__PURE__ */ new Map();
|
|
67
|
-
constructor(e,
|
|
67
|
+
constructor(e, t) {
|
|
68
68
|
super(), Array.isArray(e) ? (e.forEach((e, t) => {
|
|
69
69
|
this.vocab.add(e), this.vocabIndex.set(e, t);
|
|
70
|
-
}),
|
|
70
|
+
}), t && (this.merges = t), this.targetSize = e.length, n.forEach((t) => {
|
|
71
71
|
let n = e.indexOf(t);
|
|
72
72
|
n !== -1 && this.addSpecialToken(t, n);
|
|
73
73
|
})) : (this.addSpecialTokens(), this.targetSize = e);
|
|
@@ -84,7 +84,7 @@ var u = class extends n {
|
|
|
84
84
|
this.vocab.clear(), this.vocabIndex.clear(), this.merges = [], this.pretokenMap.clear();
|
|
85
85
|
}
|
|
86
86
|
get trained() {
|
|
87
|
-
return this.vocab.size >
|
|
87
|
+
return this.vocab.size > n.length && this.vocab.size <= this.targetSize;
|
|
88
88
|
}
|
|
89
89
|
get vocabSize() {
|
|
90
90
|
return this.vocab.size;
|
|
@@ -101,18 +101,18 @@ var u = class extends n {
|
|
|
101
101
|
async train(t = [], n, i) {
|
|
102
102
|
this.datasetID = i;
|
|
103
103
|
let o = performance.now(), c = /* @__PURE__ */ new Set();
|
|
104
|
+
this.vocab = /* @__PURE__ */ new Set(), this.pretokenMap.clear(), this.merges = [], this.addSpecialTokens();
|
|
104
105
|
for (let i of t) {
|
|
105
106
|
let t = i.cursor(), a = await t.next();
|
|
106
107
|
for (; a !== null;) {
|
|
107
108
|
for (let e of a) {
|
|
108
109
|
let t = r(e.content);
|
|
109
|
-
for (let e of t) c.add(e);
|
|
110
|
+
for (let e of t) c.has(e) || (c.add(e), Array.from(e).forEach((e) => this.vocab.add(e)));
|
|
110
111
|
}
|
|
111
112
|
o = await e(o, n, this.vocab.size), a = await t.next();
|
|
112
113
|
}
|
|
113
114
|
}
|
|
114
|
-
|
|
115
|
-
let u = Array.from(c), d = u.map((e) => Array.from(e).map((e) => (this.vocab.add(e), e))), f = a(d);
|
|
115
|
+
let u = Array.from(c), d = u.map((e) => Array.from(e)), f = a(d);
|
|
116
116
|
if (o = await e(o, n, this.vocab.size), this.vocab.size >= this.targetSize) throw console.warn("Initial vocab size is greater than or equal to target size. No merges will be performed.", this.vocab.size, this.targetSize), Error("too_small_vocab");
|
|
117
117
|
for (; this.vocab.size < this.targetSize && this.merges.length < this.targetSize;) {
|
|
118
118
|
let t = s(f);
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { Tensor } from '@tensorflow/tfjs-core';
|
|
2
2
|
import { Conversation, ITokeniser } from '../tokeniser/type';
|
|
3
3
|
import { Dataset } from '@tensorflow/tfjs-data';
|
|
4
|
+
import { TokenStore } from './tasks/TokenStore';
|
|
4
5
|
export declare function flattenTokens(textData: Conversation[][], tokenizer: ITokeniser): Uint16Array;
|
|
5
6
|
export declare function flattenTokensWithMask(textData: Conversation[][], tokenizer: ITokeniser): {
|
|
6
7
|
tokens: Uint16Array;
|
|
@@ -8,14 +9,28 @@ export declare function flattenTokensWithMask(textData: Conversation[][], tokeni
|
|
|
8
9
|
};
|
|
9
10
|
export declare function shuffle(array: Uint32Array): Uint32Array;
|
|
10
11
|
export interface DatasetState {
|
|
12
|
+
shuffledShards: Uint32Array;
|
|
11
13
|
shuffledIndexes: Uint32Array;
|
|
14
|
+
lastShardIndexes: Uint32Array;
|
|
15
|
+
currentShard: Uint16Array | null;
|
|
16
|
+
nextShard: Uint16Array | null;
|
|
17
|
+
currentMask: Uint8Array | null;
|
|
18
|
+
nextMask: Uint8Array | null;
|
|
19
|
+
shardIndex: number;
|
|
12
20
|
step: number;
|
|
13
21
|
}
|
|
22
|
+
export declare function moveToNext(state: DatasetState, store: TokenStore, noShuffle?: boolean): Promise<void>;
|
|
23
|
+
interface DatasetOptions {
|
|
24
|
+
batchSize: number;
|
|
25
|
+
noShuffle?: boolean;
|
|
26
|
+
ignoreIndex?: number;
|
|
27
|
+
shuffleFirst?: boolean;
|
|
28
|
+
}
|
|
14
29
|
export declare class DatasetBuilder {
|
|
15
30
|
tokenizer: ITokeniser;
|
|
16
31
|
blockSize: number;
|
|
17
32
|
constructor(tokenizer: ITokeniser, blockSize?: number);
|
|
18
|
-
createTextDataset(
|
|
33
|
+
createTextDataset(store: TokenStore, options?: DatasetOptions): Promise<{
|
|
19
34
|
dataset: Dataset<{
|
|
20
35
|
xs: Tensor;
|
|
21
36
|
ys: Tensor;
|
|
@@ -23,3 +38,4 @@ export declare class DatasetBuilder {
|
|
|
23
38
|
state: DatasetState;
|
|
24
39
|
}>;
|
|
25
40
|
}
|
|
41
|
+
export {};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export {
|
|
1
|
+
import { a as e, i as t, n, r, t as i } from "../DatasetBuilder-C0iJT29K.js";
|
|
2
|
+
export { i as DatasetBuilder, n as flattenTokens, r as flattenTokensWithMask, t as moveToNext, e as shuffle };
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Conversation, ITokeniser } from '../../../main';
|
|
2
|
+
import { TokenStore } from './TokenStore';
|
|
2
3
|
export declare abstract class Task {
|
|
3
4
|
abstract get length(): number;
|
|
4
5
|
abstract hasMoreConversations(): boolean;
|
|
@@ -13,8 +14,16 @@ export declare abstract class Task {
|
|
|
13
14
|
mask: boolean[];
|
|
14
15
|
} | null>;
|
|
15
16
|
}
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
17
|
+
interface TokensFromTasksOptions {
|
|
18
|
+
masking?: boolean;
|
|
19
|
+
maxCachedShards?: number;
|
|
20
|
+
noOPFS?: boolean;
|
|
21
|
+
shardSize?: number;
|
|
22
|
+
validationSplit?: number;
|
|
23
|
+
cb?: (tokens: number) => void;
|
|
24
|
+
}
|
|
25
|
+
export declare function tokensFromTasks(tasks: Task[], tokenizer: ITokeniser, options?: TokensFromTasksOptions): Promise<{
|
|
26
|
+
trainingTokens: TokenStore;
|
|
27
|
+
validationTokens?: TokenStore;
|
|
20
28
|
}>;
|
|
29
|
+
export {};
|
|
@@ -1,7 +1,8 @@
|
|
|
1
1
|
import { yieldIfNeeded as e } from "../../utilities/yielder.js";
|
|
2
|
+
import { createTokenStore as t, deleteTokenStore as n } from "./TokenStore.js";
|
|
2
3
|
//#region lib/training/tasks/Task.ts
|
|
3
|
-
var
|
|
4
|
-
async function
|
|
4
|
+
var r = class {};
|
|
5
|
+
async function i(e, t, n, r, i, a) {
|
|
5
6
|
for (let o of e) {
|
|
6
7
|
let e = await o.nextTokens(n, a ? !0 : void 0);
|
|
7
8
|
if (e) {
|
|
@@ -24,19 +25,26 @@ async function n(e, t, n, r, i, a) {
|
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
}
|
|
27
|
-
async function
|
|
28
|
-
|
|
28
|
+
async function a(r, a, o) {
|
|
29
|
+
await n("training-tokens");
|
|
30
|
+
let s = await t("training-tokens", a.id, a.datasetID ?? "", o);
|
|
31
|
+
await n("validation-tokens");
|
|
32
|
+
let c = o?.validationSplit && o.validationSplit > 0 ? await t("validation-tokens", a.id, a.datasetID ?? "", o) : void 0, l = [new Uint16Array(s.shardSize)], u = o?.masking ? [new Uint8Array(s.shardSize)] : null, d = {
|
|
29
33
|
offset: 0,
|
|
30
34
|
total: 0
|
|
31
|
-
},
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
}
|
|
35
|
+
}, f = o?.validationSplit && o.validationSplit > 0 ? [new Uint16Array(c.shardSize)] : void 0, p = o?.masking && f ? [new Uint8Array(c.shardSize)] : null, m = {
|
|
36
|
+
offset: 0,
|
|
37
|
+
total: 0
|
|
38
|
+
}, h = performance.now();
|
|
39
|
+
for (;;) {
|
|
40
|
+
let t = o?.validationSplit && o.validationSplit > 0 && Math.random() < o.validationSplit, n = t ? f : l, g = t ? m : d, _ = t ? p : u, v = t ? c : s;
|
|
41
|
+
if (await i(r, n, a, g, v.shardSize, _ || void 0), n.length > 1 && (v.appendShard(n[0], _ ? _[0] : void 0), n.shift(), _ && _.shift()), r.every((e) => !e.hasMoreConversations())) break;
|
|
42
|
+
h = await e(h, o?.cb, d.total);
|
|
43
|
+
}
|
|
44
|
+
return l.length === 1 && (l[0] = l[0].subarray(0, d.offset), await s.appendShard(l[0], u ? u[0].subarray(0, d.offset) : void 0)), f && f.length === 1 && (f[0] = f[0].subarray(0, m.offset), await c.appendShard(f[0], p ? p[0].subarray(0, m.offset) : void 0)), {
|
|
45
|
+
trainingTokens: s,
|
|
46
|
+
validationTokens: f ? c : void 0
|
|
47
|
+
};
|
|
40
48
|
}
|
|
41
49
|
//#endregion
|
|
42
|
-
export {
|
|
50
|
+
export { r as Task, a as tokensFromTasks };
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
export declare class TokenStore {
|
|
2
|
+
readonly name: string;
|
|
3
|
+
readonly tokeniserId: string;
|
|
4
|
+
readonly datasetId: string;
|
|
5
|
+
private shards;
|
|
6
|
+
private masks?;
|
|
7
|
+
private shardCount;
|
|
8
|
+
private lastShardLength;
|
|
9
|
+
private _shardSize;
|
|
10
|
+
private dirHandle;
|
|
11
|
+
private opfsAvailable;
|
|
12
|
+
private lru;
|
|
13
|
+
private maxCachedShards;
|
|
14
|
+
constructor(tokeniserId: string, datasetId: string, name?: string, maxCachedShards?: number, shardSize?: number);
|
|
15
|
+
get shardSize(): number;
|
|
16
|
+
hasMask(): boolean;
|
|
17
|
+
getShardLength(index: number): number;
|
|
18
|
+
slice(start: number, end: number): Promise<Uint16Array>;
|
|
19
|
+
init(): Promise<void>;
|
|
20
|
+
private writeManifest;
|
|
21
|
+
private readManifest;
|
|
22
|
+
private shardFilename;
|
|
23
|
+
private maskFilename;
|
|
24
|
+
private writeShardToOPFS;
|
|
25
|
+
private writeMaskToOPFS;
|
|
26
|
+
private readShardFromOPFS;
|
|
27
|
+
private readMaskFromOPFS;
|
|
28
|
+
private touchLRU;
|
|
29
|
+
private evictIfNeeded;
|
|
30
|
+
getShard(index: number): Promise<Uint16Array>;
|
|
31
|
+
getMask(index: number): Promise<Uint8Array | undefined>;
|
|
32
|
+
getShardCount(): number;
|
|
33
|
+
getTokenCount(): number;
|
|
34
|
+
appendShard(shard: Uint16Array, mask?: Uint8Array): Promise<void>;
|
|
35
|
+
dispose(): Promise<void>;
|
|
36
|
+
clear(): Promise<void>;
|
|
37
|
+
}
|
|
38
|
+
export declare function getTokenStore(name: string, tokeniserId: string, datasetId: string): TokenStore | null;
|
|
39
|
+
export declare function deleteTokenStore(name: string): Promise<void>;
|
|
40
|
+
interface TokenStoreOptions {
|
|
41
|
+
maxCachedShards?: number;
|
|
42
|
+
shardSize?: number;
|
|
43
|
+
noOPFS?: boolean;
|
|
44
|
+
}
|
|
45
|
+
export declare function createTokenStore(name: string, tokeniserId: string, datasetId: string, options?: TokenStoreOptions): Promise<TokenStore>;
|
|
46
|
+
export {};
|