| 104 | } |
| 105 | |
| 106 | void llama_model_saver::add_kv_from_model() { |
| 107 | const llama_hparams & hparams = model.hparams; |
| 108 | const llama_vocab & vocab = model.vocab; |
| 109 | |
| 110 | const int32_t n_vocab = vocab.n_tokens(); |
| 111 | std::vector<std::string> tokens(n_vocab); |
| 112 | std::vector<float> scores(n_vocab); |
| 113 | std::vector<int32_t> token_types(n_vocab); |
| 114 | |
| 115 | for (int32_t id = 0; id < n_vocab; ++id) { |
| 116 | const llama_vocab::token_data & token_data = vocab.get_token_data(id); |
| 117 | |
| 118 | tokens[id] = token_data.text; |
| 119 | scores[id] = token_data.score; |
| 120 | |
| 121 | switch(token_data.attr) { |
| 122 | case LLAMA_TOKEN_ATTR_UNKNOWN: token_types[id] = LLAMA_TOKEN_TYPE_UNKNOWN; break; |
| 123 | case LLAMA_TOKEN_ATTR_UNUSED: token_types[id] = LLAMA_TOKEN_TYPE_UNUSED; break; |
| 124 | case LLAMA_TOKEN_ATTR_NORMAL: token_types[id] = LLAMA_TOKEN_TYPE_NORMAL; break; |
| 125 | case LLAMA_TOKEN_ATTR_CONTROL: token_types[id] = LLAMA_TOKEN_TYPE_CONTROL; break; |
| 126 | case LLAMA_TOKEN_ATTR_USER_DEFINED: token_types[id] = LLAMA_TOKEN_TYPE_USER_DEFINED; break; |
| 127 | case LLAMA_TOKEN_ATTR_BYTE: token_types[id] = LLAMA_TOKEN_TYPE_BYTE; break; |
| 128 | case LLAMA_TOKEN_ATTR_UNDEFINED: |
| 129 | default: token_types[id] = LLAMA_TOKEN_TYPE_UNDEFINED; break; |
| 130 | } |
| 131 | } |
| 132 | |
| 133 | // add_kv(LLM_KV_GENERAL_TYPE, ???); |
| 134 | add_kv(LLM_KV_GENERAL_ARCHITECTURE, model.arch_name()); |
| 135 | // add_kv(LLM_KV_GENERAL_QUANTIZATION_VERSION, ???); |
| 136 | // add_kv(LLM_KV_GENERAL_ALIGNMENT, ???); |
| 137 | add_kv(LLM_KV_GENERAL_NAME, model.name); |
| 138 | // add_kv(LLM_KV_GENERAL_AUTHOR, ???); |
| 139 | // add_kv(LLM_KV_GENERAL_VERSION, ???); |
| 140 | // add_kv(LLM_KV_GENERAL_URL, ???); |
| 141 | // add_kv(LLM_KV_GENERAL_DESCRIPTION, ???); |
| 142 | // add_kv(LLM_KV_GENERAL_LICENSE, ???); |
| 143 | // add_kv(LLM_KV_GENERAL_SOURCE_URL, ???); |
| 144 | // add_kv(LLM_KV_GENERAL_SOURCE_HF_REPO, ???); |
| 145 | |
| 146 | add_kv(LLM_KV_VOCAB_SIZE, vocab.n_tokens()); |
| 147 | add_kv(LLM_KV_CONTEXT_LENGTH, hparams.n_ctx_train); |
| 148 | add_kv(LLM_KV_EMBEDDING_LENGTH, hparams.n_embd); |
| 149 | if (hparams.n_embd_out_impl > 0) { |
| 150 | add_kv(LLM_KV_EMBEDDING_LENGTH_OUT, hparams.n_embd_out_impl); |
| 151 | } |
| 152 | add_kv(LLM_KV_BLOCK_COUNT, hparams.n_layer); |
| 153 | add_kv(LLM_KV_LEADING_DENSE_BLOCK_COUNT, hparams.n_layer_dense_lead); |
| 154 | add_kv(LLM_KV_FEED_FORWARD_LENGTH, hparams.n_ff_arr, true); |
| 155 | add_kv(LLM_KV_EXPERT_FEED_FORWARD_LENGTH, hparams.n_ff_exp); |
| 156 | add_kv(LLM_KV_EXPERT_SHARED_FEED_FORWARD_LENGTH, hparams.n_ff_exp); |
| 157 | add_kv(LLM_KV_USE_PARALLEL_RESIDUAL, hparams.use_par_res); |
| 158 | // add_kv(LLM_KV_TENSOR_DATA_LAYOUT, ???); |
| 159 | add_kv(LLM_KV_EXPERT_COUNT, hparams.n_expert); |
| 160 | add_kv(LLM_KV_EXPERT_USED_COUNT, hparams.n_expert_used); |
| 161 | add_kv(LLM_KV_EXPERT_SHARED_COUNT, hparams.n_expert_shared); |
| 162 | add_kv(LLM_KV_EXPERT_WEIGHTS_SCALE, hparams.expert_weights_scale); |
| 163 | add_kv(LLM_KV_POOLING_TYPE, uint32_t(hparams.pooling_type)); |
no test coverage detected