@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.
Files changed (109) hide show
  1. package/README.md +78 -281
  2. package/dist/{DatasetBuilder-C0iJT29K.js → DatasetBuilder-DU1G1OKX.js} +20 -23
  3. package/dist/{RealDiv-CNsvC4AU.js → RealDiv-CSnvtN2E.js} +20 -20
  4. package/dist/{Reshape-dnm9bO3B.js → Reshape-BlylqwWy.js} +12 -12
  5. package/dist/TeachableLLM.d.ts +10 -15
  6. package/dist/TeachableLLM.js +201 -2
  7. package/dist/api/responses.d.ts +81 -0
  8. package/dist/api/responses.js +169 -0
  9. package/dist/api/training.d.ts +70 -0
  10. package/dist/api/training.js +205 -0
  11. package/dist/data/docx.js +9 -3036
  12. package/dist/data/stream.d.ts +8 -8
  13. package/dist/data/stream.js +1 -1
  14. package/dist/data/textLoader.d.ts +1 -1
  15. package/dist/data/textLoader.js +2 -2
  16. package/dist/data.d.ts +3 -0
  17. package/dist/data.js +12 -0
  18. package/dist/{dist-BqAU9-yi.js → dist-CwK5S7Ls.js} +2168 -2168
  19. package/dist/{gpgpu_math-DBYEAAdI.js → gpgpu_math-20tPK8LM.js} +458 -458
  20. package/dist/{Generator.d.ts → inference/Generator.d.ts} +16 -44
  21. package/dist/inference/Generator.js +271 -0
  22. package/dist/inference/tokenisePrompt.d.ts +4 -0
  23. package/dist/inference/tokenisePrompt.js +13 -0
  24. package/dist/inference/types.d.ts +44 -8
  25. package/dist/inference/utilities.d.ts +9 -0
  26. package/dist/inference/utilities.js +20 -0
  27. package/dist/jszip.min-DKa1Rjyn.js +3033 -0
  28. package/dist/{kernel_funcs_utils-D-mATnGR.js → kernel_funcs_utils-ql8Y8qPn.js} +96 -93
  29. package/dist/layers/MLP.d.ts +1 -1
  30. package/dist/layers/PositionEmbedding.d.ts +2 -1
  31. package/dist/layers/PositionEmbedding.js +1 -1
  32. package/dist/layers/RMSNorm.d.ts +1 -1
  33. package/dist/layers/TiedEmbedding.js +1 -1
  34. package/dist/layers.d.ts +4 -0
  35. package/dist/layers.js +14 -0
  36. package/dist/loader/load.js +58 -2
  37. package/dist/loader/loadHF.d.ts +1 -1
  38. package/dist/loader/loadHF.js +17 -2
  39. package/dist/loader/loadTransformers.js +46 -2
  40. package/dist/loader/newZipLoad.js +25 -2
  41. package/dist/loader/oldZipLoad.d.ts +1 -1
  42. package/dist/loader/oldZipLoad.js +37 -2
  43. package/dist/loader/save.js +75 -2
  44. package/dist/loader/types.d.ts +3 -3
  45. package/dist/main.d.ts +34 -43
  46. package/dist/main.js +12327 -20
  47. package/dist/{matMulGelu-BAIgQaRx.js → matMulGelu-CBoqTZM7.js} +2 -2
  48. package/dist/models/NanoGPTV1.js +95 -2
  49. package/dist/models/NanoGPTV2.js +86 -2
  50. package/dist/models/factory.js +13 -2
  51. package/dist/models/model.js +76 -2
  52. package/dist/models.d.ts +4 -0
  53. package/dist/models.js +14 -0
  54. package/dist/ops/dot16.js +1 -1
  55. package/dist/ops/matMulGelu.js +1 -1
  56. package/dist/ops/webgl/adamAdjust.js +1 -1
  57. package/dist/ops/webgl/fusedSoftmax.js +2 -2
  58. package/dist/ops/webgl/gelu.js +2 -2
  59. package/dist/ops/webgl/log.js +5 -5
  60. package/dist/ops/webgl/matMulGelu.js +1 -1
  61. package/dist/ops/webgl/matMulMul.js +1 -1
  62. package/dist/{stream-BjdpSNqB.js → stream-BpAwcvHz.js} +565 -561
  63. package/dist/{tfjs_backend-CydPRQTc.js → tfjs_backend-h5weiy1O.js} +36 -36
  64. package/dist/tokenise.d.ts +4 -0
  65. package/dist/tokenise.js +15 -0
  66. package/dist/tokeniser/CharTokeniser.js +18 -20
  67. package/dist/tokeniser/bpe.js +18 -22
  68. package/dist/training/BasicTrainer.d.ts +5 -10
  69. package/dist/training/BasicTrainer.js +80 -88
  70. package/dist/training/DatasetBuilder.d.ts +4 -4
  71. package/dist/training/DatasetBuilder.js +1 -1
  72. package/dist/training/PreTrainer.js +1 -1
  73. package/dist/training/SFTTrainer.js +1 -1
  74. package/dist/training/configure.d.ts +3 -0
  75. package/dist/training/configure.js +32 -0
  76. package/dist/training/factory.d.ts +6 -0
  77. package/dist/training/factory.js +8 -0
  78. package/dist/training/prepareData.d.ts +22 -0
  79. package/dist/training/prepareData.js +49 -0
  80. package/dist/training/tasks/TokenStore.d.ts +2 -1
  81. package/dist/training/tasks/TokenStore.js +8 -5
  82. package/dist/training/tasks/tokenStream.d.ts +17 -0
  83. package/dist/training/tasks/tokenStream.js +46 -0
  84. package/dist/training/types.d.ts +14 -1
  85. package/dist/training/validateOptions.d.ts +2 -0
  86. package/dist/training/validateOptions.js +19 -0
  87. package/dist/training/validation.js +4 -2
  88. package/dist/utilities/arrayShape.d.ts +1 -0
  89. package/dist/utilities/arrayShape.js +8 -0
  90. package/dist/utilities/random.d.ts +1 -0
  91. package/dist/utilities/random.js +19 -0
  92. package/dist/utilities/waitForModel.d.ts +1 -1
  93. package/dist/v4-BK7K-jy_.js +30 -0
  94. package/package.json +8 -2
  95. package/dist/Generator.js +0 -2
  96. package/dist/Trainer-DBsyWJ4s.js +0 -228
  97. package/dist/Trainer.d.ts +0 -45
  98. package/dist/Trainer.js +0 -2
  99. package/dist/main-BSaDGH7I.js +0 -13274
  100. package/dist/training/tasks/ConversationTask.d.ts +0 -17
  101. package/dist/training/tasks/ConversationTask.js +0 -29
  102. package/dist/training/tasks/PretrainingTask.d.ts +0 -17
  103. package/dist/training/tasks/PretrainingTask.js +0 -42
  104. package/dist/training/tasks/StartSentenceTask.d.ts +0 -18
  105. package/dist/training/tasks/StartSentenceTask.js +0 -45
  106. package/dist/training/tasks/Task.d.ts +0 -29
  107. package/dist/training/tasks/Task.js +0 -50
  108. package/dist/training/tasks/splitter.d.ts +0 -5
  109. 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,5 +0,0 @@
1
- import { Task } from './Task';
2
- export default function splitValidation(tasks: Task[], validationSplit: number): Promise<{
3
- training: Task;
4
- validation: Task;
5
- }>;
@@ -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 };