@genai-fi/nanogpt 0.18.0 → 0.18.1
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.
|
@@ -28,15 +28,15 @@ function h(e) {
|
|
|
28
28
|
windowSize: e.windowSize
|
|
29
29
|
}, a;
|
|
30
30
|
}
|
|
31
|
-
async function G(e, a,
|
|
32
|
-
const m = h(e),
|
|
33
|
-
a.datasetID && (
|
|
34
|
-
const
|
|
35
|
-
for (const [
|
|
36
|
-
s.set(
|
|
31
|
+
async function G(e, a, r, n) {
|
|
32
|
+
const m = h(e), o = (a.type ?? "char") === "char" ? new p(a.vocab) : new _(a.vocab, a.merges);
|
|
33
|
+
a.datasetID && (o.datasetID = a.datasetID), a.id ? o.id = a.id : o.generateID();
|
|
34
|
+
const d = await b(n), s = /* @__PURE__ */ new Map();
|
|
35
|
+
for (const [i, l] of Object.entries(d))
|
|
36
|
+
s.set(i, [l]);
|
|
37
37
|
c();
|
|
38
|
-
const
|
|
39
|
-
return
|
|
38
|
+
const t = y(m);
|
|
39
|
+
return t.metaData = r, await u(t), t.weightStore.loadWeights(s, !!r.url), { model: t, tokeniser: o, metaData: r };
|
|
40
40
|
}
|
|
41
41
|
export {
|
|
42
42
|
G as default,
|
package/dist/loader/save.js
CHANGED
|
@@ -2,13 +2,13 @@ import { z as y } from "../jszip.min-BZhlzntC.js";
|
|
|
2
2
|
import b from "../tokeniser/CharTokeniser.js";
|
|
3
3
|
import { save_safetensors as _ } from "../utilities/safetensors.js";
|
|
4
4
|
import { VERSION as m } from "./load.js";
|
|
5
|
-
async function d(i,
|
|
5
|
+
async function d(i, a, o, t) {
|
|
6
6
|
const g = /* @__PURE__ */ new Map();
|
|
7
7
|
i.weightStore.saveWeights(g);
|
|
8
8
|
const n = new y();
|
|
9
9
|
if (t?.optimizer) {
|
|
10
|
-
const
|
|
11
|
-
n.file("optimizer.safetensors",
|
|
10
|
+
const e = await t.optimizer.saveMoments();
|
|
11
|
+
n.file("optimizer.safetensors", e, { binary: !0 }), n.file("optimizer_config.json", JSON.stringify(t.optimizer.serializeConfig()), {
|
|
12
12
|
binary: !1
|
|
13
13
|
});
|
|
14
14
|
}
|
|
@@ -16,8 +16,8 @@ async function d(i, e, o, t) {
|
|
|
16
16
|
binary: !1
|
|
17
17
|
});
|
|
18
18
|
const s = {};
|
|
19
|
-
g.forEach((
|
|
20
|
-
|
|
19
|
+
g.forEach((e, f) => {
|
|
20
|
+
e.length === 1 && (s[f] = e[0]);
|
|
21
21
|
});
|
|
22
22
|
const c = await _(s);
|
|
23
23
|
n.file("model.safetensors", c, { binary: !0 });
|
|
@@ -25,7 +25,7 @@ async function d(i, e, o, t) {
|
|
|
25
25
|
let r;
|
|
26
26
|
p === "GenAI_NanoGPT_v1" ? r = {
|
|
27
27
|
model_type: "GenAI_NanoGPT_v1",
|
|
28
|
-
vocab_size:
|
|
28
|
+
vocab_size: a.getVocab().length,
|
|
29
29
|
hidden_size: i.config.nEmbed,
|
|
30
30
|
num_hidden_layers: i.config.nLayer,
|
|
31
31
|
num_attention_heads: i.config.nHead,
|
|
@@ -34,7 +34,7 @@ async function d(i, e, o, t) {
|
|
|
34
34
|
useRope: i.config.useRope
|
|
35
35
|
} : r = {
|
|
36
36
|
model_type: "GenAI_NanoGPT_v2",
|
|
37
|
-
vocab_size:
|
|
37
|
+
vocab_size: a.getVocab().length,
|
|
38
38
|
hidden_size: i.config.nEmbed,
|
|
39
39
|
num_hidden_layers: i.config.nLayer,
|
|
40
40
|
num_attention_heads: i.config.nHead,
|
|
@@ -64,17 +64,18 @@ async function d(i, e, o, t) {
|
|
|
64
64
|
}), n.file(
|
|
65
65
|
"tokeniser.json",
|
|
66
66
|
JSON.stringify({
|
|
67
|
-
type:
|
|
68
|
-
vocab:
|
|
69
|
-
merges:
|
|
70
|
-
datasetID:
|
|
67
|
+
type: a instanceof b ? "char" : "bpe",
|
|
68
|
+
vocab: a.getVocab(),
|
|
69
|
+
merges: a.getMerges(),
|
|
70
|
+
datasetID: a.datasetID,
|
|
71
|
+
id: a.id
|
|
71
72
|
}),
|
|
72
73
|
{
|
|
73
74
|
binary: !1
|
|
74
75
|
}
|
|
75
76
|
), o?.files)
|
|
76
|
-
for (const [
|
|
77
|
-
n.file(
|
|
77
|
+
for (const [e, f] of Object.entries(o.files))
|
|
78
|
+
n.file(e, JSON.stringify(f), { binary: !1 });
|
|
78
79
|
return n.generateAsync({ type: "blob" });
|
|
79
80
|
}
|
|
80
81
|
export {
|
package/dist/loader/types.d.ts
CHANGED
|
@@ -14,7 +14,7 @@ export default abstract class BaseTokeniser extends EE<'trainStatus'> implements
|
|
|
14
14
|
isSpecialToken(index: number): boolean;
|
|
15
15
|
protected addSpecialTokens(): void;
|
|
16
16
|
protected addSpecialToken(token: string, index: number): void;
|
|
17
|
-
|
|
17
|
+
generateID(): void;
|
|
18
18
|
abstract train(text: Conversation[][], cb?: (vocab: number) => void, datasetID?: string): Promise<number>;
|
|
19
19
|
abstract getVocab(): string[];
|
|
20
20
|
abstract getMerges(): [string, string][];
|
|
@@ -30,11 +30,15 @@ class T extends r {
|
|
|
30
30
|
generateID() {
|
|
31
31
|
const s = this.getVocab();
|
|
32
32
|
let t = 2166136261, e = 2654435769;
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
33
|
+
if (s.length === 0) {
|
|
34
|
+
this.id = "untrained";
|
|
35
|
+
return;
|
|
36
|
+
}
|
|
37
|
+
for (let i = 0; i < s.length; i++) {
|
|
38
|
+
const a = s[i];
|
|
39
|
+
t ^= a.length, t = Math.imul(t, 16777619), e ^= i, e = Math.imul(e, 2246822507);
|
|
40
|
+
for (let c = 0; c < a.length; c++) {
|
|
41
|
+
const h = a.charCodeAt(c);
|
|
38
42
|
t ^= h, t = Math.imul(t, 16777619), e ^= h, e = Math.imul(e, 3266489909);
|
|
39
43
|
}
|
|
40
44
|
}
|
|
@@ -59,9 +63,9 @@ class T extends r {
|
|
|
59
63
|
this.getSpecialTokenIndex("<|assistant_end|>"),
|
|
60
64
|
this.getSpecialTokenIndex("<|system_end|>")
|
|
61
65
|
];
|
|
62
|
-
for (const
|
|
63
|
-
const c = this.encode(
|
|
64
|
-
switch (
|
|
66
|
+
for (const a of s) {
|
|
67
|
+
const c = this.encode(a.content);
|
|
68
|
+
switch (a.role) {
|
|
65
69
|
case "user":
|
|
66
70
|
e.push([o[0]]);
|
|
67
71
|
break;
|
|
@@ -72,7 +76,7 @@ class T extends r {
|
|
|
72
76
|
e.push([o[2]]);
|
|
73
77
|
break;
|
|
74
78
|
}
|
|
75
|
-
switch (e.push(c),
|
|
79
|
+
switch (e.push(c), a.role) {
|
|
76
80
|
case "user":
|
|
77
81
|
e.push([n[0]]);
|
|
78
82
|
break;
|
|
@@ -84,8 +88,8 @@ class T extends r {
|
|
|
84
88
|
break;
|
|
85
89
|
}
|
|
86
90
|
}
|
|
87
|
-
const
|
|
88
|
-
return t ?
|
|
91
|
+
const i = e.flat();
|
|
92
|
+
return t ? i.push(o[1]) : i.push(this.eosToken), i;
|
|
89
93
|
}
|
|
90
94
|
decodeConversation(s) {
|
|
91
95
|
const t = [];
|
|
@@ -95,11 +99,11 @@ class T extends r {
|
|
|
95
99
|
let n = null;
|
|
96
100
|
if (o === this.getSpecialTokenIndex("<|user_start|>") ? n = "user" : o === this.getSpecialTokenIndex("<|assistant_start|>") ? n = "assistant" : o === this.getSpecialTokenIndex("<|system_start|>") ? n = "system" : o === this.bosToken || (o === this.eosToken ? n = null : (n = "text", e--)), n) {
|
|
97
101
|
e++;
|
|
98
|
-
const
|
|
102
|
+
const i = [];
|
|
99
103
|
for (; e < s.length && s[e] !== this.getSpecialTokenIndex(`<|${n}_end|>`) && s[e] !== this.eosToken; )
|
|
100
|
-
|
|
101
|
-
const
|
|
102
|
-
t.push({ role: n, content:
|
|
104
|
+
i.push(s[e]), e++;
|
|
105
|
+
const a = this.decode(i);
|
|
106
|
+
t.push({ role: n, content: a });
|
|
103
107
|
}
|
|
104
108
|
e++;
|
|
105
109
|
}
|