| 155 | |
| 156 | @dataclass |
| 157 | class Params: |
| 158 | n_vocab: int |
| 159 | n_embd: int |
| 160 | n_layer: int |
| 161 | n_ctx: int |
| 162 | n_ff: int |
| 163 | n_head: int |
| 164 | n_head_kv: int |
| 165 | n_experts: int | None = None |
| 166 | n_experts_used: int | None = None |
| 167 | f_norm_eps: float | None = None |
| 168 | |
| 169 | rope_scaling_type: gguf.RopeScalingType | None = None |
| 170 | f_rope_freq_base: float | None = None |
| 171 | f_rope_scale: float | None = None |
| 172 | n_orig_ctx: int | None = None |
| 173 | rope_finetuned: bool | None = None |
| 174 | |
| 175 | ftype: GGMLFileType | None = None |
| 176 | |
| 177 | # path to the directory containing the model files |
| 178 | path_model: Path | None = None |
| 179 | |
| 180 | @staticmethod |
| 181 | def guessed(model: LazyModel) -> Params: |
| 182 | # try transformer naming first |
| 183 | n_vocab, n_embd = model["model.embed_tokens.weight"].shape if "model.embed_tokens.weight" in model else model["tok_embeddings.weight"].shape |
| 184 | |
| 185 | # try transformer naming first |
| 186 | if "model.layers.0.self_attn.q_proj.weight" in model: |
| 187 | n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.q_proj.weight" not in model) |
| 188 | elif "model.layers.0.self_attn.W_pack.weight" in model: # next: try baichuan naming |
| 189 | n_layer = next(i for i in itertools.count() if f"model.layers.{i}.self_attn.W_pack.weight" not in model) |
| 190 | else: |
| 191 | n_layer = next(i for i in itertools.count() if f"layers.{i}.attention.wq.weight" not in model) |
| 192 | |
| 193 | if n_layer < 1: |
| 194 | raise Exception("failed to guess 'n_layer'. This model is unknown or unsupported.\n" |
| 195 | "Suggestion: provide 'config.json' of the model in the same directory containing model files.") |
| 196 | |
| 197 | n_head = n_embd // 128 # guessed |
| 198 | n_mult = 256 # guessed |
| 199 | |
| 200 | # TODO: verify this |
| 201 | n_ff = int(2 * (4 * n_embd) / 3) |
| 202 | n_ff = n_mult * ((n_ff + n_mult - 1) // n_mult) |
| 203 | |
| 204 | return Params( |
| 205 | n_vocab = n_vocab, |
| 206 | n_embd = n_embd, |
| 207 | n_layer = n_layer, |
| 208 | n_ctx = -1, |
| 209 | n_ff = n_ff, |
| 210 | n_head = n_head, |
| 211 | n_head_kv = n_head, |
| 212 | f_norm_eps = 1e-5, |
| 213 | ) |
| 214 |
no outgoing calls
no test coverage detected