| 835 | |
| 836 | |
| 837 | class OutputFile: |
| 838 | def __init__(self, fname_out: Path, arch: gguf.MODEL_ARCH, endianess:gguf.GGUFEndian=gguf.GGUFEndian.LITTLE) -> None: |
| 839 | self.gguf = gguf.GGUFWriter(fname_out, gguf.MODEL_ARCH_NAMES[arch], endianess=endianess) |
| 840 | |
| 841 | def add_meta_arch(self, params: Params) -> None: |
| 842 | name = "LLaMA" |
| 843 | |
| 844 | # TODO: better logic to determine model name |
| 845 | if params.n_ctx == 4096: |
| 846 | name = "LLaMA v2" |
| 847 | elif params.path_model is not None: |
| 848 | name = str(params.path_model).split('/')[-1] |
| 849 | |
| 850 | self.gguf.add_name (name) |
| 851 | self.gguf.add_context_length (params.n_ctx) |
| 852 | self.gguf.add_embedding_length (params.n_embd) |
| 853 | self.gguf.add_block_count (params.n_layer) |
| 854 | self.gguf.add_feed_forward_length (params.n_ff) |
| 855 | self.gguf.add_rope_dimension_count(params.n_embd // params.n_head) |
| 856 | self.gguf.add_head_count (params.n_head) |
| 857 | self.gguf.add_head_count_kv (params.n_head_kv) |
| 858 | self.gguf.add_layer_norm_rms_eps (params.f_norm_eps) |
| 859 | |
| 860 | if params.f_rope_freq_base is not None: |
| 861 | self.gguf.add_rope_freq_base(params.f_rope_freq_base) |
| 862 | |
| 863 | if params.rope_scaling_type: |
| 864 | assert params.f_rope_scale is not None |
| 865 | self.gguf.add_rope_scaling_type(params.rope_scaling_type) |
| 866 | self.gguf.add_rope_scaling_factor(params.f_rope_scale) |
| 867 | |
| 868 | if params.n_orig_ctx is not None: |
| 869 | self.gguf.add_rope_scaling_orig_ctx_len(params.n_orig_ctx) |
| 870 | |
| 871 | if params.rope_finetuned is not None: |
| 872 | self.gguf.add_rope_scaling_finetuned(params.rope_finetuned) |
| 873 | |
| 874 | if params.ftype is not None: |
| 875 | self.gguf.add_file_type(params.ftype) |
| 876 | |
| 877 | if params.predictor_params.sparse_threshold is not None: |
| 878 | self.gguf.add_sparse_threshold(params.predictor_params.sparse_threshold) |
| 879 | |
| 880 | def add_meta_vocab(self, vocab: Vocab) -> None: |
| 881 | tokens = [] |
| 882 | scores = [] |
| 883 | toktypes = [] |
| 884 | # NOTE: `all_tokens` returns the base vocabulary and added tokens |
| 885 | for text, score, toktype in vocab.all_tokens(): |
| 886 | tokens.append(text) |
| 887 | scores.append(score) |
| 888 | toktypes.append(toktype) |
| 889 | |
| 890 | if isinstance(vocab, SentencePieceVocab): |
| 891 | self.gguf.add_tokenizer_model("llama") |
| 892 | elif isinstance(vocab, BpeVocab): |
| 893 | self.gguf.add_tokenizer_model("gpt2") |
| 894 | else: |
no outgoing calls
no test coverage detected