set or add KV pairs from another context
| 20101 | |
| 20102 | // set or add KV pairs from another context |
| 20103 | void gguf_set_kv(struct gguf_context * ctx, struct gguf_context * src) { |
| 20104 | for (uint32_t i = 0; i < src->header.n_kv; i++) { |
| 20105 | switch (src->kv[i].type) { |
| 20106 | case GGUF_TYPE_UINT8: gguf_set_val_u8 (ctx, src->kv[i].key.data, src->kv[i].value.uint8); break; |
| 20107 | case GGUF_TYPE_INT8: gguf_set_val_i8 (ctx, src->kv[i].key.data, src->kv[i].value.int8); break; |
| 20108 | case GGUF_TYPE_UINT16: gguf_set_val_u16 (ctx, src->kv[i].key.data, src->kv[i].value.uint16); break; |
| 20109 | case GGUF_TYPE_INT16: gguf_set_val_i16 (ctx, src->kv[i].key.data, src->kv[i].value.int16); break; |
| 20110 | case GGUF_TYPE_UINT32: gguf_set_val_u32 (ctx, src->kv[i].key.data, src->kv[i].value.uint32); break; |
| 20111 | case GGUF_TYPE_INT32: gguf_set_val_i32 (ctx, src->kv[i].key.data, src->kv[i].value.int32); break; |
| 20112 | case GGUF_TYPE_FLOAT32: gguf_set_val_f32 (ctx, src->kv[i].key.data, src->kv[i].value.float32); break; |
| 20113 | case GGUF_TYPE_UINT64: gguf_set_val_u64 (ctx, src->kv[i].key.data, src->kv[i].value.uint64); break; |
| 20114 | case GGUF_TYPE_INT64: gguf_set_val_i64 (ctx, src->kv[i].key.data, src->kv[i].value.int64); break; |
| 20115 | case GGUF_TYPE_FLOAT64: gguf_set_val_f64 (ctx, src->kv[i].key.data, src->kv[i].value.float64); break; |
| 20116 | case GGUF_TYPE_BOOL: gguf_set_val_bool(ctx, src->kv[i].key.data, src->kv[i].value.bool_); break; |
| 20117 | case GGUF_TYPE_STRING: gguf_set_val_str (ctx, src->kv[i].key.data, src->kv[i].value.str.data); break; |
| 20118 | case GGUF_TYPE_ARRAY: |
| 20119 | { |
| 20120 | if (src->kv[i].value.arr.type == GGUF_TYPE_STRING) { |
| 20121 | const char ** data = malloc(src->kv[i].value.arr.n*sizeof(char *)); |
| 20122 | for (uint32_t j = 0; j < src->kv[i].value.arr.n; j++) { |
| 20123 | data[j] = ((struct gguf_str *)src->kv[i].value.arr.data)[j].data; |
| 20124 | } |
| 20125 | gguf_set_arr_str(ctx, src->kv[i].key.data, data, src->kv[i].value.arr.n); |
| 20126 | free(data); |
| 20127 | } else if (src->kv[i].value.arr.type == GGUF_TYPE_ARRAY) { |
| 20128 | GGML_ASSERT(false && "nested arrays not supported"); |
| 20129 | } else { |
| 20130 | gguf_set_arr_data(ctx, src->kv[i].key.data, src->kv[i].value.arr.type, src->kv[i].value.arr.data, src->kv[i].value.arr.n); |
| 20131 | } |
| 20132 | } break; |
| 20133 | case GGUF_TYPE_COUNT: GGML_ASSERT(false && "invalid type"); break; |
| 20134 | } |
| 20135 | } |
| 20136 | } |
| 20137 | |
| 20138 | void gguf_add_tensor( |
| 20139 | struct gguf_context * ctx, |
no test coverage detected