Skip to content

Commit 9a9e771

Browse files
committed
correct optional fields
1 parent e061017 commit 9a9e771

File tree

3 files changed

+82
-46
lines changed

3 files changed

+82
-46
lines changed

packages/gguf/scripts/generate-llm.ts

Lines changed: 34 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -12,35 +12,50 @@ const DEST_COMMON_SOURCE = `
1212
1313
import type { ModelBase, GGUFGeneralInfo } from "./types";
1414
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\`,
15+
type LLMBase<TArchitecture extends string> = Partial<Record<
16+
\`\${TArchitecture}.vocab_size\`
17+
| \`\${TArchitecture}.use_parallel_residual\`
18+
| \`\${TArchitecture}.tensor_data_layout\`,
2319
number
24-
>;
20+
>>;
2521
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\`,
22+
type Attention<TArchitecture extends string> = Record<
23+
\`\${TArchitecture}.attention.head_count\`,
3124
number
25+
> & Partial<Record<
26+
\`\${TArchitecture}.attention.head_count_kv\`
27+
| \`\${TArchitecture}.attention.key_length\`
28+
| \`\${TArchitecture}.attention.value_length\`,
29+
number
30+
>>;
31+
32+
type RopeScalingType = "none" | "linear" | "yarn";
33+
type Rope<TArchitecture extends LLMArchitecture> = Partial<
34+
Record<
35+
\`\${TArchitecture}.rope.dimension_count\`
36+
| \`\${TArchitecture}.rope.freq_base\`
37+
| \`\${TArchitecture}.rope.scale_linear\`
38+
| \`\${TArchitecture}.rope.scaling.factor\`
39+
| \`\${TArchitecture}.rope.scaling.original_context_length\`,
40+
number
41+
>
42+
& Record<\`\${TArchitecture}.rope.scaling.type\`, RopeScalingType>
43+
& Record<\`\${TArchitecture}.rope.finetuned\`, boolean>
3244
>;
3345
34-
type MOE<TArchitecture extends LLMArchitecture> = Record<
35-
| \`\${TArchitecture}.expert_count\`
36-
| \`\${TArchitecture}.expert_used_count\`,
37-
number
46+
type MOE<TArchitecture extends LLMArchitecture> = Partial<
47+
Record<
48+
\`\${TArchitecture}.expert_count\`
49+
| \`\${TArchitecture}.expert_used_count\`,
50+
number
51+
>
3852
>;
3953
4054
export type TransformerLLMArchitecture = LLMArchitecture; // type alias
4155
export type TransformerLLMBase<TArchitecture extends LLMArchitecture> = GGUFGeneralInfo<TArchitecture>
56+
& LLMBase<TArchitecture>
4257
& ModelBase<TArchitecture>
43-
& Partial<MOE<TArchitecture>>
58+
& MOE<TArchitecture>
4459
& Attention<TArchitecture>
4560
& Rope<TArchitecture>;
4661

packages/gguf/src/transformer-llm.ts

Lines changed: 31 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -2,34 +2,46 @@
22

33
import type { ModelBase, GGUFGeneralInfo } from "./types";
44

5-
type Attention<TArchitecture extends string> = Record<
6-
| `${TArchitecture}.attention.head_count`
7-
| `${TArchitecture}.attention.head_count_kv`
8-
| `${TArchitecture}.attention.layer_norm_epsilon`
9-
| `${TArchitecture}.attention.layer_norm_rms_epsilon`
10-
| `${TArchitecture}.attention.alibi_bias_max`
11-
| `${TArchitecture}.attention.clip_kqv`
12-
| `${TArchitecture}.attention.use_norm`,
13-
number
5+
type LLMBase<TArchitecture extends string> = Partial<
6+
Record<
7+
`${TArchitecture}.vocab_size` | `${TArchitecture}.use_parallel_residual` | `${TArchitecture}.tensor_data_layout`,
8+
number
9+
>
1410
>;
1511

16-
type Rope<TArchitecture extends LLMArchitecture> = Record<
17-
| `${TArchitecture}.rope.dimension_count`
18-
| `${TArchitecture}.rope.freq_base`
19-
| `${TArchitecture}.rope.scale`
20-
| `${TArchitecture}.rope.scale_linear`,
21-
number
12+
type Attention<TArchitecture extends string> = Record<`${TArchitecture}.attention.head_count`, number> &
13+
Partial<
14+
Record<
15+
| `${TArchitecture}.attention.head_count_kv`
16+
| `${TArchitecture}.attention.key_length`
17+
| `${TArchitecture}.attention.value_length`,
18+
number
19+
>
20+
>;
21+
22+
type RopeScalingType = "none" | "linear" | "yarn";
23+
type Rope<TArchitecture extends LLMArchitecture> = Partial<
24+
Record<
25+
| `${TArchitecture}.rope.dimension_count`
26+
| `${TArchitecture}.rope.freq_base`
27+
| `${TArchitecture}.rope.scale_linear`
28+
| `${TArchitecture}.rope.scaling.factor`
29+
| `${TArchitecture}.rope.scaling.original_context_length`,
30+
number
31+
> &
32+
Record<`${TArchitecture}.rope.scaling.type`, RopeScalingType> &
33+
Record<`${TArchitecture}.rope.finetuned`, boolean>
2234
>;
2335

24-
type MOE<TArchitecture extends LLMArchitecture> = Record<
25-
`${TArchitecture}.expert_count` | `${TArchitecture}.expert_used_count`,
26-
number
36+
type MOE<TArchitecture extends LLMArchitecture> = Partial<
37+
Record<`${TArchitecture}.expert_count` | `${TArchitecture}.expert_used_count`, number>
2738
>;
2839

2940
export type TransformerLLMArchitecture = LLMArchitecture; // type alias
3041
export type TransformerLLMBase<TArchitecture extends LLMArchitecture> = GGUFGeneralInfo<TArchitecture> &
42+
LLMBase<TArchitecture> &
3143
ModelBase<TArchitecture> &
32-
Partial<MOE<TArchitecture>> &
44+
MOE<TArchitecture> &
3345
Attention<TArchitecture> &
3446
Rope<TArchitecture>;
3547

packages/gguf/src/types.ts

Lines changed: 17 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -52,7 +52,7 @@ export type Architecture = (typeof ARCHITECTURES)[number];
5252

5353
export interface GGUFGeneralInfo<TArchitecture extends Architecture> {
5454
"general.architecture": TArchitecture;
55-
"general.name": string;
55+
"general.name"?: string;
5656
"general.file_type"?: number;
5757
"general.quantization_version"?: number;
5858
}
@@ -63,11 +63,10 @@ export type ModelBase<
6363
| `encoder.${Extract<Architecture, "whisper">}`
6464
| `decoder.${Extract<Architecture, "whisper">}`,
6565
> = Record<
66-
| `${TArchitecture}.layer_count`
67-
| `${TArchitecture}.feed_forward_length`
6866
| `${TArchitecture}.context_length`
67+
| `${TArchitecture}.block_count`
6968
| `${TArchitecture}.embedding_length`
70-
| `${TArchitecture}.block_count`,
69+
| `${TArchitecture}.feed_forward_length`,
7170
number
7271
>;
7372

@@ -82,15 +81,25 @@ interface Tokenizer {
8281
"tokenizer.ggml.bos_token_id": number;
8382
"tokenizer.ggml.eos_token_id": number;
8483
"tokenizer.ggml.add_bos_token": boolean;
85-
"tokenizer.chat_template": string;
84+
"tokenizer.chat_template"?: string;
8685
}
8786
type NoTokenizer = Record<keyof Tokenizer, undefined>;
8887

8988
/// Models outside of llama.cpp: "rwkv" and "whisper"
9089

91-
export type RWKV = GGUFGeneralInfo<"rwkv"> & ModelBase<"rwkv"> & { "rwkv.architecture_version": number };
92-
93-
export type Whisper = GGUFGeneralInfo<"whisper"> & ModelBase<"encoder.whisper"> & ModelBase<"decoder.whisper">;
90+
export type RWKV = GGUFGeneralInfo<"rwkv"> &
91+
ModelBase<"rwkv"> & {
92+
"rwkv.architecture_version": number;
93+
};
94+
95+
// TODO: whisper.cpp doesn't yet support gguf. This maybe changed in the future.
96+
export type Whisper = GGUFGeneralInfo<"whisper"> &
97+
ModelBase<"encoder.whisper"> &
98+
ModelBase<"decoder.whisper"> & {
99+
"whisper.encoder.mels_count": number;
100+
"whisper.encoder.attention.head_count": number;
101+
"whisper.decoder.attention.head_count": number;
102+
};
94103

95104
/// Types for parse output
96105

0 commit comments

Comments
 (0)