@genai-fi/nanogpt 0.23.0 → 1.0.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/README.md +78 -281
- package/dist/{DatasetBuilder-C0iJT29K.js → DatasetBuilder-DU1G1OKX.js} +20 -23
- package/dist/{RealDiv-CNsvC4AU.js → RealDiv-CSnvtN2E.js} +20 -20
- package/dist/{Reshape-dnm9bO3B.js → Reshape-BlylqwWy.js} +12 -12
- package/dist/TeachableLLM.d.ts +10 -15
- package/dist/TeachableLLM.js +201 -2
- package/dist/api/responses.d.ts +81 -0
- package/dist/api/responses.js +169 -0
- package/dist/api/training.d.ts +70 -0
- package/dist/api/training.js +205 -0
- package/dist/data/docx.js +9 -3036
- package/dist/data/stream.d.ts +8 -8
- package/dist/data/stream.js +1 -1
- package/dist/data/textLoader.d.ts +1 -1
- package/dist/data/textLoader.js +2 -2
- package/dist/data.d.ts +3 -0
- package/dist/data.js +12 -0
- package/dist/{dist-BqAU9-yi.js → dist-CwK5S7Ls.js} +2168 -2168
- package/dist/{gpgpu_math-DBYEAAdI.js → gpgpu_math-20tPK8LM.js} +458 -458
- package/dist/{Generator.d.ts → inference/Generator.d.ts} +16 -44
- package/dist/inference/Generator.js +271 -0
- package/dist/inference/tokenisePrompt.d.ts +4 -0
- package/dist/inference/tokenisePrompt.js +13 -0
- package/dist/inference/types.d.ts +44 -8
- package/dist/inference/utilities.d.ts +9 -0
- package/dist/inference/utilities.js +20 -0
- package/dist/jszip.min-DKa1Rjyn.js +3033 -0
- package/dist/{kernel_funcs_utils-D-mATnGR.js → kernel_funcs_utils-ql8Y8qPn.js} +96 -93
- package/dist/layers/MLP.d.ts +1 -1
- package/dist/layers/PositionEmbedding.d.ts +2 -1
- package/dist/layers/PositionEmbedding.js +1 -1
- package/dist/layers/RMSNorm.d.ts +1 -1
- package/dist/layers/TiedEmbedding.js +1 -1
- package/dist/layers.d.ts +4 -0
- package/dist/layers.js +14 -0
- package/dist/loader/load.js +58 -2
- package/dist/loader/loadHF.d.ts +1 -1
- package/dist/loader/loadHF.js +17 -2
- package/dist/loader/loadTransformers.js +46 -2
- package/dist/loader/newZipLoad.js +25 -2
- package/dist/loader/oldZipLoad.d.ts +1 -1
- package/dist/loader/oldZipLoad.js +37 -2
- package/dist/loader/save.js +75 -2
- package/dist/loader/types.d.ts +3 -3
- package/dist/main.d.ts +34 -43
- package/dist/main.js +12327 -20
- package/dist/{matMulGelu-BAIgQaRx.js → matMulGelu-CBoqTZM7.js} +2 -2
- package/dist/models/NanoGPTV1.js +95 -2
- package/dist/models/NanoGPTV2.js +86 -2
- package/dist/models/factory.js +13 -2
- package/dist/models/model.js +76 -2
- package/dist/models.d.ts +4 -0
- package/dist/models.js +14 -0
- package/dist/ops/dot16.js +1 -1
- package/dist/ops/matMulGelu.js +1 -1
- package/dist/ops/webgl/adamAdjust.js +1 -1
- package/dist/ops/webgl/fusedSoftmax.js +2 -2
- package/dist/ops/webgl/gelu.js +2 -2
- package/dist/ops/webgl/log.js +5 -5
- package/dist/ops/webgl/matMulGelu.js +1 -1
- package/dist/ops/webgl/matMulMul.js +1 -1
- package/dist/{stream-BjdpSNqB.js → stream-BpAwcvHz.js} +565 -561
- package/dist/{tfjs_backend-CydPRQTc.js → tfjs_backend-h5weiy1O.js} +36 -36
- package/dist/tokenise.d.ts +4 -0
- package/dist/tokenise.js +15 -0
- package/dist/tokeniser/CharTokeniser.js +18 -20
- package/dist/tokeniser/bpe.js +18 -22
- package/dist/training/BasicTrainer.d.ts +5 -10
- package/dist/training/BasicTrainer.js +80 -88
- package/dist/training/DatasetBuilder.d.ts +4 -4
- package/dist/training/DatasetBuilder.js +1 -1
- package/dist/training/PreTrainer.js +1 -1
- package/dist/training/SFTTrainer.js +1 -1
- package/dist/training/configure.d.ts +3 -0
- package/dist/training/configure.js +32 -0
- package/dist/training/factory.d.ts +6 -0
- package/dist/training/factory.js +8 -0
- package/dist/training/prepareData.d.ts +22 -0
- package/dist/training/prepareData.js +49 -0
- package/dist/training/tasks/TokenStore.d.ts +2 -1
- package/dist/training/tasks/TokenStore.js +8 -5
- package/dist/training/tasks/tokenStream.d.ts +17 -0
- package/dist/training/tasks/tokenStream.js +46 -0
- package/dist/training/types.d.ts +14 -1
- package/dist/training/validateOptions.d.ts +2 -0
- package/dist/training/validateOptions.js +19 -0
- package/dist/training/validation.js +4 -2
- package/dist/utilities/arrayShape.d.ts +1 -0
- package/dist/utilities/arrayShape.js +8 -0
- package/dist/utilities/random.d.ts +1 -0
- package/dist/utilities/random.js +19 -0
- package/dist/utilities/waitForModel.d.ts +1 -1
- package/dist/v4-BK7K-jy_.js +30 -0
- package/package.json +8 -2
- package/dist/Generator.js +0 -2
- package/dist/Trainer-DBsyWJ4s.js +0 -228
- package/dist/Trainer.d.ts +0 -45
- package/dist/Trainer.js +0 -2
- package/dist/main-BSaDGH7I.js +0 -13274
- package/dist/training/tasks/ConversationTask.d.ts +0 -17
- package/dist/training/tasks/ConversationTask.js +0 -29
- package/dist/training/tasks/PretrainingTask.d.ts +0 -17
- package/dist/training/tasks/PretrainingTask.js +0 -42
- package/dist/training/tasks/StartSentenceTask.d.ts +0 -18
- package/dist/training/tasks/StartSentenceTask.js +0 -45
- package/dist/training/tasks/Task.d.ts +0 -29
- package/dist/training/tasks/Task.js +0 -50
- package/dist/training/tasks/splitter.d.ts +0 -5
- package/dist/training/tasks/splitter.js +0 -18
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Conversation, ConversationStream, ITokeniser } from '../../../main';
|
|
2
|
-
import { Task } from './Task';
|
|
3
|
-
export default class ConversationTask extends Task {
|
|
4
|
-
private streams;
|
|
5
|
-
private streamIndex;
|
|
6
|
-
private currentCursor;
|
|
7
|
-
get length(): number;
|
|
8
|
-
constructor(conversations: ConversationStream[]);
|
|
9
|
-
hasMoreConversations(): boolean;
|
|
10
|
-
nextConversation(): Promise<Conversation[] | null>;
|
|
11
|
-
nextTokens(tokeniser: ITokeniser): Promise<number[] | null>;
|
|
12
|
-
nextTokens(tokeniser: ITokeniser, masking: boolean): Promise<{
|
|
13
|
-
tokens: number[];
|
|
14
|
-
mask: boolean[];
|
|
15
|
-
} | null>;
|
|
16
|
-
estimateTokens(tokeniser: ITokeniser): Promise<number>;
|
|
17
|
-
}
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Task as e } from "./Task.js";
|
|
2
|
-
//#region lib/training/tasks/ConversationTask.ts
|
|
3
|
-
var t = class extends e {
|
|
4
|
-
streams;
|
|
5
|
-
streamIndex = 0;
|
|
6
|
-
currentCursor = null;
|
|
7
|
-
get length() {
|
|
8
|
-
return this.streams.length;
|
|
9
|
-
}
|
|
10
|
-
constructor(e) {
|
|
11
|
-
super(), this.streams = e;
|
|
12
|
-
}
|
|
13
|
-
hasMoreConversations() {
|
|
14
|
-
return this.streamIndex < this.streams.length;
|
|
15
|
-
}
|
|
16
|
-
async nextConversation() {
|
|
17
|
-
return this.streamIndex < this.streams.length ? (this.currentCursor ||= this.streams[this.streamIndex].cursor(), await this.currentCursor.next() || (this.streamIndex++, this.currentCursor = null, this.nextConversation())) : null;
|
|
18
|
-
}
|
|
19
|
-
async nextTokens(e, t) {
|
|
20
|
-
let n = await this.nextConversation();
|
|
21
|
-
return n ? e.encodeConversation(n, !1, t) : null;
|
|
22
|
-
}
|
|
23
|
-
async estimateTokens(e) {
|
|
24
|
-
let t = await this.streams[0].cursor().next();
|
|
25
|
-
return t ? e.encodeConversation(t).length * this.length : 0;
|
|
26
|
-
}
|
|
27
|
-
};
|
|
28
|
-
//#endregion
|
|
29
|
-
export { t as default };
|
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
import { Conversation, ITokeniser } from '../../../main';
|
|
2
|
-
import { Task } from './Task';
|
|
3
|
-
export default class PretrainingTask extends Task {
|
|
4
|
-
private rawText;
|
|
5
|
-
private index;
|
|
6
|
-
get length(): number;
|
|
7
|
-
constructor(texts: string[]);
|
|
8
|
-
hasMoreConversations(): boolean;
|
|
9
|
-
nextConversation(): Promise<Conversation[] | null>;
|
|
10
|
-
nextTokens(tokeniser: ITokeniser): Promise<number[] | null>;
|
|
11
|
-
nextTokens(tokeniser: ITokeniser, masking: boolean): Promise<{
|
|
12
|
-
tokens: number[];
|
|
13
|
-
mask: boolean[];
|
|
14
|
-
} | null>;
|
|
15
|
-
shuffle(): void;
|
|
16
|
-
estimateTokens(tokeniser: ITokeniser): Promise<number>;
|
|
17
|
-
}
|
|
@@ -1,42 +0,0 @@
|
|
|
1
|
-
import { Task as e } from "./Task.js";
|
|
2
|
-
//#region lib/training/tasks/PretrainingTask.ts
|
|
3
|
-
var t = class extends e {
|
|
4
|
-
rawText;
|
|
5
|
-
index = 0;
|
|
6
|
-
get length() {
|
|
7
|
-
return this.rawText.length;
|
|
8
|
-
}
|
|
9
|
-
constructor(e) {
|
|
10
|
-
super(), this.rawText = e;
|
|
11
|
-
}
|
|
12
|
-
hasMoreConversations() {
|
|
13
|
-
return this.index < this.rawText.length;
|
|
14
|
-
}
|
|
15
|
-
async nextConversation() {
|
|
16
|
-
if (this.index >= this.rawText.length) return null;
|
|
17
|
-
let e = {
|
|
18
|
-
role: "assistant",
|
|
19
|
-
content: this.rawText[this.index]
|
|
20
|
-
};
|
|
21
|
-
return this.index++, [e];
|
|
22
|
-
}
|
|
23
|
-
async nextTokens(e, t) {
|
|
24
|
-
if (this.index >= this.rawText.length) return null;
|
|
25
|
-
let n = e.encodeSequence(this.rawText[this.index]);
|
|
26
|
-
return this.index++, t ? {
|
|
27
|
-
tokens: n,
|
|
28
|
-
mask: Array(n.length).fill(!0)
|
|
29
|
-
} : n;
|
|
30
|
-
}
|
|
31
|
-
shuffle() {
|
|
32
|
-
this.index = 0;
|
|
33
|
-
}
|
|
34
|
-
async estimateTokens(e) {
|
|
35
|
-
return e.encodeConversation([{
|
|
36
|
-
role: "assistant",
|
|
37
|
-
content: this.rawText[0]
|
|
38
|
-
}]).length * this.length;
|
|
39
|
-
}
|
|
40
|
-
};
|
|
41
|
-
//#endregion
|
|
42
|
-
export { t as default };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { Conversation, ITokeniser } from '../../../main';
|
|
2
|
-
import { Task } from './Task';
|
|
3
|
-
export default class StartSentenceTask extends Task {
|
|
4
|
-
private rawText;
|
|
5
|
-
private index;
|
|
6
|
-
get length(): number;
|
|
7
|
-
constructor(texts: string[]);
|
|
8
|
-
hasMoreConversations(): boolean;
|
|
9
|
-
nextConversation(): Promise<Conversation[] | null>;
|
|
10
|
-
nextTokens(tokeniser: ITokeniser): Promise<number[] | null>;
|
|
11
|
-
nextTokens(tokeniser: ITokeniser, masking: boolean): Promise<{
|
|
12
|
-
tokens: number[];
|
|
13
|
-
mask: boolean[];
|
|
14
|
-
} | null>;
|
|
15
|
-
shuffle(): void;
|
|
16
|
-
private conversationFromString;
|
|
17
|
-
estimateTokens(tokeniser: ITokeniser): Promise<number>;
|
|
18
|
-
}
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
import { Task as e } from "./Task.js";
|
|
2
|
-
//#region lib/training/tasks/StartSentenceTask.ts
|
|
3
|
-
var t = class extends e {
|
|
4
|
-
rawText;
|
|
5
|
-
index = 0;
|
|
6
|
-
get length() {
|
|
7
|
-
return this.rawText.length;
|
|
8
|
-
}
|
|
9
|
-
constructor(e) {
|
|
10
|
-
super(), this.rawText = e;
|
|
11
|
-
}
|
|
12
|
-
hasMoreConversations() {
|
|
13
|
-
return this.index < this.rawText.length;
|
|
14
|
-
}
|
|
15
|
-
async nextConversation() {
|
|
16
|
-
if (this.index >= this.rawText.length) return null;
|
|
17
|
-
let e = this.rawText[this.index];
|
|
18
|
-
return this.index++, this.conversationFromString(e);
|
|
19
|
-
}
|
|
20
|
-
async nextTokens(e, t) {
|
|
21
|
-
let n = await this.nextConversation();
|
|
22
|
-
return n ? e.encodeConversation(n, !1, t) : null;
|
|
23
|
-
}
|
|
24
|
-
shuffle() {
|
|
25
|
-
this.index = 0;
|
|
26
|
-
}
|
|
27
|
-
conversationFromString(e) {
|
|
28
|
-
let t = e.indexOf(".");
|
|
29
|
-
return t === -1 ? [{
|
|
30
|
-
role: "assistant",
|
|
31
|
-
content: this.rawText[this.index]
|
|
32
|
-
}] : [{
|
|
33
|
-
role: "user",
|
|
34
|
-
content: e.slice(0, t + 1).trim()
|
|
35
|
-
}, {
|
|
36
|
-
role: "assistant",
|
|
37
|
-
content: e.slice(t + 1).trim()
|
|
38
|
-
}];
|
|
39
|
-
}
|
|
40
|
-
async estimateTokens(e) {
|
|
41
|
-
return (await e.encodeConversation(this.conversationFromString(this.rawText[0]))).length * this.length;
|
|
42
|
-
}
|
|
43
|
-
};
|
|
44
|
-
//#endregion
|
|
45
|
-
export { t as default };
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
import { Conversation, ITokeniser } from '../../../main';
|
|
2
|
-
import { TokenStore } from './TokenStore';
|
|
3
|
-
export declare abstract class Task {
|
|
4
|
-
abstract get length(): number;
|
|
5
|
-
abstract hasMoreConversations(): boolean;
|
|
6
|
-
abstract nextConversation(): Promise<Conversation[] | null>;
|
|
7
|
-
abstract nextTokens(tokeniser: ITokeniser): Promise<number[] | null>;
|
|
8
|
-
abstract nextTokens(tokeniser: ITokeniser, masking: boolean): Promise<{
|
|
9
|
-
tokens: number[];
|
|
10
|
-
mask: boolean[];
|
|
11
|
-
} | null>;
|
|
12
|
-
abstract nextTokens(tokeniser: ITokeniser, masking?: boolean): Promise<number[] | {
|
|
13
|
-
tokens: number[];
|
|
14
|
-
mask: boolean[];
|
|
15
|
-
} | null>;
|
|
16
|
-
}
|
|
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;
|
|
28
|
-
}>;
|
|
29
|
-
export {};
|
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
import { yieldIfNeeded as e } from "../../utilities/yielder.js";
|
|
2
|
-
import { createTokenStore as t, deleteTokenStore as n } from "./TokenStore.js";
|
|
3
|
-
//#region lib/training/tasks/Task.ts
|
|
4
|
-
var r = class {};
|
|
5
|
-
async function i(e, t, n, r, i, a) {
|
|
6
|
-
for (let o of e) {
|
|
7
|
-
let e = await o.nextTokens(n, a ? !0 : void 0);
|
|
8
|
-
if (e) {
|
|
9
|
-
let n = Array.isArray(e) ? e : e.tokens;
|
|
10
|
-
r.total += n.length;
|
|
11
|
-
let o = t[t.length - 1], s = a ? a[a.length - 1] : null;
|
|
12
|
-
if (r.offset + n.length > o.length) {
|
|
13
|
-
let c = o.length - r.offset;
|
|
14
|
-
o.set(n.slice(0, c), r.offset);
|
|
15
|
-
let l = n.length - c;
|
|
16
|
-
if (l > i) throw Error(`Estimated tokens (${i}) is too small for the next batch of tokens (${l}).`);
|
|
17
|
-
let u = new Uint16Array(i);
|
|
18
|
-
if (u.set(n.slice(c), 0), t.push(u), a && s && !Array.isArray(e)) {
|
|
19
|
-
s.set(e.mask.slice(0, c).map((e) => +!!e), r.offset);
|
|
20
|
-
let t = new Uint8Array(u.length);
|
|
21
|
-
t.set(e.mask.slice(c).map((e) => +!!e), 0), a.push(t);
|
|
22
|
-
}
|
|
23
|
-
r.offset = n.length - c;
|
|
24
|
-
} else o.set(n, r.offset), s && !Array.isArray(e) && s.set(e.mask.map((e) => +!!e), r.offset), r.offset += n.length;
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
}
|
|
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 = {
|
|
33
|
-
offset: 0,
|
|
34
|
-
total: 0
|
|
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
|
-
};
|
|
48
|
-
}
|
|
49
|
-
//#endregion
|
|
50
|
-
export { r as Task, a as tokensFromTasks };
|
|
@@ -1,18 +0,0 @@
|
|
|
1
|
-
import { n as e } from "../../stream-BjdpSNqB.js";
|
|
2
|
-
import t from "./ConversationTask.js";
|
|
3
|
-
//#region lib/training/tasks/splitter.ts
|
|
4
|
-
async function n(n, r) {
|
|
5
|
-
if (r <= 0 || r >= 1) throw Error("validationSplit must be between 0 and 1");
|
|
6
|
-
let i = [], a = [];
|
|
7
|
-
for (let e of n) for (; e.hasMoreConversations();) {
|
|
8
|
-
let t = await e.nextConversation();
|
|
9
|
-
if (!t) break;
|
|
10
|
-
Math.random() < r ? a.push(t) : i.push(t);
|
|
11
|
-
}
|
|
12
|
-
return {
|
|
13
|
-
training: new t([new e(i)]),
|
|
14
|
-
validation: new t([new e(a)])
|
|
15
|
-
};
|
|
16
|
-
}
|
|
17
|
-
//#endregion
|
|
18
|
-
export { n as default };
|