| 1070 | |
| 1071 | |
| 1072 | class OutputFile: |
| 1073 | def __init__(self, fname_out: Path, endianess:gguf.GGUFEndian = gguf.GGUFEndian.LITTLE): |
| 1074 | self.gguf = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[ARCH], endianess=endianess) |
| 1075 | |
| 1076 | def add_meta_arch(self, params: Params) -> None: |
| 1077 | name = "LLaMA" |
| 1078 | |
| 1079 | # TODO: better logic to determine model name |
| 1080 | if params.n_ctx == 4096: |
| 1081 | name = "LLaMA v2" |
| 1082 | elif params.path_model is not None: |
| 1083 | name = str(params.path_model.parent).split('/')[-1] |
| 1084 | |
| 1085 | self.gguf.add_name (name) |
| 1086 | self.gguf.add_vocab_size (params.n_vocab) |
| 1087 | self.gguf.add_context_length (params.n_ctx) |
| 1088 | self.gguf.add_embedding_length (params.n_embd) |
| 1089 | self.gguf.add_block_count (params.n_layer) |
| 1090 | self.gguf.add_feed_forward_length (params.n_ff) |
| 1091 | self.gguf.add_rope_dimension_count(params.n_embd // params.n_head) |
| 1092 | self.gguf.add_head_count (params.n_head) |
| 1093 | self.gguf.add_head_count_kv (params.n_head_kv) |
| 1094 | |
| 1095 | if params.n_experts: |
| 1096 | self.gguf.add_expert_count(params.n_experts) |
| 1097 | |
| 1098 | if params.n_experts_used: |
| 1099 | self.gguf.add_expert_used_count(params.n_experts_used) |
| 1100 | |
| 1101 | if params.f_norm_eps: |
| 1102 | self.gguf.add_layer_norm_rms_eps(params.f_norm_eps) |
| 1103 | else: |
| 1104 | raise ValueError('f_norm_eps is None') |
| 1105 | |
| 1106 | if params.f_rope_freq_base is not None: |
| 1107 | self.gguf.add_rope_freq_base(params.f_rope_freq_base) |
| 1108 | |
| 1109 | if params.rope_scaling_type: |
| 1110 | assert params.f_rope_scale is not None |
| 1111 | self.gguf.add_rope_scaling_type(params.rope_scaling_type) |
| 1112 | self.gguf.add_rope_scaling_factor(params.f_rope_scale) |
| 1113 | |
| 1114 | if params.n_orig_ctx is not None: |
| 1115 | self.gguf.add_rope_scaling_orig_ctx_len(params.n_orig_ctx) |
| 1116 | |
| 1117 | if params.rope_finetuned is not None: |
| 1118 | self.gguf.add_rope_scaling_finetuned(params.rope_finetuned) |
| 1119 | |
| 1120 | if params.ftype is not None: |
| 1121 | self.gguf.add_file_type(params.ftype) |
| 1122 | |
| 1123 | def extract_vocabulary_from_model(self, vocab: Vocab) -> tuple[list[bytes], list[float], list[gguf.TokenType]]: |
| 1124 | tokens = [] |
| 1125 | scores = [] |
| 1126 | toktypes = [] |
| 1127 | |
| 1128 | # NOTE: `all_tokens` returns the base vocabulary and added tokens |
| 1129 | for text, score, toktype in vocab.all_tokens(): |
no outgoing calls
no test coverage detected