Bad juju creating a model

What is the issue?
I have the 2b base model of Salamandra quantized to different weights, but I am getting an error creating it.
ollama create salamandra:2b_bf16 -f ./Modelfile
transferring model data 100%
Error: invalid file magic

I hesitate to even use the chat template because it is a base model, not a chat model, so its chat looks kinda erratic.
> hola, puedes decirme por qué el sol es amarillo?
2014-03-09
Hola!
El color del Sol se debe a que la luz solar tiene una longitud de onda larga (de unos 580 nm) y corta (entre los 400nm y los 760nm).
La radiación visible es aquella cuya longitud de onda está entre el rojo y el azul, por lo tanto las longitudes de onda más cortas son rojas.
El Sol emite luz en todas direcciones pero la mayor
>

but its text generation looks good (aligned with what you expect from a base model). this is a log of a full run in case the details are pertinent to the above magic
llama-cli -m ./salamandra-2b_bf16.gguf --ctx-size 8192 --rope-freq-base 10000.0 --top-p 0.95 --repeat-penalty 1.2 --temp 0.1 --n-predict 128 --top-k 40 -p "hola, puedes decirme por qué el sol es amarillo?"
build: 3889 (b6d6c528) with Apple clang version 16.0.0 (clang-16<IP_ADDRESS>) for arm64-apple-darwin24.0.0
main: warning: changing RoPE frequency base to 10000.
main: llama backend init
main: load the model and apply lora adapter, if any
llama_model_loader: loaded meta data with 29 key-value pairs and 219 tensors from ./salamandra-2b_bf16.gguf (version GGUF V3 (latest))
llama_model_loader: Dumping metadata keys/values. Note: KV overrides do not apply in this output.
llama_model_loader: - kv   0:                       general.architecture str              = llama
llama_model_loader: - kv   1:                               general.type str              = model
llama_model_loader: - kv   2:                         general.size_label str              = 2.3B
llama_model_loader: - kv   3:                            general.license str              = apache-2.0
llama_model_loader: - kv   4:                               general.tags arr[str,1]       = ["text-generation"]
llama_model_loader: - kv   5:                          general.languages arr[str,36]      = ["bg", "ca", "code", "cs", "cy", "da"...
llama_model_loader: - kv   6:                          llama.block_count u32              = 24
llama_model_loader: - kv   7:                       llama.context_length u32              = 8192
llama_model_loader: - kv   8:                     llama.embedding_length u32              = 2048
llama_model_loader: - kv   9:                  llama.feed_forward_length u32              = 5440
llama_model_loader: - kv  10:                 llama.attention.head_count u32              = 16
llama_model_loader: - kv  11:              llama.attention.head_count_kv u32              = 16
llama_model_loader: - kv  12:                       llama.rope.freq_base f32              = 10000.000000
llama_model_loader: - kv  13:     llama.attention.layer_norm_rms_epsilon f32              = 0.000010
llama_model_loader: - kv  14:                          general.file_type u32              = 32
llama_model_loader: - kv  15:                           llama.vocab_size u32              = 256000
llama_model_loader: - kv  16:                 llama.rope.dimension_count u32              = 128
llama_model_loader: - kv  17:            tokenizer.ggml.add_space_prefix bool             = true
llama_model_loader: - kv  18:                       tokenizer.ggml.model str              = llama
llama_model_loader: - kv  19:                         tokenizer.ggml.pre str              = default
llama_model_loader: - kv  20:                      tokenizer.ggml.tokens arr[str,256000]  = ["<unk>", "<s>", "</s>", "<pad>", "<|...
llama_model_loader: - kv  21:                      tokenizer.ggml.scores arr[f32,256000]  = [-1000.000000, -1000.000000, -1000.00...
llama_model_loader: - kv  22:                  tokenizer.ggml.token_type arr[i32,256000]  = [3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, ...
llama_model_loader: - kv  23:                tokenizer.ggml.bos_token_id u32              = 1
llama_model_loader: - kv  24:                tokenizer.ggml.eos_token_id u32              = 2
llama_model_loader: - kv  25:            tokenizer.ggml.unknown_token_id u32              = 0
llama_model_loader: - kv  26:               tokenizer.ggml.add_bos_token bool             = true
llama_model_loader: - kv  27:               tokenizer.ggml.add_eos_token bool             = false
llama_model_loader: - kv  28:               general.quantization_version u32              = 2
llama_model_loader: - type  f32:   49 tensors
llama_model_loader: - type bf16:  170 tensors
llm_load_vocab: special_eos_id is not in special_eog_ids - the tokenizer config may be incorrect
llm_load_vocab: special tokens cache size = 104
llm_load_vocab: token to piece cache size = 1.8842 MB
llm_load_print_meta: format           = GGUF V3 (latest)
llm_load_print_meta: arch             = llama
llm_load_print_meta: vocab type       = SPM
llm_load_print_meta: n_vocab          = 256000
llm_load_print_meta: n_merges         = 0
llm_load_print_meta: vocab_only       = 0
llm_load_print_meta: n_ctx_train      = 8192
llm_load_print_meta: n_embd           = 2048
llm_load_print_meta: n_layer          = 24
llm_load_print_meta: n_head           = 16
llm_load_print_meta: n_head_kv        = 16
llm_load_print_meta: n_rot            = 128
llm_load_print_meta: n_swa            = 0
llm_load_print_meta: n_embd_head_k    = 128
llm_load_print_meta: n_embd_head_v    = 128
llm_load_print_meta: n_gqa            = 1
llm_load_print_meta: n_embd_k_gqa     = 2048
llm_load_print_meta: n_embd_v_gqa     = 2048
llm_load_print_meta: f_norm_eps       = 0.0e+00
llm_load_print_meta: f_norm_rms_eps   = 1.0e-05
llm_load_print_meta: f_clamp_kqv      = 0.0e+00
llm_load_print_meta: f_max_alibi_bias = 0.0e+00
llm_load_print_meta: f_logit_scale    = 0.0e+00
llm_load_print_meta: n_ff             = 5440
llm_load_print_meta: n_expert         = 0
llm_load_print_meta: n_expert_used    = 0
llm_load_print_meta: causal attn      = 1
llm_load_print_meta: pooling type     = 0
llm_load_print_meta: rope type        = 0
llm_load_print_meta: rope scaling     = linear
llm_load_print_meta: freq_base_train  = 10000.0
llm_load_print_meta: freq_scale_train = 1
llm_load_print_meta: n_ctx_orig_yarn  = 8192
llm_load_print_meta: rope_finetuned   = unknown
llm_load_print_meta: ssm_d_conv       = 0
llm_load_print_meta: ssm_d_inner      = 0
llm_load_print_meta: ssm_d_state      = 0
llm_load_print_meta: ssm_dt_rank      = 0
llm_load_print_meta: ssm_dt_b_c_rms   = 0
llm_load_print_meta: model type       = ?B
llm_load_print_meta: model ftype      = BF16
llm_load_print_meta: model params     = 2.25 B
llm_load_print_meta: model size       = 4.20 GiB (16.00 BPW)
llm_load_print_meta: general.name     = n/a
llm_load_print_meta: BOS token        = 1 '<s>'
llm_load_print_meta: EOS token        = 2 '</s>'
llm_load_print_meta: UNK token        = 0 '<unk>'
llm_load_print_meta: LF token         = 145 '<0x0A>'
llm_load_print_meta: EOT token        = 5 '<|im_end|>'
llm_load_print_meta: EOG token        = 2 '</s>'
llm_load_print_meta: EOG token        = 5 '<|im_end|>'
llm_load_print_meta: max token length = 72
llm_load_tensors: ggml ctx size =    0.20 MiB
llm_load_tensors: offloading 24 repeating layers to GPU
llm_load_tensors: offloading non-repeating layers to GPU
llm_load_tensors: offloaded 25/25 layers to GPU
llm_load_tensors:      Metal buffer size =  4298.39 MiB
llm_load_tensors:        CPU buffer size =  1000.00 MiB
.......................................................
llama_new_context_with_model: n_ctx      = 8192
llama_new_context_with_model: n_batch    = 2048
llama_new_context_with_model: n_ubatch   = 512
llama_new_context_with_model: flash_attn = 0
llama_new_context_with_model: freq_base  = 10000.0
llama_new_context_with_model: freq_scale = 1
ggml_metal_init: allocating
ggml_metal_init: found device: Apple M3 Max
ggml_metal_init: picking default device: Apple M3 Max
ggml_metal_init: using embedded metal library
ggml_metal_init: GPU name:   Apple M3 Max
ggml_metal_init: GPU family: MTLGPUFamilyApple9  (1009)
ggml_metal_init: GPU family: MTLGPUFamilyCommon3 (3003)
ggml_metal_init: GPU family: MTLGPUFamilyMetal3  (5001)
ggml_metal_init: simdgroup reduction support   = true
ggml_metal_init: simdgroup matrix mul. support = true
ggml_metal_init: hasUnifiedMemory              = true
ggml_metal_init: recommendedMaxWorkingSetSize  = 42949.67 MB
llama_kv_cache_init:      Metal KV buffer size =  1536.00 MiB
llama_new_context_with_model: KV self size  = 1536.00 MiB, K (f16):  768.00 MiB, V (f16):  768.00 MiB
llama_new_context_with_model:        CPU  output buffer size =     0.98 MiB
llama_new_context_with_model:      Metal compute buffer size =   288.00 MiB
llama_new_context_with_model:        CPU compute buffer size =   500.00 MiB
llama_new_context_with_model: graph nodes  = 774
llama_new_context_with_model: graph splits = 339
llama_init_from_gpt_params: warming up the model with an empty run - please wait ... (--no-warmup to disable)
main: llama threadpool init, n_threads = 12

system_info: n_threads = 12 (n_threads_batch = 12) / 16 | AVX = 0 | AVX_VNNI = 0 | AVX2 = 0 | AVX512 = 0 | AVX512_VBMI = 0 | AVX512_VNNI = 0 | AVX512_BF16 = 0 | FMA = 0 | NEON = 1 | SVE = 0 | ARM_FMA = 1 | F16C = 0 | FP16_VA = 1 | RISCV_VECT = 0 | WASM_SIMD = 0 | BLAS = 1 | SSE3 = 0 | SSSE3 = 0 | VSX = 0 | MATMUL_INT8 = 1 | LLAMAFILE = 1 |

sampler seed: 892523417
sampler params:
	repeat_last_n = 64, repeat_penalty = 1.200, frequency_penalty = 0.000, presence_penalty = 0.000
	top_k = 40, tfs_z = 1.000, top_p = 0.950, min_p = 0.050, typical_p = 1.000, temp = 0.100
	mirostat = 0, mirostat_lr = 0.100, mirostat_ent = 5.000
sampler chain: logits -> logit-bias -> penalties -> top-k -> tail-free -> typical -> top-p -> min-p -> temp-ext -> softmax -> dist
generate: n_ctx = 8192, n_batch = 2048, n_predict = 128, n_keep = 1

 hola, puedes decirme por qué el sol es amarillo?
¿Por qué la luz del sol se ve más clara en verano que en invierno?
La respuesta a esta pregunta está relacionada con las propiedades de los colores.
Los colores son formas diferentes de energía electromagnética y tienen una longitud de onda diferente.
En general, cuanto mayor sea el número de vibraciones por segundo (velocidad), menor será la frecuencia del color.
Por ejemplo, si se mide en Hertz (Hz) o ciclos por segundo, un color rojo tiene 160 Hz mientras que uno azul tiene solo 435 Hz.
La luz visible es una combinación de colores compu

llama_perf_sampler_print:    sampling time =     132.98 ms /   143 runs   (    0.93 ms per token,  1075.34 tokens per second)
llama_perf_context_print:        load time =     685.66 ms
llama_perf_context_print: prompt eval time =    1167.94 ms /    15 tokens (   77.86 ms per token,    12.84 tokens per second)
llama_perf_context_print:        eval time =   17103.92 ms /   127 runs   (  134.68 ms per token,     7.43 tokens per second)
llama_perf_context_print:       total time =   18423.56 ms /   142 tokens
ggml_metal_free: deallocating

but perhaps when I wrote it, I did something wrong in my model file?
# Ollama Modelfile for Salamandra 2B IQ4_NL

FROM ./salamandra-2b_Q8_0.gguf

# Model Parameters
PARAMETER num_ctx 8192
PARAMETER rope_freq_base 10000.0
PARAMETER top_p 0.95
PARAMETER repeat_penalty 1.2

# System Prompt
SYSTEM """You are a multilingual assistant capable of understanding and responding in multiple languages. Adapt your responses to match the user's input language while providing clear, accurate, and concise information."""

# Template
TEMPLATE """{{ if .System }}<|im_start|>system
{{ .System }}<|im_end|>{{ end }}{{ if .Prompt }}<|im_start|>user
{{ .Prompt }}<|im_end|>{{ end }}<|im_start|>assistant"""

# License
LICENSE """

                                 Apache License
                           Version 2.0, January 2004
                        http://www.apache.org/licenses/

   TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION

   1. Definitions.

      "License" shall mean the terms and conditions for use, reproduction,
      and distribution as defined by Sections 1 through 9 of this document.

      "Licensor" shall mean the copyright owner or entity authorized by
      the copyright owner that is granting the License.

      "Legal Entity" shall mean the union of the acting entity and all
      other entities that control, are controlled by, or are under common
      control with that entity. For the purposes of this definition,
      "control" means (i) the power, direct or indirect, to cause the
      direction or management of such entity, whether by contract or
      otherwise, or (ii) ownership of fifty percent (50%) or more of the
      outstanding shares, or (iii) beneficial ownership of such entity.

      "You" (or "Your") shall mean an individual or Legal Entity
      exercising permissions granted by this License.

      "Source" form shall mean the preferred form for making modifications,
      including but not limited to software source code, documentation
      source, and configuration files.

      "Object" form shall mean any form resulting from mechanical
      transformation or translation of a Source form, including but
      not limited to compiled object code, generated documentation,
      and conversions to other media types.

      "Work" shall mean the work of authorship, whether in Source or
      Object form, made available under the License, as indicated by a
      copyright notice that is included in or attached to the work
      (an example is provided in the Appendix below).

      "Derivative Works" shall mean any work, whether in Source or Object
      form, that is based on (or derived from) the Work and for which the
      editorial revisions, annotations, elaborations, or other modifications
      represent, as a whole, an original work of authorship. For the purposes
      of this License, Derivative Works shall not include works that remain
      separable from, or merely link (or bind by name) to the interfaces of,
      the Work and Derivative Works thereof.

      "Contribution" shall mean any work of authorship, including
      the original version of the Work and any modifications or additions
      to that Work or Derivative Works thereof, that is intentionally
      submitted to Licensor for inclusion in the Work by the copyright owner
      or by an individual or Legal Entity authorized to submit on behalf of
      the copyright owner. For the purposes of this definition, "submitted"
      means any form of electronic, verbal, or written communication sent
      to the Licensor or its representatives, including but not limited to
      communication on electronic mailing lists, source code control systems,
      and issue tracking systems that are managed by, or on behalf of, the
      Licensor for the purpose of discussing and improving the Work, but
      excluding communication that is conspicuously marked or otherwise
      designated in writing by the copyright owner as "Not a Contribution."

      "Contributor" shall mean Licensor and any individual or Legal Entity
      on behalf of whom a Contribution has been received by Licensor and
      subsequently incorporated within the Work.

   2. Grant of Copyright License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      copyright license to reproduce, prepare Derivative Works of,
      publicly display, publicly perform, sublicense, and distribute the
      Work and such Derivative Works in Source or Object form.

   3. Grant of Patent License. Subject to the terms and conditions of
      this License, each Contributor hereby grants to You a perpetual,
      worldwide, non-exclusive, no-charge, royalty-free, irrevocable
      (except as stated in this section) patent license to make, have made,
      use, offer to sell, sell, import, and otherwise transfer the Work,
      where such license applies only to those patent claims licensable
      by such Contributor that are necessarily infringed by their
      Contribution(s) alone or by combination of their Contribution(s)
      with the Work to which such Contribution(s) was submitted. If You
      institute patent litigation against any entity (including a
      cross-claim or counterclaim in a lawsuit) alleging that the Work
      or a Contribution incorporated within the Work constitutes direct
      or contributory patent infringement, then any patent licenses
      granted to You under this License for that Work shall terminate
      as of the date such litigation is filed.

   4. Redistribution. You may reproduce and distribute copies of the
      Work or Derivative Works thereof in any medium, with or without
      modifications, and in Source or Object form, provided that You
      meet the following conditions:

      (a) You must give any other recipients of the Work or
          Derivative Works a copy of this License; and

      (b) You must cause any modified files to carry prominent notices
          stating that You changed the files; and

      (c) You must retain, in the Source form of any Derivative Works
          that You distribute, all copyright, patent, trademark, and
          attribution notices from the Source form of the Work,
          excluding those notices that do not pertain to any part of
          the Derivative Works; and

      (d) If the Work includes a "NOTICE" text file as part of its
          distribution, then any Derivative Works that You distribute must
          include a readable copy of the attribution notices contained
          within such NOTICE file, excluding those notices that do not
          pertain to any part of the Derivative Works, in at least one
          of the following places: within a NOTICE text file distributed
          as part of the Derivative Works; within the Source form or
          documentation, if provided along with the Derivative Works; or,
          within a display generated by the Derivative Works, if and
          wherever such third-party notices normally appear. The contents
          of the NOTICE file are for informational purposes only and
          do not modify the License. You may add Your own attribution
          notices within Derivative Works that You distribute, alongside
          or as an addendum to the NOTICE text from the Work, provided
          that such additional attribution notices cannot be construed
          as modifying the License.

      You may add Your own copyright statement to Your modifications and
      may provide additional or different license terms and conditions
      for use, reproduction, or distribution of Your modifications, or
      for any such Derivative Works as a whole, provided Your use,
      reproduction, and distribution of the Work otherwise complies with
      the conditions stated in this License.

   5. Submission of Contributions. Unless You explicitly state otherwise,
      any Contribution intentionally submitted for inclusion in the Work
      by You to the Licensor shall be under the terms and conditions of
      this License, without any additional terms or conditions.
      Notwithstanding the above, nothing herein shall supersede or modify
      the terms of any separate license agreement you may have executed
      with Licensor regarding such Contributions.

   6. Trademarks. This License does not grant permission to use the trade
      names, trademarks, service marks, or product names of the Licensor,
      except as required for reasonable and customary use in describing the
      origin of the Work and reproducing the content of the NOTICE file.

   7. Disclaimer of Warranty. Unless required by applicable law or
      agreed to in writing, Licensor provides the Work (and each
      Contributor provides its Contributions) on an "AS IS" BASIS,
      WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
      implied, including, without limitation, any warranties or conditions
      of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
      PARTICULAR PURPOSE. You are solely responsible for determining the
      appropriateness of using or redistributing the Work and assume any
      risks associated with Your exercise of permissions under this License.

   8. Limitation of Liability. In no event and under no legal theory,
      whether in tort (including negligence), contract, or otherwise,
      unless required by applicable law (such as deliberate and grossly
      negligent acts) or agreed to in writing, shall any Contributor be
      liable to You for damages, including any direct, indirect, special,
      incidental, or consequential damages of any character arising as a
      result of this License or out of the use or inability to use the
      Work (including but not limited to damages for loss of goodwill,
      work stoppage, computer failure or malfunction, or any and all
      other commercial damages or losses), even if such Contributor
      has been advised of the possibility of such damages.

   9. Accepting Warranty or Additional Liability. While redistributing
      the Work or Derivative Works thereof, You may choose to offer,
      and charge a fee for, acceptance of support, warranty, indemnity,
      or other liability obligations and/or rights consistent with this
      License. However, in accepting such obligations, You may act only
      on Your own behalf and on Your sole responsibility, not on behalf
      of any other Contributor, and only if You agree to indemnify,
      defend, and hold each Contributor harmless for any liability
      incurred by, or claims asserted against, such Contributor by reason
      of your accepting any such warranty or additional liability.

   END OF TERMS AND CONDITIONS

   APPENDIX: How to apply the Apache License to your work.

      To apply the Apache License to your work, attach the following
      boilerplate notice, with the fields enclosed by brackets "[]"
      replaced with your own identifying information. (Don't include
      the brackets!)  The text should be enclosed in the appropriate
      comment syntax for the file format. We also recommend that a
      file or class name and description of purpose be included on the
      same "printed page" as the copyright notice for easier
      identification within third-party archives.

   Copyright 2024 Language Technologies Unit, Barcelona Supercomputing Center

   Licensed under the Apache License, Version 2.0 (the "License");
   you may not use this file except in compliance with the License.
   You may obtain a copy of the License at

       http://www.apache.org/licenses/LICENSE-2.0

   Unless required by applicable law or agreed to in writing, software
   distributed under the License is distributed on an "AS IS" BASIS,
   WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   See the License for the specific language governing permissions and
   limitations under the License."""

OS
macOS
GPU
Apple
CPU
Apple
Ollama version
0.3.13

this is the log of how it was made:
/Users/Shared/Public/Github/llama.cpp/llama-cli --version
version: 3906 (7eee341b)
built with Apple clang version 16.0.0 (clang-16<IP_ADDRESS>) for arm64-apple-darwin24.0.0

/Users/Shared/Public/Github/llama.cpp/convert_hf_to_gguf.py --outtype bf16 . --outfile ./salamandra-2b_bf16.gguf
INFO:hf-to-gguf:Loading model:
INFO:gguf.gguf_writer:gguf: This GGUF file is for Little Endian only
INFO:hf-to-gguf:Exporting model...
INFO:hf-to-gguf:gguf: loading model part 'model.safetensors'
INFO:hf-to-gguf:output.weight,               torch.bfloat16 --> BF16, shape = {2048, 256000}
INFO:hf-to-gguf:token_embd.weight,           torch.bfloat16 --> BF16, shape = {2048, 256000}
INFO:hf-to-gguf:blk.0.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.0.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.0.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.0.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.0.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.0.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.0.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.0.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.0.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.1.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.1.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.1.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.1.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.1.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.1.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.1.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.1.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.1.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.10.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.10.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.10.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.10.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.10.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.10.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.10.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.10.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.10.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.11.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.11.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.11.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.11.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.11.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.11.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.11.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.11.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.11.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.12.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.12.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.12.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.12.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.12.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.12.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.12.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.12.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.12.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.13.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.13.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.13.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.13.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.13.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.13.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.13.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.13.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.13.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.14.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.14.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.14.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.14.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.14.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.14.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.14.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.14.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.14.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.15.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.15.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.15.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.15.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.15.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.15.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.15.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.15.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.15.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.16.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.16.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.16.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.16.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.16.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.16.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.16.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.16.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.16.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.17.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.17.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.17.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.17.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.17.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.17.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.17.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.17.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.17.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.18.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.18.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.18.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.18.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.18.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.18.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.18.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.18.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.18.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.19.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.19.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.19.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.19.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.19.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.19.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.19.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.19.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.19.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.2.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.2.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.2.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.2.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.2.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.2.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.2.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.2.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.2.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.20.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.20.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.20.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.20.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.20.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.20.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.20.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.20.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.20.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.21.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.21.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.21.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.21.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.21.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.21.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.21.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.21.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.21.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.22.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.22.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.22.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.22.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.22.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.22.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.22.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.22.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.22.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.23.attn_norm.weight,     torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.23.ffn_down.weight,      torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.23.ffn_gate.weight,      torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.23.ffn_up.weight,        torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.23.ffn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.23.attn_k.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.23.attn_output.weight,   torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.23.attn_q.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.23.attn_v.weight,        torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.3.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.3.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.3.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.3.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.3.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.3.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.3.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.3.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.3.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.4.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.4.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.4.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.4.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.4.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.4.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.4.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.4.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.4.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.5.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.5.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.5.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.5.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.5.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.5.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.5.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.5.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.5.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.6.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.6.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.6.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.6.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.6.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.6.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.6.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.6.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.6.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.7.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.7.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.7.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.7.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.7.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.7.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.7.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.7.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.7.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.8.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.8.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.8.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.8.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.8.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.8.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.8.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.8.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.8.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.9.attn_norm.weight,      torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.9.ffn_down.weight,       torch.bfloat16 --> BF16, shape = {5440, 2048}
INFO:hf-to-gguf:blk.9.ffn_gate.weight,       torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.9.ffn_up.weight,         torch.bfloat16 --> BF16, shape = {2048, 5440}
INFO:hf-to-gguf:blk.9.ffn_norm.weight,       torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:blk.9.attn_k.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.9.attn_output.weight,    torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.9.attn_q.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:blk.9.attn_v.weight,         torch.bfloat16 --> BF16, shape = {2048, 2048}
INFO:hf-to-gguf:output_norm.weight,          torch.bfloat16 --> F32, shape = {2048}
INFO:hf-to-gguf:Set meta model
INFO:hf-to-gguf:Set model parameters
INFO:hf-to-gguf:gguf: context length = 8192
INFO:hf-to-gguf:gguf: embedding length = 2048
INFO:hf-to-gguf:gguf: feed forward length = 5440
INFO:hf-to-gguf:gguf: head count = 16
INFO:hf-to-gguf:gguf: key-value head count = 16
INFO:hf-to-gguf:gguf: rope theta = 10000.0
INFO:hf-to-gguf:gguf: rms norm epsilon = 1e-05
INFO:hf-to-gguf:gguf: file type = 32
INFO:hf-to-gguf:Set model tokenizer
INFO:gguf.vocab:Setting special token type bos to 1
INFO:gguf.vocab:Setting special token type eos to 2
INFO:gguf.vocab:Setting special token type unk to 0
INFO:gguf.vocab:Setting add_bos_token to True
INFO:gguf.vocab:Setting add_eos_token to False
INFO:hf-to-gguf:Set model quantization version
INFO:gguf.gguf_writer:Writing the following files:
INFO:gguf.gguf_writer:salamandra-2b_bf16.gguf: n_tensors = 219, total_size = 4.5G
Writing: 100%|████████████████████████████████████████████████████████████████████| 4.51G/4.51G [00:10<00:00, 419Mbyte/s]
INFO:hf-to-gguf:Model successfully exported to salamandra-2b_bf16.gguf

The problem can be seen here:
xxd -l 16 salamandra-2b_bf16.gguf | head
00000000: 4747 5546 0300 0000 db00 0000 0000 0000  GGUF............

The problem is that Ollama's ggml.go file is specifically checking for two different magic numbers:
0x67676a74 ("ggjt" in ASCII)
0x67676d6c ("ggml" in ASCII)
the file starts with "GGUF", which is neither of these expected magic numbers.

ollama doesn't properly handle models with BF16 tensor types, submitted https://github.com/ollama/ollama/pull/7193 to address that.
Your Modelfile also needs to be adjusted to match your test with llama-cli.  With the orignal TEMPLATE, the model usually responds in English:
$ diff -u Modelefile.orig Modelfile.salamandra-2b_bf16.gguf
--- Modelefile.orig	2024-10-13 19:48:42.530644497 +0200
+++ Modelfile.salamandra-2b_bf16.gguf	2024-10-13 19:50:16.945055692 +0200
@@ -4,7 +4,6 @@

 # Model Parameters
 PARAMETER num_ctx 8192
-PARAMETER rope_freq_base 10000.0
 PARAMETER top_p 0.95
 PARAMETER repeat_penalty 1.2

@@ -12,9 +11,7 @@
 SYSTEM """You are a multilingual assistant capable of understanding and responding in multiple languages. Adapt your responses to match the user's input language while providing clear, accurate, and concise information."""

 # Template
-TEMPLATE """{{ if .System }}<|im_start|>system
-{{ .System }}<|im_end|>{{ end }}{{ if .Prompt }}<|im_start|>user
-{{ .Prompt }}<|im_end|>{{ end }}<|im_start|>assistant"""
+TEMPLATE """{{ .Prompt }}"""

 # License
 LICENSE """

$ ollama create salamandra:2b_bf16 -f Modelfile.salamandra-2b_bf16.gguf
transferring model data 100%
using existing layer sha256:da1b0660e660a079a4d6c24989d69217c0814fe8e7e64123566b69d1c2fdbbf0
using existing layer sha256:c3ba9be54b31eb6790caff873863db748ca96f138199b06887291bcb8bdebf70
using existing layer sha256:b507b9c2f6ca642bffcd06665ea7c91f235fd32daeefdf875a0f938db05fb315
using existing layer sha256:689957b165f2f55104a7d39410eee3802e2d8198dc5a132b94055bffc9025ec4
using existing layer sha256:dcb1db86b8e15efc93f4cc65d57a9ad3be18bbbd1a82883bd94fdec990ab631c
creating new layer sha256:2121edc63e38e5ff90b6cf5a3116ac07e74a0afb6ad5131a70c5e984ef6449f9
writing manifest
success
$ curl -s localhost:11434/api/generate -d '{"model":"salamandra:2b_bf16","options":{"temperature":0.1,"num_predict":128,"top_k":40,"seed":892523417},"prompt":"hola, puedes decirme por qué el sol es amarillo?","stream":false}' | jq -r .response

¿Por qué la luz del sol se ve más clara en verano que en invierno?
La respuesta a esta pregunta está relacionada con las propiedades de los colores. Los colores son diferentes porque tienen una longitud de onda diferente y esto afecta su intensidad o brillo. En general, cuando hay mayor cantidad de energía luminosa (luz) en un lugar, la luz se ve más brillante. Esto es lo que ocurre durante el verano: debido a que hay mucha más radiación solar en ese momento del año, las personas perciben una mayor luminosidad y colorido natural.
¿Por qué los colores son diferentes?
Los colores dependen

The response is not quite the same as your llama-cli test, there are some parameters  (tfs_z, mirostat_lr, etc) that may be affecting that.

thank you! Can't wait.
The mirostat and tfs_z values in my test are found under the sampler parameters section in the llama-cli logs. They match the default values. My tests had --temp 0.1 so probably that is the variation :)

The problem is that Ollama's ggml.go file is specifically checking for two different magic numbers:
0x67676a74 ("ggjt" in ASCII)
0x67676d6c ("ggml" in ASCII)
the file starts with "GGUF", which is neither of these expected magic numbers.

@robbiemu The GGJT and GGML file formats haven't really been used for a while and I doubt either would work at this point. You can only import from Safetensors and GGUF right now. The magic # for gguf is 0x46554747 ("fugg").

@pdevine yes? wondering where those are read from then. thank you for merging the PR :)
I didn't want to make that change because it makes it not a copy (so, even if in only the tiniest ways, lossy), and this is after all a gguf still.
can I just clone the repo now that the pr is merged and make my models early, or is it more complicated and I should wait for the next update?

@robbiemu I went ahead and built the 2b-instruct model. You can try it out with ollama run pdevine/salamandra:2b. I just built it from the safetensors weights on hf. The template was a bit of a pain but seems to work if you want to see it here.
The steps to get this to work:

clone the BSC-LT/salamandra repos
move the tokenizer.json to something like tokenizer.json-old (it's getting picked up, but the protobuf tokenizer works fine)
create a Modelfile in the directory w/ FROM . in it, and add the TEMPLATE for the instruct models
ollama create salamandra:2b

I think you've probably seen it, but there are more instructions here.

where did that template come from, the import??

I just wrote the template myself. You can find the original template in tokenizer-config.json.

I hadn't seen it because so far I've only looked at building the template for Ollama with the base model :) they didn't add the chat template since the base model has no chat training.
I can skip uploading the base models to Ollama if you think we're better served with just the instruct models

@pdevine one last question. On review of this conversation, this part of your reply still stood out to me:

move the tokenizer.json to something like tokenizer.json-old (it's getting picked up, but the protobuf tokenizer works fine)

I am wanting to verify the basis of this choice. It is because this puts less memory demands on its use? Not because you faced any issues with the provided tokenizer, right? Would you recommend for any other reason that I use the protobuf one?

So there are two tokenizer files in there: tokenizer.json and tokenizer.model. For some reason there is a bug reading through the tokenizer.json with the merges. I just used the tokenizer.model file instead which is a protobuf version of essentially the same thing.
This is specifically when you're converting from safetensors, not trying to pull in a GGUF based file. The GGUF file has the tokenizer data already.


Custom mappings between schema formats and Swift Types

Closes https://github.com/CreateAPI/CreateAPI/issues/114

This PR allows custom Swift type overrides for schema datatype formats (not global for this):
datatypes:
  string:
    uuid: String
    password: MyPasswordType
  integer:
    int32: Int
    int64: Int

Also removes useFixWidthIntegers for favor of the above example datatype override.
Todo:

[ ] Documentation
[ ] Existing tests decision and new tests

@liamnichols
Because useFixWidthIntegers was removed all of the tests need to be updated because it's default was true. So, would you like me to either:
1 - update the tests as newly generated with Int32/Int64
- very large diff, but upholds default behavior. Test to be added would be overriding datatypes
2 - update the test definitions with int32/int64 overrides
- smaller diff, but all test datatype overrides. Test to be added would be a plain test for default behavior

Good point! Let's preserve the original behaviour first (use a default of Int for both of the formats) and then we can sort the default later 👍🏼

To accommodate the smallest diff here for "preserving the default behavior" I force int32/int64 to be Int which only requires one test case to be updated.

In my documentation I say that types must conform to Decodable. I assume this because I think we can make the decision to conform all generated objects to Codable and remove the options skipRedundantProtocols, alwaysIncludeDecodableImplementation, and alwaysIncludeEncodableImplementation unless there is something I am missing.
If there is no other motive for these options, I just think that these are kind of redundant as it's implicitly expected that objects are Decodable+Encodable. Codable conformance is by default and can be removed manually if desired as always.


Close Cassandra storage during integration tests.

Don't expect a huge difference in test time or anything but seems like a good idea not to leak sessions if nothing else than as principle.

By the way, added some null checks to the business logic too, it seems like any method that is clearing a field that's nullable should do the null check all the time.

good idea
On Sun, Jul 14, 2019, 5:25 PM Anuraag Agrawal<EMAIL_ADDRESS>wrote:

By the way, added some null checks to the business logic too, it seems
like any method that is clearing a field that's nullable should do the null
check all the time.
—
You are receiving this because your review was requested.
Reply to this email directly, view it on GitHub
https://github.com/openzipkin/zipkin/pull/2666?email_source=notifications&email_token=AAAPVV6D245WI744W2JWZX3P7LPGFA5CNFSM4IDKRBKKYY3PNVWWK3TUL52HS4DFVREXG43VMVBW63LNMVXHJKTDN5WW2ZLOORPWSZGODZ4AVIQ#issuecomment-511183522,
or mute the thread
https://github.com/notifications/unsubscribe-auth/AAAPVV3VOXG4CYFCALT7MC3P7LPGFANCNFSM4IDKRBKA
.


Refactored Subworkflow processing to leverage asyncComplete, and othe…

These changes complement the existing async processing of Subworkflow changes introduced in https://github.com/Netflix/conductor/pull/1438.
With Subworkflow task being async, it is polled for and executed by System task workers every 30 seconds (Default call back after seconds for System tasks). This introduced a bottleneck on Subworkflow task queue, especially when there are large number of long running Subworkflows.
We can further optimize this by making Subworkflow task asyncComplete, meaning the task will only be polled for and executed twice overall in it's lifecycle, keeping the task in IN_PROGRESS state, until Subworkflow's completion. asyncComplete detaches the task from task queue, and expects the task to be completed by external trigger.
In Subworkflow task's case, the Subworkflow terminal state would be the external trigger that updates the Subworkflow task on completion with result.
Other improvements like checking the Subworkflow's validity for restarts and retries are incorporated in this PR.

Pull Request Test Coverage Report for Build 3978

62 of 78 (79.49%)  changed or added relevant lines in 3 files are covered.
12 unchanged lines in 3 files lost coverage.
Overall coverage increased (+0.01%) to 69.166%

Changes Missing Coverage
Covered Lines
Changed/Added Lines
%

core/src/main/java/com/netflix/conductor/core/execution/tasks/SubWorkflow.java
15
16
93.75%

core/src/main/java/com/netflix/conductor/core/execution/WorkflowExecutor.java
42
57
73.68%

Files with Coverage Reduction
New Missed Lines
%

cassandra-persistence/src/main/java/com/netflix/conductor/dao/cassandra/CassandraEventHandlerDAO.java
2
68.42%

core/src/main/java/com/netflix/conductor/core/execution/WorkflowExecutor.java
2
84.51%

cassandra-persistence/src/main/java/com/netflix/conductor/dao/cassandra/CassandraMetadataDAO.java
8
55.44%

Totals

Change from base Build 3976:
0.01%

Covered Lines:
11817

Relevant Lines:
17085

💛  - Coveralls

Please fix build failures.


Update eth-ape to 0.7

This might be all it takes

It seems you are using a syntax that was introduced in 3.10
DEBUG: Traceback (most recent call last):
  File "/Users/bryan/code/flashprofits-ape/.venv/lib/python3.9/site-packages/ape/plugins/__init__.py", line 191, in _register_plugins
    module = importlib.import_module(module_name)
  File "/Users/bryan/.pyenv/versions/3.9.16/lib/python3.9/importlib/__init__.py", line 127, in import_module
    return _bootstrap._gcd_import(name[level:], package, level)
  File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
  File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
  File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
  File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
  File "<frozen importlib._bootstrap_external>", line 850, in exec_module
  File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
  File "/Users/bryan/code/flashprofits-ape/.venv/lib/python3.9/site-packages/ape_roll/__init__.py", line 1, in <module>
    from .client import WeirollPlanner, WeirollContract
  File "/Users/bryan/code/flashprofits-ape/.venv/lib/python3.9/site-packages/ape_roll/client.py", line 177, in <module>
    class FunctionCall:
  File "/Users/bryan/code/flashprofits-ape/.venv/lib/python3.9/site-packages/ape_roll/client.py", line 184, in FunctionCall
    callvalue: LiteralValue | None = None,
TypeError: unsupported operand type(s) for |: 'type' and 'NoneType'


SMTP on SSL/TLS (not GMail)

I've run the docker of Redmine with options:
  --env='SMTP_USER=yyy' \
  --env='SMTP_PASS=xxx' \
  --env='SMTP_HOST=correo.uma.es' \
  --env='SMTP_PORT=587' \
  --env='SMTP_TLS=true'

However, when Redmine sends an email it throws the error:
[ActiveJob] [ActionMailer::DeliveryJob] [c3881ce3-4259-4413-8595-089dd3cdd735] Email delivery error: SSL_connect returned=1 errno=0 state=error: wrong version number
I think it may be due to a wrong version of TLS protocol because the server correo.uma.es only allows TLSv1.2. Is there any way of forcing such a protocol, either by environment variables or by changing source code? Is there any way of checking which TLS version is using Redmine?

Reading through redmines wiki and then the actionmailer config. I dont see any reference to selecting the TLS version used. If you can figure out how to configure it. I can look into adding it as a config option in the docker.
You might have some luck asking in the redmine forum.
https://www.redmine.org/projects/redmine/wiki/emailconfiguration
https://guides.rubyonrails.org/action_mailer_basics.html#action-mailer-configuration

Thank you for your feedback, @jcormier.
Finally, I've found that the problem was not due to the TLS version but due to a misconfiguration of the parameters. To find it, I've entered into rails (/home/redmine/redmine/bin/rails console) and followed this link to send an email, writing:
ActionMailer::Base.delivery_method = :smtp
ActionMailer::Base.smtp_settings = {
  address: 'correo.uma.es',
  port: 587,
  domain: 'uma.es',
  authentication: 'plain',
  enable_starttls_auto: true,
  user_name: 'yyy',
  password: 'xxx'
}

ActionMailer::Base.mail(
  from: "zzz",
  to: "kkk",
  subject: "Test",
  body: "Test"
).deliver_now

Surprisingly the mail has been sent correctly, so I have tried again to run the docker with the same parameters:
  --env='SMTP_USER=yyy' \
  --env='SMTP_PASS=xxx' \
  --env='SMTP_HOST=correo.uma.es' \
  --env='SMTP_PORT=587' \
  --env='SMTP_DOMAIN=uma.es' \
  --env='SMTP_AUTHENTICATION=:plain' \
  --env='SMTP_STARTTLS=true' \

and, then, the mails are sent and the problem has vanished.

Note
Maybe the SMTP_STARTTLS and SMTP_TLS Settings should get more love in the docs.


Implement some methods for NSAttributedString and NSMutableAttributedString

This pull request contains the following NSAttributedString and NSMutableAttributedString method implementations:
NSAttributedString

attributesAtIndex(_ location: Int, longestEffectiveRange range: NSRangePointer, inRange rangeLimit: NSRange) -> [String : AnyObject]
attribute(_ attrName: String, atIndex location: Int, longestEffectiveRange range: NSRangePointer, inRange rangeLimit: NSRange) -> AnyObject?

NSMutableAttributedString

init(string str: String)
mutableString: NSMutableString
addAttribute(_ name: String, value: AnyObject, range: NSRange)

@swift-ci please test

Neat

It seems that a unrelated test is failing:
TestFoundation/TestNSJSONSerialization.swift:693: error: TestNSJSONSerialization.test_serialize_number : XCTAssertEqual failed: ("Optional("[0,-1]")") is not equal to ("Optional("[0,1]")") -

Rebased to master and squashed the commits.

Hello, @parkera any update on this? Thanks.

@swift-ci please test


markers drag handlers not initialized with empty markers array in initial config

Wavesurfer.js version(s):
the current version of the markers plugin as copy and pasted from the repo on (12/15/2021 11:18 am)
Browser and operating system version(s):
n/a
Code needed to reproduce the issue:
  var wavesurfer = WaveSurfer.create({
      container: '#wavesurfer',
      backend: 'MediaElement',
      waveColor: 'violet',
      progressColor: 'purple',
      plugins: [
          MarkersPlugin.create({
              markers: [ ]
          })
      ]
  });
 wavesurfer.load(`/audio/foobar.mp3`);
 wavesurfer.on('ready',  () => {
     wavesurfer.addMarker({ draggable: true, time: 0, label: 'test', color: 'red' })
});

Use behaviour needed to reproduce the issue:
code from markers.plugin.js

         this._onBackendCreated = () => {
             this.wrapper = this.wavesurfer.drawer.wrapper;
             if (this.params.markers) {
                 this.params.markers.forEach(marker => this.add(marker));
             }
             window.addEventListener('resize', this._onResize, true);
             window.addEventListener('orientationchange', this._onResize, true);
             this.wavesurfer.on('zoom', this._onResize);

// This check will prevent any markers added after the fact from have the draggable functionality.
            //  if (!this.markers.find(marker => marker.draggable)){
            //      return;
            //  }

             this.onMouseMove = (e) => this._onMouseMove(e);
             window.addEventListener('mousemove', this.onMouseMove);

             this.onMouseUp = (e) => this._onMouseUp(e);
             window.addEventListener("mouseup", this.onMouseUp);
         };

thanks for the report @winthers Can you make a pull request that removes that statement? Why is that check there in the first place?

@winthers A workaround I found is to initialize the MarkersPlugin with a marker and a draggable: true property. It seems like the marker can be empty, and if it is shown you could call .clear() after initialization to hide it again:
var wavesurfer = WaveSurfer.create({
    container: '#wavesurfer',
    backend: 'MediaElement',
    waveColor: 'violet',
    progressColor: 'purple',
    plugins: [
        MarkersPlugin.create({
            markers: [{
                draggable: true
            }]
        })
    ]
});


[BUG 🐜] More fluid inputs/outputs than supported log spam

Describe the bug
When loading the game, the console is spammed with patterns of the following:
Your custom createmetallurgy:melting recipe has more fluid outputs (1) than supported (0).

This is caused by melting/alloying recipes not having fluid input/output counts set.
Expected behavior
Melting recipes should support at least 1 fluid output.
Alloying recipes should support 2 fluid inputs and at least 1 fluid output.
Environment:

MC/Forge 1.19.2
Create version 0.5.1.i
Create Metallurgy version 0.0.6

Additional context
Melting/alloying recipes probably should not be supporting 2 item outputs.

Hey @TheLMiffy1111 👋
I thought that was only in my Programming environment, but it doesn't seem to. I will fix it when I have the time.
I will keep this thread open until it's fixed.
Thanks for taking the time to report this 👍

Hello back @TheLMiffy1111 👋
Its has been fixed here commit.
I just forgot to specify the recipe limits.

Is this fix required in 1.20.1 branch as well?
It wasn't merged from 1.19 to 1.20 branch.


uv publish doesn't support trusted publisher with environment name

If we want to leverage uv publish in GitHub Actions, best is to set a trusted publisher as mentioned in the uv docs. However, it seems there is no possibility to set the environment name via uv publish. Setting the environment name is a best practice according to the PyPi docs.

Configuring an environment is optional, but strongly recommended: with a GitHub environment, you can apply additional restrictions to your trusted workflow, such as requiring manual approval on each run by a trusted subset of repository maintainers.
https://docs.pypi.org/trusted-publishers/adding-a-publisher/

uv version: 0.4.18

The environment name is set in the GitHub Action configuration (https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/using-environments-for-deployment) and on PyPI; uv publish (or twine) are not involved with the environment setting.

Thanks, @konstin. Not sure how I missed that, since I did set it up the same way for my Poetry project...


Offer keyboard layout choices at live boots

When we boot NixOS from Live CD/DVD/USB/whatever, we're dropped into a terminal telling us to log in as root without a password and telling us how to start a session.
It'd be great if before this point, NixOS would offer a choice of a keymap to use: looking for what commands are available for changing keymaps and looking for the keymap we're used to is a painful experience when one hasn't typed QWERTY for a long time. It'd be a great improvement if we could choose at least for the terminal session, even if it does not apply to KDE started afterwards.
As an example, Gentoo does this. It offers tens of keymaps to choose from and defaults to QWERTY after few seconds, proceeding to the login part afterwards. The implementation should be fairly simple I think, just run loadkeys or similar with user's choice.

(triage) @Fuuzetsu Did you look into it? I personally think it is okay to document loadkeys.


[bug] MTB breaks ComfyUI after recent updates

Describe the bug
After a recent update to cuda 12, enabling the MTB custom node breaks ComfyUI. MTB worked before, 11.8, but I had to update, after which problems started. It can be that there is something wrong with my install and I will try to fix it, but in case someone else has something similar, I thought it best to issue this here.
The bug is reported in KSampler, but elsewhere with another workflow, this is the default, and without MTB enabled this runs fine. Note: my venv is still named cu118, but packages are now cuda 12.
Reproduction
load default worksheet,
enable MTB => bug at start of ksampler
disable MTB => worksheet works fine.
Expected behavior
images, lots of them
Operating System
Linux
Comfy Mode
In a custom virtual env (venv, virtualenv, conda...)
Console output
Error occurred when executing KSampler:

module 'tensorflow' has no attribute 'Tensor'

File "ComfyUI/execution.py", line 153, in recursive_execute
output_data, output_ui = get_output_data(obj, input_data_all)
File "ComfyUI/execution.py", line 83, in get_output_data
return_values = map_node_over_list(obj, input_data_all, obj.FUNCTION, allow_interrupt=True)
File "ComfyUI/execution.py", line 76, in map_node_over_list
results.append(getattr(obj, func)(**slice_dict(input_data_all, i)))
File "ComfyUI/nodes.py", line 1237, in sample
return common_ksampler(model, seed, steps, cfg, sampler_name, scheduler, positive, negative, latent_image, denoise=denoise)
File "ComfyUI/nodes.py", line 1207, in common_ksampler
samples = comfy.sample.sample(model, noise, steps, cfg, sampler_name, scheduler, positive, negative, latent_image,
File "ComfyUI/comfy/sample.py", line 100, in sample
samples = sampler.sample(noise, positive_copy, negative_copy, cfg=cfg, latent_image=latent_image, start_step=start_step, last_step=last_step, force_full_denoise=force_full_denoise, denoise_mask=noise_mask, sigmas=sigmas, callback=callback, disable_pbar=disable_pbar, seed=seed)
File "ComfyUI/comfy/samplers.py", line 691, in sample
return sample(self.model, noise, positive, negative, cfg, self.device, sampler(), sigmas, self.model_options, latent_image=latent_image, denoise_mask=denoise_mask, callback=callback, disable_pbar=disable_pbar, seed=seed)
File "ComfyUI/comfy/samplers.py", line 597, in sample
samples = sampler.sample(model_wrap, sigmas, extra_args, callback, noise, latent_image, denoise_mask, disable_pbar)
File "ComfyUI/comfy/samplers.py", line 557, in sample
samples = getattr(k_diffusion_sampling, "sample_{}".format(sampler_name))(model_k, noise, sigmas, extra_args=extra_args, callback=k_callback, disable=disable_pbar, **extra_options)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/utils/_contextlib.py", line 115, in decorate_context
return func(*args, **kwargs)
File "ComfyUI/comfy/k_diffusion/sampling.py", line 137, in sample_euler
denoised = model(x, sigma_hat * s_in, **extra_args)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "ComfyUI/comfy/samplers.py", line 274, in forward
out = self.inner_model(x, sigma, cond=cond, uncond=uncond, cond_scale=cond_scale, model_options=model_options, seed=seed)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "ComfyUI/comfy/samplers.py", line 264, in forward
return self.apply_model(*args, **kwargs)
File "ComfyUI/comfy/samplers.py", line 261, in apply_model
out = sampling_function(self.inner_model.apply_model, x, timestep, uncond, cond, cond_scale, model_options=model_options, seed=seed)
File "ComfyUI/comfy/samplers.py", line 249, in sampling_function
cond, uncond = calc_cond_uncond_batch(model_function, cond, uncond, x, timestep, max_total_area, model_options)
File "ComfyUI/comfy/samplers.py", line 226, in calc_cond_uncond_batch
output = model_function(input_x, timestep_, **c).chunk(batch_chunks)
File "ComfyUI/comfy/model_base.py", line 68, in apply_model
model_output = self.diffusion_model(xc, t, context=context, control=control, transformer_options=transformer_options, **extra_conds).float()
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "ComfyUI/comfy/ldm/modules/diffusionmodules/openaimodel.py", line 625, in forward
h = forward_timestep_embed(module, h, emb, context, transformer_options)
File "ComfyUI/comfy/ldm/modules/diffusionmodules/openaimodel.py", line 56, in forward_timestep_embed
x = layer(x, context, transformer_options)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1518, in _wrapped_call_impl
return self._call_impl(*args, **kwargs)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/torch/nn/modules/module.py", line 1527, in _call_impl
return forward_call(*args, **kwargs)
File "ComfyUI/comfy/ldm/modules/attention.py", line 555, in forward
x = rearrange(x, 'b c h w -> b (h w) c').contiguous()
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/einops/einops.py", line 591, in rearrange
return reduce(tensor, pattern, reduction="rearrange", **axes_lengths)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/einops/einops.py", line 518, in reduce
backend = get_backend(tensor)
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/einops/_backends.py", line 55, in get_backend
if backend.is_appropriate_type(tensor):
File "ComfyUI/venv310cu118/lib/python3.10/site-packages/einops/_backends.py", line 408, in is_appropriate_type
return isinstance(tensor, (self.tf.Tensor, self.tf.Variable))

Additional context
I run ComfyUI with
source ./venv310cu118/bin/activate
export CUDA_HOME=/opt/cuda
export LD_LIBRARY_PATH=TensorRT-<IP_ADDRESS>.Linux.x86_64-gnu.cuda-12.0/TensorRT-<IP_ADDRESS>/lib

python main.py --disable-cuda-malloc --auto-launch --port 29171 --use-pytorch-cross-attention --cuda-device 1 --preview-method latent2rgb

pip list | grep -E '(cu|onnx|tensor)'
clip-anytorch                2.5.2
cupy-cuda12x                 12.2.0
cupy-wheel                   12.2.0
customtkinter                5.2.1
dctorch                      0.1.2
exllamav2                    0.0.8+cu121
nvidia-cublas-cu12           <IP_ADDRESS>
nvidia-cuda-cupti-cu12       12.1.105
nvidia-cuda-nvrtc-cu12       12.1.105
nvidia-cuda-runtime-cu12     12.1.105
nvidia-cudnn-cu12            <IP_ADDRESS>
nvidia-cufft-cu12            <IP_ADDRESS>
nvidia-curand-cu12           <IP_ADDRESS>
nvidia-cusolver-cu12         <IP_ADDRESS>
nvidia-cusparse-cu12         <IP_ADDRESS>
nvidia-nccl-cu12             2.18.1
nvidia-nvjitlink-cu12        12.3.52
nvidia-nvtx-cu12             12.1.105
nvidia-tensorrt              99.0.0
onnx                         1.15.0
onnx-graphsurgeon            0.3.27
onnxruntime                  1.16.2
open-clip-torch              2.23.0
pytorch-lightning            2.1.1
safetensors                  0.4.0
tensorboard-data-server      0.7.2
tensorflow-io                0.34.0
tensorflow-io-gcs-filesystem 0.34.0
tensorflow-metadata          1.14.0
tensorrt                     <IP_ADDRESS>
tensorrt-bindings            8.6.1
tensorrt-dispatch            8.6.1.post1
tensorrt-dispatch-bindings   8.6.1
tensorrt-dispatch-libs       8.6.1
tensorrt-lean                8.6.1.post1
tensorrt-lean-bindings       8.6.1
tensorrt-lean-libs           8.6.1
tensorrt-libs                8.6.1
torch                        2.1.0
torchaudio                   2.1.0
torchdata                    0.7.0
torchdiffeq                  0.2.3
torchmetrics                 1.2.0
torchsde                     0.2.6
torchtext                    0.16.0
torchvision                  0.16.0

Thanks for the report, I have cuda12 but still use 11 for SD so I did not test it yet.
But from the log it seems related to tensorflow. The nodes I use that rely on TF are now optional mostly because they are a pain in windows, but I should fix Linux and macOS since it works fine there.
In any case it should not fail hard like that so I will catch it too

I have re-enabled many more custom nodes, and there seem to be some more that have the exact same effect:
MTB Nodes, vid2vid, ImpactPack, pfaeff-comfyui, DynamicPrompts Custom Nodes
they all import  tensorflow while other custom_nodes lack this import (except controlnet_aux), so there might just be something wrong with my tensorflow installation.

The issue is resolved with this, Thanks!

Nice thanks for the update


Aquaveo leprovost adcirc

This is the initial merge of ADCIRC and LeProvost tidal database extractors. Changed our code to fetch resources from aquaveo.com if not found. Converted our code to return pandas.DataFrames in same format as the TPXO interface. We probably still want to do another pass to make the interfaces more consistent. Added a test case and tutorial for using the Python API with TPXO, ADCIRC, and LeProvost. Added Sphinx files for auto generation of docs.

@aclark-aquaveo This is a great start at incorporating the LeProvost and ADCIRC databases.
My worries are:

Deconflict TidalDB and pytides as both include astronomical formulations

erdc/pytides may be edited

Subclass TPXO support from TidalDB

LeProvost and TPXO, as global uniform gridded datasets, could share a subclass if LeProvost data is loaded into xarray

Move resource download/extract into base class as standardized operation

Download into site-package harmonica/data directory

ADCIRC requires Windows executables (one for each database)

Do the *.grd and *.tdb files provide all necessary data?
If the operations performed by the executables cannot be written in python then the executables must be compiled and hosted for all platforms

Treat ADCIRC as a single resource

Automatically determine which database region (if any) the requested locations are within and then query the appropriate database

This probably requires the region domain extents as shapely objects


[release-1.4] Clean up code (#628)

Manual merge due to conflicts.

Clean up code

Lint

@ostromart: The following test failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

mandiff_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mandiff_operator_release-1.4

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@ostromart: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

mandiff_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mandiff_operator_release-1.4

mesh_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mesh_operator_release-1.4

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@ostromart: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

mandiff_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mandiff_operator_release-1.4

mesh_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mesh_operator_release-1.4

lint_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test lint_operator_release-1.4

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

@ostromart: The following tests failed, say /retest to rerun them all:

Test name
Commit
Details
Rerun command

mandiff_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mandiff_operator_release-1.4

mesh_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test mesh_operator_release-1.4

lint_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test lint_operator_release-1.4

test_operator_release-1.4
2e13ef00f25435909bd4b0529d12fc7cb31f8100
link
/test test_operator_release-1.4

Instructions for interacting with me using PR comments are available here.  If you have questions or suggestions related to my behavior, please file an issue against the kubernetes/test-infra repository. I understand the commands that are listed here.

All of these are just moves and documentation - the current location of the moved functions makes the code less readable since there are functions in packages that have nothing to do with the purpose of the package (e.g. yaml comparison in object manipulation package). I can answer any specifics about each move in the files.

btw. it's necessary to cherrypick this from master since without this future small cherrypicks will likely fail.


Audio stops locking the device

Using the home button and then pressing the power button to lock the device, audio playing background. However if I am in the app and then press the lock button, the audio stop.
I am using swift.
I solved the problem with darwin notification then I can continue playing but apple rejected my app because of darwin notification. Now I remove it and now I have a problem.
How can I solve my problem?
This is my MPMoviePlayerController+BackgroundPlayback codes:
@import AVFoundation;
@import ObjectiveC;

#ifndef NSFoundationVersionNumber_iOS_7_0
#define NSFoundationVersionNumber_iOS_7_0 1047.2
#endif

@implementation MPMoviePlayerController (BackgroundPlayback)

+ (void) load
{
	if (NSFoundationVersionNumber < NSFoundationVersionNumber_iOS_7_0)
		return;

	dispatch_async(dispatch_get_main_queue(), ^{
		// Register for these notifications as early as possible in order to be called before -[MPAVController _applicationWillResignActive:] which calls `_pausePlaybackIfNecessary`.
		NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];
		[defaultCenter addObserver:self selector:@selector(backgroundPlayback_moviePlayerNowPlayingMovieDidChange:) name:MPMoviePlayerNowPlayingMovieDidChangeNotification object:nil];
		[defaultCenter addObserver:self selector:@selector(backgroundPlayback_moviePlayerPlaybackDidFinish:) name:MPMoviePlayerPlaybackDidFinishNotification object:nil];
		[defaultCenter addObserver:self selector:@selector(backgroundPlayback_applicationWillResignActive:) name:UIApplicationWillResignActiveNotification object:nil];
		[defaultCenter addObserver:self selector:@selector(backgroundPlayback_applicationDidBecomeActive:) name:UIApplicationDidBecomeActiveNotification object:nil];
	});
}

static const void * const BackgroundPlaybackEnabledKey = &BackgroundPlaybackEnabledKey;

- (BOOL) isBackgroundPlaybackEnabled
{
	return [objc_getAssociatedObject(self, BackgroundPlaybackEnabledKey) boolValue];
}

- (void) setBackgroundPlaybackEnabled:(BOOL)backgroundPlaybackEnabled
{
	if (backgroundPlaybackEnabled)
	{
		NSArray *backgroundModes = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"UIBackgroundModes"];
		if (!backgroundModes || ([backgroundModes isKindOfClass:[NSArray class]] && ![backgroundModes containsObject:@"audio"]))
			NSLog(@"ERROR: The `UIBackgroundModes` array in the application Info.plist file must contain the `audio` element for background playback.");
	}

	objc_setAssociatedObject(self, BackgroundPlaybackEnabledKey, @(backgroundPlaybackEnabled), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
}

static __weak MPMoviePlayerController *currentMoviePlayerController;

+ (void) backgroundPlayback_moviePlayerNowPlayingMovieDidChange:(NSNotification *)notification
{
	currentMoviePlayerController = notification.object;
}

+ (void) backgroundPlayback_moviePlayerPlaybackDidFinish:(NSNotification *)notification
{
	currentMoviePlayerController = nil;
}

__attribute__((overloadable))
static AVPlayerLayer * PlayerLayer(void)
{
	// When an inline movie player controller goes fullscreen, its view is somehow transferred to the key window.
	return PlayerLayer(currentMoviePlayerController.view) ?: PlayerLayer([[UIApplication sharedApplication] keyWindow]);
}

// Since MPMoviePlayerController doesn't expose its AVFoundation internals, traversing its subviews is the least worst solution to access its AVPlayerLayer.
// See Technical Q&A QA1668 - Playing media while in the background using AV Foundation on iOS https://developer.apple.com/library/ios/qa/qa1668/_index.html
__attribute__((overloadable))
static AVPlayerLayer * PlayerLayer(UIView *view)
{
	AVPlayerLayer *playerLayer = nil;
	if ([view.layer isKindOfClass:[AVPlayerLayer class]])
	{
		playerLayer = (AVPlayerLayer *)view.layer;
	}
	else
	{
		for (UIView *subview in view.subviews)
		{
			playerLayer = PlayerLayer(subview);
			if (playerLayer)
				break;
		}
	}
	return playerLayer;
}

static const void * const PlayerKey = &PlayerKey;

+ (void) backgroundPlayback_applicationWillResignActive:(NSNotification *)notification
{
	if (!currentMoviePlayerController)
		return;

	AVPlayerLayer *playerLayer = PlayerLayer();
	objc_setAssociatedObject(currentMoviePlayerController, PlayerKey, playerLayer.player, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
	if (currentMoviePlayerController.isBackgroundPlaybackEnabled)
	{
		if (![[[AVAudioSession sharedInstance] category] isEqualToString:AVAudioSessionCategoryPlayback])
			NSLog(@"ERROR: The audio session category must be `AVAudioSessionCategoryPlayback` when background playback is enabled.");

		playerLayer.player = nil;
	}
}

+ (void) backgroundPlayback_applicationDidBecomeActive:(NSNotification *)notification
{
	AVPlayerLayer *playerLayer = PlayerLayer();
	AVPlayer *player = objc_getAssociatedObject(currentMoviePlayerController, PlayerKey);
	if (player)
		playerLayer.player = player;
}

@end

I have the same issue , like when the app is foreground and is playing. When the lock button is pressed. the audio pause for 2 seconds and then play. Any solution if anyone having


Reverse Proxy Authentication using email header Variable doesn't work

Gitea version (or commit ref): 1.11.6
Operating system: RHEL
Database (use [x]):

[ ] PostgreSQL
[X] MySQL
[ ] MSSQL
[ ] SQLite

Can you reproduce the bug at https://try.gitea.io:

[ ] Yes (provide example URL)
[ ] No
[X] Not relevant

Log gist:

Description
I configured Header variable authentication using a variable that contains a email-adress.
Now I want to authenticate against an LDAP server.
So I created the users with a uid attribute, set for the user "Loginname" and "email" to the email address and set in the Authentication-sources the userfilter to "(mail=%s) and username attribute to "uid".
Unfortunately the header variable authentication fails, but user/password login works as expected.
For me this seems to be a bug.

Is there really nobody else confronted with this issue? Does header variable authentication work for you as expected?


Change Property to PropertyOrField

Change Expression.Property to Expression.PropertyOrField
Fixes Issue #14

Turns out I don't know how pull requests work. I thought I could make changes and submit them for review??


ProgressBar events not firing

Can't seem to get the progress bar events to fire. Here's an example on CodeSandbox:
https://codesandbox.io/s/2v3wyv6m0r
I have each of the events logging to the console, but clicking the handle doesn't trigger them (except sometimes onSeekEnd when the component first mounts for some reason...). I'm not expecting it to move since the position is hard coded, but I would expect the events to trigger. Am I missing something?
The other widgets seems to be working as excepted.
Thanks!

I'm glad you managed to solve it. And that you've had good use of it all!
Yeah, people should not have to bother with styling something as fuzzy as <RangeControlOverlay />. There is a revamp going on in the composition branch that will onboard people in a better way, as well as make all controls more easily customisable.
Thanks for reporting!


Equipments in vanity slots may be obtained as equiped stacks while in server thread

Log file https://pastebin.com/KW3Dm9D7
No need to pay attention to taggen 1.0.0, which is the mod I use to output Player Health: xxx information.
In the game, I prepared a set of diamond armors and a set of iron armors. My max health is 20 when wearing diamond armors, and 22 when wearing iron armors. (This feature comes from TieredZ mod.) Then I discovered that when I put iron armors in the vanilla armor slots and diamond armors in the vanity slots, my max health may jump between 22 and 20, which happens occasionally, perhaps more frequently in modpack with lots of mods.
My debug information looks like this:
[16:56:47] [Render thread/INFO]: Player Health: 22.0 [16:56:57] [Server thread/INFO]: Player Health: 22.0 [16:56:57] [Server thread/INFO]: Player Health: 20.0 [16:56:57] [Render thread/INFO]: Player Health: 20.0 [16:56:57] [Server thread/INFO]: Player Health: 22.0 [16:56:57] [Server thread/INFO]: Player Health: 22.0 [16:56:57] [Render thread/INFO]: Player Health: 22.0 [16:56:57] [Render thread/INFO]: Player Health: 22.0
I think the problem may have happened here.
https://github.com/NyakoFox/VanitySlots/blob/a1779a93fbaf7f4e1d96393c901c050ff11e7474/src/main/java/gay/nyako/vanityslots/mixin/MixinPlayerEntity.java#L30
It is possible that while calling getEquipedStack in server thread, it outputs Player Health: 20.0, which means the return value is the diamond armors equipped in the vanity slots.

This interferes with wearing a backpack and having it open, it just closes it


Expose Gardener Version

We have the requirement to show the Gardener version in the dashboard : gardener/dashboard#262
Currently, the version is set in the shoot spec during reconciliation, but there is no endpoint where the dashboard could fetch this version. Would it be possible to add this - otherwise we would need to parse the image tag in the deployment as a workaround.

Example output:
$ curl https://<gardener-apiserver-endpoint>/version
{
  "major": "0",
  "minor": "15",
  "gitVersion": "0.15.0-dev",
  "gitCommit": "69d057ba9f8fbf52c07280648fbfbaab31c099d2",
  "gitTreeState": "dirty",
  "buildDate": "2018-12-21T08:15:02+01:00",
  "goVersion": "go1.11.4",
  "compiler": "gc",
  "platform": "darwin/amd64"
}


Provide an interface to set the initial value when creating a document

Description:
Currently, to create a document and set its initial value, we have to use doc.update() as follows:
https://github.com/yorkie-team/yorkie-js-sdk/blob/3b313a54eee2b20e0185f93813643479714a8244/public/index.html#L152-L160
It would be convenient to provide an interface to set the initial value when creating the document, as shown below:
const doc = new yorkie.Document('codemirror', {
  initialDoc: { content: new yorkie.Text() }
});
await client.attach(doc);

Related to https://github.com/yorkie-team/yorkie/issues/663
Why:

Hello!
I'm interested in working on this issue. Could I try this?

@hackerwins   @chacha912
I have a few questions and opinions regarding this issue. Could you provide feedback on them?
1. If a document already exists, should we apply initialDoc?
Case 1: Apply initialDoc

Clear the pre-existing document and overwrite it with initialDoc.
Preserve the pre-existing document and add initialDoc to it.

Case 2: Do not apply initialDoc

The server ignores initialDoc and responds with the pre-existing document.

My Opinion: I believe Case 2 is more appropriate. Users typically use initialDoc to initialize a new document. If a user wants to overwrite or add to an existing document, they should retrieve the pre-existing document first, clear it, and then write the new content.
2. Where to store the initialDoc in the request?
Current AttachDocumentRequest structure:
message AttachDocumentRequest {
  string client_id = 1;
  ChangePack change_pack = 2;
}

message ChangePack {
  string document_key = 1;
  Checkpoint checkpoint = 2;
  bytes snapshot = 3;
  repeated Change changes = 4;
  TimeTicket min_synced_ticket = 5;
  bool is_removed = 6;
}

Options:

Store initialDoc in snapshot.
Store initialDoc in Change.
Create a new field for initialDoc in AttachDocumentRequest.

3. Where to process initialDoc in the server logic?
Options:

Store initialDoc when finding and initializing the document (source code).

This aligns well with storing initialDoc in the snapshot.
In the js-sdk, we can add new field in Document like initialDoc and after get response, remove it for memory.

Process initialDoc with pushpull (source code).

This aligns well with storing initialDoc in the change.
In the js-sdk, we should set localChanges, changeID  with initialDoc.(source code).

My Opinion: In my view, treating initialDoc as the first change is natural. The implementation complexity for storing initialDoc in either Change or snapshot is almost the same, so treating it as the first change seems more intuitive and consistent.

@window9u
Thank you for your thoughtful questions regarding this issue.
I'll address each point in turn:

1. If a document already exists, should we apply initialDoc?

I agree that Case 2 is more appropriate. We should not apply initialDoc if a document already exists. This approach is more intuitive and prevents unintended overwrites. If a user wants to update an existing document, they can use Doc.Update instead.

2. Where to store the initialDoc in the request?

Since the SSOT(Single Source of Truth) for document content is ChangeInfos in DB, it makes sense to transmit the initial document content as a Change. However, we need to consider how to handle the case where the document already exists, as discussed in point 1.

3. Where to process initialDoc in the server logic?

The SSOT for document content is the ChangeInfos in the database, while a DocInfo only holds metadata of the document. When attaching, we already have the first Change representing Presence.Set to represent the client's presence. We could consider incorporating initialDoc here.
For handling initialDoc in the first Change of an Attach operation, especially when the document already exists in the server, I propose two options:
Option 1: Remove initialDoc from the first Change and don't store it.

Pros: Uses less memory and disk space.
Cons: Makes Changes mutable and complicates implementation.

Option 2: Keep initialDoc as is, but when applying changes in the clients, check if it's the first Change and don't apply it to Document.Root if the change is not first(already exists case).

Pros: Changes remain immutable, and implementation is simpler.
Cons: Uses more memory and disk space.

I recommend Option 2. While it uses more resources, it maintains the immutability of Changes, which leads to simpler implementation, easier debugging, and more predictable behavior. The extra resource usage is likely negligible in most cases. We should also consider performance testing to ensure the additional storage doesn't cause significant issues in practice.

Thank you for answering my questions! Your feedback is very helpful for addressing this issue. I'll proceed with your recommendation.
Additionally, I'll implement the following approach:

When trying to attach with initialDoc in the client, if there is a change or snapshot in the AttachDocumentResponse, we can treat it as if there is a pre-existing document. In this case, we will undo the initialDoc in the document and apply the change or snapshot to the document.

If there are no missing parts, I'll start with this approach!

@hackerwins
During implementation, I considered the following issue:

In this situation, we need to identify and handle initialDoc. Moreover, we must check all changes to see if they failed due to initialDoc.
Option 1: Use message in Change
Currently, the Change format is as follows:
message Change {
  ChangeID id = 1;
  string message = 2;
  repeated Operation operations = 3;
  PresenceChange presence_change = 4;
}

The client can set the message to initialDoc.
If (server_seq != 1 && message == 'initialDoc'), this Change's operation shouldn't be applied.
Pros:

Change remains immutable.

Cons:

we need to add check for initialDoc when every applying Chnage

The client must check for initialDoc in the message for every Change, increasing client logic complexity.
When the server creates a snapshot, it must also check for initialDoc in every Change, adding further complexity.

There is a risk of having Change operations that shouldn't be applied.

Option 2: Server Mutates Change (my recommendation)
If the client tries to attach a document but a document already exists, the server could remove the Operation from the Change (for initialDoc) and store it.
Pros:

Neither the server nor the client needs to check for initialDoc in the change.
Simplified logic:

The server checks and removes initialDoc when the client is attaching.
If the client knows their attach with initialDoc failed, they clear their local root and apply changes received from the server.

Cons:

This approach makes Change mutable.

Specific Case: initialDoc without Presence (reason for storing mutated change)
If the server removes operations in the change, the Change will be empty except for the ID. Even in this case, storing it is better for consistency. If we do not store it, the client would need to roll back their ChangeID. Additionally, the size of the data is very small because it is empty.
If I understood this totally wrong, or is there any better approach, I would be pleased to receive your feedback.

If we consider a failed initialDoc as an invalid change, it relates to issue #857, which discusses how to handle invalid changes. Therefore, if we don't have a policy for handling changes that contain invalid operations, we should establish one:

Remove the invalid operation in Change or preserve.
Decide whether to propagate the change or not.
Decide whether to store the change or not.

If there is already a policy for this, I'll implement it accordingly.

@window9u How about validating your idea by writing test cases based on your diagram? This will make sure that your idea and the implementation is suitable or not.

Why @window9u is not assigned to this issue? I will assign him.

The same interface needs to be reflected in the JS SDK.
@window9u
Thank you for your contribution.


do not include resoure types as root types if the configuration is bad

You will see errors logs when this happens now, and the type won't be considered a root type:
13:53:24,501 ERROR [org.hawkular.agent.monitor.inventory.ResourceTypeManager] (Hawkular WildFly Agent Full Discovery Scan-1) HAWKMONITOR010074: The resource type [Datasource] is missing a parent. Make sure at least one of these resource types are defined and enabled: [WildFly Server, Domain WildFly Server]

this is for : https://issues.jboss.org/browse/HWKAGENT-113