@@ -8,28 +8,39 @@ import { writeFileSync } from "node:fs";
8
8
const SOURCE_CPP_URL = "https://raw.githubusercontent.com/ggerganov/llama.cpp/master/llama.cpp" ;
9
9
const DEST_FILE_PATH = "./src/transformer-llm.ts" ;
10
10
const DEST_COMMON_SOURCE = `
11
- type Attention<TArchitecture extends string> =
12
- & { [K in \`\${TArchitecture}.attention.head_count\`]: number }
13
- & { [K in \`\${TArchitecture}.attention.head_count_kv\`]: number }
14
- & { [K in \`\${TArchitecture}.attention.layer_norm_epsilon\`]: number }
15
- & { [K in \`\${TArchitecture}.attention.layer_norm_rms_epsilon\`]: number }
16
- & { [K in \`\${TArchitecture}.attention.alibi_bias_max\`]: number }
17
- & { [K in \`\${TArchitecture}.attention.clip_kqv\`]: number }
18
- & { [K in \`\${TArchitecture}.attention.use_norm\`]: number };
19
-
20
- type Rope<TArchitecture extends LLMArchitecture> =
21
- & { [K in \`\${TArchitecture}.rope.dimension_count\`]: number }
22
- & { [K in \`\${TArchitecture}.rope.freq_base\`]: number }
23
- & { [K in \`\${TArchitecture}.rope.scale\`]: number }
24
- & { [K in \`\${TArchitecture}.rope.scale_linear\`]: number };
25
-
26
- type MOE<TArchitecture extends LLMArchitecture> =
27
- & { [K in \`\${TArchitecture}.expert_count\`]: number }
28
- & { [K in \`\${TArchitecture}.expert_used_count\`]: number };
11
+ /** This file is auto-generated by generate-llm.ts */
12
+
13
+ import type { ModelBase, GGUFGeneralInfo } from "./types";
14
+
15
+ type Attention<TArchitecture extends string> = Record<
16
+ | \`\${TArchitecture}.attention.head_count\`
17
+ | \`\${TArchitecture}.attention.head_count_kv\`
18
+ | \`\${TArchitecture}.attention.layer_norm_epsilon\`
19
+ | \`\${TArchitecture}.attention.layer_norm_rms_epsilon\`
20
+ | \`\${TArchitecture}.attention.alibi_bias_max\`
21
+ | \`\${TArchitecture}.attention.clip_kqv\`
22
+ | \`\${TArchitecture}.attention.use_norm\`,
23
+ number
24
+ >;
25
+
26
+ type Rope<TArchitecture extends LLMArchitecture> = Record<
27
+ | \`\${TArchitecture}.rope.dimension_count\`
28
+ | \`\${TArchitecture}.rope.freq_base\`
29
+ | \`\${TArchitecture}.rope.scale\`
30
+ | \`\${TArchitecture}.rope.scale_linear\`,
31
+ number
32
+ >;
33
+
34
+ type MOE<TArchitecture extends LLMArchitecture> = Record<
35
+ | \`\${TArchitecture}.expert_count\`
36
+ | \`\${TArchitecture}.expert_used_count\`,
37
+ number
38
+ >;
29
39
30
40
export type TransformerLLMArchitecture = LLMArchitecture; // type alias
31
- export type TransformerLLMBase<TArchitecture extends LLMArchitecture> = ModelBase<TArchitecture>
32
- & MOE<TArchitecture>
41
+ export type TransformerLLMBase<TArchitecture extends LLMArchitecture> = GGUFGeneralInfo<TArchitecture>
42
+ & ModelBase<TArchitecture>
43
+ & Partial<MOE<TArchitecture>>
33
44
& Attention<TArchitecture>
34
45
& Rope<TArchitecture>;
35
46
@@ -163,15 +174,11 @@ async function main() {
163
174
/////////////////////////////////////
164
175
// write result to file
165
176
const content = [
166
- "/** This file is auto-generated by generate-llm.ts */" ,
167
- "" ,
168
- 'import type { ModelBase } from "./types";' ,
169
- "" ,
177
+ DEST_COMMON_SOURCE ,
170
178
"export const LLM_ARCHITECTURES = [" ,
171
179
...archList . map ( ( a ) => `\t${ JSON . stringify ( a . name ) } ,` ) ,
172
180
"] as const;" ,
173
181
"type LLMArchitecture = (typeof LLM_ARCHITECTURES)[number];" ,
174
- DEST_COMMON_SOURCE ,
175
182
...archList . map ( ( a ) => {
176
183
let code = `export type ${ a . tsName } = TransformerLLMBase<${ JSON . stringify ( a . name ) } >` ;
177
184
if ( a . hparams . length ) {
0 commit comments