chenhaodev commited on
Commit
7b9ed8d
·
verified ·
1 Parent(s): 14bf68b

Upload folder using huggingface_hub

Browse files
Files changed (45) hide show
  1. .gitattributes +4 -0
  2. README.md +63 -0
  3. adapter_config.json +51 -0
  4. adapter_model.safetensors +3 -0
  5. chat_template.jinja +344 -0
  6. checkpoint-200/README.md +210 -0
  7. checkpoint-200/adapter_config.json +50 -0
  8. checkpoint-200/adapter_model.safetensors +3 -0
  9. checkpoint-200/chat_template.jinja +344 -0
  10. checkpoint-200/optimizer.pt +3 -0
  11. checkpoint-200/processor_config.json +75 -0
  12. checkpoint-200/rng_state.pth +3 -0
  13. checkpoint-200/scheduler.pt +3 -0
  14. checkpoint-200/tokenizer.json +3 -0
  15. checkpoint-200/tokenizer_config.json +95 -0
  16. checkpoint-200/trainer_state.json +2034 -0
  17. checkpoint-200/training_args.bin +3 -0
  18. checkpoint-400/README.md +210 -0
  19. checkpoint-400/adapter_config.json +50 -0
  20. checkpoint-400/adapter_model.safetensors +3 -0
  21. checkpoint-400/chat_template.jinja +344 -0
  22. checkpoint-400/optimizer.pt +3 -0
  23. checkpoint-400/processor_config.json +75 -0
  24. checkpoint-400/rng_state.pth +3 -0
  25. checkpoint-400/scheduler.pt +3 -0
  26. checkpoint-400/tokenizer.json +3 -0
  27. checkpoint-400/tokenizer_config.json +95 -0
  28. checkpoint-400/trainer_state.json +0 -0
  29. checkpoint-400/training_args.bin +3 -0
  30. checkpoint-600/README.md +210 -0
  31. checkpoint-600/adapter_config.json +50 -0
  32. checkpoint-600/adapter_model.safetensors +3 -0
  33. checkpoint-600/chat_template.jinja +344 -0
  34. checkpoint-600/optimizer.pt +3 -0
  35. checkpoint-600/processor_config.json +75 -0
  36. checkpoint-600/rng_state.pth +3 -0
  37. checkpoint-600/scheduler.pt +3 -0
  38. checkpoint-600/tokenizer.json +3 -0
  39. checkpoint-600/tokenizer_config.json +95 -0
  40. checkpoint-600/trainer_state.json +0 -0
  41. checkpoint-600/training_args.bin +3 -0
  42. processor_config.json +75 -0
  43. tokenizer.json +3 -0
  44. tokenizer_config.json +95 -0
  45. training_args.bin +3 -0
.gitattributes CHANGED
@@ -33,3 +33,7 @@ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
 
 
 
 
 
33
  *.zip filter=lfs diff=lfs merge=lfs -text
34
  *.zst filter=lfs diff=lfs merge=lfs -text
35
  *tfevents* filter=lfs diff=lfs merge=lfs -text
36
+ checkpoint-200/tokenizer.json filter=lfs diff=lfs merge=lfs -text
37
+ checkpoint-400/tokenizer.json filter=lfs diff=lfs merge=lfs -text
38
+ checkpoint-600/tokenizer.json filter=lfs diff=lfs merge=lfs -text
39
+ tokenizer.json filter=lfs diff=lfs merge=lfs -text
README.md ADDED
@@ -0,0 +1,63 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
3
+ library_name: peft
4
+ model_name: chenhaodev_unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged_1776696734
5
+ tags:
6
+ - base_model:adapter:chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ licence: license
13
+ pipeline_tag: text-generation
14
+ ---
15
+
16
+ # Model Card for chenhaodev_unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged_1776696734
17
+
18
+ This model is a fine-tuned version of [chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged](https://huggingface.co/chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged).
19
+ It has been trained using [TRL](https://github.com/huggingface/trl).
20
+
21
+ ## Quick start
22
+
23
+ ```python
24
+ from transformers import pipeline
25
+
26
+ question = "If you had a time machine, but could only go to the past or the future once and never return, which would you choose and why?"
27
+ generator = pipeline("text-generation", model="None", device="cuda")
28
+ output = generator([{"role": "user", "content": question}], max_new_tokens=128, return_full_text=False)[0]
29
+ print(output["generated_text"])
30
+ ```
31
+
32
+ ## Training procedure
33
+
34
+
35
+
36
+
37
+ This model was trained with SFT.
38
+
39
+ ### Framework versions
40
+
41
+ - PEFT 0.18.1
42
+ - TRL: 0.23.1
43
+ - Transformers: 5.5.0
44
+ - Pytorch: 2.10.0+cu128
45
+ - Datasets: 4.3.0
46
+ - Tokenizers: 0.22.2
47
+
48
+ ## Citations
49
+
50
+
51
+
52
+ Cite TRL as:
53
+
54
+ ```bibtex
55
+ @misc{vonwerra2022trl,
56
+ title = {{TRL: Transformer Reinforcement Learning}},
57
+ author = {Leandro von Werra and Younes Belkada and Lewis Tunstall and Edward Beeching and Tristan Thrush and Nathan Lambert and Shengyi Huang and Kashif Rasul and Quentin Gallou{\'e}dec},
58
+ year = 2020,
59
+ journal = {GitHub repository},
60
+ publisher = {GitHub},
61
+ howpublished = {\url{https://github.com/huggingface/trl}}
62
+ }
63
+ ```
adapter_config.json ADDED
@@ -0,0 +1,51 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": {
6
+ "base_model_class": "Gemma4ForConditionalGeneration",
7
+ "parent_library": "transformers.models.gemma4.modeling_gemma4",
8
+ "unsloth_fixed": true
9
+ },
10
+ "base_model_name_or_path": "chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged",
11
+ "bias": "none",
12
+ "corda_config": null,
13
+ "ensure_weight_tying": false,
14
+ "eva_config": null,
15
+ "exclude_modules": null,
16
+ "fan_in_fan_out": false,
17
+ "inference_mode": true,
18
+ "init_lora_weights": true,
19
+ "layer_replication": null,
20
+ "layers_pattern": null,
21
+ "layers_to_transform": null,
22
+ "loftq_config": {},
23
+ "lora_alpha": 32,
24
+ "lora_bias": false,
25
+ "lora_dropout": 0.0,
26
+ "megatron_config": null,
27
+ "megatron_core": "megatron.core",
28
+ "modules_to_save": null,
29
+ "peft_type": "LORA",
30
+ "peft_version": "0.18.1",
31
+ "qalora_group_size": 16,
32
+ "r": 16,
33
+ "rank_pattern": {},
34
+ "revision": null,
35
+ "target_modules": [
36
+ "o_proj",
37
+ "down_proj",
38
+ "k_proj",
39
+ "up_proj",
40
+ "q_proj",
41
+ "v_proj",
42
+ "gate_proj"
43
+ ],
44
+ "target_parameters": null,
45
+ "task_type": "CAUSAL_LM",
46
+ "trainable_token_indices": null,
47
+ "use_dora": false,
48
+ "use_qalora": false,
49
+ "use_rslora": false,
50
+ "unsloth_training_method": "qlora"
51
+ }
adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:74cbeea179026dd191ebed8036ca25bfe0e8a34550ca98a20fb31cecc76780c4
3
+ size 169741912
chat_template.jinja ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro format_parameters(properties, required) -%}
2
+ {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
3
+ {%- set ns = namespace(found_first=false) -%}
4
+ {%- for key, value in properties | dictsort -%}
5
+ {%- set add_comma = false -%}
6
+ {%- if key not in standard_keys -%}
7
+ {%- if ns.found_first %},{% endif -%}
8
+ {%- set ns.found_first = true -%}
9
+ {{ key }}:{
10
+ {%- if value['description'] -%}
11
+ description:<|"|>{{ value['description'] }}<|"|>
12
+ {%- set add_comma = true -%}
13
+ {%- endif -%}
14
+ {%- if value['type'] | upper == 'STRING' -%}
15
+ {%- if value['enum'] -%}
16
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
17
+ enum:{{ format_argument(value['enum']) }}
18
+ {%- endif -%}
19
+ {%- elif value['type'] | upper == 'ARRAY' -%}
20
+ {%- if value['items'] is mapping and value['items'] -%}
21
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
22
+ items:{
23
+ {%- set ns_items = namespace(found_first=false) -%}
24
+ {%- for item_key, item_value in value['items'] | dictsort -%}
25
+ {%- if item_value is not none -%}
26
+ {%- if ns_items.found_first %},{% endif -%}
27
+ {%- set ns_items.found_first = true -%}
28
+ {%- if item_key == 'properties' -%}
29
+ properties:{
30
+ {%- if item_value is mapping -%}
31
+ {{- format_parameters(item_value, value['items']['required'] | default([])) -}}
32
+ {%- endif -%}
33
+ }
34
+ {%- elif item_key == 'required' -%}
35
+ required:[
36
+ {%- for req_item in item_value -%}
37
+ <|"|>{{- req_item -}}<|"|>
38
+ {%- if not loop.last %},{% endif -%}
39
+ {%- endfor -%}
40
+ ]
41
+ {%- elif item_key == 'type' -%}
42
+ {%- if item_value is string -%}
43
+ type:{{ format_argument(item_value | upper) }}
44
+ {%- else -%}
45
+ type:{{ format_argument(item_value | map('upper') | list) }}
46
+ {%- endif -%}
47
+ {%- else -%}
48
+ {{ item_key }}:{{ format_argument(item_value) }}
49
+ {%- endif -%}
50
+ {%- endif -%}
51
+ {%- endfor -%}
52
+ }
53
+ {%- endif -%}
54
+ {%- endif -%}
55
+ {%- if value['nullable'] %}
56
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
57
+ nullable:true
58
+ {%- endif -%}
59
+ {%- if value['type'] | upper == 'OBJECT' -%}
60
+ {%- if value['properties'] is defined and value['properties'] is mapping -%}
61
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
62
+ properties:{
63
+ {{- format_parameters(value['properties'], value['required'] | default([])) -}}
64
+ }
65
+ {%- elif value is mapping -%}
66
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
67
+ properties:{
68
+ {{- format_parameters(value, value['required'] | default([])) -}}
69
+ }
70
+ {%- endif -%}
71
+ {%- if value['required'] -%}
72
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
73
+ required:[
74
+ {%- for item in value['required'] | default([]) -%}
75
+ <|"|>{{- item -}}<|"|>
76
+ {%- if not loop.last %},{% endif -%}
77
+ {%- endfor -%}
78
+ ]
79
+ {%- endif -%}
80
+ {%- endif -%}
81
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
82
+ type:<|"|>{{ value['type'] | upper }}<|"|>}
83
+ {%- endif -%}
84
+ {%- endfor -%}
85
+ {%- endmacro -%}
86
+ {%- macro format_function_declaration(tool_data) -%}
87
+ declaration:{{- tool_data['function']['name'] -}}{description:<|"|>{{- tool_data['function']['description'] -}}<|"|>
88
+ {%- set params = tool_data['function']['parameters'] -%}
89
+ {%- if params -%}
90
+ ,parameters:{
91
+ {%- if params['properties'] -%}
92
+ properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
93
+ {%- endif -%}
94
+ {%- if params['required'] -%}
95
+ required:[
96
+ {%- for item in params['required'] -%}
97
+ <|"|>{{- item -}}<|"|>
98
+ {{- ',' if not loop.last -}}
99
+ {%- endfor -%}
100
+ ],
101
+ {%- endif -%}
102
+ {%- if params['type'] -%}
103
+ type:<|"|>{{- params['type'] | upper -}}<|"|>}
104
+ {%- endif -%}
105
+ {%- endif -%}
106
+ {%- if 'response' in tool_data['function'] -%}
107
+ {%- set response_declaration = tool_data['function']['response'] -%}
108
+ ,response:{
109
+ {%- if response_declaration['description'] -%}
110
+ description:<|"|>{{- response_declaration['description'] -}}<|"|>,
111
+ {%- endif -%}
112
+ {%- if response_declaration['type'] | upper == 'OBJECT' -%}
113
+ type:<|"|>{{- response_declaration['type'] | upper -}}<|"|>}
114
+ {%- endif -%}
115
+ {%- endif -%}
116
+ }
117
+ {%- endmacro -%}
118
+ {%- macro format_argument(argument, escape_keys=True) -%}
119
+ {%- if argument is string -%}
120
+ {{- '<|"|>' + argument + '<|"|>' -}}
121
+ {%- elif argument is boolean -%}
122
+ {{- 'true' if argument else 'false' -}}
123
+ {%- elif argument is mapping -%}
124
+ {{- '{' -}}
125
+ {%- set ns = namespace(found_first=false) -%}
126
+ {%- for key, value in argument | dictsort -%}
127
+ {%- if ns.found_first %},{% endif -%}
128
+ {%- set ns.found_first = true -%}
129
+ {%- if escape_keys -%}
130
+ {{- '<|"|>' + key + '<|"|>' -}}
131
+ {%- else -%}
132
+ {{- key -}}
133
+ {%- endif -%}
134
+ :{{- format_argument(value, escape_keys=escape_keys) -}}
135
+ {%- endfor -%}
136
+ {{- '}' -}}
137
+ {%- elif argument is sequence -%}
138
+ {{- '[' -}}
139
+ {%- for item in argument -%}
140
+ {{- format_argument(item, escape_keys=escape_keys) -}}
141
+ {%- if not loop.last %},{% endif -%}
142
+ {%- endfor -%}
143
+ {{- ']' -}}
144
+ {%- else -%}
145
+ {{- argument -}}
146
+ {%- endif -%}
147
+ {%- endmacro -%}
148
+ {%- macro strip_thinking(text) -%}
149
+ {%- set ns = namespace(result='') -%}
150
+ {%- for part in text.split('<channel|>') -%}
151
+ {%- if '<|channel>' in part -%}
152
+ {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
153
+ {%- else -%}
154
+ {%- set ns.result = ns.result + part -%}
155
+ {%- endif -%}
156
+ {%- endfor -%}
157
+ {{- ns.result | trim -}}
158
+ {%- endmacro -%}
159
+
160
+ {%- macro format_tool_response_block(tool_name, response) -%}
161
+ {{- '<|tool_response>' -}}
162
+ {%- if response is mapping -%}
163
+ {{- 'response:' + tool_name + '{' -}}
164
+ {%- for key, value in response | dictsort -%}
165
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
166
+ {%- if not loop.last %},{% endif -%}
167
+ {%- endfor -%}
168
+ {{- '}' -}}
169
+ {%- else -%}
170
+ {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}
171
+ {%- endif -%}
172
+ {{- '<tool_response|>' -}}
173
+ {%- endmacro -%}
174
+
175
+ {%- set ns = namespace(prev_message_type=None) -%}
176
+ {%- set loop_messages = messages -%}
177
+ {{- bos_token -}}
178
+ {#- Handle System/Tool Definitions Block -#}
179
+ {%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}
180
+ {{- '<|turn>system\n' -}}
181
+
182
+ {#- Inject Thinking token at the very top of the FIRST system turn -#}
183
+ {%- if enable_thinking is defined and enable_thinking -%}
184
+ {{- '<|think|>\n' -}}
185
+ {%- set ns.prev_message_type = 'think' -%}
186
+ {%- endif -%}
187
+
188
+ {%- if messages[0]['role'] in ['system', 'developer'] -%}
189
+ {{- messages[0]['content'] | trim -}}
190
+ {%- set loop_messages = messages[1:] -%}
191
+ {%- endif -%}
192
+
193
+ {%- if tools -%}
194
+ {%- for tool in tools %}
195
+ {{- '<|tool>' -}}
196
+ {{- format_function_declaration(tool) | trim -}}
197
+ {{- '<tool|>' -}}
198
+ {%- endfor %}
199
+ {%- set ns.prev_message_type = 'tool' -%}
200
+ {%- endif -%}
201
+
202
+ {{- '<turn|>\n' -}}
203
+ {%- endif %}
204
+
205
+ {#- Pre-scan: find last user message index for reasoning guard -#}
206
+ {%- set ns_turn = namespace(last_user_idx=-1) -%}
207
+ {%- for i in range(loop_messages | length) -%}
208
+ {%- if loop_messages[i]['role'] == 'user' -%}
209
+ {%- set ns_turn.last_user_idx = i -%}
210
+ {%- endif -%}
211
+ {%- endfor -%}
212
+
213
+ {#- Loop through messages -#}
214
+ {%- for message in loop_messages -%}
215
+ {%- if message['role'] != 'tool' -%}
216
+ {%- set ns.prev_message_type = None -%}
217
+ {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}
218
+ {#- Detect continuation: suppress duplicate <|turn>model when previous non-tool message was also assistant -#}
219
+ {%- set prev_nt = namespace(role=None, found=false) -%}
220
+ {%- if loop.index0 > 0 -%}
221
+ {%- for j in range(loop.index0 - 1, -1, -1) -%}
222
+ {%- if not prev_nt.found -%}
223
+ {%- if loop_messages[j]['role'] != 'tool' -%}
224
+ {%- set prev_nt.role = loop_messages[j]['role'] -%}
225
+ {%- set prev_nt.found = true -%}
226
+ {%- endif -%}
227
+ {%- endif -%}
228
+ {%- endfor -%}
229
+ {%- endif -%}
230
+ {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}
231
+ {%- if not continue_same_model_turn -%}
232
+ {{- '<|turn>' + role + '\n' }}
233
+ {%- endif -%}
234
+
235
+ {#- Render reasoning/reasoning_content as thinking channel -#}
236
+ {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}
237
+ {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}
238
+ {{- '<|channel>thought\n' + thinking_text + '\n<channel|>' -}}
239
+ {%- endif -%}
240
+
241
+ {%- if message['tool_calls'] -%}
242
+ {%- for tool_call in message['tool_calls'] -%}
243
+ {%- set function = tool_call['function'] -%}
244
+ {{- '<|tool_call>call:' + function['name'] + '{' -}}
245
+ {%- if function['arguments'] is mapping -%}
246
+ {%- set ns_args = namespace(found_first=false) -%}
247
+ {%- for key, value in function['arguments'] | dictsort -%}
248
+ {%- if ns_args.found_first %},{% endif -%}
249
+ {%- set ns_args.found_first = true -%}
250
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
251
+ {%- endfor -%}
252
+ {%- elif function['arguments'] is string -%}
253
+ {{- function['arguments'] -}}
254
+ {%- endif -%}
255
+ {{- '}<tool_call|>' -}}
256
+ {%- endfor -%}
257
+ {%- set ns.prev_message_type = 'tool_call' -%}
258
+ {%- endif -%}
259
+
260
+ {%- set ns_tr_out = namespace(flag=false) -%}
261
+ {%- if message.get('tool_responses') -%}
262
+ {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}
263
+ {%- for tool_response in message['tool_responses'] -%}
264
+ {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}
265
+ {%- set ns_tr_out.flag = true -%}
266
+ {%- set ns.prev_message_type = 'tool_response' -%}
267
+ {%- endfor -%}
268
+ {%- elif message.get('tool_calls') -%}
269
+ {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}
270
+ {%- set ns_tool_scan = namespace(stopped=false) -%}
271
+ {%- for k in range(loop.index0 + 1, loop_messages | length) -%}
272
+ {%- if ns_tool_scan.stopped -%}
273
+ {%- elif loop_messages[k]['role'] != 'tool' -%}
274
+ {%- set ns_tool_scan.stopped = true -%}
275
+ {%- else -%}
276
+ {%- set follow = loop_messages[k] -%}
277
+ {#- Resolve tool_call_id to function name -#}
278
+ {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}
279
+ {%- for tc in message['tool_calls'] -%}
280
+ {%- if tc.get('id') == follow.get('tool_call_id') -%}
281
+ {%- set ns_tname.name = tc['function']['name'] -%}
282
+ {%- endif -%}
283
+ {%- endfor -%}
284
+ {#- Handle content as string or content-parts array -#}
285
+ {%- set tool_body = follow.get('content') -%}
286
+ {%- if tool_body is string -%}
287
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
288
+ {%- elif tool_body is sequence and tool_body is not string -%}
289
+ {%- set ns_txt = namespace(s='') -%}
290
+ {%- for part in tool_body -%}
291
+ {%- if part.get('type') == 'text' -%}
292
+ {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}
293
+ {%- endif -%}
294
+ {%- endfor -%}
295
+ {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}
296
+ {%- else -%}
297
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
298
+ {%- endif -%}
299
+ {%- set ns_tr_out.flag = true -%}
300
+ {%- set ns.prev_message_type = 'tool_response' -%}
301
+ {%- endif -%}
302
+ {%- endfor -%}
303
+ {%- endif -%}
304
+
305
+ {%- if message['content'] is string -%}
306
+ {%- if role == 'model' -%}
307
+ {{- strip_thinking(message['content']) -}}
308
+ {%- else -%}
309
+ {{- message['content'] | trim -}}
310
+ {%- endif -%}
311
+ {%- elif message['content'] is sequence -%}
312
+ {%- for item in message['content'] -%}
313
+ {%- if item['type'] == 'text' -%}
314
+ {%- if role == 'model' -%}
315
+ {{- strip_thinking(item['text']) -}}
316
+ {%- else -%}
317
+ {{- item['text'] | trim -}}
318
+ {%- endif -%}
319
+ {%- elif item['type'] == 'image' -%}
320
+ {{- '<|image|>' -}}
321
+ {%- set ns.prev_message_type = 'image' -%}
322
+ {%- elif item['type'] == 'audio' -%}
323
+ {{- '<|audio|>' -}}
324
+ {%- set ns.prev_message_type = 'audio' -%}
325
+ {%- elif item['type'] == 'video' -%}
326
+ {{- '<|video|>' -}}
327
+ {%- set ns.prev_message_type = 'video' -%}
328
+ {%- endif -%}
329
+ {%- endfor -%}
330
+ {%- endif -%}
331
+
332
+ {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}
333
+ {{- '<|tool_response>' -}}
334
+ {%- elif not (ns_tr_out.flag and not message.get('content')) -%}
335
+ {{- '<turn|>\n' -}}
336
+ {%- endif -%}
337
+ {%- endif -%}
338
+ {%- endfor -%}
339
+
340
+ {%- if add_generation_prompt -%}
341
+ {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}
342
+ {{- '<|turn>model\n' -}}
343
+ {%- endif -%}
344
+ {%- endif -%}
checkpoint-200/README.md ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ ---
13
+
14
+ # Model Card for Model ID
15
+
16
+ <!-- Provide a quick summary of what the model is/does. -->
17
+
18
+
19
+
20
+ ## Model Details
21
+
22
+ ### Model Description
23
+
24
+ <!-- Provide a longer summary of what this model is. -->
25
+
26
+
27
+
28
+ - **Developed by:** [More Information Needed]
29
+ - **Funded by [optional]:** [More Information Needed]
30
+ - **Shared by [optional]:** [More Information Needed]
31
+ - **Model type:** [More Information Needed]
32
+ - **Language(s) (NLP):** [More Information Needed]
33
+ - **License:** [More Information Needed]
34
+ - **Finetuned from model [optional]:** [More Information Needed]
35
+
36
+ ### Model Sources [optional]
37
+
38
+ <!-- Provide the basic links for the model. -->
39
+
40
+ - **Repository:** [More Information Needed]
41
+ - **Paper [optional]:** [More Information Needed]
42
+ - **Demo [optional]:** [More Information Needed]
43
+
44
+ ## Uses
45
+
46
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
47
+
48
+ ### Direct Use
49
+
50
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
51
+
52
+ [More Information Needed]
53
+
54
+ ### Downstream Use [optional]
55
+
56
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
57
+
58
+ [More Information Needed]
59
+
60
+ ### Out-of-Scope Use
61
+
62
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
63
+
64
+ [More Information Needed]
65
+
66
+ ## Bias, Risks, and Limitations
67
+
68
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
69
+
70
+ [More Information Needed]
71
+
72
+ ### Recommendations
73
+
74
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
75
+
76
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
77
+
78
+ ## How to Get Started with the Model
79
+
80
+ Use the code below to get started with the model.
81
+
82
+ [More Information Needed]
83
+
84
+ ## Training Details
85
+
86
+ ### Training Data
87
+
88
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
89
+
90
+ [More Information Needed]
91
+
92
+ ### Training Procedure
93
+
94
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
95
+
96
+ #### Preprocessing [optional]
97
+
98
+ [More Information Needed]
99
+
100
+
101
+ #### Training Hyperparameters
102
+
103
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
104
+
105
+ #### Speeds, Sizes, Times [optional]
106
+
107
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
108
+
109
+ [More Information Needed]
110
+
111
+ ## Evaluation
112
+
113
+ <!-- This section describes the evaluation protocols and provides the results. -->
114
+
115
+ ### Testing Data, Factors & Metrics
116
+
117
+ #### Testing Data
118
+
119
+ <!-- This should link to a Dataset Card if possible. -->
120
+
121
+ [More Information Needed]
122
+
123
+ #### Factors
124
+
125
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
126
+
127
+ [More Information Needed]
128
+
129
+ #### Metrics
130
+
131
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
132
+
133
+ [More Information Needed]
134
+
135
+ ### Results
136
+
137
+ [More Information Needed]
138
+
139
+ #### Summary
140
+
141
+
142
+
143
+ ## Model Examination [optional]
144
+
145
+ <!-- Relevant interpretability work for the model goes here -->
146
+
147
+ [More Information Needed]
148
+
149
+ ## Environmental Impact
150
+
151
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
152
+
153
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
154
+
155
+ - **Hardware Type:** [More Information Needed]
156
+ - **Hours used:** [More Information Needed]
157
+ - **Cloud Provider:** [More Information Needed]
158
+ - **Compute Region:** [More Information Needed]
159
+ - **Carbon Emitted:** [More Information Needed]
160
+
161
+ ## Technical Specifications [optional]
162
+
163
+ ### Model Architecture and Objective
164
+
165
+ [More Information Needed]
166
+
167
+ ### Compute Infrastructure
168
+
169
+ [More Information Needed]
170
+
171
+ #### Hardware
172
+
173
+ [More Information Needed]
174
+
175
+ #### Software
176
+
177
+ [More Information Needed]
178
+
179
+ ## Citation [optional]
180
+
181
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
182
+
183
+ **BibTeX:**
184
+
185
+ [More Information Needed]
186
+
187
+ **APA:**
188
+
189
+ [More Information Needed]
190
+
191
+ ## Glossary [optional]
192
+
193
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
194
+
195
+ [More Information Needed]
196
+
197
+ ## More Information [optional]
198
+
199
+ [More Information Needed]
200
+
201
+ ## Model Card Authors [optional]
202
+
203
+ [More Information Needed]
204
+
205
+ ## Model Card Contact
206
+
207
+ [More Information Needed]
208
+ ### Framework versions
209
+
210
+ - PEFT 0.18.1
checkpoint-200/adapter_config.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": {
6
+ "base_model_class": "Gemma4ForConditionalGeneration",
7
+ "parent_library": "transformers.models.gemma4.modeling_gemma4",
8
+ "unsloth_fixed": true
9
+ },
10
+ "base_model_name_or_path": "chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged",
11
+ "bias": "none",
12
+ "corda_config": null,
13
+ "ensure_weight_tying": false,
14
+ "eva_config": null,
15
+ "exclude_modules": null,
16
+ "fan_in_fan_out": false,
17
+ "inference_mode": true,
18
+ "init_lora_weights": true,
19
+ "layer_replication": null,
20
+ "layers_pattern": null,
21
+ "layers_to_transform": null,
22
+ "loftq_config": {},
23
+ "lora_alpha": 32,
24
+ "lora_bias": false,
25
+ "lora_dropout": 0.0,
26
+ "megatron_config": null,
27
+ "megatron_core": "megatron.core",
28
+ "modules_to_save": null,
29
+ "peft_type": "LORA",
30
+ "peft_version": "0.18.1",
31
+ "qalora_group_size": 16,
32
+ "r": 16,
33
+ "rank_pattern": {},
34
+ "revision": null,
35
+ "target_modules": [
36
+ "o_proj",
37
+ "down_proj",
38
+ "k_proj",
39
+ "up_proj",
40
+ "q_proj",
41
+ "v_proj",
42
+ "gate_proj"
43
+ ],
44
+ "target_parameters": null,
45
+ "task_type": "CAUSAL_LM",
46
+ "trainable_token_indices": null,
47
+ "use_dora": false,
48
+ "use_qalora": false,
49
+ "use_rslora": false
50
+ }
checkpoint-200/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3878aeff14c39e9b2d0de794d0963a43f82a41aacb8d5ebbecf5e1a4e2986ae3
3
+ size 169741912
checkpoint-200/chat_template.jinja ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro format_parameters(properties, required) -%}
2
+ {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
3
+ {%- set ns = namespace(found_first=false) -%}
4
+ {%- for key, value in properties | dictsort -%}
5
+ {%- set add_comma = false -%}
6
+ {%- if key not in standard_keys -%}
7
+ {%- if ns.found_first %},{% endif -%}
8
+ {%- set ns.found_first = true -%}
9
+ {{ key }}:{
10
+ {%- if value['description'] -%}
11
+ description:<|"|>{{ value['description'] }}<|"|>
12
+ {%- set add_comma = true -%}
13
+ {%- endif -%}
14
+ {%- if value['type'] | upper == 'STRING' -%}
15
+ {%- if value['enum'] -%}
16
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
17
+ enum:{{ format_argument(value['enum']) }}
18
+ {%- endif -%}
19
+ {%- elif value['type'] | upper == 'ARRAY' -%}
20
+ {%- if value['items'] is mapping and value['items'] -%}
21
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
22
+ items:{
23
+ {%- set ns_items = namespace(found_first=false) -%}
24
+ {%- for item_key, item_value in value['items'] | dictsort -%}
25
+ {%- if item_value is not none -%}
26
+ {%- if ns_items.found_first %},{% endif -%}
27
+ {%- set ns_items.found_first = true -%}
28
+ {%- if item_key == 'properties' -%}
29
+ properties:{
30
+ {%- if item_value is mapping -%}
31
+ {{- format_parameters(item_value, value['items']['required'] | default([])) -}}
32
+ {%- endif -%}
33
+ }
34
+ {%- elif item_key == 'required' -%}
35
+ required:[
36
+ {%- for req_item in item_value -%}
37
+ <|"|>{{- req_item -}}<|"|>
38
+ {%- if not loop.last %},{% endif -%}
39
+ {%- endfor -%}
40
+ ]
41
+ {%- elif item_key == 'type' -%}
42
+ {%- if item_value is string -%}
43
+ type:{{ format_argument(item_value | upper) }}
44
+ {%- else -%}
45
+ type:{{ format_argument(item_value | map('upper') | list) }}
46
+ {%- endif -%}
47
+ {%- else -%}
48
+ {{ item_key }}:{{ format_argument(item_value) }}
49
+ {%- endif -%}
50
+ {%- endif -%}
51
+ {%- endfor -%}
52
+ }
53
+ {%- endif -%}
54
+ {%- endif -%}
55
+ {%- if value['nullable'] %}
56
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
57
+ nullable:true
58
+ {%- endif -%}
59
+ {%- if value['type'] | upper == 'OBJECT' -%}
60
+ {%- if value['properties'] is defined and value['properties'] is mapping -%}
61
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
62
+ properties:{
63
+ {{- format_parameters(value['properties'], value['required'] | default([])) -}}
64
+ }
65
+ {%- elif value is mapping -%}
66
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
67
+ properties:{
68
+ {{- format_parameters(value, value['required'] | default([])) -}}
69
+ }
70
+ {%- endif -%}
71
+ {%- if value['required'] -%}
72
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
73
+ required:[
74
+ {%- for item in value['required'] | default([]) -%}
75
+ <|"|>{{- item -}}<|"|>
76
+ {%- if not loop.last %},{% endif -%}
77
+ {%- endfor -%}
78
+ ]
79
+ {%- endif -%}
80
+ {%- endif -%}
81
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
82
+ type:<|"|>{{ value['type'] | upper }}<|"|>}
83
+ {%- endif -%}
84
+ {%- endfor -%}
85
+ {%- endmacro -%}
86
+ {%- macro format_function_declaration(tool_data) -%}
87
+ declaration:{{- tool_data['function']['name'] -}}{description:<|"|>{{- tool_data['function']['description'] -}}<|"|>
88
+ {%- set params = tool_data['function']['parameters'] -%}
89
+ {%- if params -%}
90
+ ,parameters:{
91
+ {%- if params['properties'] -%}
92
+ properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
93
+ {%- endif -%}
94
+ {%- if params['required'] -%}
95
+ required:[
96
+ {%- for item in params['required'] -%}
97
+ <|"|>{{- item -}}<|"|>
98
+ {{- ',' if not loop.last -}}
99
+ {%- endfor -%}
100
+ ],
101
+ {%- endif -%}
102
+ {%- if params['type'] -%}
103
+ type:<|"|>{{- params['type'] | upper -}}<|"|>}
104
+ {%- endif -%}
105
+ {%- endif -%}
106
+ {%- if 'response' in tool_data['function'] -%}
107
+ {%- set response_declaration = tool_data['function']['response'] -%}
108
+ ,response:{
109
+ {%- if response_declaration['description'] -%}
110
+ description:<|"|>{{- response_declaration['description'] -}}<|"|>,
111
+ {%- endif -%}
112
+ {%- if response_declaration['type'] | upper == 'OBJECT' -%}
113
+ type:<|"|>{{- response_declaration['type'] | upper -}}<|"|>}
114
+ {%- endif -%}
115
+ {%- endif -%}
116
+ }
117
+ {%- endmacro -%}
118
+ {%- macro format_argument(argument, escape_keys=True) -%}
119
+ {%- if argument is string -%}
120
+ {{- '<|"|>' + argument + '<|"|>' -}}
121
+ {%- elif argument is boolean -%}
122
+ {{- 'true' if argument else 'false' -}}
123
+ {%- elif argument is mapping -%}
124
+ {{- '{' -}}
125
+ {%- set ns = namespace(found_first=false) -%}
126
+ {%- for key, value in argument | dictsort -%}
127
+ {%- if ns.found_first %},{% endif -%}
128
+ {%- set ns.found_first = true -%}
129
+ {%- if escape_keys -%}
130
+ {{- '<|"|>' + key + '<|"|>' -}}
131
+ {%- else -%}
132
+ {{- key -}}
133
+ {%- endif -%}
134
+ :{{- format_argument(value, escape_keys=escape_keys) -}}
135
+ {%- endfor -%}
136
+ {{- '}' -}}
137
+ {%- elif argument is sequence -%}
138
+ {{- '[' -}}
139
+ {%- for item in argument -%}
140
+ {{- format_argument(item, escape_keys=escape_keys) -}}
141
+ {%- if not loop.last %},{% endif -%}
142
+ {%- endfor -%}
143
+ {{- ']' -}}
144
+ {%- else -%}
145
+ {{- argument -}}
146
+ {%- endif -%}
147
+ {%- endmacro -%}
148
+ {%- macro strip_thinking(text) -%}
149
+ {%- set ns = namespace(result='') -%}
150
+ {%- for part in text.split('<channel|>') -%}
151
+ {%- if '<|channel>' in part -%}
152
+ {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
153
+ {%- else -%}
154
+ {%- set ns.result = ns.result + part -%}
155
+ {%- endif -%}
156
+ {%- endfor -%}
157
+ {{- ns.result | trim -}}
158
+ {%- endmacro -%}
159
+
160
+ {%- macro format_tool_response_block(tool_name, response) -%}
161
+ {{- '<|tool_response>' -}}
162
+ {%- if response is mapping -%}
163
+ {{- 'response:' + tool_name + '{' -}}
164
+ {%- for key, value in response | dictsort -%}
165
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
166
+ {%- if not loop.last %},{% endif -%}
167
+ {%- endfor -%}
168
+ {{- '}' -}}
169
+ {%- else -%}
170
+ {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}
171
+ {%- endif -%}
172
+ {{- '<tool_response|>' -}}
173
+ {%- endmacro -%}
174
+
175
+ {%- set ns = namespace(prev_message_type=None) -%}
176
+ {%- set loop_messages = messages -%}
177
+ {{- bos_token -}}
178
+ {#- Handle System/Tool Definitions Block -#}
179
+ {%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}
180
+ {{- '<|turn>system\n' -}}
181
+
182
+ {#- Inject Thinking token at the very top of the FIRST system turn -#}
183
+ {%- if enable_thinking is defined and enable_thinking -%}
184
+ {{- '<|think|>\n' -}}
185
+ {%- set ns.prev_message_type = 'think' -%}
186
+ {%- endif -%}
187
+
188
+ {%- if messages[0]['role'] in ['system', 'developer'] -%}
189
+ {{- messages[0]['content'] | trim -}}
190
+ {%- set loop_messages = messages[1:] -%}
191
+ {%- endif -%}
192
+
193
+ {%- if tools -%}
194
+ {%- for tool in tools %}
195
+ {{- '<|tool>' -}}
196
+ {{- format_function_declaration(tool) | trim -}}
197
+ {{- '<tool|>' -}}
198
+ {%- endfor %}
199
+ {%- set ns.prev_message_type = 'tool' -%}
200
+ {%- endif -%}
201
+
202
+ {{- '<turn|>\n' -}}
203
+ {%- endif %}
204
+
205
+ {#- Pre-scan: find last user message index for reasoning guard -#}
206
+ {%- set ns_turn = namespace(last_user_idx=-1) -%}
207
+ {%- for i in range(loop_messages | length) -%}
208
+ {%- if loop_messages[i]['role'] == 'user' -%}
209
+ {%- set ns_turn.last_user_idx = i -%}
210
+ {%- endif -%}
211
+ {%- endfor -%}
212
+
213
+ {#- Loop through messages -#}
214
+ {%- for message in loop_messages -%}
215
+ {%- if message['role'] != 'tool' -%}
216
+ {%- set ns.prev_message_type = None -%}
217
+ {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}
218
+ {#- Detect continuation: suppress duplicate <|turn>model when previous non-tool message was also assistant -#}
219
+ {%- set prev_nt = namespace(role=None, found=false) -%}
220
+ {%- if loop.index0 > 0 -%}
221
+ {%- for j in range(loop.index0 - 1, -1, -1) -%}
222
+ {%- if not prev_nt.found -%}
223
+ {%- if loop_messages[j]['role'] != 'tool' -%}
224
+ {%- set prev_nt.role = loop_messages[j]['role'] -%}
225
+ {%- set prev_nt.found = true -%}
226
+ {%- endif -%}
227
+ {%- endif -%}
228
+ {%- endfor -%}
229
+ {%- endif -%}
230
+ {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}
231
+ {%- if not continue_same_model_turn -%}
232
+ {{- '<|turn>' + role + '\n' }}
233
+ {%- endif -%}
234
+
235
+ {#- Render reasoning/reasoning_content as thinking channel -#}
236
+ {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}
237
+ {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}
238
+ {{- '<|channel>thought\n' + thinking_text + '\n<channel|>' -}}
239
+ {%- endif -%}
240
+
241
+ {%- if message['tool_calls'] -%}
242
+ {%- for tool_call in message['tool_calls'] -%}
243
+ {%- set function = tool_call['function'] -%}
244
+ {{- '<|tool_call>call:' + function['name'] + '{' -}}
245
+ {%- if function['arguments'] is mapping -%}
246
+ {%- set ns_args = namespace(found_first=false) -%}
247
+ {%- for key, value in function['arguments'] | dictsort -%}
248
+ {%- if ns_args.found_first %},{% endif -%}
249
+ {%- set ns_args.found_first = true -%}
250
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
251
+ {%- endfor -%}
252
+ {%- elif function['arguments'] is string -%}
253
+ {{- function['arguments'] -}}
254
+ {%- endif -%}
255
+ {{- '}<tool_call|>' -}}
256
+ {%- endfor -%}
257
+ {%- set ns.prev_message_type = 'tool_call' -%}
258
+ {%- endif -%}
259
+
260
+ {%- set ns_tr_out = namespace(flag=false) -%}
261
+ {%- if message.get('tool_responses') -%}
262
+ {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}
263
+ {%- for tool_response in message['tool_responses'] -%}
264
+ {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}
265
+ {%- set ns_tr_out.flag = true -%}
266
+ {%- set ns.prev_message_type = 'tool_response' -%}
267
+ {%- endfor -%}
268
+ {%- elif message.get('tool_calls') -%}
269
+ {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}
270
+ {%- set ns_tool_scan = namespace(stopped=false) -%}
271
+ {%- for k in range(loop.index0 + 1, loop_messages | length) -%}
272
+ {%- if ns_tool_scan.stopped -%}
273
+ {%- elif loop_messages[k]['role'] != 'tool' -%}
274
+ {%- set ns_tool_scan.stopped = true -%}
275
+ {%- else -%}
276
+ {%- set follow = loop_messages[k] -%}
277
+ {#- Resolve tool_call_id to function name -#}
278
+ {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}
279
+ {%- for tc in message['tool_calls'] -%}
280
+ {%- if tc.get('id') == follow.get('tool_call_id') -%}
281
+ {%- set ns_tname.name = tc['function']['name'] -%}
282
+ {%- endif -%}
283
+ {%- endfor -%}
284
+ {#- Handle content as string or content-parts array -#}
285
+ {%- set tool_body = follow.get('content') -%}
286
+ {%- if tool_body is string -%}
287
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
288
+ {%- elif tool_body is sequence and tool_body is not string -%}
289
+ {%- set ns_txt = namespace(s='') -%}
290
+ {%- for part in tool_body -%}
291
+ {%- if part.get('type') == 'text' -%}
292
+ {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}
293
+ {%- endif -%}
294
+ {%- endfor -%}
295
+ {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}
296
+ {%- else -%}
297
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
298
+ {%- endif -%}
299
+ {%- set ns_tr_out.flag = true -%}
300
+ {%- set ns.prev_message_type = 'tool_response' -%}
301
+ {%- endif -%}
302
+ {%- endfor -%}
303
+ {%- endif -%}
304
+
305
+ {%- if message['content'] is string -%}
306
+ {%- if role == 'model' -%}
307
+ {{- strip_thinking(message['content']) -}}
308
+ {%- else -%}
309
+ {{- message['content'] | trim -}}
310
+ {%- endif -%}
311
+ {%- elif message['content'] is sequence -%}
312
+ {%- for item in message['content'] -%}
313
+ {%- if item['type'] == 'text' -%}
314
+ {%- if role == 'model' -%}
315
+ {{- strip_thinking(item['text']) -}}
316
+ {%- else -%}
317
+ {{- item['text'] | trim -}}
318
+ {%- endif -%}
319
+ {%- elif item['type'] == 'image' -%}
320
+ {{- '<|image|>' -}}
321
+ {%- set ns.prev_message_type = 'image' -%}
322
+ {%- elif item['type'] == 'audio' -%}
323
+ {{- '<|audio|>' -}}
324
+ {%- set ns.prev_message_type = 'audio' -%}
325
+ {%- elif item['type'] == 'video' -%}
326
+ {{- '<|video|>' -}}
327
+ {%- set ns.prev_message_type = 'video' -%}
328
+ {%- endif -%}
329
+ {%- endfor -%}
330
+ {%- endif -%}
331
+
332
+ {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}
333
+ {{- '<|tool_response>' -}}
334
+ {%- elif not (ns_tr_out.flag and not message.get('content')) -%}
335
+ {{- '<turn|>\n' -}}
336
+ {%- endif -%}
337
+ {%- endif -%}
338
+ {%- endfor -%}
339
+
340
+ {%- if add_generation_prompt -%}
341
+ {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}
342
+ {{- '<|turn>model\n' -}}
343
+ {%- endif -%}
344
+ {%- endif -%}
checkpoint-200/optimizer.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:5c9a141f6be155d771bea07fa6ffa898d3ac626d3ae5ccebb65a6adaae9ce276
3
+ size 75236437
checkpoint-200/processor_config.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_ms_per_token": 40,
3
+ "audio_seq_length": 750,
4
+ "feature_extractor": {
5
+ "dither": 0.0,
6
+ "feature_extractor_type": "Gemma4AudioFeatureExtractor",
7
+ "feature_size": 128,
8
+ "fft_length": 512,
9
+ "fft_overdrive": false,
10
+ "frame_length": 320,
11
+ "hop_length": 160,
12
+ "input_scale_factor": 1.0,
13
+ "max_frequency": 8000.0,
14
+ "mel_floor": 0.001,
15
+ "min_frequency": 0.0,
16
+ "padding_side": "left",
17
+ "padding_value": 0.0,
18
+ "per_bin_mean": null,
19
+ "per_bin_stddev": null,
20
+ "preemphasis": 0.0,
21
+ "preemphasis_htk_flavor": true,
22
+ "return_attention_mask": true,
23
+ "sampling_rate": 16000
24
+ },
25
+ "image_processor": {
26
+ "do_convert_rgb": true,
27
+ "do_normalize": false,
28
+ "do_rescale": true,
29
+ "do_resize": true,
30
+ "image_mean": [
31
+ 0.0,
32
+ 0.0,
33
+ 0.0
34
+ ],
35
+ "image_processor_type": "Gemma4ImageProcessor",
36
+ "image_seq_length": 280,
37
+ "image_std": [
38
+ 1.0,
39
+ 1.0,
40
+ 1.0
41
+ ],
42
+ "max_soft_tokens": 280,
43
+ "patch_size": 16,
44
+ "pooling_kernel_size": 3,
45
+ "resample": 3,
46
+ "rescale_factor": 0.00392156862745098
47
+ },
48
+ "image_seq_length": 280,
49
+ "processor_class": "Gemma4Processor",
50
+ "video_processor": {
51
+ "do_convert_rgb": true,
52
+ "do_normalize": true,
53
+ "do_rescale": true,
54
+ "do_resize": true,
55
+ "do_sample_frames": true,
56
+ "image_mean": [
57
+ 0.0,
58
+ 0.0,
59
+ 0.0
60
+ ],
61
+ "image_std": [
62
+ 1.0,
63
+ 1.0,
64
+ 1.0
65
+ ],
66
+ "max_soft_tokens": 70,
67
+ "num_frames": 32,
68
+ "patch_size": 16,
69
+ "pooling_kernel_size": 3,
70
+ "resample": 3,
71
+ "rescale_factor": 0.00392156862745098,
72
+ "return_metadata": false,
73
+ "video_processor_type": "Gemma4VideoProcessor"
74
+ }
75
+ }
checkpoint-200/rng_state.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:f1d565802a8e26c4e8a31328752b7a7fdc186d9401aa008e65697d0ad8c22e33
3
+ size 14645
checkpoint-200/scheduler.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:b018f6bf6da9cbcd24154267bd4a94fb94f45f816081ef434edb910f3a576ce0
3
+ size 1465
checkpoint-200/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
3
+ size 32169626
checkpoint-200/tokenizer_config.json ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_token": "<|audio|>",
3
+ "backend": "tokenizers",
4
+ "boa_token": "<|audio>",
5
+ "boi_token": "<|image>",
6
+ "bos_token": "<bos>",
7
+ "eoa_token": "<audio|>",
8
+ "eoc_token": "<channel|>",
9
+ "eoi_token": "<image|>",
10
+ "eos_token": "<turn|>",
11
+ "eot_token": "<turn|>",
12
+ "escape_token": "<|\"|>",
13
+ "etc_token": "<tool_call|>",
14
+ "etd_token": "<tool|>",
15
+ "etr_token": "<tool_response|>",
16
+ "extra_special_tokens": [
17
+ "<|video|>"
18
+ ],
19
+ "image_token": "<|image|>",
20
+ "is_local": false,
21
+ "mask_token": "<mask>",
22
+ "model_max_length": 131072,
23
+ "model_specific_special_tokens": {
24
+ "audio_token": "<|audio|>",
25
+ "boa_token": "<|audio>",
26
+ "boi_token": "<|image>",
27
+ "eoa_token": "<audio|>",
28
+ "eoc_token": "<channel|>",
29
+ "eoi_token": "<image|>",
30
+ "eot_token": "<turn|>",
31
+ "escape_token": "<|\"|>",
32
+ "etc_token": "<tool_call|>",
33
+ "etd_token": "<tool|>",
34
+ "etr_token": "<tool_response|>",
35
+ "image_token": "<|image|>",
36
+ "soc_token": "<|channel>",
37
+ "sot_token": "<|turn>",
38
+ "stc_token": "<|tool_call>",
39
+ "std_token": "<|tool>",
40
+ "str_token": "<|tool_response>",
41
+ "think_token": "<|think|>"
42
+ },
43
+ "pad_token": "<pad>",
44
+ "padding_side": "right",
45
+ "processor_class": "Gemma4Processor",
46
+ "response_schema": {
47
+ "properties": {
48
+ "content": {
49
+ "type": "string"
50
+ },
51
+ "role": {
52
+ "const": "assistant"
53
+ },
54
+ "thinking": {
55
+ "type": "string"
56
+ },
57
+ "tool_calls": {
58
+ "items": {
59
+ "properties": {
60
+ "function": {
61
+ "properties": {
62
+ "arguments": {
63
+ "additionalProperties": {},
64
+ "type": "object",
65
+ "x-parser": "gemma4-tool-call"
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ }
70
+ },
71
+ "type": "object",
72
+ "x-regex": "call\\:(?P<name>\\w+)(?P<arguments>\\{.*\\})"
73
+ },
74
+ "type": {
75
+ "const": "function"
76
+ }
77
+ },
78
+ "type": "object"
79
+ },
80
+ "type": "array",
81
+ "x-regex-iterator": "<\\|tool_call>(.*?)<tool_call\\|>"
82
+ }
83
+ },
84
+ "type": "object",
85
+ "x-regex": "(\\<\\|channel\\>thought\\n(?P<thinking>.*?)\\<channel\\|\\>)?(?P<tool_calls>\\<\\|tool_call\\>.*\\<tool_call\\|\\>)?(?P<content>(?:(?!\\<turn\\|\\>)(?!\\<\\|tool_response\\>).)+)?(?:\\<turn\\|\\>|\\<\\|tool_response\\>)?"
86
+ },
87
+ "soc_token": "<|channel>",
88
+ "sot_token": "<|turn>",
89
+ "stc_token": "<|tool_call>",
90
+ "std_token": "<|tool>",
91
+ "str_token": "<|tool_response>",
92
+ "think_token": "<|think|>",
93
+ "tokenizer_class": "GemmaTokenizer",
94
+ "unk_token": "<unk>"
95
+ }
checkpoint-200/trainer_state.json ADDED
@@ -0,0 +1,2034 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "best_global_step": null,
3
+ "best_metric": null,
4
+ "best_model_checkpoint": null,
5
+ "epoch": 0.39980009995002497,
6
+ "eval_steps": 201,
7
+ "global_step": 200,
8
+ "is_hyper_param_search": false,
9
+ "is_local_process_zero": true,
10
+ "is_world_process_zero": true,
11
+ "log_history": [
12
+ {
13
+ "epoch": 0.001999000499750125,
14
+ "grad_norm": 7.331668376922607,
15
+ "learning_rate": 0.0,
16
+ "loss": 5.560573577880859,
17
+ "num_input_tokens_seen": 16384,
18
+ "step": 1,
19
+ "train_runtime": 47.3306,
20
+ "train_tokens_per_second": 346.161
21
+ },
22
+ {
23
+ "epoch": 0.00399800099950025,
24
+ "grad_norm": 6.79426908493042,
25
+ "learning_rate": 4e-05,
26
+ "loss": 5.523191452026367,
27
+ "num_input_tokens_seen": 32768,
28
+ "step": 2,
29
+ "train_runtime": 57.9053,
30
+ "train_tokens_per_second": 565.89
31
+ },
32
+ {
33
+ "epoch": 0.005997001499250375,
34
+ "grad_norm": 6.676287651062012,
35
+ "learning_rate": 8e-05,
36
+ "loss": 5.496252536773682,
37
+ "num_input_tokens_seen": 49152,
38
+ "step": 3,
39
+ "train_runtime": 68.4941,
40
+ "train_tokens_per_second": 717.609
41
+ },
42
+ {
43
+ "epoch": 0.0079960019990005,
44
+ "grad_norm": 6.097739219665527,
45
+ "learning_rate": 0.00012,
46
+ "loss": 5.170515060424805,
47
+ "num_input_tokens_seen": 65536,
48
+ "step": 4,
49
+ "train_runtime": 79.1923,
50
+ "train_tokens_per_second": 827.555
51
+ },
52
+ {
53
+ "epoch": 0.009995002498750625,
54
+ "grad_norm": 4.8083930015563965,
55
+ "learning_rate": 0.00016,
56
+ "loss": 4.473215579986572,
57
+ "num_input_tokens_seen": 81920,
58
+ "step": 5,
59
+ "train_runtime": 89.8555,
60
+ "train_tokens_per_second": 911.686
61
+ },
62
+ {
63
+ "epoch": 0.01199400299850075,
64
+ "grad_norm": 2.681720733642578,
65
+ "learning_rate": 0.0002,
66
+ "loss": 3.8302183151245117,
67
+ "num_input_tokens_seen": 98304,
68
+ "step": 6,
69
+ "train_runtime": 100.5028,
70
+ "train_tokens_per_second": 978.122
71
+ },
72
+ {
73
+ "epoch": 0.013993003498250875,
74
+ "grad_norm": 1.557854175567627,
75
+ "learning_rate": 0.00019999950354593194,
76
+ "loss": 3.418180465698242,
77
+ "num_input_tokens_seen": 114688,
78
+ "step": 7,
79
+ "train_runtime": 111.1678,
80
+ "train_tokens_per_second": 1031.666
81
+ },
82
+ {
83
+ "epoch": 0.015992003998001,
84
+ "grad_norm": 1.7741894721984863,
85
+ "learning_rate": 0.0001999980141886571,
86
+ "loss": 3.4549918174743652,
87
+ "num_input_tokens_seen": 131072,
88
+ "step": 8,
89
+ "train_runtime": 121.8347,
90
+ "train_tokens_per_second": 1075.819
91
+ },
92
+ {
93
+ "epoch": 0.017991004497751123,
94
+ "grad_norm": 1.2810389995574951,
95
+ "learning_rate": 0.00019999553194296343,
96
+ "loss": 3.329780340194702,
97
+ "num_input_tokens_seen": 147456,
98
+ "step": 9,
99
+ "train_runtime": 132.4884,
100
+ "train_tokens_per_second": 1112.973
101
+ },
102
+ {
103
+ "epoch": 0.01999000499750125,
104
+ "grad_norm": 1.1019361019134521,
105
+ "learning_rate": 0.00019999205683349732,
106
+ "loss": 3.2165651321411133,
107
+ "num_input_tokens_seen": 163840,
108
+ "step": 10,
109
+ "train_runtime": 143.1724,
110
+ "train_tokens_per_second": 1144.355
111
+ },
112
+ {
113
+ "epoch": 0.021989005497251374,
114
+ "grad_norm": 1.0735076665878296,
115
+ "learning_rate": 0.00019998758889476346,
116
+ "loss": 3.1698949337005615,
117
+ "num_input_tokens_seen": 180224,
118
+ "step": 11,
119
+ "train_runtime": 153.8339,
120
+ "train_tokens_per_second": 1171.549
121
+ },
122
+ {
123
+ "epoch": 0.0239880059970015,
124
+ "grad_norm": 1.1004042625427246,
125
+ "learning_rate": 0.00019998212817112437,
126
+ "loss": 3.0940957069396973,
127
+ "num_input_tokens_seen": 196608,
128
+ "step": 12,
129
+ "train_runtime": 164.5019,
130
+ "train_tokens_per_second": 1195.171
131
+ },
132
+ {
133
+ "epoch": 0.025987006496751622,
134
+ "grad_norm": 0.9596648216247559,
135
+ "learning_rate": 0.00019997567471679998,
136
+ "loss": 3.059084892272949,
137
+ "num_input_tokens_seen": 212992,
138
+ "step": 13,
139
+ "train_runtime": 175.1844,
140
+ "train_tokens_per_second": 1215.816
141
+ },
142
+ {
143
+ "epoch": 0.02798600699650175,
144
+ "grad_norm": 0.8726735711097717,
145
+ "learning_rate": 0.0001999682285958672,
146
+ "loss": 2.9257137775421143,
147
+ "num_input_tokens_seen": 229376,
148
+ "step": 14,
149
+ "train_runtime": 185.924,
150
+ "train_tokens_per_second": 1233.708
151
+ },
152
+ {
153
+ "epoch": 0.029985007496251874,
154
+ "grad_norm": 0.7122098207473755,
155
+ "learning_rate": 0.00019995978988225912,
156
+ "loss": 2.878443717956543,
157
+ "num_input_tokens_seen": 245760,
158
+ "step": 15,
159
+ "train_runtime": 196.6216,
160
+ "train_tokens_per_second": 1249.913
161
+ },
162
+ {
163
+ "epoch": 0.031984007996002,
164
+ "grad_norm": 0.7174533009529114,
165
+ "learning_rate": 0.0001999503586597645,
166
+ "loss": 2.998406410217285,
167
+ "num_input_tokens_seen": 262144,
168
+ "step": 16,
169
+ "train_runtime": 207.2962,
170
+ "train_tokens_per_second": 1264.587
171
+ },
172
+ {
173
+ "epoch": 0.03398300849575212,
174
+ "grad_norm": 0.7693482637405396,
175
+ "learning_rate": 0.00019993993502202665,
176
+ "loss": 2.928849935531616,
177
+ "num_input_tokens_seen": 278528,
178
+ "step": 17,
179
+ "train_runtime": 218.0082,
180
+ "train_tokens_per_second": 1277.603
181
+ },
182
+ {
183
+ "epoch": 0.035982008995502246,
184
+ "grad_norm": 0.6065346598625183,
185
+ "learning_rate": 0.00019992851907254275,
186
+ "loss": 2.991607189178467,
187
+ "num_input_tokens_seen": 294912,
188
+ "step": 18,
189
+ "train_runtime": 228.703,
190
+ "train_tokens_per_second": 1289.498
191
+ },
192
+ {
193
+ "epoch": 0.03798100949525238,
194
+ "grad_norm": 0.5639224052429199,
195
+ "learning_rate": 0.00019991611092466265,
196
+ "loss": 2.9910218715667725,
197
+ "num_input_tokens_seen": 311296,
198
+ "step": 19,
199
+ "train_runtime": 239.4409,
200
+ "train_tokens_per_second": 1300.096
201
+ },
202
+ {
203
+ "epoch": 0.0399800099950025,
204
+ "grad_norm": 0.5850295424461365,
205
+ "learning_rate": 0.0001999027107015879,
206
+ "loss": 2.8126330375671387,
207
+ "num_input_tokens_seen": 327680,
208
+ "step": 20,
209
+ "train_runtime": 250.1755,
210
+ "train_tokens_per_second": 1309.801
211
+ },
212
+ {
213
+ "epoch": 0.041979010494752625,
214
+ "grad_norm": 0.6322516798973083,
215
+ "learning_rate": 0.0001998883185363704,
216
+ "loss": 3.0385286808013916,
217
+ "num_input_tokens_seen": 344064,
218
+ "step": 21,
219
+ "train_runtime": 260.8995,
220
+ "train_tokens_per_second": 1318.76
221
+ },
222
+ {
223
+ "epoch": 0.04397801099450275,
224
+ "grad_norm": 0.5834643840789795,
225
+ "learning_rate": 0.00019987293457191112,
226
+ "loss": 2.8844664096832275,
227
+ "num_input_tokens_seen": 360364,
228
+ "step": 22,
229
+ "train_runtime": 271.6189,
230
+ "train_tokens_per_second": 1326.726
231
+ },
232
+ {
233
+ "epoch": 0.04597701149425287,
234
+ "grad_norm": 0.656398594379425,
235
+ "learning_rate": 0.00019985655896095867,
236
+ "loss": 2.738499879837036,
237
+ "num_input_tokens_seen": 376596,
238
+ "step": 23,
239
+ "train_runtime": 282.2862,
240
+ "train_tokens_per_second": 1334.093
241
+ },
242
+ {
243
+ "epoch": 0.047976011994003,
244
+ "grad_norm": 0.590424120426178,
245
+ "learning_rate": 0.00019983919186610788,
246
+ "loss": 2.7959787845611572,
247
+ "num_input_tokens_seen": 392924,
248
+ "step": 24,
249
+ "train_runtime": 293.0197,
250
+ "train_tokens_per_second": 1340.947
251
+ },
252
+ {
253
+ "epoch": 0.04997501249375312,
254
+ "grad_norm": 0.5563395619392395,
255
+ "learning_rate": 0.000199820833459798,
256
+ "loss": 2.889263868331909,
257
+ "num_input_tokens_seen": 409308,
258
+ "step": 25,
259
+ "train_runtime": 303.7202,
260
+ "train_tokens_per_second": 1347.648
261
+ },
262
+ {
263
+ "epoch": 0.051974012993503245,
264
+ "grad_norm": 0.5884258151054382,
265
+ "learning_rate": 0.00019980148392431118,
266
+ "loss": 2.767672300338745,
267
+ "num_input_tokens_seen": 425692,
268
+ "step": 26,
269
+ "train_runtime": 314.4518,
270
+ "train_tokens_per_second": 1353.759
271
+ },
272
+ {
273
+ "epoch": 0.053973013493253376,
274
+ "grad_norm": 0.5780461430549622,
275
+ "learning_rate": 0.00019978114345177049,
276
+ "loss": 2.6928277015686035,
277
+ "num_input_tokens_seen": 442076,
278
+ "step": 27,
279
+ "train_runtime": 325.1895,
280
+ "train_tokens_per_second": 1359.441
281
+ },
282
+ {
283
+ "epoch": 0.0559720139930035,
284
+ "grad_norm": 0.6170737147331238,
285
+ "learning_rate": 0.00019975981224413817,
286
+ "loss": 2.664564609527588,
287
+ "num_input_tokens_seen": 457770,
288
+ "step": 28,
289
+ "train_runtime": 335.4736,
290
+ "train_tokens_per_second": 1364.549
291
+ },
292
+ {
293
+ "epoch": 0.057971014492753624,
294
+ "grad_norm": 0.548454761505127,
295
+ "learning_rate": 0.00019973749051321348,
296
+ "loss": 2.7781982421875,
297
+ "num_input_tokens_seen": 474154,
298
+ "step": 29,
299
+ "train_runtime": 346.2202,
300
+ "train_tokens_per_second": 1369.516
301
+ },
302
+ {
303
+ "epoch": 0.05997001499250375,
304
+ "grad_norm": 0.6355477571487427,
305
+ "learning_rate": 0.00019971417848063073,
306
+ "loss": 2.7185378074645996,
307
+ "num_input_tokens_seen": 490260,
308
+ "step": 30,
309
+ "train_runtime": 356.748,
310
+ "train_tokens_per_second": 1374.247
311
+ },
312
+ {
313
+ "epoch": 0.06196901549225387,
314
+ "grad_norm": 0.6777451634407043,
315
+ "learning_rate": 0.000199689876377857,
316
+ "loss": 2.770723342895508,
317
+ "num_input_tokens_seen": 506644,
318
+ "step": 31,
319
+ "train_runtime": 367.484,
320
+ "train_tokens_per_second": 1378.683
321
+ },
322
+ {
323
+ "epoch": 0.063968015992004,
324
+ "grad_norm": 0.6335959434509277,
325
+ "learning_rate": 0.0001996645844461898,
326
+ "loss": 2.907606601715088,
327
+ "num_input_tokens_seen": 523028,
328
+ "step": 32,
329
+ "train_runtime": 378.2014,
330
+ "train_tokens_per_second": 1382.935
331
+ },
332
+ {
333
+ "epoch": 0.06596701649175413,
334
+ "grad_norm": 0.6486599445343018,
335
+ "learning_rate": 0.00019963830293675484,
336
+ "loss": 2.7316300868988037,
337
+ "num_input_tokens_seen": 539412,
338
+ "step": 33,
339
+ "train_runtime": 388.9274,
340
+ "train_tokens_per_second": 1386.922
341
+ },
342
+ {
343
+ "epoch": 0.06796601699150424,
344
+ "grad_norm": 0.5915785431861877,
345
+ "learning_rate": 0.0001996110321105033,
346
+ "loss": 2.620595932006836,
347
+ "num_input_tokens_seen": 555796,
348
+ "step": 34,
349
+ "train_runtime": 399.6287,
350
+ "train_tokens_per_second": 1390.781
351
+ },
352
+ {
353
+ "epoch": 0.06996501749125437,
354
+ "grad_norm": 0.6603999137878418,
355
+ "learning_rate": 0.00019958277223820948,
356
+ "loss": 2.708037853240967,
357
+ "num_input_tokens_seen": 572180,
358
+ "step": 35,
359
+ "train_runtime": 410.3614,
360
+ "train_tokens_per_second": 1394.332
361
+ },
362
+ {
363
+ "epoch": 0.07196401799100449,
364
+ "grad_norm": 0.7603235840797424,
365
+ "learning_rate": 0.00019955352360046793,
366
+ "loss": 2.644076108932495,
367
+ "num_input_tokens_seen": 588564,
368
+ "step": 36,
369
+ "train_runtime": 421.0633,
370
+ "train_tokens_per_second": 1397.804
371
+ },
372
+ {
373
+ "epoch": 0.07396301849075462,
374
+ "grad_norm": 0.6619148254394531,
375
+ "learning_rate": 0.00019952328648769076,
376
+ "loss": 2.5154783725738525,
377
+ "num_input_tokens_seen": 604948,
378
+ "step": 37,
379
+ "train_runtime": 431.7586,
380
+ "train_tokens_per_second": 1401.125
381
+ },
382
+ {
383
+ "epoch": 0.07596201899050475,
384
+ "grad_norm": 0.622572124004364,
385
+ "learning_rate": 0.00019949206120010472,
386
+ "loss": 2.5505049228668213,
387
+ "num_input_tokens_seen": 621332,
388
+ "step": 38,
389
+ "train_runtime": 442.4992,
390
+ "train_tokens_per_second": 1404.143
391
+ },
392
+ {
393
+ "epoch": 0.07796101949025487,
394
+ "grad_norm": 0.6390085816383362,
395
+ "learning_rate": 0.00019945984804774824,
396
+ "loss": 2.5269813537597656,
397
+ "num_input_tokens_seen": 637716,
398
+ "step": 39,
399
+ "train_runtime": 453.1913,
400
+ "train_tokens_per_second": 1407.167
401
+ },
402
+ {
403
+ "epoch": 0.079960019990005,
404
+ "grad_norm": 0.5684909224510193,
405
+ "learning_rate": 0.0001994266473504683,
406
+ "loss": 2.6473617553710938,
407
+ "num_input_tokens_seen": 654100,
408
+ "step": 40,
409
+ "train_runtime": 463.9273,
410
+ "train_tokens_per_second": 1409.919
411
+ },
412
+ {
413
+ "epoch": 0.08195902048975512,
414
+ "grad_norm": 0.6122294068336487,
415
+ "learning_rate": 0.00019939245943791738,
416
+ "loss": 2.7440977096557617,
417
+ "num_input_tokens_seen": 670484,
418
+ "step": 41,
419
+ "train_runtime": 474.661,
420
+ "train_tokens_per_second": 1412.553
421
+ },
422
+ {
423
+ "epoch": 0.08395802098950525,
424
+ "grad_norm": 0.5501320958137512,
425
+ "learning_rate": 0.00019935728464955002,
426
+ "loss": 2.5517232418060303,
427
+ "num_input_tokens_seen": 686868,
428
+ "step": 42,
429
+ "train_runtime": 485.3586,
430
+ "train_tokens_per_second": 1415.176
431
+ },
432
+ {
433
+ "epoch": 0.08595702148925537,
434
+ "grad_norm": 0.6636989712715149,
435
+ "learning_rate": 0.0001993211233346195,
436
+ "loss": 2.4997594356536865,
437
+ "num_input_tokens_seen": 703250,
438
+ "step": 43,
439
+ "train_runtime": 496.0626,
440
+ "train_tokens_per_second": 1417.664
441
+ },
442
+ {
443
+ "epoch": 0.0879560219890055,
444
+ "grad_norm": 0.6815392971038818,
445
+ "learning_rate": 0.00019928397585217456,
446
+ "loss": 2.722917079925537,
447
+ "num_input_tokens_seen": 719634,
448
+ "step": 44,
449
+ "train_runtime": 506.766,
450
+ "train_tokens_per_second": 1420.052
451
+ },
452
+ {
453
+ "epoch": 0.08995502248875563,
454
+ "grad_norm": 0.6484745144844055,
455
+ "learning_rate": 0.0001992458425710555,
456
+ "loss": 2.6333179473876953,
457
+ "num_input_tokens_seen": 736018,
458
+ "step": 45,
459
+ "train_runtime": 517.4891,
460
+ "train_tokens_per_second": 1422.287
461
+ },
462
+ {
463
+ "epoch": 0.09195402298850575,
464
+ "grad_norm": 0.5829582810401917,
465
+ "learning_rate": 0.0001992067238698908,
466
+ "loss": 2.548511266708374,
467
+ "num_input_tokens_seen": 752308,
468
+ "step": 46,
469
+ "train_runtime": 528.2175,
470
+ "train_tokens_per_second": 1424.239
471
+ },
472
+ {
473
+ "epoch": 0.09395302348825588,
474
+ "grad_norm": 0.6313190460205078,
475
+ "learning_rate": 0.0001991666201370932,
476
+ "loss": 2.6169910430908203,
477
+ "num_input_tokens_seen": 768692,
478
+ "step": 47,
479
+ "train_runtime": 538.9658,
480
+ "train_tokens_per_second": 1426.235
481
+ },
482
+ {
483
+ "epoch": 0.095952023988006,
484
+ "grad_norm": 0.6699250340461731,
485
+ "learning_rate": 0.00019912553177085598,
486
+ "loss": 2.595137357711792,
487
+ "num_input_tokens_seen": 785046,
488
+ "step": 48,
489
+ "train_runtime": 549.724,
490
+ "train_tokens_per_second": 1428.073
491
+ },
492
+ {
493
+ "epoch": 0.09795102448775612,
494
+ "grad_norm": 0.7118059396743774,
495
+ "learning_rate": 0.0001990834591791488,
496
+ "loss": 2.652780055999756,
497
+ "num_input_tokens_seen": 801430,
498
+ "step": 49,
499
+ "train_runtime": 560.4265,
500
+ "train_tokens_per_second": 1430.036
501
+ },
502
+ {
503
+ "epoch": 0.09995002498750624,
504
+ "grad_norm": 0.5986912250518799,
505
+ "learning_rate": 0.0001990404027797139,
506
+ "loss": 2.656085968017578,
507
+ "num_input_tokens_seen": 817814,
508
+ "step": 50,
509
+ "train_runtime": 571.1351,
510
+ "train_tokens_per_second": 1431.91
511
+ },
512
+ {
513
+ "epoch": 0.10194902548725637,
514
+ "grad_norm": 0.75722336769104,
515
+ "learning_rate": 0.00019899636300006174,
516
+ "loss": 2.543043613433838,
517
+ "num_input_tokens_seen": 834194,
518
+ "step": 51,
519
+ "train_runtime": 581.8781,
520
+ "train_tokens_per_second": 1433.623
521
+ },
522
+ {
523
+ "epoch": 0.10394802598700649,
524
+ "grad_norm": 0.6150996685028076,
525
+ "learning_rate": 0.00019895134027746693,
526
+ "loss": 2.7043724060058594,
527
+ "num_input_tokens_seen": 850578,
528
+ "step": 52,
529
+ "train_runtime": 592.6296,
530
+ "train_tokens_per_second": 1435.261
531
+ },
532
+ {
533
+ "epoch": 0.10594702648675662,
534
+ "grad_norm": 0.6528828144073486,
535
+ "learning_rate": 0.00019890533505896368,
536
+ "loss": 2.6164627075195312,
537
+ "num_input_tokens_seen": 866962,
538
+ "step": 53,
539
+ "train_runtime": 603.3564,
540
+ "train_tokens_per_second": 1436.899
541
+ },
542
+ {
543
+ "epoch": 0.10794602698650675,
544
+ "grad_norm": 0.6227877140045166,
545
+ "learning_rate": 0.00019885834780134157,
546
+ "loss": 2.379403591156006,
547
+ "num_input_tokens_seen": 883346,
548
+ "step": 54,
549
+ "train_runtime": 614.0739,
550
+ "train_tokens_per_second": 1438.501
551
+ },
552
+ {
553
+ "epoch": 0.10994502748625687,
554
+ "grad_norm": 0.6063210368156433,
555
+ "learning_rate": 0.00019881037897114093,
556
+ "loss": 2.456653118133545,
557
+ "num_input_tokens_seen": 899730,
558
+ "step": 55,
559
+ "train_runtime": 624.7836,
560
+ "train_tokens_per_second": 1440.067
561
+ },
562
+ {
563
+ "epoch": 0.111944027986007,
564
+ "grad_norm": 0.5717106461524963,
565
+ "learning_rate": 0.00019876142904464813,
566
+ "loss": 2.566009283065796,
567
+ "num_input_tokens_seen": 916114,
568
+ "step": 56,
569
+ "train_runtime": 635.519,
570
+ "train_tokens_per_second": 1441.521
571
+ },
572
+ {
573
+ "epoch": 0.11394302848575712,
574
+ "grad_norm": 0.6836978793144226,
575
+ "learning_rate": 0.00019871149850789102,
576
+ "loss": 2.4524693489074707,
577
+ "num_input_tokens_seen": 932498,
578
+ "step": 57,
579
+ "train_runtime": 646.2281,
580
+ "train_tokens_per_second": 1442.986
581
+ },
582
+ {
583
+ "epoch": 0.11594202898550725,
584
+ "grad_norm": 0.6186497211456299,
585
+ "learning_rate": 0.00019866058785663392,
586
+ "loss": 2.41436767578125,
587
+ "num_input_tokens_seen": 948882,
588
+ "step": 58,
589
+ "train_runtime": 656.9409,
590
+ "train_tokens_per_second": 1444.395
591
+ },
592
+ {
593
+ "epoch": 0.11794102948525736,
594
+ "grad_norm": 0.6606503129005432,
595
+ "learning_rate": 0.00019860869759637289,
596
+ "loss": 2.5905051231384277,
597
+ "num_input_tokens_seen": 965266,
598
+ "step": 59,
599
+ "train_runtime": 667.6704,
600
+ "train_tokens_per_second": 1445.722
601
+ },
602
+ {
603
+ "epoch": 0.1199400299850075,
604
+ "grad_norm": 0.6339024901390076,
605
+ "learning_rate": 0.00019855582824233049,
606
+ "loss": 2.4514667987823486,
607
+ "num_input_tokens_seen": 981650,
608
+ "step": 60,
609
+ "train_runtime": 678.3831,
610
+ "train_tokens_per_second": 1447.044
611
+ },
612
+ {
613
+ "epoch": 0.12193903048475763,
614
+ "grad_norm": 0.6130167841911316,
615
+ "learning_rate": 0.00019850198031945082,
616
+ "loss": 2.602674722671509,
617
+ "num_input_tokens_seen": 998034,
618
+ "step": 61,
619
+ "train_runtime": 689.1504,
620
+ "train_tokens_per_second": 1448.209
621
+ },
622
+ {
623
+ "epoch": 0.12393803098450774,
624
+ "grad_norm": 0.6347913146018982,
625
+ "learning_rate": 0.00019844715436239437,
626
+ "loss": 2.6927785873413086,
627
+ "num_input_tokens_seen": 1014130,
628
+ "step": 62,
629
+ "train_runtime": 699.6977,
630
+ "train_tokens_per_second": 1449.383
631
+ },
632
+ {
633
+ "epoch": 0.12593703148425786,
634
+ "grad_norm": 0.6667070388793945,
635
+ "learning_rate": 0.00019839135091553244,
636
+ "loss": 2.3476438522338867,
637
+ "num_input_tokens_seen": 1030514,
638
+ "step": 63,
639
+ "train_runtime": 710.4257,
640
+ "train_tokens_per_second": 1450.558
641
+ },
642
+ {
643
+ "epoch": 0.127936031984008,
644
+ "grad_norm": 0.7157728672027588,
645
+ "learning_rate": 0.00019833457053294206,
646
+ "loss": 2.543039321899414,
647
+ "num_input_tokens_seen": 1046898,
648
+ "step": 64,
649
+ "train_runtime": 721.1477,
650
+ "train_tokens_per_second": 1451.711
651
+ },
652
+ {
653
+ "epoch": 0.12993503248375812,
654
+ "grad_norm": 0.6451475024223328,
655
+ "learning_rate": 0.0001982768137784002,
656
+ "loss": 2.5445199012756348,
657
+ "num_input_tokens_seen": 1063282,
658
+ "step": 65,
659
+ "train_runtime": 731.841,
660
+ "train_tokens_per_second": 1452.887
661
+ },
662
+ {
663
+ "epoch": 0.13193403298350825,
664
+ "grad_norm": 0.7809988856315613,
665
+ "learning_rate": 0.00019821808122537848,
666
+ "loss": 2.509563446044922,
667
+ "num_input_tokens_seen": 1079666,
668
+ "step": 66,
669
+ "train_runtime": 742.6017,
670
+ "train_tokens_per_second": 1453.896
671
+ },
672
+ {
673
+ "epoch": 0.13393303348325838,
674
+ "grad_norm": 0.7288188338279724,
675
+ "learning_rate": 0.0001981583734570371,
676
+ "loss": 2.5006520748138428,
677
+ "num_input_tokens_seen": 1096050,
678
+ "step": 67,
679
+ "train_runtime": 753.333,
680
+ "train_tokens_per_second": 1454.934
681
+ },
682
+ {
683
+ "epoch": 0.1359320339830085,
684
+ "grad_norm": 0.6310102343559265,
685
+ "learning_rate": 0.00019809769106621938,
686
+ "loss": 2.5584566593170166,
687
+ "num_input_tokens_seen": 1112434,
688
+ "step": 68,
689
+ "train_runtime": 764.0483,
690
+ "train_tokens_per_second": 1455.973
691
+ },
692
+ {
693
+ "epoch": 0.13793103448275862,
694
+ "grad_norm": 0.6697754263877869,
695
+ "learning_rate": 0.00019803603465544574,
696
+ "loss": 2.4173929691314697,
697
+ "num_input_tokens_seen": 1128818,
698
+ "step": 69,
699
+ "train_runtime": 774.7452,
700
+ "train_tokens_per_second": 1457.018
701
+ },
702
+ {
703
+ "epoch": 0.13993003498250875,
704
+ "grad_norm": 0.6117935180664062,
705
+ "learning_rate": 0.00019797340483690765,
706
+ "loss": 2.5029242038726807,
707
+ "num_input_tokens_seen": 1145202,
708
+ "step": 70,
709
+ "train_runtime": 785.4566,
710
+ "train_tokens_per_second": 1458.008
711
+ },
712
+ {
713
+ "epoch": 0.14192903548225888,
714
+ "grad_norm": 0.5620390772819519,
715
+ "learning_rate": 0.0001979098022324617,
716
+ "loss": 2.590005397796631,
717
+ "num_input_tokens_seen": 1161586,
718
+ "step": 71,
719
+ "train_runtime": 796.1852,
720
+ "train_tokens_per_second": 1458.939
721
+ },
722
+ {
723
+ "epoch": 0.14392803598200898,
724
+ "grad_norm": 0.7210037112236023,
725
+ "learning_rate": 0.00019784522747362337,
726
+ "loss": 2.4453177452087402,
727
+ "num_input_tokens_seen": 1177970,
728
+ "step": 72,
729
+ "train_runtime": 806.9126,
730
+ "train_tokens_per_second": 1459.848
731
+ },
732
+ {
733
+ "epoch": 0.14592703648175911,
734
+ "grad_norm": 0.6530371308326721,
735
+ "learning_rate": 0.0001977796812015606,
736
+ "loss": 2.5644259452819824,
737
+ "num_input_tokens_seen": 1194354,
738
+ "step": 73,
739
+ "train_runtime": 817.6329,
740
+ "train_tokens_per_second": 1460.746
741
+ },
742
+ {
743
+ "epoch": 0.14792603698150925,
744
+ "grad_norm": 0.5794245004653931,
745
+ "learning_rate": 0.00019771316406708777,
746
+ "loss": 2.452650547027588,
747
+ "num_input_tokens_seen": 1210738,
748
+ "step": 74,
749
+ "train_runtime": 828.3384,
750
+ "train_tokens_per_second": 1461.647
751
+ },
752
+ {
753
+ "epoch": 0.14992503748125938,
754
+ "grad_norm": 0.6062936186790466,
755
+ "learning_rate": 0.00019764567673065882,
756
+ "loss": 2.3821656703948975,
757
+ "num_input_tokens_seen": 1227122,
758
+ "step": 75,
759
+ "train_runtime": 839.0713,
760
+ "train_tokens_per_second": 1462.476
761
+ },
762
+ {
763
+ "epoch": 0.1519240379810095,
764
+ "grad_norm": 0.6602532863616943,
765
+ "learning_rate": 0.00019757721986236103,
766
+ "loss": 2.5787909030914307,
767
+ "num_input_tokens_seen": 1243506,
768
+ "step": 76,
769
+ "train_runtime": 849.7678,
770
+ "train_tokens_per_second": 1463.348
771
+ },
772
+ {
773
+ "epoch": 0.1539230384807596,
774
+ "grad_norm": 0.5799870491027832,
775
+ "learning_rate": 0.00019750779414190824,
776
+ "loss": 2.4096055030822754,
777
+ "num_input_tokens_seen": 1259890,
778
+ "step": 77,
779
+ "train_runtime": 860.4648,
780
+ "train_tokens_per_second": 1464.197
781
+ },
782
+ {
783
+ "epoch": 0.15592203898050974,
784
+ "grad_norm": 0.6456904411315918,
785
+ "learning_rate": 0.0001974374002586341,
786
+ "loss": 2.3753206729888916,
787
+ "num_input_tokens_seen": 1276274,
788
+ "step": 78,
789
+ "train_runtime": 871.1761,
790
+ "train_tokens_per_second": 1465.001
791
+ },
792
+ {
793
+ "epoch": 0.15792103948025987,
794
+ "grad_norm": 0.6789486408233643,
795
+ "learning_rate": 0.00019736603891148513,
796
+ "loss": 2.556735038757324,
797
+ "num_input_tokens_seen": 1292658,
798
+ "step": 79,
799
+ "train_runtime": 881.92,
800
+ "train_tokens_per_second": 1465.732
801
+ },
802
+ {
803
+ "epoch": 0.15992003998001,
804
+ "grad_norm": 0.5870137810707092,
805
+ "learning_rate": 0.00019729371080901402,
806
+ "loss": 2.5232064723968506,
807
+ "num_input_tokens_seen": 1309042,
808
+ "step": 80,
809
+ "train_runtime": 892.6343,
810
+ "train_tokens_per_second": 1466.493
811
+ },
812
+ {
813
+ "epoch": 0.1619190404797601,
814
+ "grad_norm": 0.5439413189888,
815
+ "learning_rate": 0.00019722041666937233,
816
+ "loss": 2.518394947052002,
817
+ "num_input_tokens_seen": 1325426,
818
+ "step": 81,
819
+ "train_runtime": 903.3552,
820
+ "train_tokens_per_second": 1467.226
821
+ },
822
+ {
823
+ "epoch": 0.16391804097951024,
824
+ "grad_norm": 0.7084252834320068,
825
+ "learning_rate": 0.00019714615722030357,
826
+ "loss": 2.5006942749023438,
827
+ "num_input_tokens_seen": 1341810,
828
+ "step": 82,
829
+ "train_runtime": 914.0655,
830
+ "train_tokens_per_second": 1467.958
831
+ },
832
+ {
833
+ "epoch": 0.16591704147926037,
834
+ "grad_norm": 0.6800078749656677,
835
+ "learning_rate": 0.00019707093319913587,
836
+ "loss": 2.5847601890563965,
837
+ "num_input_tokens_seen": 1358194,
838
+ "step": 83,
839
+ "train_runtime": 924.7859,
840
+ "train_tokens_per_second": 1468.658
841
+ },
842
+ {
843
+ "epoch": 0.1679160419790105,
844
+ "grad_norm": 0.5962506532669067,
845
+ "learning_rate": 0.0001969947453527746,
846
+ "loss": 2.394505023956299,
847
+ "num_input_tokens_seen": 1374578,
848
+ "step": 84,
849
+ "train_runtime": 935.4976,
850
+ "train_tokens_per_second": 1469.355
851
+ },
852
+ {
853
+ "epoch": 0.16991504247876063,
854
+ "grad_norm": 0.659408688545227,
855
+ "learning_rate": 0.00019691759443769512,
856
+ "loss": 2.5332651138305664,
857
+ "num_input_tokens_seen": 1390962,
858
+ "step": 85,
859
+ "train_runtime": 946.2179,
860
+ "train_tokens_per_second": 1470.023
861
+ },
862
+ {
863
+ "epoch": 0.17191404297851073,
864
+ "grad_norm": 0.7143354415893555,
865
+ "learning_rate": 0.00019683948121993516,
866
+ "loss": 2.618718147277832,
867
+ "num_input_tokens_seen": 1407346,
868
+ "step": 86,
869
+ "train_runtime": 956.9405,
870
+ "train_tokens_per_second": 1470.672
871
+ },
872
+ {
873
+ "epoch": 0.17391304347826086,
874
+ "grad_norm": 0.6828016638755798,
875
+ "learning_rate": 0.00019676040647508718,
876
+ "loss": 2.506481170654297,
877
+ "num_input_tokens_seen": 1423730,
878
+ "step": 87,
879
+ "train_runtime": 967.6653,
880
+ "train_tokens_per_second": 1471.304
881
+ },
882
+ {
883
+ "epoch": 0.175912043978011,
884
+ "grad_norm": 0.6377484202384949,
885
+ "learning_rate": 0.00019668037098829078,
886
+ "loss": 2.5501859188079834,
887
+ "num_input_tokens_seen": 1440114,
888
+ "step": 88,
889
+ "train_runtime": 978.4125,
890
+ "train_tokens_per_second": 1471.888
891
+ },
892
+ {
893
+ "epoch": 0.17791104447776113,
894
+ "grad_norm": 0.5860212445259094,
895
+ "learning_rate": 0.00019659937555422476,
896
+ "loss": 2.428554058074951,
897
+ "num_input_tokens_seen": 1456258,
898
+ "step": 89,
899
+ "train_runtime": 989.0475,
900
+ "train_tokens_per_second": 1472.384
901
+ },
902
+ {
903
+ "epoch": 0.17991004497751126,
904
+ "grad_norm": 0.6303457021713257,
905
+ "learning_rate": 0.00019651742097709946,
906
+ "loss": 2.508391857147217,
907
+ "num_input_tokens_seen": 1472642,
908
+ "step": 90,
909
+ "train_runtime": 999.7602,
910
+ "train_tokens_per_second": 1472.995
911
+ },
912
+ {
913
+ "epoch": 0.18190904547726136,
914
+ "grad_norm": 0.6128749847412109,
915
+ "learning_rate": 0.0001964345080706485,
916
+ "loss": 2.3652591705322266,
917
+ "num_input_tokens_seen": 1489026,
918
+ "step": 91,
919
+ "train_runtime": 1010.4805,
920
+ "train_tokens_per_second": 1473.582
921
+ },
922
+ {
923
+ "epoch": 0.1839080459770115,
924
+ "grad_norm": 0.5624603033065796,
925
+ "learning_rate": 0.00019635063765812091,
926
+ "loss": 2.4202356338500977,
927
+ "num_input_tokens_seen": 1505410,
928
+ "step": 92,
929
+ "train_runtime": 1021.1725,
930
+ "train_tokens_per_second": 1474.198
931
+ },
932
+ {
933
+ "epoch": 0.18590704647676162,
934
+ "grad_norm": 0.586696207523346,
935
+ "learning_rate": 0.0001962658105722728,
936
+ "loss": 2.507248640060425,
937
+ "num_input_tokens_seen": 1521794,
938
+ "step": 93,
939
+ "train_runtime": 1031.8815,
940
+ "train_tokens_per_second": 1474.776
941
+ },
942
+ {
943
+ "epoch": 0.18790604697651175,
944
+ "grad_norm": 0.6841021180152893,
945
+ "learning_rate": 0.00019618002765535919,
946
+ "loss": 2.434886932373047,
947
+ "num_input_tokens_seen": 1538178,
948
+ "step": 94,
949
+ "train_runtime": 1042.6122,
950
+ "train_tokens_per_second": 1475.312
951
+ },
952
+ {
953
+ "epoch": 0.18990504747626186,
954
+ "grad_norm": 0.6928579807281494,
955
+ "learning_rate": 0.00019609328975912568,
956
+ "loss": 2.5311965942382812,
957
+ "num_input_tokens_seen": 1554562,
958
+ "step": 95,
959
+ "train_runtime": 1053.3189,
960
+ "train_tokens_per_second": 1475.87
961
+ },
962
+ {
963
+ "epoch": 0.191904047976012,
964
+ "grad_norm": 0.6460245251655579,
965
+ "learning_rate": 0.00019600559774479988,
966
+ "loss": 2.2193102836608887,
967
+ "num_input_tokens_seen": 1570880,
968
+ "step": 96,
969
+ "train_runtime": 1063.9799,
970
+ "train_tokens_per_second": 1476.419
971
+ },
972
+ {
973
+ "epoch": 0.19390304847576212,
974
+ "grad_norm": 0.6225016117095947,
975
+ "learning_rate": 0.00019591695248308296,
976
+ "loss": 2.555119514465332,
977
+ "num_input_tokens_seen": 1587264,
978
+ "step": 97,
979
+ "train_runtime": 1074.6849,
980
+ "train_tokens_per_second": 1476.958
981
+ },
982
+ {
983
+ "epoch": 0.19590204897551225,
984
+ "grad_norm": 0.6219892501831055,
985
+ "learning_rate": 0.00019582735485414092,
986
+ "loss": 2.430931329727173,
987
+ "num_input_tokens_seen": 1603236,
988
+ "step": 98,
989
+ "train_runtime": 1085.1012,
990
+ "train_tokens_per_second": 1477.499
991
+ },
992
+ {
993
+ "epoch": 0.19790104947526238,
994
+ "grad_norm": 0.5690893530845642,
995
+ "learning_rate": 0.0001957368057475959,
996
+ "loss": 2.392733097076416,
997
+ "num_input_tokens_seen": 1619564,
998
+ "step": 99,
999
+ "train_runtime": 1095.7816,
1000
+ "train_tokens_per_second": 1477.999
1001
+ },
1002
+ {
1003
+ "epoch": 0.19990004997501248,
1004
+ "grad_norm": 0.6479955911636353,
1005
+ "learning_rate": 0.00019564530606251736,
1006
+ "loss": 2.5462844371795654,
1007
+ "num_input_tokens_seen": 1635948,
1008
+ "step": 100,
1009
+ "train_runtime": 1106.4822,
1010
+ "train_tokens_per_second": 1478.513
1011
+ },
1012
+ {
1013
+ "epoch": 0.20189905047476261,
1014
+ "grad_norm": 0.657764732837677,
1015
+ "learning_rate": 0.00019555285670741311,
1016
+ "loss": 2.51003098487854,
1017
+ "num_input_tokens_seen": 1652332,
1018
+ "step": 101,
1019
+ "train_runtime": 1117.1814,
1020
+ "train_tokens_per_second": 1479.018
1021
+ },
1022
+ {
1023
+ "epoch": 0.20389805097451275,
1024
+ "grad_norm": 0.6311238408088684,
1025
+ "learning_rate": 0.0001954594586002203,
1026
+ "loss": 2.3784544467926025,
1027
+ "num_input_tokens_seen": 1668716,
1028
+ "step": 102,
1029
+ "train_runtime": 1127.8625,
1030
+ "train_tokens_per_second": 1479.538
1031
+ },
1032
+ {
1033
+ "epoch": 0.20589705147426288,
1034
+ "grad_norm": 0.6337195038795471,
1035
+ "learning_rate": 0.00019536511266829637,
1036
+ "loss": 2.335280656814575,
1037
+ "num_input_tokens_seen": 1685100,
1038
+ "step": 103,
1039
+ "train_runtime": 1138.5584,
1040
+ "train_tokens_per_second": 1480.03
1041
+ },
1042
+ {
1043
+ "epoch": 0.20789605197401298,
1044
+ "grad_norm": 0.7382025122642517,
1045
+ "learning_rate": 0.00019526981984840976,
1046
+ "loss": 2.535940170288086,
1047
+ "num_input_tokens_seen": 1701484,
1048
+ "step": 104,
1049
+ "train_runtime": 1149.2375,
1050
+ "train_tokens_per_second": 1480.533
1051
+ },
1052
+ {
1053
+ "epoch": 0.2098950524737631,
1054
+ "grad_norm": 0.650765597820282,
1055
+ "learning_rate": 0.00019517358108673056,
1056
+ "loss": 2.451458215713501,
1057
+ "num_input_tokens_seen": 1717868,
1058
+ "step": 105,
1059
+ "train_runtime": 1159.9206,
1060
+ "train_tokens_per_second": 1481.022
1061
+ },
1062
+ {
1063
+ "epoch": 0.21189405297351324,
1064
+ "grad_norm": 0.5573831796646118,
1065
+ "learning_rate": 0.00019507639733882135,
1066
+ "loss": 2.317359447479248,
1067
+ "num_input_tokens_seen": 1734252,
1068
+ "step": 106,
1069
+ "train_runtime": 1170.6077,
1070
+ "train_tokens_per_second": 1481.497
1071
+ },
1072
+ {
1073
+ "epoch": 0.21389305347326337,
1074
+ "grad_norm": 0.5417583584785461,
1075
+ "learning_rate": 0.00019497826956962745,
1076
+ "loss": 2.3837292194366455,
1077
+ "num_input_tokens_seen": 1750636,
1078
+ "step": 107,
1079
+ "train_runtime": 1181.3713,
1080
+ "train_tokens_per_second": 1481.868
1081
+ },
1082
+ {
1083
+ "epoch": 0.2158920539730135,
1084
+ "grad_norm": 0.5987706780433655,
1085
+ "learning_rate": 0.0001948791987534674,
1086
+ "loss": 2.3685407638549805,
1087
+ "num_input_tokens_seen": 1767020,
1088
+ "step": 108,
1089
+ "train_runtime": 1192.0855,
1090
+ "train_tokens_per_second": 1482.293
1091
+ },
1092
+ {
1093
+ "epoch": 0.2178910544727636,
1094
+ "grad_norm": 0.6503360271453857,
1095
+ "learning_rate": 0.0001947791858740235,
1096
+ "loss": 2.3225173950195312,
1097
+ "num_input_tokens_seen": 1783404,
1098
+ "step": 109,
1099
+ "train_runtime": 1202.8358,
1100
+ "train_tokens_per_second": 1482.666
1101
+ },
1102
+ {
1103
+ "epoch": 0.21989005497251374,
1104
+ "grad_norm": 0.642593502998352,
1105
+ "learning_rate": 0.00019467823192433165,
1106
+ "loss": 2.2902991771698,
1107
+ "num_input_tokens_seen": 1799788,
1108
+ "step": 110,
1109
+ "train_runtime": 1213.5615,
1110
+ "train_tokens_per_second": 1483.063
1111
+ },
1112
+ {
1113
+ "epoch": 0.22188905547226387,
1114
+ "grad_norm": 0.6346986293792725,
1115
+ "learning_rate": 0.00019457633790677194,
1116
+ "loss": 2.3180410861968994,
1117
+ "num_input_tokens_seen": 1816172,
1118
+ "step": 111,
1119
+ "train_runtime": 1224.2315,
1120
+ "train_tokens_per_second": 1483.52
1121
+ },
1122
+ {
1123
+ "epoch": 0.223888055972014,
1124
+ "grad_norm": 0.6983447074890137,
1125
+ "learning_rate": 0.00019447350483305827,
1126
+ "loss": 2.346426248550415,
1127
+ "num_input_tokens_seen": 1832556,
1128
+ "step": 112,
1129
+ "train_runtime": 1234.9117,
1130
+ "train_tokens_per_second": 1483.957
1131
+ },
1132
+ {
1133
+ "epoch": 0.22588705647176413,
1134
+ "grad_norm": 0.6771863698959351,
1135
+ "learning_rate": 0.00019436973372422868,
1136
+ "loss": 2.393000841140747,
1137
+ "num_input_tokens_seen": 1848940,
1138
+ "step": 113,
1139
+ "train_runtime": 1245.7103,
1140
+ "train_tokens_per_second": 1484.246
1141
+ },
1142
+ {
1143
+ "epoch": 0.22788605697151423,
1144
+ "grad_norm": 0.6571068167686462,
1145
+ "learning_rate": 0.0001942650256106349,
1146
+ "loss": 2.609287738800049,
1147
+ "num_input_tokens_seen": 1865324,
1148
+ "step": 114,
1149
+ "train_runtime": 1256.4874,
1150
+ "train_tokens_per_second": 1484.554
1151
+ },
1152
+ {
1153
+ "epoch": 0.22988505747126436,
1154
+ "grad_norm": 0.6709936857223511,
1155
+ "learning_rate": 0.0001941593815319323,
1156
+ "loss": 2.2739598751068115,
1157
+ "num_input_tokens_seen": 1881708,
1158
+ "step": 115,
1159
+ "train_runtime": 1267.267,
1160
+ "train_tokens_per_second": 1484.855
1161
+ },
1162
+ {
1163
+ "epoch": 0.2318840579710145,
1164
+ "grad_norm": 0.5464649796485901,
1165
+ "learning_rate": 0.00019405280253706955,
1166
+ "loss": 2.2550160884857178,
1167
+ "num_input_tokens_seen": 1898092,
1168
+ "step": 116,
1169
+ "train_runtime": 1278.0428,
1170
+ "train_tokens_per_second": 1485.155
1171
+ },
1172
+ {
1173
+ "epoch": 0.23388305847076463,
1174
+ "grad_norm": 0.7197510600090027,
1175
+ "learning_rate": 0.00019394528968427817,
1176
+ "loss": 2.490752696990967,
1177
+ "num_input_tokens_seen": 1914476,
1178
+ "step": 117,
1179
+ "train_runtime": 1288.8266,
1180
+ "train_tokens_per_second": 1485.441
1181
+ },
1182
+ {
1183
+ "epoch": 0.23588205897051473,
1184
+ "grad_norm": 0.7368646860122681,
1185
+ "learning_rate": 0.00019383684404106202,
1186
+ "loss": 2.4146125316619873,
1187
+ "num_input_tokens_seen": 1930378,
1188
+ "step": 118,
1189
+ "train_runtime": 1299.2727,
1190
+ "train_tokens_per_second": 1485.737
1191
+ },
1192
+ {
1193
+ "epoch": 0.23788105947026486,
1194
+ "grad_norm": 0.6332247853279114,
1195
+ "learning_rate": 0.00019372746668418672,
1196
+ "loss": 2.4597740173339844,
1197
+ "num_input_tokens_seen": 1946762,
1198
+ "step": 119,
1199
+ "train_runtime": 1309.9725,
1200
+ "train_tokens_per_second": 1486.109
1201
+ },
1202
+ {
1203
+ "epoch": 0.239880059970015,
1204
+ "grad_norm": 0.6263355016708374,
1205
+ "learning_rate": 0.00019361715869966893,
1206
+ "loss": 2.322871208190918,
1207
+ "num_input_tokens_seen": 1963146,
1208
+ "step": 120,
1209
+ "train_runtime": 1320.6856,
1210
+ "train_tokens_per_second": 1486.46
1211
+ },
1212
+ {
1213
+ "epoch": 0.24187906046976512,
1214
+ "grad_norm": 0.6257721185684204,
1215
+ "learning_rate": 0.00019350592118276558,
1216
+ "loss": 2.417241334915161,
1217
+ "num_input_tokens_seen": 1979530,
1218
+ "step": 121,
1219
+ "train_runtime": 1331.4948,
1220
+ "train_tokens_per_second": 1486.697
1221
+ },
1222
+ {
1223
+ "epoch": 0.24387806096951525,
1224
+ "grad_norm": 0.6563782691955566,
1225
+ "learning_rate": 0.00019339375523796308,
1226
+ "loss": 2.389177083969116,
1227
+ "num_input_tokens_seen": 1995914,
1228
+ "step": 122,
1229
+ "train_runtime": 1342.5386,
1230
+ "train_tokens_per_second": 1486.672
1231
+ },
1232
+ {
1233
+ "epoch": 0.24587706146926536,
1234
+ "grad_norm": 0.672744631767273,
1235
+ "learning_rate": 0.0001932806619789662,
1236
+ "loss": 2.3840231895446777,
1237
+ "num_input_tokens_seen": 2012298,
1238
+ "step": 123,
1239
+ "train_runtime": 1353.2371,
1240
+ "train_tokens_per_second": 1487.025
1241
+ },
1242
+ {
1243
+ "epoch": 0.2478760619690155,
1244
+ "grad_norm": 0.696761965751648,
1245
+ "learning_rate": 0.00019316664252868712,
1246
+ "loss": 2.441990852355957,
1247
+ "num_input_tokens_seen": 2028682,
1248
+ "step": 124,
1249
+ "train_runtime": 1363.927,
1250
+ "train_tokens_per_second": 1487.383
1251
+ },
1252
+ {
1253
+ "epoch": 0.24987506246876562,
1254
+ "grad_norm": 0.6644465327262878,
1255
+ "learning_rate": 0.0001930516980192342,
1256
+ "loss": 2.3033244609832764,
1257
+ "num_input_tokens_seen": 2045066,
1258
+ "step": 125,
1259
+ "train_runtime": 1374.6254,
1260
+ "train_tokens_per_second": 1487.726
1261
+ },
1262
+ {
1263
+ "epoch": 0.2518740629685157,
1264
+ "grad_norm": 0.6689712405204773,
1265
+ "learning_rate": 0.00019293582959190085,
1266
+ "loss": 2.4898993968963623,
1267
+ "num_input_tokens_seen": 2061450,
1268
+ "step": 126,
1269
+ "train_runtime": 1385.3167,
1270
+ "train_tokens_per_second": 1488.071
1271
+ },
1272
+ {
1273
+ "epoch": 0.2538730634682659,
1274
+ "grad_norm": 0.66810542345047,
1275
+ "learning_rate": 0.0001928190383971541,
1276
+ "loss": 2.326140880584717,
1277
+ "num_input_tokens_seen": 2077834,
1278
+ "step": 127,
1279
+ "train_runtime": 1396.0051,
1280
+ "train_tokens_per_second": 1488.414
1281
+ },
1282
+ {
1283
+ "epoch": 0.255872063968016,
1284
+ "grad_norm": 0.6487640738487244,
1285
+ "learning_rate": 0.00019270132559462327,
1286
+ "loss": 2.2935826778411865,
1287
+ "num_input_tokens_seen": 2093808,
1288
+ "step": 128,
1289
+ "train_runtime": 1406.4513,
1290
+ "train_tokens_per_second": 1488.717
1291
+ },
1292
+ {
1293
+ "epoch": 0.25787106446776614,
1294
+ "grad_norm": 0.6936726570129395,
1295
+ "learning_rate": 0.0001925826923530883,
1296
+ "loss": 2.269087314605713,
1297
+ "num_input_tokens_seen": 2110192,
1298
+ "step": 129,
1299
+ "train_runtime": 1417.1429,
1300
+ "train_tokens_per_second": 1489.047
1301
+ },
1302
+ {
1303
+ "epoch": 0.25987006496751625,
1304
+ "grad_norm": 0.5996974110603333,
1305
+ "learning_rate": 0.00019246313985046834,
1306
+ "loss": 2.4819657802581787,
1307
+ "num_input_tokens_seen": 2126576,
1308
+ "step": 130,
1309
+ "train_runtime": 1427.9474,
1310
+ "train_tokens_per_second": 1489.254
1311
+ },
1312
+ {
1313
+ "epoch": 0.26186906546726635,
1314
+ "grad_norm": 0.6297034025192261,
1315
+ "learning_rate": 0.00019234266927380987,
1316
+ "loss": 2.38704252243042,
1317
+ "num_input_tokens_seen": 2142960,
1318
+ "step": 131,
1319
+ "train_runtime": 1438.7434,
1320
+ "train_tokens_per_second": 1489.466
1321
+ },
1322
+ {
1323
+ "epoch": 0.2638680659670165,
1324
+ "grad_norm": 0.7511478066444397,
1325
+ "learning_rate": 0.0001922212818192751,
1326
+ "loss": 2.4105327129364014,
1327
+ "num_input_tokens_seen": 2159344,
1328
+ "step": 132,
1329
+ "train_runtime": 1449.6524,
1330
+ "train_tokens_per_second": 1489.56
1331
+ },
1332
+ {
1333
+ "epoch": 0.2658670664667666,
1334
+ "grad_norm": 0.6854334473609924,
1335
+ "learning_rate": 0.0001920989786921299,
1336
+ "loss": 2.398444414138794,
1337
+ "num_input_tokens_seen": 2175728,
1338
+ "step": 133,
1339
+ "train_runtime": 1460.519,
1340
+ "train_tokens_per_second": 1489.695
1341
+ },
1342
+ {
1343
+ "epoch": 0.26786606696651677,
1344
+ "grad_norm": 0.6412373185157776,
1345
+ "learning_rate": 0.00019197576110673196,
1346
+ "loss": 2.313157320022583,
1347
+ "num_input_tokens_seen": 2192084,
1348
+ "step": 134,
1349
+ "train_runtime": 1471.2447,
1350
+ "train_tokens_per_second": 1489.952
1351
+ },
1352
+ {
1353
+ "epoch": 0.2698650674662669,
1354
+ "grad_norm": 0.7024304270744324,
1355
+ "learning_rate": 0.00019185163028651877,
1356
+ "loss": 2.4681296348571777,
1357
+ "num_input_tokens_seen": 2208468,
1358
+ "step": 135,
1359
+ "train_runtime": 1481.9499,
1360
+ "train_tokens_per_second": 1490.245
1361
+ },
1362
+ {
1363
+ "epoch": 0.271864067966017,
1364
+ "grad_norm": 0.7034132480621338,
1365
+ "learning_rate": 0.0001917265874639953,
1366
+ "loss": 2.445939064025879,
1367
+ "num_input_tokens_seen": 2224852,
1368
+ "step": 136,
1369
+ "train_runtime": 1492.7366,
1370
+ "train_tokens_per_second": 1490.452
1371
+ },
1372
+ {
1373
+ "epoch": 0.27386306846576713,
1374
+ "grad_norm": 0.6865590810775757,
1375
+ "learning_rate": 0.00019160063388072191,
1376
+ "loss": 2.463561773300171,
1377
+ "num_input_tokens_seen": 2241236,
1378
+ "step": 137,
1379
+ "train_runtime": 1503.6505,
1380
+ "train_tokens_per_second": 1490.53
1381
+ },
1382
+ {
1383
+ "epoch": 0.27586206896551724,
1384
+ "grad_norm": 0.6259234547615051,
1385
+ "learning_rate": 0.000191473770787302,
1386
+ "loss": 2.3744146823883057,
1387
+ "num_input_tokens_seen": 2257620,
1388
+ "step": 138,
1389
+ "train_runtime": 1514.3626,
1390
+ "train_tokens_per_second": 1490.805
1391
+ },
1392
+ {
1393
+ "epoch": 0.27786106946526734,
1394
+ "grad_norm": 0.6290014982223511,
1395
+ "learning_rate": 0.0001913459994433695,
1396
+ "loss": 2.335517168045044,
1397
+ "num_input_tokens_seen": 2274004,
1398
+ "step": 139,
1399
+ "train_runtime": 1525.3057,
1400
+ "train_tokens_per_second": 1490.851
1401
+ },
1402
+ {
1403
+ "epoch": 0.2798600699650175,
1404
+ "grad_norm": 0.7093214988708496,
1405
+ "learning_rate": 0.00019121732111757652,
1406
+ "loss": 2.437976598739624,
1407
+ "num_input_tokens_seen": 2290388,
1408
+ "step": 140,
1409
+ "train_runtime": 1536.4965,
1410
+ "train_tokens_per_second": 1490.656
1411
+ },
1412
+ {
1413
+ "epoch": 0.2818590704647676,
1414
+ "grad_norm": 0.6410729885101318,
1415
+ "learning_rate": 0.00019108773708758064,
1416
+ "loss": 2.268831729888916,
1417
+ "num_input_tokens_seen": 2306772,
1418
+ "step": 141,
1419
+ "train_runtime": 1547.2457,
1420
+ "train_tokens_per_second": 1490.889
1421
+ },
1422
+ {
1423
+ "epoch": 0.28385807096451776,
1424
+ "grad_norm": 0.6548078656196594,
1425
+ "learning_rate": 0.00019095724864003218,
1426
+ "loss": 2.300246000289917,
1427
+ "num_input_tokens_seen": 2323156,
1428
+ "step": 142,
1429
+ "train_runtime": 1557.9309,
1430
+ "train_tokens_per_second": 1491.18
1431
+ },
1432
+ {
1433
+ "epoch": 0.28585707146426786,
1434
+ "grad_norm": 0.6462287306785583,
1435
+ "learning_rate": 0.00019082585707056157,
1436
+ "loss": 2.25825834274292,
1437
+ "num_input_tokens_seen": 2339510,
1438
+ "step": 143,
1439
+ "train_runtime": 1568.9863,
1440
+ "train_tokens_per_second": 1491.097
1441
+ },
1442
+ {
1443
+ "epoch": 0.28785607196401797,
1444
+ "grad_norm": 0.6960925459861755,
1445
+ "learning_rate": 0.00019069356368376646,
1446
+ "loss": 2.2979907989501953,
1447
+ "num_input_tokens_seen": 2355894,
1448
+ "step": 144,
1449
+ "train_runtime": 1579.7309,
1450
+ "train_tokens_per_second": 1491.326
1451
+ },
1452
+ {
1453
+ "epoch": 0.2898550724637681,
1454
+ "grad_norm": 0.59915691614151,
1455
+ "learning_rate": 0.00019056036979319858,
1456
+ "loss": 2.4597928524017334,
1457
+ "num_input_tokens_seen": 2372278,
1458
+ "step": 145,
1459
+ "train_runtime": 1590.4017,
1460
+ "train_tokens_per_second": 1491.622
1461
+ },
1462
+ {
1463
+ "epoch": 0.29185407296351823,
1464
+ "grad_norm": 0.72845458984375,
1465
+ "learning_rate": 0.00019042627672135088,
1466
+ "loss": 2.38205623626709,
1467
+ "num_input_tokens_seen": 2388662,
1468
+ "step": 146,
1469
+ "train_runtime": 1601.1154,
1470
+ "train_tokens_per_second": 1491.874
1471
+ },
1472
+ {
1473
+ "epoch": 0.2938530734632684,
1474
+ "grad_norm": 0.6576253771781921,
1475
+ "learning_rate": 0.0001902912857996445,
1476
+ "loss": 2.3961737155914307,
1477
+ "num_input_tokens_seen": 2405046,
1478
+ "step": 147,
1479
+ "train_runtime": 1611.8141,
1480
+ "train_tokens_per_second": 1492.136
1481
+ },
1482
+ {
1483
+ "epoch": 0.2958520739630185,
1484
+ "grad_norm": 0.7284627556800842,
1485
+ "learning_rate": 0.00019015539836841517,
1486
+ "loss": 2.388429641723633,
1487
+ "num_input_tokens_seen": 2421430,
1488
+ "step": 148,
1489
+ "train_runtime": 1622.5054,
1490
+ "train_tokens_per_second": 1492.402
1491
+ },
1492
+ {
1493
+ "epoch": 0.2978510744627686,
1494
+ "grad_norm": 0.6298946142196655,
1495
+ "learning_rate": 0.00019001861577690028,
1496
+ "loss": 2.337505340576172,
1497
+ "num_input_tokens_seen": 2437814,
1498
+ "step": 149,
1499
+ "train_runtime": 1633.2149,
1500
+ "train_tokens_per_second": 1492.647
1501
+ },
1502
+ {
1503
+ "epoch": 0.29985007496251875,
1504
+ "grad_norm": 0.6117843985557556,
1505
+ "learning_rate": 0.00018988093938322533,
1506
+ "loss": 2.470449924468994,
1507
+ "num_input_tokens_seen": 2454198,
1508
+ "step": 150,
1509
+ "train_runtime": 1643.9612,
1510
+ "train_tokens_per_second": 1492.856
1511
+ },
1512
+ {
1513
+ "epoch": 0.30184907546226886,
1514
+ "grad_norm": 0.7032175660133362,
1515
+ "learning_rate": 0.00018974237055439044,
1516
+ "loss": 2.420793294906616,
1517
+ "num_input_tokens_seen": 2470582,
1518
+ "step": 151,
1519
+ "train_runtime": 1654.6573,
1520
+ "train_tokens_per_second": 1493.108
1521
+ },
1522
+ {
1523
+ "epoch": 0.303848075962019,
1524
+ "grad_norm": 1.0140293836593628,
1525
+ "learning_rate": 0.00018960291066625674,
1526
+ "loss": 2.314863681793213,
1527
+ "num_input_tokens_seen": 2486966,
1528
+ "step": 152,
1529
+ "train_runtime": 1666.4585,
1530
+ "train_tokens_per_second": 1492.366
1531
+ },
1532
+ {
1533
+ "epoch": 0.3058470764617691,
1534
+ "grad_norm": 0.6635705232620239,
1535
+ "learning_rate": 0.00018946256110353286,
1536
+ "loss": 2.4007279872894287,
1537
+ "num_input_tokens_seen": 2503350,
1538
+ "step": 153,
1539
+ "train_runtime": 1677.1869,
1540
+ "train_tokens_per_second": 1492.589
1541
+ },
1542
+ {
1543
+ "epoch": 0.3078460769615192,
1544
+ "grad_norm": 0.6424167156219482,
1545
+ "learning_rate": 0.000189321323259761,
1546
+ "loss": 2.3012707233428955,
1547
+ "num_input_tokens_seen": 2519470,
1548
+ "step": 154,
1549
+ "train_runtime": 1687.6968,
1550
+ "train_tokens_per_second": 1492.845
1551
+ },
1552
+ {
1553
+ "epoch": 0.3098450774612694,
1554
+ "grad_norm": 0.5892760157585144,
1555
+ "learning_rate": 0.00018917919853730323,
1556
+ "loss": 2.2420153617858887,
1557
+ "num_input_tokens_seen": 2535002,
1558
+ "step": 155,
1559
+ "train_runtime": 1697.8558,
1560
+ "train_tokens_per_second": 1493.061
1561
+ },
1562
+ {
1563
+ "epoch": 0.3118440779610195,
1564
+ "grad_norm": 0.5827703475952148,
1565
+ "learning_rate": 0.0001890361883473274,
1566
+ "loss": 2.320924997329712,
1567
+ "num_input_tokens_seen": 2551386,
1568
+ "step": 156,
1569
+ "train_runtime": 1708.542,
1570
+ "train_tokens_per_second": 1493.312
1571
+ },
1572
+ {
1573
+ "epoch": 0.31384307846076964,
1574
+ "grad_norm": 0.5837633609771729,
1575
+ "learning_rate": 0.00018889229410979342,
1576
+ "loss": 2.333136558532715,
1577
+ "num_input_tokens_seen": 2567770,
1578
+ "step": 157,
1579
+ "train_runtime": 1719.2276,
1580
+ "train_tokens_per_second": 1493.56
1581
+ },
1582
+ {
1583
+ "epoch": 0.31584207896051975,
1584
+ "grad_norm": 0.6836022734642029,
1585
+ "learning_rate": 0.00018874751725343885,
1586
+ "loss": 2.394927501678467,
1587
+ "num_input_tokens_seen": 2584154,
1588
+ "step": 158,
1589
+ "train_runtime": 1729.916,
1590
+ "train_tokens_per_second": 1493.803
1591
+ },
1592
+ {
1593
+ "epoch": 0.31784107946026985,
1594
+ "grad_norm": 0.6186059713363647,
1595
+ "learning_rate": 0.00018860185921576483,
1596
+ "loss": 2.296104669570923,
1597
+ "num_input_tokens_seen": 2600500,
1598
+ "step": 159,
1599
+ "train_runtime": 1740.6466,
1600
+ "train_tokens_per_second": 1493.985
1601
+ },
1602
+ {
1603
+ "epoch": 0.31984007996002,
1604
+ "grad_norm": 0.6260522603988647,
1605
+ "learning_rate": 0.00018845532144302194,
1606
+ "loss": 2.4206161499023438,
1607
+ "num_input_tokens_seen": 2616884,
1608
+ "step": 160,
1609
+ "train_runtime": 1751.3314,
1610
+ "train_tokens_per_second": 1494.225
1611
+ },
1612
+ {
1613
+ "epoch": 0.3218390804597701,
1614
+ "grad_norm": 0.7028151154518127,
1615
+ "learning_rate": 0.0001883079053901956,
1616
+ "loss": 2.3263039588928223,
1617
+ "num_input_tokens_seen": 2633268,
1618
+ "step": 161,
1619
+ "train_runtime": 1762.0189,
1620
+ "train_tokens_per_second": 1494.461
1621
+ },
1622
+ {
1623
+ "epoch": 0.3238380809595202,
1624
+ "grad_norm": 0.6303103566169739,
1625
+ "learning_rate": 0.00018815961252099183,
1626
+ "loss": 2.41351580619812,
1627
+ "num_input_tokens_seen": 2649132,
1628
+ "step": 162,
1629
+ "train_runtime": 1772.3051,
1630
+ "train_tokens_per_second": 1494.738
1631
+ },
1632
+ {
1633
+ "epoch": 0.3258370814592704,
1634
+ "grad_norm": 0.6776697039604187,
1635
+ "learning_rate": 0.0001880104443078225,
1636
+ "loss": 2.277194023132324,
1637
+ "num_input_tokens_seen": 2665516,
1638
+ "step": 163,
1639
+ "train_runtime": 1783.0109,
1640
+ "train_tokens_per_second": 1494.952
1641
+ },
1642
+ {
1643
+ "epoch": 0.3278360819590205,
1644
+ "grad_norm": 0.6697080135345459,
1645
+ "learning_rate": 0.00018786040223179107,
1646
+ "loss": 2.486637830734253,
1647
+ "num_input_tokens_seen": 2681900,
1648
+ "step": 164,
1649
+ "train_runtime": 1793.6996,
1650
+ "train_tokens_per_second": 1495.178
1651
+ },
1652
+ {
1653
+ "epoch": 0.32983508245877063,
1654
+ "grad_norm": 0.6267579197883606,
1655
+ "learning_rate": 0.00018770948778267744,
1656
+ "loss": 2.339092254638672,
1657
+ "num_input_tokens_seen": 2698284,
1658
+ "step": 165,
1659
+ "train_runtime": 1804.404,
1660
+ "train_tokens_per_second": 1495.388
1661
+ },
1662
+ {
1663
+ "epoch": 0.33183408295852074,
1664
+ "grad_norm": 0.5976248383522034,
1665
+ "learning_rate": 0.00018755770245892345,
1666
+ "loss": 2.163480520248413,
1667
+ "num_input_tokens_seen": 2714668,
1668
+ "step": 166,
1669
+ "train_runtime": 1815.0936,
1670
+ "train_tokens_per_second": 1495.608
1671
+ },
1672
+ {
1673
+ "epoch": 0.33383308345827084,
1674
+ "grad_norm": 0.6570451259613037,
1675
+ "learning_rate": 0.00018740504776761796,
1676
+ "loss": 2.56025767326355,
1677
+ "num_input_tokens_seen": 2731052,
1678
+ "step": 167,
1679
+ "train_runtime": 1825.7808,
1680
+ "train_tokens_per_second": 1495.827
1681
+ },
1682
+ {
1683
+ "epoch": 0.335832083958021,
1684
+ "grad_norm": 0.7304461002349854,
1685
+ "learning_rate": 0.0001872515252244818,
1686
+ "loss": 2.5441439151763916,
1687
+ "num_input_tokens_seen": 2747436,
1688
+ "step": 168,
1689
+ "train_runtime": 1836.4678,
1690
+ "train_tokens_per_second": 1496.044
1691
+ },
1692
+ {
1693
+ "epoch": 0.3378310844577711,
1694
+ "grad_norm": 0.5998393893241882,
1695
+ "learning_rate": 0.00018709713635385282,
1696
+ "loss": 2.444791316986084,
1697
+ "num_input_tokens_seen": 2763820,
1698
+ "step": 169,
1699
+ "train_runtime": 1847.1609,
1700
+ "train_tokens_per_second": 1496.253
1701
+ },
1702
+ {
1703
+ "epoch": 0.33983008495752126,
1704
+ "grad_norm": 0.6098015904426575,
1705
+ "learning_rate": 0.00018694188268867062,
1706
+ "loss": 2.60428786277771,
1707
+ "num_input_tokens_seen": 2780204,
1708
+ "step": 170,
1709
+ "train_runtime": 1857.8534,
1710
+ "train_tokens_per_second": 1496.46
1711
+ },
1712
+ {
1713
+ "epoch": 0.34182908545727136,
1714
+ "grad_norm": 0.647736668586731,
1715
+ "learning_rate": 0.00018678576577046158,
1716
+ "loss": 2.439578056335449,
1717
+ "num_input_tokens_seen": 2796588,
1718
+ "step": 171,
1719
+ "train_runtime": 1868.601,
1720
+ "train_tokens_per_second": 1496.621
1721
+ },
1722
+ {
1723
+ "epoch": 0.34382808595702147,
1724
+ "grad_norm": 0.6672942638397217,
1725
+ "learning_rate": 0.00018662878714932314,
1726
+ "loss": 2.454664707183838,
1727
+ "num_input_tokens_seen": 2812972,
1728
+ "step": 172,
1729
+ "train_runtime": 1879.3469,
1730
+ "train_tokens_per_second": 1496.782
1731
+ },
1732
+ {
1733
+ "epoch": 0.3458270864567716,
1734
+ "grad_norm": 0.5663049817085266,
1735
+ "learning_rate": 0.00018647094838390892,
1736
+ "loss": 2.4026777744293213,
1737
+ "num_input_tokens_seen": 2829356,
1738
+ "step": 173,
1739
+ "train_runtime": 1890.0635,
1740
+ "train_tokens_per_second": 1496.963
1741
+ },
1742
+ {
1743
+ "epoch": 0.34782608695652173,
1744
+ "grad_norm": 0.7377136945724487,
1745
+ "learning_rate": 0.00018631225104141278,
1746
+ "loss": 2.3012824058532715,
1747
+ "num_input_tokens_seen": 2845740,
1748
+ "step": 174,
1749
+ "train_runtime": 1900.7835,
1750
+ "train_tokens_per_second": 1497.141
1751
+ },
1752
+ {
1753
+ "epoch": 0.3498250874562719,
1754
+ "grad_norm": 0.5479752421379089,
1755
+ "learning_rate": 0.00018615269669755363,
1756
+ "loss": 2.2582085132598877,
1757
+ "num_input_tokens_seen": 2862124,
1758
+ "step": 175,
1759
+ "train_runtime": 1911.4641,
1760
+ "train_tokens_per_second": 1497.346
1761
+ },
1762
+ {
1763
+ "epoch": 0.351824087956022,
1764
+ "grad_norm": 0.6023082137107849,
1765
+ "learning_rate": 0.00018599228693655942,
1766
+ "loss": 2.313683032989502,
1767
+ "num_input_tokens_seen": 2878508,
1768
+ "step": 176,
1769
+ "train_runtime": 1922.1605,
1770
+ "train_tokens_per_second": 1497.538
1771
+ },
1772
+ {
1773
+ "epoch": 0.3538230884557721,
1774
+ "grad_norm": 0.7141623497009277,
1775
+ "learning_rate": 0.00018583102335115187,
1776
+ "loss": 2.5196468830108643,
1777
+ "num_input_tokens_seen": 2894892,
1778
+ "step": 177,
1779
+ "train_runtime": 1932.8615,
1780
+ "train_tokens_per_second": 1497.723
1781
+ },
1782
+ {
1783
+ "epoch": 0.35582208895552225,
1784
+ "grad_norm": 0.687178373336792,
1785
+ "learning_rate": 0.00018566890754253008,
1786
+ "loss": 2.3450679779052734,
1787
+ "num_input_tokens_seen": 2911276,
1788
+ "step": 178,
1789
+ "train_runtime": 1943.5645,
1790
+ "train_tokens_per_second": 1497.905
1791
+ },
1792
+ {
1793
+ "epoch": 0.35782108945527236,
1794
+ "grad_norm": 0.6856889128684998,
1795
+ "learning_rate": 0.0001855059411203552,
1796
+ "loss": 2.3960957527160645,
1797
+ "num_input_tokens_seen": 2927660,
1798
+ "step": 179,
1799
+ "train_runtime": 1954.2507,
1800
+ "train_tokens_per_second": 1498.099
1801
+ },
1802
+ {
1803
+ "epoch": 0.3598200899550225,
1804
+ "grad_norm": 0.6607837080955505,
1805
+ "learning_rate": 0.00018534212570273407,
1806
+ "loss": 2.223076343536377,
1807
+ "num_input_tokens_seen": 2943420,
1808
+ "step": 180,
1809
+ "train_runtime": 1964.4892,
1810
+ "train_tokens_per_second": 1498.313
1811
+ },
1812
+ {
1813
+ "epoch": 0.3618190904547726,
1814
+ "grad_norm": 0.6468161344528198,
1815
+ "learning_rate": 0.0001851774629162033,
1816
+ "loss": 2.3109865188598633,
1817
+ "num_input_tokens_seen": 2959804,
1818
+ "step": 181,
1819
+ "train_runtime": 1975.1656,
1820
+ "train_tokens_per_second": 1498.509
1821
+ },
1822
+ {
1823
+ "epoch": 0.3638180909545227,
1824
+ "grad_norm": 0.6777626276016235,
1825
+ "learning_rate": 0.00018501195439571313,
1826
+ "loss": 2.2806036472320557,
1827
+ "num_input_tokens_seen": 2976188,
1828
+ "step": 182,
1829
+ "train_runtime": 1985.8207,
1830
+ "train_tokens_per_second": 1498.719
1831
+ },
1832
+ {
1833
+ "epoch": 0.3658170914542729,
1834
+ "grad_norm": 0.6999329328536987,
1835
+ "learning_rate": 0.00018484560178461104,
1836
+ "loss": 2.4783687591552734,
1837
+ "num_input_tokens_seen": 2992028,
1838
+ "step": 183,
1839
+ "train_runtime": 1996.1274,
1840
+ "train_tokens_per_second": 1498.916
1841
+ },
1842
+ {
1843
+ "epoch": 0.367816091954023,
1844
+ "grad_norm": 0.6081796884536743,
1845
+ "learning_rate": 0.0001846784067346257,
1846
+ "loss": 2.398671865463257,
1847
+ "num_input_tokens_seen": 3008412,
1848
+ "step": 184,
1849
+ "train_runtime": 2006.8397,
1850
+ "train_tokens_per_second": 1499.079
1851
+ },
1852
+ {
1853
+ "epoch": 0.3698150924537731,
1854
+ "grad_norm": 0.6715173125267029,
1855
+ "learning_rate": 0.0001845103709058504,
1856
+ "loss": 2.1319808959960938,
1857
+ "num_input_tokens_seen": 3024796,
1858
+ "step": 185,
1859
+ "train_runtime": 2017.4994,
1860
+ "train_tokens_per_second": 1499.28
1861
+ },
1862
+ {
1863
+ "epoch": 0.37181409295352325,
1864
+ "grad_norm": 0.7541316747665405,
1865
+ "learning_rate": 0.00018434149596672649,
1866
+ "loss": 2.4389028549194336,
1867
+ "num_input_tokens_seen": 3041180,
1868
+ "step": 186,
1869
+ "train_runtime": 2028.2192,
1870
+ "train_tokens_per_second": 1499.434
1871
+ },
1872
+ {
1873
+ "epoch": 0.37381309345327335,
1874
+ "grad_norm": 0.6820785999298096,
1875
+ "learning_rate": 0.000184171783594027,
1876
+ "loss": 2.481621742248535,
1877
+ "num_input_tokens_seen": 3057564,
1878
+ "step": 187,
1879
+ "train_runtime": 2039.1238,
1880
+ "train_tokens_per_second": 1499.45
1881
+ },
1882
+ {
1883
+ "epoch": 0.3758120939530235,
1884
+ "grad_norm": 0.7726727724075317,
1885
+ "learning_rate": 0.0001840012354728399,
1886
+ "loss": 2.523444652557373,
1887
+ "num_input_tokens_seen": 3073948,
1888
+ "step": 188,
1889
+ "train_runtime": 2050.0699,
1890
+ "train_tokens_per_second": 1499.436
1891
+ },
1892
+ {
1893
+ "epoch": 0.3778110944527736,
1894
+ "grad_norm": 0.6423644423484802,
1895
+ "learning_rate": 0.0001838298532965513,
1896
+ "loss": 2.2019622325897217,
1897
+ "num_input_tokens_seen": 3090332,
1898
+ "step": 189,
1899
+ "train_runtime": 2061.039,
1900
+ "train_tokens_per_second": 1499.405
1901
+ },
1902
+ {
1903
+ "epoch": 0.3798100949525237,
1904
+ "grad_norm": 0.5699455738067627,
1905
+ "learning_rate": 0.0001836576387668289,
1906
+ "loss": 2.1509408950805664,
1907
+ "num_input_tokens_seen": 3106716,
1908
+ "step": 190,
1909
+ "train_runtime": 2071.8862,
1910
+ "train_tokens_per_second": 1499.463
1911
+ },
1912
+ {
1913
+ "epoch": 0.3818090954522739,
1914
+ "grad_norm": 0.6167863607406616,
1915
+ "learning_rate": 0.00018348459359360467,
1916
+ "loss": 2.287490129470825,
1917
+ "num_input_tokens_seen": 3123100,
1918
+ "step": 191,
1919
+ "train_runtime": 2082.637,
1920
+ "train_tokens_per_second": 1499.589
1921
+ },
1922
+ {
1923
+ "epoch": 0.383808095952024,
1924
+ "grad_norm": 0.7306831479072571,
1925
+ "learning_rate": 0.0001833107194950582,
1926
+ "loss": 2.3720479011535645,
1927
+ "num_input_tokens_seen": 3139484,
1928
+ "step": 192,
1929
+ "train_runtime": 2093.3405,
1930
+ "train_tokens_per_second": 1499.748
1931
+ },
1932
+ {
1933
+ "epoch": 0.38580709645177413,
1934
+ "grad_norm": 0.6145524978637695,
1935
+ "learning_rate": 0.00018313601819759965,
1936
+ "loss": 2.202296257019043,
1937
+ "num_input_tokens_seen": 3155868,
1938
+ "step": 193,
1939
+ "train_runtime": 2104.0509,
1940
+ "train_tokens_per_second": 1499.901
1941
+ },
1942
+ {
1943
+ "epoch": 0.38780609695152424,
1944
+ "grad_norm": 0.809516191482544,
1945
+ "learning_rate": 0.00018296049143585238,
1946
+ "loss": 2.2910845279693604,
1947
+ "num_input_tokens_seen": 3172126,
1948
+ "step": 194,
1949
+ "train_runtime": 2114.868,
1950
+ "train_tokens_per_second": 1499.917
1951
+ },
1952
+ {
1953
+ "epoch": 0.38980509745127434,
1954
+ "grad_norm": 0.6672027111053467,
1955
+ "learning_rate": 0.00018278414095263587,
1956
+ "loss": 2.3636233806610107,
1957
+ "num_input_tokens_seen": 3188510,
1958
+ "step": 195,
1959
+ "train_runtime": 2125.6081,
1960
+ "train_tokens_per_second": 1500.046
1961
+ },
1962
+ {
1963
+ "epoch": 0.3918040979510245,
1964
+ "grad_norm": 0.5965846180915833,
1965
+ "learning_rate": 0.0001826069684989484,
1966
+ "loss": 2.3528826236724854,
1967
+ "num_input_tokens_seen": 3204894,
1968
+ "step": 196,
1969
+ "train_runtime": 2136.3136,
1970
+ "train_tokens_per_second": 1500.198
1971
+ },
1972
+ {
1973
+ "epoch": 0.3938030984507746,
1974
+ "grad_norm": 0.613410234451294,
1975
+ "learning_rate": 0.00018242897583394975,
1976
+ "loss": 2.2517004013061523,
1977
+ "num_input_tokens_seen": 3221278,
1978
+ "step": 197,
1979
+ "train_runtime": 2147.0319,
1980
+ "train_tokens_per_second": 1500.34
1981
+ },
1982
+ {
1983
+ "epoch": 0.39580209895052476,
1984
+ "grad_norm": 0.6586496829986572,
1985
+ "learning_rate": 0.00018225016472494347,
1986
+ "loss": 2.3239808082580566,
1987
+ "num_input_tokens_seen": 3237662,
1988
+ "step": 198,
1989
+ "train_runtime": 2157.7134,
1990
+ "train_tokens_per_second": 1500.506
1991
+ },
1992
+ {
1993
+ "epoch": 0.39780109945027486,
1994
+ "grad_norm": 0.6816010475158691,
1995
+ "learning_rate": 0.0001820705369473597,
1996
+ "loss": 2.1372361183166504,
1997
+ "num_input_tokens_seen": 3254046,
1998
+ "step": 199,
1999
+ "train_runtime": 2168.4076,
2000
+ "train_tokens_per_second": 1500.662
2001
+ },
2002
+ {
2003
+ "epoch": 0.39980009995002497,
2004
+ "grad_norm": 0.6197704672813416,
2005
+ "learning_rate": 0.0001818900942847372,
2006
+ "loss": 2.1767396926879883,
2007
+ "num_input_tokens_seen": 3270430,
2008
+ "step": 200,
2009
+ "train_runtime": 2179.1174,
2010
+ "train_tokens_per_second": 1500.805
2011
+ }
2012
+ ],
2013
+ "logging_steps": 1,
2014
+ "max_steps": 1002,
2015
+ "num_input_tokens_seen": 3270430,
2016
+ "num_train_epochs": 2,
2017
+ "save_steps": 200,
2018
+ "stateful_callbacks": {
2019
+ "TrainerControl": {
2020
+ "args": {
2021
+ "should_epoch_stop": false,
2022
+ "should_evaluate": false,
2023
+ "should_log": false,
2024
+ "should_save": true,
2025
+ "should_training_stop": false
2026
+ },
2027
+ "attributes": {}
2028
+ }
2029
+ },
2030
+ "total_flos": 8.926110141650496e+16,
2031
+ "train_batch_size": 2,
2032
+ "trial_name": null,
2033
+ "trial_params": null
2034
+ }
checkpoint-200/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae7a694dd4875ee97139bdd8ebc7349b14ce4d529c119642d14f7f7f5ebd9df4
3
+ size 5777
checkpoint-400/README.md ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ ---
13
+
14
+ # Model Card for Model ID
15
+
16
+ <!-- Provide a quick summary of what the model is/does. -->
17
+
18
+
19
+
20
+ ## Model Details
21
+
22
+ ### Model Description
23
+
24
+ <!-- Provide a longer summary of what this model is. -->
25
+
26
+
27
+
28
+ - **Developed by:** [More Information Needed]
29
+ - **Funded by [optional]:** [More Information Needed]
30
+ - **Shared by [optional]:** [More Information Needed]
31
+ - **Model type:** [More Information Needed]
32
+ - **Language(s) (NLP):** [More Information Needed]
33
+ - **License:** [More Information Needed]
34
+ - **Finetuned from model [optional]:** [More Information Needed]
35
+
36
+ ### Model Sources [optional]
37
+
38
+ <!-- Provide the basic links for the model. -->
39
+
40
+ - **Repository:** [More Information Needed]
41
+ - **Paper [optional]:** [More Information Needed]
42
+ - **Demo [optional]:** [More Information Needed]
43
+
44
+ ## Uses
45
+
46
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
47
+
48
+ ### Direct Use
49
+
50
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
51
+
52
+ [More Information Needed]
53
+
54
+ ### Downstream Use [optional]
55
+
56
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
57
+
58
+ [More Information Needed]
59
+
60
+ ### Out-of-Scope Use
61
+
62
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
63
+
64
+ [More Information Needed]
65
+
66
+ ## Bias, Risks, and Limitations
67
+
68
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
69
+
70
+ [More Information Needed]
71
+
72
+ ### Recommendations
73
+
74
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
75
+
76
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
77
+
78
+ ## How to Get Started with the Model
79
+
80
+ Use the code below to get started with the model.
81
+
82
+ [More Information Needed]
83
+
84
+ ## Training Details
85
+
86
+ ### Training Data
87
+
88
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
89
+
90
+ [More Information Needed]
91
+
92
+ ### Training Procedure
93
+
94
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
95
+
96
+ #### Preprocessing [optional]
97
+
98
+ [More Information Needed]
99
+
100
+
101
+ #### Training Hyperparameters
102
+
103
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
104
+
105
+ #### Speeds, Sizes, Times [optional]
106
+
107
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
108
+
109
+ [More Information Needed]
110
+
111
+ ## Evaluation
112
+
113
+ <!-- This section describes the evaluation protocols and provides the results. -->
114
+
115
+ ### Testing Data, Factors & Metrics
116
+
117
+ #### Testing Data
118
+
119
+ <!-- This should link to a Dataset Card if possible. -->
120
+
121
+ [More Information Needed]
122
+
123
+ #### Factors
124
+
125
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
126
+
127
+ [More Information Needed]
128
+
129
+ #### Metrics
130
+
131
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
132
+
133
+ [More Information Needed]
134
+
135
+ ### Results
136
+
137
+ [More Information Needed]
138
+
139
+ #### Summary
140
+
141
+
142
+
143
+ ## Model Examination [optional]
144
+
145
+ <!-- Relevant interpretability work for the model goes here -->
146
+
147
+ [More Information Needed]
148
+
149
+ ## Environmental Impact
150
+
151
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
152
+
153
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
154
+
155
+ - **Hardware Type:** [More Information Needed]
156
+ - **Hours used:** [More Information Needed]
157
+ - **Cloud Provider:** [More Information Needed]
158
+ - **Compute Region:** [More Information Needed]
159
+ - **Carbon Emitted:** [More Information Needed]
160
+
161
+ ## Technical Specifications [optional]
162
+
163
+ ### Model Architecture and Objective
164
+
165
+ [More Information Needed]
166
+
167
+ ### Compute Infrastructure
168
+
169
+ [More Information Needed]
170
+
171
+ #### Hardware
172
+
173
+ [More Information Needed]
174
+
175
+ #### Software
176
+
177
+ [More Information Needed]
178
+
179
+ ## Citation [optional]
180
+
181
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
182
+
183
+ **BibTeX:**
184
+
185
+ [More Information Needed]
186
+
187
+ **APA:**
188
+
189
+ [More Information Needed]
190
+
191
+ ## Glossary [optional]
192
+
193
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
194
+
195
+ [More Information Needed]
196
+
197
+ ## More Information [optional]
198
+
199
+ [More Information Needed]
200
+
201
+ ## Model Card Authors [optional]
202
+
203
+ [More Information Needed]
204
+
205
+ ## Model Card Contact
206
+
207
+ [More Information Needed]
208
+ ### Framework versions
209
+
210
+ - PEFT 0.18.1
checkpoint-400/adapter_config.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": {
6
+ "base_model_class": "Gemma4ForConditionalGeneration",
7
+ "parent_library": "transformers.models.gemma4.modeling_gemma4",
8
+ "unsloth_fixed": true
9
+ },
10
+ "base_model_name_or_path": "chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged",
11
+ "bias": "none",
12
+ "corda_config": null,
13
+ "ensure_weight_tying": false,
14
+ "eva_config": null,
15
+ "exclude_modules": null,
16
+ "fan_in_fan_out": false,
17
+ "inference_mode": true,
18
+ "init_lora_weights": true,
19
+ "layer_replication": null,
20
+ "layers_pattern": null,
21
+ "layers_to_transform": null,
22
+ "loftq_config": {},
23
+ "lora_alpha": 32,
24
+ "lora_bias": false,
25
+ "lora_dropout": 0.0,
26
+ "megatron_config": null,
27
+ "megatron_core": "megatron.core",
28
+ "modules_to_save": null,
29
+ "peft_type": "LORA",
30
+ "peft_version": "0.18.1",
31
+ "qalora_group_size": 16,
32
+ "r": 16,
33
+ "rank_pattern": {},
34
+ "revision": null,
35
+ "target_modules": [
36
+ "o_proj",
37
+ "down_proj",
38
+ "k_proj",
39
+ "up_proj",
40
+ "q_proj",
41
+ "v_proj",
42
+ "gate_proj"
43
+ ],
44
+ "target_parameters": null,
45
+ "task_type": "CAUSAL_LM",
46
+ "trainable_token_indices": null,
47
+ "use_dora": false,
48
+ "use_qalora": false,
49
+ "use_rslora": false
50
+ }
checkpoint-400/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d4e6cc8de31aef6cf529dbfeea5b628c4985ffbe1a8e0f99ace2eaf4c6731197
3
+ size 169741912
checkpoint-400/chat_template.jinja ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro format_parameters(properties, required) -%}
2
+ {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
3
+ {%- set ns = namespace(found_first=false) -%}
4
+ {%- for key, value in properties | dictsort -%}
5
+ {%- set add_comma = false -%}
6
+ {%- if key not in standard_keys -%}
7
+ {%- if ns.found_first %},{% endif -%}
8
+ {%- set ns.found_first = true -%}
9
+ {{ key }}:{
10
+ {%- if value['description'] -%}
11
+ description:<|"|>{{ value['description'] }}<|"|>
12
+ {%- set add_comma = true -%}
13
+ {%- endif -%}
14
+ {%- if value['type'] | upper == 'STRING' -%}
15
+ {%- if value['enum'] -%}
16
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
17
+ enum:{{ format_argument(value['enum']) }}
18
+ {%- endif -%}
19
+ {%- elif value['type'] | upper == 'ARRAY' -%}
20
+ {%- if value['items'] is mapping and value['items'] -%}
21
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
22
+ items:{
23
+ {%- set ns_items = namespace(found_first=false) -%}
24
+ {%- for item_key, item_value in value['items'] | dictsort -%}
25
+ {%- if item_value is not none -%}
26
+ {%- if ns_items.found_first %},{% endif -%}
27
+ {%- set ns_items.found_first = true -%}
28
+ {%- if item_key == 'properties' -%}
29
+ properties:{
30
+ {%- if item_value is mapping -%}
31
+ {{- format_parameters(item_value, value['items']['required'] | default([])) -}}
32
+ {%- endif -%}
33
+ }
34
+ {%- elif item_key == 'required' -%}
35
+ required:[
36
+ {%- for req_item in item_value -%}
37
+ <|"|>{{- req_item -}}<|"|>
38
+ {%- if not loop.last %},{% endif -%}
39
+ {%- endfor -%}
40
+ ]
41
+ {%- elif item_key == 'type' -%}
42
+ {%- if item_value is string -%}
43
+ type:{{ format_argument(item_value | upper) }}
44
+ {%- else -%}
45
+ type:{{ format_argument(item_value | map('upper') | list) }}
46
+ {%- endif -%}
47
+ {%- else -%}
48
+ {{ item_key }}:{{ format_argument(item_value) }}
49
+ {%- endif -%}
50
+ {%- endif -%}
51
+ {%- endfor -%}
52
+ }
53
+ {%- endif -%}
54
+ {%- endif -%}
55
+ {%- if value['nullable'] %}
56
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
57
+ nullable:true
58
+ {%- endif -%}
59
+ {%- if value['type'] | upper == 'OBJECT' -%}
60
+ {%- if value['properties'] is defined and value['properties'] is mapping -%}
61
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
62
+ properties:{
63
+ {{- format_parameters(value['properties'], value['required'] | default([])) -}}
64
+ }
65
+ {%- elif value is mapping -%}
66
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
67
+ properties:{
68
+ {{- format_parameters(value, value['required'] | default([])) -}}
69
+ }
70
+ {%- endif -%}
71
+ {%- if value['required'] -%}
72
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
73
+ required:[
74
+ {%- for item in value['required'] | default([]) -%}
75
+ <|"|>{{- item -}}<|"|>
76
+ {%- if not loop.last %},{% endif -%}
77
+ {%- endfor -%}
78
+ ]
79
+ {%- endif -%}
80
+ {%- endif -%}
81
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
82
+ type:<|"|>{{ value['type'] | upper }}<|"|>}
83
+ {%- endif -%}
84
+ {%- endfor -%}
85
+ {%- endmacro -%}
86
+ {%- macro format_function_declaration(tool_data) -%}
87
+ declaration:{{- tool_data['function']['name'] -}}{description:<|"|>{{- tool_data['function']['description'] -}}<|"|>
88
+ {%- set params = tool_data['function']['parameters'] -%}
89
+ {%- if params -%}
90
+ ,parameters:{
91
+ {%- if params['properties'] -%}
92
+ properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
93
+ {%- endif -%}
94
+ {%- if params['required'] -%}
95
+ required:[
96
+ {%- for item in params['required'] -%}
97
+ <|"|>{{- item -}}<|"|>
98
+ {{- ',' if not loop.last -}}
99
+ {%- endfor -%}
100
+ ],
101
+ {%- endif -%}
102
+ {%- if params['type'] -%}
103
+ type:<|"|>{{- params['type'] | upper -}}<|"|>}
104
+ {%- endif -%}
105
+ {%- endif -%}
106
+ {%- if 'response' in tool_data['function'] -%}
107
+ {%- set response_declaration = tool_data['function']['response'] -%}
108
+ ,response:{
109
+ {%- if response_declaration['description'] -%}
110
+ description:<|"|>{{- response_declaration['description'] -}}<|"|>,
111
+ {%- endif -%}
112
+ {%- if response_declaration['type'] | upper == 'OBJECT' -%}
113
+ type:<|"|>{{- response_declaration['type'] | upper -}}<|"|>}
114
+ {%- endif -%}
115
+ {%- endif -%}
116
+ }
117
+ {%- endmacro -%}
118
+ {%- macro format_argument(argument, escape_keys=True) -%}
119
+ {%- if argument is string -%}
120
+ {{- '<|"|>' + argument + '<|"|>' -}}
121
+ {%- elif argument is boolean -%}
122
+ {{- 'true' if argument else 'false' -}}
123
+ {%- elif argument is mapping -%}
124
+ {{- '{' -}}
125
+ {%- set ns = namespace(found_first=false) -%}
126
+ {%- for key, value in argument | dictsort -%}
127
+ {%- if ns.found_first %},{% endif -%}
128
+ {%- set ns.found_first = true -%}
129
+ {%- if escape_keys -%}
130
+ {{- '<|"|>' + key + '<|"|>' -}}
131
+ {%- else -%}
132
+ {{- key -}}
133
+ {%- endif -%}
134
+ :{{- format_argument(value, escape_keys=escape_keys) -}}
135
+ {%- endfor -%}
136
+ {{- '}' -}}
137
+ {%- elif argument is sequence -%}
138
+ {{- '[' -}}
139
+ {%- for item in argument -%}
140
+ {{- format_argument(item, escape_keys=escape_keys) -}}
141
+ {%- if not loop.last %},{% endif -%}
142
+ {%- endfor -%}
143
+ {{- ']' -}}
144
+ {%- else -%}
145
+ {{- argument -}}
146
+ {%- endif -%}
147
+ {%- endmacro -%}
148
+ {%- macro strip_thinking(text) -%}
149
+ {%- set ns = namespace(result='') -%}
150
+ {%- for part in text.split('<channel|>') -%}
151
+ {%- if '<|channel>' in part -%}
152
+ {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
153
+ {%- else -%}
154
+ {%- set ns.result = ns.result + part -%}
155
+ {%- endif -%}
156
+ {%- endfor -%}
157
+ {{- ns.result | trim -}}
158
+ {%- endmacro -%}
159
+
160
+ {%- macro format_tool_response_block(tool_name, response) -%}
161
+ {{- '<|tool_response>' -}}
162
+ {%- if response is mapping -%}
163
+ {{- 'response:' + tool_name + '{' -}}
164
+ {%- for key, value in response | dictsort -%}
165
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
166
+ {%- if not loop.last %},{% endif -%}
167
+ {%- endfor -%}
168
+ {{- '}' -}}
169
+ {%- else -%}
170
+ {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}
171
+ {%- endif -%}
172
+ {{- '<tool_response|>' -}}
173
+ {%- endmacro -%}
174
+
175
+ {%- set ns = namespace(prev_message_type=None) -%}
176
+ {%- set loop_messages = messages -%}
177
+ {{- bos_token -}}
178
+ {#- Handle System/Tool Definitions Block -#}
179
+ {%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}
180
+ {{- '<|turn>system\n' -}}
181
+
182
+ {#- Inject Thinking token at the very top of the FIRST system turn -#}
183
+ {%- if enable_thinking is defined and enable_thinking -%}
184
+ {{- '<|think|>\n' -}}
185
+ {%- set ns.prev_message_type = 'think' -%}
186
+ {%- endif -%}
187
+
188
+ {%- if messages[0]['role'] in ['system', 'developer'] -%}
189
+ {{- messages[0]['content'] | trim -}}
190
+ {%- set loop_messages = messages[1:] -%}
191
+ {%- endif -%}
192
+
193
+ {%- if tools -%}
194
+ {%- for tool in tools %}
195
+ {{- '<|tool>' -}}
196
+ {{- format_function_declaration(tool) | trim -}}
197
+ {{- '<tool|>' -}}
198
+ {%- endfor %}
199
+ {%- set ns.prev_message_type = 'tool' -%}
200
+ {%- endif -%}
201
+
202
+ {{- '<turn|>\n' -}}
203
+ {%- endif %}
204
+
205
+ {#- Pre-scan: find last user message index for reasoning guard -#}
206
+ {%- set ns_turn = namespace(last_user_idx=-1) -%}
207
+ {%- for i in range(loop_messages | length) -%}
208
+ {%- if loop_messages[i]['role'] == 'user' -%}
209
+ {%- set ns_turn.last_user_idx = i -%}
210
+ {%- endif -%}
211
+ {%- endfor -%}
212
+
213
+ {#- Loop through messages -#}
214
+ {%- for message in loop_messages -%}
215
+ {%- if message['role'] != 'tool' -%}
216
+ {%- set ns.prev_message_type = None -%}
217
+ {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}
218
+ {#- Detect continuation: suppress duplicate <|turn>model when previous non-tool message was also assistant -#}
219
+ {%- set prev_nt = namespace(role=None, found=false) -%}
220
+ {%- if loop.index0 > 0 -%}
221
+ {%- for j in range(loop.index0 - 1, -1, -1) -%}
222
+ {%- if not prev_nt.found -%}
223
+ {%- if loop_messages[j]['role'] != 'tool' -%}
224
+ {%- set prev_nt.role = loop_messages[j]['role'] -%}
225
+ {%- set prev_nt.found = true -%}
226
+ {%- endif -%}
227
+ {%- endif -%}
228
+ {%- endfor -%}
229
+ {%- endif -%}
230
+ {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}
231
+ {%- if not continue_same_model_turn -%}
232
+ {{- '<|turn>' + role + '\n' }}
233
+ {%- endif -%}
234
+
235
+ {#- Render reasoning/reasoning_content as thinking channel -#}
236
+ {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}
237
+ {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}
238
+ {{- '<|channel>thought\n' + thinking_text + '\n<channel|>' -}}
239
+ {%- endif -%}
240
+
241
+ {%- if message['tool_calls'] -%}
242
+ {%- for tool_call in message['tool_calls'] -%}
243
+ {%- set function = tool_call['function'] -%}
244
+ {{- '<|tool_call>call:' + function['name'] + '{' -}}
245
+ {%- if function['arguments'] is mapping -%}
246
+ {%- set ns_args = namespace(found_first=false) -%}
247
+ {%- for key, value in function['arguments'] | dictsort -%}
248
+ {%- if ns_args.found_first %},{% endif -%}
249
+ {%- set ns_args.found_first = true -%}
250
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
251
+ {%- endfor -%}
252
+ {%- elif function['arguments'] is string -%}
253
+ {{- function['arguments'] -}}
254
+ {%- endif -%}
255
+ {{- '}<tool_call|>' -}}
256
+ {%- endfor -%}
257
+ {%- set ns.prev_message_type = 'tool_call' -%}
258
+ {%- endif -%}
259
+
260
+ {%- set ns_tr_out = namespace(flag=false) -%}
261
+ {%- if message.get('tool_responses') -%}
262
+ {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}
263
+ {%- for tool_response in message['tool_responses'] -%}
264
+ {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}
265
+ {%- set ns_tr_out.flag = true -%}
266
+ {%- set ns.prev_message_type = 'tool_response' -%}
267
+ {%- endfor -%}
268
+ {%- elif message.get('tool_calls') -%}
269
+ {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}
270
+ {%- set ns_tool_scan = namespace(stopped=false) -%}
271
+ {%- for k in range(loop.index0 + 1, loop_messages | length) -%}
272
+ {%- if ns_tool_scan.stopped -%}
273
+ {%- elif loop_messages[k]['role'] != 'tool' -%}
274
+ {%- set ns_tool_scan.stopped = true -%}
275
+ {%- else -%}
276
+ {%- set follow = loop_messages[k] -%}
277
+ {#- Resolve tool_call_id to function name -#}
278
+ {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}
279
+ {%- for tc in message['tool_calls'] -%}
280
+ {%- if tc.get('id') == follow.get('tool_call_id') -%}
281
+ {%- set ns_tname.name = tc['function']['name'] -%}
282
+ {%- endif -%}
283
+ {%- endfor -%}
284
+ {#- Handle content as string or content-parts array -#}
285
+ {%- set tool_body = follow.get('content') -%}
286
+ {%- if tool_body is string -%}
287
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
288
+ {%- elif tool_body is sequence and tool_body is not string -%}
289
+ {%- set ns_txt = namespace(s='') -%}
290
+ {%- for part in tool_body -%}
291
+ {%- if part.get('type') == 'text' -%}
292
+ {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}
293
+ {%- endif -%}
294
+ {%- endfor -%}
295
+ {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}
296
+ {%- else -%}
297
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
298
+ {%- endif -%}
299
+ {%- set ns_tr_out.flag = true -%}
300
+ {%- set ns.prev_message_type = 'tool_response' -%}
301
+ {%- endif -%}
302
+ {%- endfor -%}
303
+ {%- endif -%}
304
+
305
+ {%- if message['content'] is string -%}
306
+ {%- if role == 'model' -%}
307
+ {{- strip_thinking(message['content']) -}}
308
+ {%- else -%}
309
+ {{- message['content'] | trim -}}
310
+ {%- endif -%}
311
+ {%- elif message['content'] is sequence -%}
312
+ {%- for item in message['content'] -%}
313
+ {%- if item['type'] == 'text' -%}
314
+ {%- if role == 'model' -%}
315
+ {{- strip_thinking(item['text']) -}}
316
+ {%- else -%}
317
+ {{- item['text'] | trim -}}
318
+ {%- endif -%}
319
+ {%- elif item['type'] == 'image' -%}
320
+ {{- '<|image|>' -}}
321
+ {%- set ns.prev_message_type = 'image' -%}
322
+ {%- elif item['type'] == 'audio' -%}
323
+ {{- '<|audio|>' -}}
324
+ {%- set ns.prev_message_type = 'audio' -%}
325
+ {%- elif item['type'] == 'video' -%}
326
+ {{- '<|video|>' -}}
327
+ {%- set ns.prev_message_type = 'video' -%}
328
+ {%- endif -%}
329
+ {%- endfor -%}
330
+ {%- endif -%}
331
+
332
+ {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}
333
+ {{- '<|tool_response>' -}}
334
+ {%- elif not (ns_tr_out.flag and not message.get('content')) -%}
335
+ {{- '<turn|>\n' -}}
336
+ {%- endif -%}
337
+ {%- endif -%}
338
+ {%- endfor -%}
339
+
340
+ {%- if add_generation_prompt -%}
341
+ {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}
342
+ {{- '<|turn>model\n' -}}
343
+ {%- endif -%}
344
+ {%- endif -%}
checkpoint-400/optimizer.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:2eeb3920550c1da4c0d2d4daddc085b8608d13069ab11b9ae2ced297a8965578
3
+ size 75237013
checkpoint-400/processor_config.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_ms_per_token": 40,
3
+ "audio_seq_length": 750,
4
+ "feature_extractor": {
5
+ "dither": 0.0,
6
+ "feature_extractor_type": "Gemma4AudioFeatureExtractor",
7
+ "feature_size": 128,
8
+ "fft_length": 512,
9
+ "fft_overdrive": false,
10
+ "frame_length": 320,
11
+ "hop_length": 160,
12
+ "input_scale_factor": 1.0,
13
+ "max_frequency": 8000.0,
14
+ "mel_floor": 0.001,
15
+ "min_frequency": 0.0,
16
+ "padding_side": "left",
17
+ "padding_value": 0.0,
18
+ "per_bin_mean": null,
19
+ "per_bin_stddev": null,
20
+ "preemphasis": 0.0,
21
+ "preemphasis_htk_flavor": true,
22
+ "return_attention_mask": true,
23
+ "sampling_rate": 16000
24
+ },
25
+ "image_processor": {
26
+ "do_convert_rgb": true,
27
+ "do_normalize": false,
28
+ "do_rescale": true,
29
+ "do_resize": true,
30
+ "image_mean": [
31
+ 0.0,
32
+ 0.0,
33
+ 0.0
34
+ ],
35
+ "image_processor_type": "Gemma4ImageProcessor",
36
+ "image_seq_length": 280,
37
+ "image_std": [
38
+ 1.0,
39
+ 1.0,
40
+ 1.0
41
+ ],
42
+ "max_soft_tokens": 280,
43
+ "patch_size": 16,
44
+ "pooling_kernel_size": 3,
45
+ "resample": 3,
46
+ "rescale_factor": 0.00392156862745098
47
+ },
48
+ "image_seq_length": 280,
49
+ "processor_class": "Gemma4Processor",
50
+ "video_processor": {
51
+ "do_convert_rgb": true,
52
+ "do_normalize": true,
53
+ "do_rescale": true,
54
+ "do_resize": true,
55
+ "do_sample_frames": true,
56
+ "image_mean": [
57
+ 0.0,
58
+ 0.0,
59
+ 0.0
60
+ ],
61
+ "image_std": [
62
+ 1.0,
63
+ 1.0,
64
+ 1.0
65
+ ],
66
+ "max_soft_tokens": 70,
67
+ "num_frames": 32,
68
+ "patch_size": 16,
69
+ "pooling_kernel_size": 3,
70
+ "resample": 3,
71
+ "rescale_factor": 0.00392156862745098,
72
+ "return_metadata": false,
73
+ "video_processor_type": "Gemma4VideoProcessor"
74
+ }
75
+ }
checkpoint-400/rng_state.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:7c800b778fa7e115e4c34de8529902de8b61c9a1b4bab3eb8295d06dafff030e
3
+ size 14645
checkpoint-400/scheduler.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4965495586d9408c759f5ffce6e70e6fea6ebdb669bf96754a7945e45f7fc8e8
3
+ size 1465
checkpoint-400/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
3
+ size 32169626
checkpoint-400/tokenizer_config.json ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_token": "<|audio|>",
3
+ "backend": "tokenizers",
4
+ "boa_token": "<|audio>",
5
+ "boi_token": "<|image>",
6
+ "bos_token": "<bos>",
7
+ "eoa_token": "<audio|>",
8
+ "eoc_token": "<channel|>",
9
+ "eoi_token": "<image|>",
10
+ "eos_token": "<turn|>",
11
+ "eot_token": "<turn|>",
12
+ "escape_token": "<|\"|>",
13
+ "etc_token": "<tool_call|>",
14
+ "etd_token": "<tool|>",
15
+ "etr_token": "<tool_response|>",
16
+ "extra_special_tokens": [
17
+ "<|video|>"
18
+ ],
19
+ "image_token": "<|image|>",
20
+ "is_local": false,
21
+ "mask_token": "<mask>",
22
+ "model_max_length": 131072,
23
+ "model_specific_special_tokens": {
24
+ "audio_token": "<|audio|>",
25
+ "boa_token": "<|audio>",
26
+ "boi_token": "<|image>",
27
+ "eoa_token": "<audio|>",
28
+ "eoc_token": "<channel|>",
29
+ "eoi_token": "<image|>",
30
+ "eot_token": "<turn|>",
31
+ "escape_token": "<|\"|>",
32
+ "etc_token": "<tool_call|>",
33
+ "etd_token": "<tool|>",
34
+ "etr_token": "<tool_response|>",
35
+ "image_token": "<|image|>",
36
+ "soc_token": "<|channel>",
37
+ "sot_token": "<|turn>",
38
+ "stc_token": "<|tool_call>",
39
+ "std_token": "<|tool>",
40
+ "str_token": "<|tool_response>",
41
+ "think_token": "<|think|>"
42
+ },
43
+ "pad_token": "<pad>",
44
+ "padding_side": "right",
45
+ "processor_class": "Gemma4Processor",
46
+ "response_schema": {
47
+ "properties": {
48
+ "content": {
49
+ "type": "string"
50
+ },
51
+ "role": {
52
+ "const": "assistant"
53
+ },
54
+ "thinking": {
55
+ "type": "string"
56
+ },
57
+ "tool_calls": {
58
+ "items": {
59
+ "properties": {
60
+ "function": {
61
+ "properties": {
62
+ "arguments": {
63
+ "additionalProperties": {},
64
+ "type": "object",
65
+ "x-parser": "gemma4-tool-call"
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ }
70
+ },
71
+ "type": "object",
72
+ "x-regex": "call\\:(?P<name>\\w+)(?P<arguments>\\{.*\\})"
73
+ },
74
+ "type": {
75
+ "const": "function"
76
+ }
77
+ },
78
+ "type": "object"
79
+ },
80
+ "type": "array",
81
+ "x-regex-iterator": "<\\|tool_call>(.*?)<tool_call\\|>"
82
+ }
83
+ },
84
+ "type": "object",
85
+ "x-regex": "(\\<\\|channel\\>thought\\n(?P<thinking>.*?)\\<channel\\|\\>)?(?P<tool_calls>\\<\\|tool_call\\>.*\\<tool_call\\|\\>)?(?P<content>(?:(?!\\<turn\\|\\>)(?!\\<\\|tool_response\\>).)+)?(?:\\<turn\\|\\>|\\<\\|tool_response\\>)?"
86
+ },
87
+ "soc_token": "<|channel>",
88
+ "sot_token": "<|turn>",
89
+ "stc_token": "<|tool_call>",
90
+ "std_token": "<|tool>",
91
+ "str_token": "<|tool_response>",
92
+ "think_token": "<|think|>",
93
+ "tokenizer_class": "GemmaTokenizer",
94
+ "unk_token": "<unk>"
95
+ }
checkpoint-400/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
checkpoint-400/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae7a694dd4875ee97139bdd8ebc7349b14ce4d529c119642d14f7f7f5ebd9df4
3
+ size 5777
checkpoint-600/README.md ADDED
@@ -0,0 +1,210 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ ---
2
+ base_model: chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
3
+ library_name: peft
4
+ pipeline_tag: text-generation
5
+ tags:
6
+ - base_model:adapter:chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged
7
+ - lora
8
+ - sft
9
+ - transformers
10
+ - trl
11
+ - unsloth
12
+ ---
13
+
14
+ # Model Card for Model ID
15
+
16
+ <!-- Provide a quick summary of what the model is/does. -->
17
+
18
+
19
+
20
+ ## Model Details
21
+
22
+ ### Model Description
23
+
24
+ <!-- Provide a longer summary of what this model is. -->
25
+
26
+
27
+
28
+ - **Developed by:** [More Information Needed]
29
+ - **Funded by [optional]:** [More Information Needed]
30
+ - **Shared by [optional]:** [More Information Needed]
31
+ - **Model type:** [More Information Needed]
32
+ - **Language(s) (NLP):** [More Information Needed]
33
+ - **License:** [More Information Needed]
34
+ - **Finetuned from model [optional]:** [More Information Needed]
35
+
36
+ ### Model Sources [optional]
37
+
38
+ <!-- Provide the basic links for the model. -->
39
+
40
+ - **Repository:** [More Information Needed]
41
+ - **Paper [optional]:** [More Information Needed]
42
+ - **Demo [optional]:** [More Information Needed]
43
+
44
+ ## Uses
45
+
46
+ <!-- Address questions around how the model is intended to be used, including the foreseeable users of the model and those affected by the model. -->
47
+
48
+ ### Direct Use
49
+
50
+ <!-- This section is for the model use without fine-tuning or plugging into a larger ecosystem/app. -->
51
+
52
+ [More Information Needed]
53
+
54
+ ### Downstream Use [optional]
55
+
56
+ <!-- This section is for the model use when fine-tuned for a task, or when plugged into a larger ecosystem/app -->
57
+
58
+ [More Information Needed]
59
+
60
+ ### Out-of-Scope Use
61
+
62
+ <!-- This section addresses misuse, malicious use, and uses that the model will not work well for. -->
63
+
64
+ [More Information Needed]
65
+
66
+ ## Bias, Risks, and Limitations
67
+
68
+ <!-- This section is meant to convey both technical and sociotechnical limitations. -->
69
+
70
+ [More Information Needed]
71
+
72
+ ### Recommendations
73
+
74
+ <!-- This section is meant to convey recommendations with respect to the bias, risk, and technical limitations. -->
75
+
76
+ Users (both direct and downstream) should be made aware of the risks, biases and limitations of the model. More information needed for further recommendations.
77
+
78
+ ## How to Get Started with the Model
79
+
80
+ Use the code below to get started with the model.
81
+
82
+ [More Information Needed]
83
+
84
+ ## Training Details
85
+
86
+ ### Training Data
87
+
88
+ <!-- This should link to a Dataset Card, perhaps with a short stub of information on what the training data is all about as well as documentation related to data pre-processing or additional filtering. -->
89
+
90
+ [More Information Needed]
91
+
92
+ ### Training Procedure
93
+
94
+ <!-- This relates heavily to the Technical Specifications. Content here should link to that section when it is relevant to the training procedure. -->
95
+
96
+ #### Preprocessing [optional]
97
+
98
+ [More Information Needed]
99
+
100
+
101
+ #### Training Hyperparameters
102
+
103
+ - **Training regime:** [More Information Needed] <!--fp32, fp16 mixed precision, bf16 mixed precision, bf16 non-mixed precision, fp16 non-mixed precision, fp8 mixed precision -->
104
+
105
+ #### Speeds, Sizes, Times [optional]
106
+
107
+ <!-- This section provides information about throughput, start/end time, checkpoint size if relevant, etc. -->
108
+
109
+ [More Information Needed]
110
+
111
+ ## Evaluation
112
+
113
+ <!-- This section describes the evaluation protocols and provides the results. -->
114
+
115
+ ### Testing Data, Factors & Metrics
116
+
117
+ #### Testing Data
118
+
119
+ <!-- This should link to a Dataset Card if possible. -->
120
+
121
+ [More Information Needed]
122
+
123
+ #### Factors
124
+
125
+ <!-- These are the things the evaluation is disaggregating by, e.g., subpopulations or domains. -->
126
+
127
+ [More Information Needed]
128
+
129
+ #### Metrics
130
+
131
+ <!-- These are the evaluation metrics being used, ideally with a description of why. -->
132
+
133
+ [More Information Needed]
134
+
135
+ ### Results
136
+
137
+ [More Information Needed]
138
+
139
+ #### Summary
140
+
141
+
142
+
143
+ ## Model Examination [optional]
144
+
145
+ <!-- Relevant interpretability work for the model goes here -->
146
+
147
+ [More Information Needed]
148
+
149
+ ## Environmental Impact
150
+
151
+ <!-- Total emissions (in grams of CO2eq) and additional considerations, such as electricity usage, go here. Edit the suggested text below accordingly -->
152
+
153
+ Carbon emissions can be estimated using the [Machine Learning Impact calculator](https://mlco2.github.io/impact#compute) presented in [Lacoste et al. (2019)](https://arxiv.org/abs/1910.09700).
154
+
155
+ - **Hardware Type:** [More Information Needed]
156
+ - **Hours used:** [More Information Needed]
157
+ - **Cloud Provider:** [More Information Needed]
158
+ - **Compute Region:** [More Information Needed]
159
+ - **Carbon Emitted:** [More Information Needed]
160
+
161
+ ## Technical Specifications [optional]
162
+
163
+ ### Model Architecture and Objective
164
+
165
+ [More Information Needed]
166
+
167
+ ### Compute Infrastructure
168
+
169
+ [More Information Needed]
170
+
171
+ #### Hardware
172
+
173
+ [More Information Needed]
174
+
175
+ #### Software
176
+
177
+ [More Information Needed]
178
+
179
+ ## Citation [optional]
180
+
181
+ <!-- If there is a paper or blog post introducing the model, the APA and Bibtex information for that should go in this section. -->
182
+
183
+ **BibTeX:**
184
+
185
+ [More Information Needed]
186
+
187
+ **APA:**
188
+
189
+ [More Information Needed]
190
+
191
+ ## Glossary [optional]
192
+
193
+ <!-- If relevant, include terms and calculations in this section that can help readers understand the model or model card. -->
194
+
195
+ [More Information Needed]
196
+
197
+ ## More Information [optional]
198
+
199
+ [More Information Needed]
200
+
201
+ ## Model Card Authors [optional]
202
+
203
+ [More Information Needed]
204
+
205
+ ## Model Card Contact
206
+
207
+ [More Information Needed]
208
+ ### Framework versions
209
+
210
+ - PEFT 0.18.1
checkpoint-600/adapter_config.json ADDED
@@ -0,0 +1,50 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "alora_invocation_tokens": null,
3
+ "alpha_pattern": {},
4
+ "arrow_config": null,
5
+ "auto_mapping": {
6
+ "base_model_class": "Gemma4ForConditionalGeneration",
7
+ "parent_library": "transformers.models.gemma4.modeling_gemma4",
8
+ "unsloth_fixed": true
9
+ },
10
+ "base_model_name_or_path": "chenhaodev/unsloth_gemma-4-E4B-medical-o1-reasoning-SFT-merged",
11
+ "bias": "none",
12
+ "corda_config": null,
13
+ "ensure_weight_tying": false,
14
+ "eva_config": null,
15
+ "exclude_modules": null,
16
+ "fan_in_fan_out": false,
17
+ "inference_mode": true,
18
+ "init_lora_weights": true,
19
+ "layer_replication": null,
20
+ "layers_pattern": null,
21
+ "layers_to_transform": null,
22
+ "loftq_config": {},
23
+ "lora_alpha": 32,
24
+ "lora_bias": false,
25
+ "lora_dropout": 0.0,
26
+ "megatron_config": null,
27
+ "megatron_core": "megatron.core",
28
+ "modules_to_save": null,
29
+ "peft_type": "LORA",
30
+ "peft_version": "0.18.1",
31
+ "qalora_group_size": 16,
32
+ "r": 16,
33
+ "rank_pattern": {},
34
+ "revision": null,
35
+ "target_modules": [
36
+ "o_proj",
37
+ "down_proj",
38
+ "k_proj",
39
+ "up_proj",
40
+ "q_proj",
41
+ "v_proj",
42
+ "gate_proj"
43
+ ],
44
+ "target_parameters": null,
45
+ "task_type": "CAUSAL_LM",
46
+ "trainable_token_indices": null,
47
+ "use_dora": false,
48
+ "use_qalora": false,
49
+ "use_rslora": false
50
+ }
checkpoint-600/adapter_model.safetensors ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:aa0e5e8019c6a4ef49eb95d35d95a27bc58f0b4877ef5182f7977bb3eb313f68
3
+ size 169741912
checkpoint-600/chat_template.jinja ADDED
@@ -0,0 +1,344 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {%- macro format_parameters(properties, required) -%}
2
+ {%- set standard_keys = ['description', 'type', 'properties', 'required', 'nullable'] -%}
3
+ {%- set ns = namespace(found_first=false) -%}
4
+ {%- for key, value in properties | dictsort -%}
5
+ {%- set add_comma = false -%}
6
+ {%- if key not in standard_keys -%}
7
+ {%- if ns.found_first %},{% endif -%}
8
+ {%- set ns.found_first = true -%}
9
+ {{ key }}:{
10
+ {%- if value['description'] -%}
11
+ description:<|"|>{{ value['description'] }}<|"|>
12
+ {%- set add_comma = true -%}
13
+ {%- endif -%}
14
+ {%- if value['type'] | upper == 'STRING' -%}
15
+ {%- if value['enum'] -%}
16
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
17
+ enum:{{ format_argument(value['enum']) }}
18
+ {%- endif -%}
19
+ {%- elif value['type'] | upper == 'ARRAY' -%}
20
+ {%- if value['items'] is mapping and value['items'] -%}
21
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
22
+ items:{
23
+ {%- set ns_items = namespace(found_first=false) -%}
24
+ {%- for item_key, item_value in value['items'] | dictsort -%}
25
+ {%- if item_value is not none -%}
26
+ {%- if ns_items.found_first %},{% endif -%}
27
+ {%- set ns_items.found_first = true -%}
28
+ {%- if item_key == 'properties' -%}
29
+ properties:{
30
+ {%- if item_value is mapping -%}
31
+ {{- format_parameters(item_value, value['items']['required'] | default([])) -}}
32
+ {%- endif -%}
33
+ }
34
+ {%- elif item_key == 'required' -%}
35
+ required:[
36
+ {%- for req_item in item_value -%}
37
+ <|"|>{{- req_item -}}<|"|>
38
+ {%- if not loop.last %},{% endif -%}
39
+ {%- endfor -%}
40
+ ]
41
+ {%- elif item_key == 'type' -%}
42
+ {%- if item_value is string -%}
43
+ type:{{ format_argument(item_value | upper) }}
44
+ {%- else -%}
45
+ type:{{ format_argument(item_value | map('upper') | list) }}
46
+ {%- endif -%}
47
+ {%- else -%}
48
+ {{ item_key }}:{{ format_argument(item_value) }}
49
+ {%- endif -%}
50
+ {%- endif -%}
51
+ {%- endfor -%}
52
+ }
53
+ {%- endif -%}
54
+ {%- endif -%}
55
+ {%- if value['nullable'] %}
56
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
57
+ nullable:true
58
+ {%- endif -%}
59
+ {%- if value['type'] | upper == 'OBJECT' -%}
60
+ {%- if value['properties'] is defined and value['properties'] is mapping -%}
61
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
62
+ properties:{
63
+ {{- format_parameters(value['properties'], value['required'] | default([])) -}}
64
+ }
65
+ {%- elif value is mapping -%}
66
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
67
+ properties:{
68
+ {{- format_parameters(value, value['required'] | default([])) -}}
69
+ }
70
+ {%- endif -%}
71
+ {%- if value['required'] -%}
72
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
73
+ required:[
74
+ {%- for item in value['required'] | default([]) -%}
75
+ <|"|>{{- item -}}<|"|>
76
+ {%- if not loop.last %},{% endif -%}
77
+ {%- endfor -%}
78
+ ]
79
+ {%- endif -%}
80
+ {%- endif -%}
81
+ {%- if add_comma %},{%- else -%} {%- set add_comma = true -%} {% endif -%}
82
+ type:<|"|>{{ value['type'] | upper }}<|"|>}
83
+ {%- endif -%}
84
+ {%- endfor -%}
85
+ {%- endmacro -%}
86
+ {%- macro format_function_declaration(tool_data) -%}
87
+ declaration:{{- tool_data['function']['name'] -}}{description:<|"|>{{- tool_data['function']['description'] -}}<|"|>
88
+ {%- set params = tool_data['function']['parameters'] -%}
89
+ {%- if params -%}
90
+ ,parameters:{
91
+ {%- if params['properties'] -%}
92
+ properties:{ {{- format_parameters(params['properties'], params['required']) -}} },
93
+ {%- endif -%}
94
+ {%- if params['required'] -%}
95
+ required:[
96
+ {%- for item in params['required'] -%}
97
+ <|"|>{{- item -}}<|"|>
98
+ {{- ',' if not loop.last -}}
99
+ {%- endfor -%}
100
+ ],
101
+ {%- endif -%}
102
+ {%- if params['type'] -%}
103
+ type:<|"|>{{- params['type'] | upper -}}<|"|>}
104
+ {%- endif -%}
105
+ {%- endif -%}
106
+ {%- if 'response' in tool_data['function'] -%}
107
+ {%- set response_declaration = tool_data['function']['response'] -%}
108
+ ,response:{
109
+ {%- if response_declaration['description'] -%}
110
+ description:<|"|>{{- response_declaration['description'] -}}<|"|>,
111
+ {%- endif -%}
112
+ {%- if response_declaration['type'] | upper == 'OBJECT' -%}
113
+ type:<|"|>{{- response_declaration['type'] | upper -}}<|"|>}
114
+ {%- endif -%}
115
+ {%- endif -%}
116
+ }
117
+ {%- endmacro -%}
118
+ {%- macro format_argument(argument, escape_keys=True) -%}
119
+ {%- if argument is string -%}
120
+ {{- '<|"|>' + argument + '<|"|>' -}}
121
+ {%- elif argument is boolean -%}
122
+ {{- 'true' if argument else 'false' -}}
123
+ {%- elif argument is mapping -%}
124
+ {{- '{' -}}
125
+ {%- set ns = namespace(found_first=false) -%}
126
+ {%- for key, value in argument | dictsort -%}
127
+ {%- if ns.found_first %},{% endif -%}
128
+ {%- set ns.found_first = true -%}
129
+ {%- if escape_keys -%}
130
+ {{- '<|"|>' + key + '<|"|>' -}}
131
+ {%- else -%}
132
+ {{- key -}}
133
+ {%- endif -%}
134
+ :{{- format_argument(value, escape_keys=escape_keys) -}}
135
+ {%- endfor -%}
136
+ {{- '}' -}}
137
+ {%- elif argument is sequence -%}
138
+ {{- '[' -}}
139
+ {%- for item in argument -%}
140
+ {{- format_argument(item, escape_keys=escape_keys) -}}
141
+ {%- if not loop.last %},{% endif -%}
142
+ {%- endfor -%}
143
+ {{- ']' -}}
144
+ {%- else -%}
145
+ {{- argument -}}
146
+ {%- endif -%}
147
+ {%- endmacro -%}
148
+ {%- macro strip_thinking(text) -%}
149
+ {%- set ns = namespace(result='') -%}
150
+ {%- for part in text.split('<channel|>') -%}
151
+ {%- if '<|channel>' in part -%}
152
+ {%- set ns.result = ns.result + part.split('<|channel>')[0] -%}
153
+ {%- else -%}
154
+ {%- set ns.result = ns.result + part -%}
155
+ {%- endif -%}
156
+ {%- endfor -%}
157
+ {{- ns.result | trim -}}
158
+ {%- endmacro -%}
159
+
160
+ {%- macro format_tool_response_block(tool_name, response) -%}
161
+ {{- '<|tool_response>' -}}
162
+ {%- if response is mapping -%}
163
+ {{- 'response:' + tool_name + '{' -}}
164
+ {%- for key, value in response | dictsort -%}
165
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
166
+ {%- if not loop.last %},{% endif -%}
167
+ {%- endfor -%}
168
+ {{- '}' -}}
169
+ {%- else -%}
170
+ {{- 'response:' + tool_name + '{value:' + format_argument(response, escape_keys=False) + '}' -}}
171
+ {%- endif -%}
172
+ {{- '<tool_response|>' -}}
173
+ {%- endmacro -%}
174
+
175
+ {%- set ns = namespace(prev_message_type=None) -%}
176
+ {%- set loop_messages = messages -%}
177
+ {{- bos_token -}}
178
+ {#- Handle System/Tool Definitions Block -#}
179
+ {%- if (enable_thinking is defined and enable_thinking) or tools or messages[0]['role'] in ['system', 'developer'] -%}
180
+ {{- '<|turn>system\n' -}}
181
+
182
+ {#- Inject Thinking token at the very top of the FIRST system turn -#}
183
+ {%- if enable_thinking is defined and enable_thinking -%}
184
+ {{- '<|think|>\n' -}}
185
+ {%- set ns.prev_message_type = 'think' -%}
186
+ {%- endif -%}
187
+
188
+ {%- if messages[0]['role'] in ['system', 'developer'] -%}
189
+ {{- messages[0]['content'] | trim -}}
190
+ {%- set loop_messages = messages[1:] -%}
191
+ {%- endif -%}
192
+
193
+ {%- if tools -%}
194
+ {%- for tool in tools %}
195
+ {{- '<|tool>' -}}
196
+ {{- format_function_declaration(tool) | trim -}}
197
+ {{- '<tool|>' -}}
198
+ {%- endfor %}
199
+ {%- set ns.prev_message_type = 'tool' -%}
200
+ {%- endif -%}
201
+
202
+ {{- '<turn|>\n' -}}
203
+ {%- endif %}
204
+
205
+ {#- Pre-scan: find last user message index for reasoning guard -#}
206
+ {%- set ns_turn = namespace(last_user_idx=-1) -%}
207
+ {%- for i in range(loop_messages | length) -%}
208
+ {%- if loop_messages[i]['role'] == 'user' -%}
209
+ {%- set ns_turn.last_user_idx = i -%}
210
+ {%- endif -%}
211
+ {%- endfor -%}
212
+
213
+ {#- Loop through messages -#}
214
+ {%- for message in loop_messages -%}
215
+ {%- if message['role'] != 'tool' -%}
216
+ {%- set ns.prev_message_type = None -%}
217
+ {%- set role = 'model' if message['role'] == 'assistant' else message['role'] -%}
218
+ {#- Detect continuation: suppress duplicate <|turn>model when previous non-tool message was also assistant -#}
219
+ {%- set prev_nt = namespace(role=None, found=false) -%}
220
+ {%- if loop.index0 > 0 -%}
221
+ {%- for j in range(loop.index0 - 1, -1, -1) -%}
222
+ {%- if not prev_nt.found -%}
223
+ {%- if loop_messages[j]['role'] != 'tool' -%}
224
+ {%- set prev_nt.role = loop_messages[j]['role'] -%}
225
+ {%- set prev_nt.found = true -%}
226
+ {%- endif -%}
227
+ {%- endif -%}
228
+ {%- endfor -%}
229
+ {%- endif -%}
230
+ {%- set continue_same_model_turn = (role == 'model' and prev_nt.role == 'assistant') -%}
231
+ {%- if not continue_same_model_turn -%}
232
+ {{- '<|turn>' + role + '\n' }}
233
+ {%- endif -%}
234
+
235
+ {#- Render reasoning/reasoning_content as thinking channel -#}
236
+ {%- set thinking_text = message.get('reasoning') or message.get('reasoning_content') -%}
237
+ {%- if thinking_text and loop.index0 > ns_turn.last_user_idx and message.get('tool_calls') -%}
238
+ {{- '<|channel>thought\n' + thinking_text + '\n<channel|>' -}}
239
+ {%- endif -%}
240
+
241
+ {%- if message['tool_calls'] -%}
242
+ {%- for tool_call in message['tool_calls'] -%}
243
+ {%- set function = tool_call['function'] -%}
244
+ {{- '<|tool_call>call:' + function['name'] + '{' -}}
245
+ {%- if function['arguments'] is mapping -%}
246
+ {%- set ns_args = namespace(found_first=false) -%}
247
+ {%- for key, value in function['arguments'] | dictsort -%}
248
+ {%- if ns_args.found_first %},{% endif -%}
249
+ {%- set ns_args.found_first = true -%}
250
+ {{- key -}}:{{- format_argument(value, escape_keys=False) -}}
251
+ {%- endfor -%}
252
+ {%- elif function['arguments'] is string -%}
253
+ {{- function['arguments'] -}}
254
+ {%- endif -%}
255
+ {{- '}<tool_call|>' -}}
256
+ {%- endfor -%}
257
+ {%- set ns.prev_message_type = 'tool_call' -%}
258
+ {%- endif -%}
259
+
260
+ {%- set ns_tr_out = namespace(flag=false) -%}
261
+ {%- if message.get('tool_responses') -%}
262
+ {#- Legacy: tool_responses embedded on the assistant message (Google/Gemma native) -#}
263
+ {%- for tool_response in message['tool_responses'] -%}
264
+ {{- format_tool_response_block(tool_response['name'] | default('unknown'), tool_response['response']) -}}
265
+ {%- set ns_tr_out.flag = true -%}
266
+ {%- set ns.prev_message_type = 'tool_response' -%}
267
+ {%- endfor -%}
268
+ {%- elif message.get('tool_calls') -%}
269
+ {#- OpenAI Chat Completions: forward-scan consecutive role:tool messages -#}
270
+ {%- set ns_tool_scan = namespace(stopped=false) -%}
271
+ {%- for k in range(loop.index0 + 1, loop_messages | length) -%}
272
+ {%- if ns_tool_scan.stopped -%}
273
+ {%- elif loop_messages[k]['role'] != 'tool' -%}
274
+ {%- set ns_tool_scan.stopped = true -%}
275
+ {%- else -%}
276
+ {%- set follow = loop_messages[k] -%}
277
+ {#- Resolve tool_call_id to function name -#}
278
+ {%- set ns_tname = namespace(name=follow.get('name') | default('unknown')) -%}
279
+ {%- for tc in message['tool_calls'] -%}
280
+ {%- if tc.get('id') == follow.get('tool_call_id') -%}
281
+ {%- set ns_tname.name = tc['function']['name'] -%}
282
+ {%- endif -%}
283
+ {%- endfor -%}
284
+ {#- Handle content as string or content-parts array -#}
285
+ {%- set tool_body = follow.get('content') -%}
286
+ {%- if tool_body is string -%}
287
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
288
+ {%- elif tool_body is sequence and tool_body is not string -%}
289
+ {%- set ns_txt = namespace(s='') -%}
290
+ {%- for part in tool_body -%}
291
+ {%- if part.get('type') == 'text' -%}
292
+ {%- set ns_txt.s = ns_txt.s + (part.get('text') | default('')) -%}
293
+ {%- endif -%}
294
+ {%- endfor -%}
295
+ {{- format_tool_response_block(ns_tname.name, ns_txt.s) -}}
296
+ {%- else -%}
297
+ {{- format_tool_response_block(ns_tname.name, tool_body) -}}
298
+ {%- endif -%}
299
+ {%- set ns_tr_out.flag = true -%}
300
+ {%- set ns.prev_message_type = 'tool_response' -%}
301
+ {%- endif -%}
302
+ {%- endfor -%}
303
+ {%- endif -%}
304
+
305
+ {%- if message['content'] is string -%}
306
+ {%- if role == 'model' -%}
307
+ {{- strip_thinking(message['content']) -}}
308
+ {%- else -%}
309
+ {{- message['content'] | trim -}}
310
+ {%- endif -%}
311
+ {%- elif message['content'] is sequence -%}
312
+ {%- for item in message['content'] -%}
313
+ {%- if item['type'] == 'text' -%}
314
+ {%- if role == 'model' -%}
315
+ {{- strip_thinking(item['text']) -}}
316
+ {%- else -%}
317
+ {{- item['text'] | trim -}}
318
+ {%- endif -%}
319
+ {%- elif item['type'] == 'image' -%}
320
+ {{- '<|image|>' -}}
321
+ {%- set ns.prev_message_type = 'image' -%}
322
+ {%- elif item['type'] == 'audio' -%}
323
+ {{- '<|audio|>' -}}
324
+ {%- set ns.prev_message_type = 'audio' -%}
325
+ {%- elif item['type'] == 'video' -%}
326
+ {{- '<|video|>' -}}
327
+ {%- set ns.prev_message_type = 'video' -%}
328
+ {%- endif -%}
329
+ {%- endfor -%}
330
+ {%- endif -%}
331
+
332
+ {%- if ns.prev_message_type == 'tool_call' and not ns_tr_out.flag -%}
333
+ {{- '<|tool_response>' -}}
334
+ {%- elif not (ns_tr_out.flag and not message.get('content')) -%}
335
+ {{- '<turn|>\n' -}}
336
+ {%- endif -%}
337
+ {%- endif -%}
338
+ {%- endfor -%}
339
+
340
+ {%- if add_generation_prompt -%}
341
+ {%- if ns.prev_message_type != 'tool_response' and ns.prev_message_type != 'tool_call' -%}
342
+ {{- '<|turn>model\n' -}}
343
+ {%- endif -%}
344
+ {%- endif -%}
checkpoint-600/optimizer.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:4b4e9be09f94098841eb75087583d9a8d207b22f4d40d49fd88693fea1ab1298
3
+ size 75237013
checkpoint-600/processor_config.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_ms_per_token": 40,
3
+ "audio_seq_length": 750,
4
+ "feature_extractor": {
5
+ "dither": 0.0,
6
+ "feature_extractor_type": "Gemma4AudioFeatureExtractor",
7
+ "feature_size": 128,
8
+ "fft_length": 512,
9
+ "fft_overdrive": false,
10
+ "frame_length": 320,
11
+ "hop_length": 160,
12
+ "input_scale_factor": 1.0,
13
+ "max_frequency": 8000.0,
14
+ "mel_floor": 0.001,
15
+ "min_frequency": 0.0,
16
+ "padding_side": "left",
17
+ "padding_value": 0.0,
18
+ "per_bin_mean": null,
19
+ "per_bin_stddev": null,
20
+ "preemphasis": 0.0,
21
+ "preemphasis_htk_flavor": true,
22
+ "return_attention_mask": true,
23
+ "sampling_rate": 16000
24
+ },
25
+ "image_processor": {
26
+ "do_convert_rgb": true,
27
+ "do_normalize": false,
28
+ "do_rescale": true,
29
+ "do_resize": true,
30
+ "image_mean": [
31
+ 0.0,
32
+ 0.0,
33
+ 0.0
34
+ ],
35
+ "image_processor_type": "Gemma4ImageProcessor",
36
+ "image_seq_length": 280,
37
+ "image_std": [
38
+ 1.0,
39
+ 1.0,
40
+ 1.0
41
+ ],
42
+ "max_soft_tokens": 280,
43
+ "patch_size": 16,
44
+ "pooling_kernel_size": 3,
45
+ "resample": 3,
46
+ "rescale_factor": 0.00392156862745098
47
+ },
48
+ "image_seq_length": 280,
49
+ "processor_class": "Gemma4Processor",
50
+ "video_processor": {
51
+ "do_convert_rgb": true,
52
+ "do_normalize": true,
53
+ "do_rescale": true,
54
+ "do_resize": true,
55
+ "do_sample_frames": true,
56
+ "image_mean": [
57
+ 0.0,
58
+ 0.0,
59
+ 0.0
60
+ ],
61
+ "image_std": [
62
+ 1.0,
63
+ 1.0,
64
+ 1.0
65
+ ],
66
+ "max_soft_tokens": 70,
67
+ "num_frames": 32,
68
+ "patch_size": 16,
69
+ "pooling_kernel_size": 3,
70
+ "resample": 3,
71
+ "rescale_factor": 0.00392156862745098,
72
+ "return_metadata": false,
73
+ "video_processor_type": "Gemma4VideoProcessor"
74
+ }
75
+ }
checkpoint-600/rng_state.pth ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:3d6d8fafcd1ee268414be5acf0366296af5b03d60871978712eac1979cb42d65
3
+ size 14645
checkpoint-600/scheduler.pt ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:d16e41566cd79f9a45bf4dcd02a2eb09de5c752a5b1f5bddaf3d8672c4407ffc
3
+ size 1465
checkpoint-600/tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
3
+ size 32169626
checkpoint-600/tokenizer_config.json ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_token": "<|audio|>",
3
+ "backend": "tokenizers",
4
+ "boa_token": "<|audio>",
5
+ "boi_token": "<|image>",
6
+ "bos_token": "<bos>",
7
+ "eoa_token": "<audio|>",
8
+ "eoc_token": "<channel|>",
9
+ "eoi_token": "<image|>",
10
+ "eos_token": "<turn|>",
11
+ "eot_token": "<turn|>",
12
+ "escape_token": "<|\"|>",
13
+ "etc_token": "<tool_call|>",
14
+ "etd_token": "<tool|>",
15
+ "etr_token": "<tool_response|>",
16
+ "extra_special_tokens": [
17
+ "<|video|>"
18
+ ],
19
+ "image_token": "<|image|>",
20
+ "is_local": false,
21
+ "mask_token": "<mask>",
22
+ "model_max_length": 131072,
23
+ "model_specific_special_tokens": {
24
+ "audio_token": "<|audio|>",
25
+ "boa_token": "<|audio>",
26
+ "boi_token": "<|image>",
27
+ "eoa_token": "<audio|>",
28
+ "eoc_token": "<channel|>",
29
+ "eoi_token": "<image|>",
30
+ "eot_token": "<turn|>",
31
+ "escape_token": "<|\"|>",
32
+ "etc_token": "<tool_call|>",
33
+ "etd_token": "<tool|>",
34
+ "etr_token": "<tool_response|>",
35
+ "image_token": "<|image|>",
36
+ "soc_token": "<|channel>",
37
+ "sot_token": "<|turn>",
38
+ "stc_token": "<|tool_call>",
39
+ "std_token": "<|tool>",
40
+ "str_token": "<|tool_response>",
41
+ "think_token": "<|think|>"
42
+ },
43
+ "pad_token": "<pad>",
44
+ "padding_side": "right",
45
+ "processor_class": "Gemma4Processor",
46
+ "response_schema": {
47
+ "properties": {
48
+ "content": {
49
+ "type": "string"
50
+ },
51
+ "role": {
52
+ "const": "assistant"
53
+ },
54
+ "thinking": {
55
+ "type": "string"
56
+ },
57
+ "tool_calls": {
58
+ "items": {
59
+ "properties": {
60
+ "function": {
61
+ "properties": {
62
+ "arguments": {
63
+ "additionalProperties": {},
64
+ "type": "object",
65
+ "x-parser": "gemma4-tool-call"
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ }
70
+ },
71
+ "type": "object",
72
+ "x-regex": "call\\:(?P<name>\\w+)(?P<arguments>\\{.*\\})"
73
+ },
74
+ "type": {
75
+ "const": "function"
76
+ }
77
+ },
78
+ "type": "object"
79
+ },
80
+ "type": "array",
81
+ "x-regex-iterator": "<\\|tool_call>(.*?)<tool_call\\|>"
82
+ }
83
+ },
84
+ "type": "object",
85
+ "x-regex": "(\\<\\|channel\\>thought\\n(?P<thinking>.*?)\\<channel\\|\\>)?(?P<tool_calls>\\<\\|tool_call\\>.*\\<tool_call\\|\\>)?(?P<content>(?:(?!\\<turn\\|\\>)(?!\\<\\|tool_response\\>).)+)?(?:\\<turn\\|\\>|\\<\\|tool_response\\>)?"
86
+ },
87
+ "soc_token": "<|channel>",
88
+ "sot_token": "<|turn>",
89
+ "stc_token": "<|tool_call>",
90
+ "std_token": "<|tool>",
91
+ "str_token": "<|tool_response>",
92
+ "think_token": "<|think|>",
93
+ "tokenizer_class": "GemmaTokenizer",
94
+ "unk_token": "<unk>"
95
+ }
checkpoint-600/trainer_state.json ADDED
The diff for this file is too large to render. See raw diff
 
checkpoint-600/training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae7a694dd4875ee97139bdd8ebc7349b14ce4d529c119642d14f7f7f5ebd9df4
3
+ size 5777
processor_config.json ADDED
@@ -0,0 +1,75 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_ms_per_token": 40,
3
+ "audio_seq_length": 750,
4
+ "feature_extractor": {
5
+ "dither": 0.0,
6
+ "feature_extractor_type": "Gemma4AudioFeatureExtractor",
7
+ "feature_size": 128,
8
+ "fft_length": 512,
9
+ "fft_overdrive": false,
10
+ "frame_length": 320,
11
+ "hop_length": 160,
12
+ "input_scale_factor": 1.0,
13
+ "max_frequency": 8000.0,
14
+ "mel_floor": 0.001,
15
+ "min_frequency": 0.0,
16
+ "padding_side": "left",
17
+ "padding_value": 0.0,
18
+ "per_bin_mean": null,
19
+ "per_bin_stddev": null,
20
+ "preemphasis": 0.0,
21
+ "preemphasis_htk_flavor": true,
22
+ "return_attention_mask": true,
23
+ "sampling_rate": 16000
24
+ },
25
+ "image_processor": {
26
+ "do_convert_rgb": true,
27
+ "do_normalize": false,
28
+ "do_rescale": true,
29
+ "do_resize": true,
30
+ "image_mean": [
31
+ 0.0,
32
+ 0.0,
33
+ 0.0
34
+ ],
35
+ "image_processor_type": "Gemma4ImageProcessor",
36
+ "image_seq_length": 280,
37
+ "image_std": [
38
+ 1.0,
39
+ 1.0,
40
+ 1.0
41
+ ],
42
+ "max_soft_tokens": 280,
43
+ "patch_size": 16,
44
+ "pooling_kernel_size": 3,
45
+ "resample": 3,
46
+ "rescale_factor": 0.00392156862745098
47
+ },
48
+ "image_seq_length": 280,
49
+ "processor_class": "Gemma4Processor",
50
+ "video_processor": {
51
+ "do_convert_rgb": true,
52
+ "do_normalize": true,
53
+ "do_rescale": true,
54
+ "do_resize": true,
55
+ "do_sample_frames": true,
56
+ "image_mean": [
57
+ 0.0,
58
+ 0.0,
59
+ 0.0
60
+ ],
61
+ "image_std": [
62
+ 1.0,
63
+ 1.0,
64
+ 1.0
65
+ ],
66
+ "max_soft_tokens": 70,
67
+ "num_frames": 32,
68
+ "patch_size": 16,
69
+ "pooling_kernel_size": 3,
70
+ "resample": 3,
71
+ "rescale_factor": 0.00392156862745098,
72
+ "return_metadata": false,
73
+ "video_processor_type": "Gemma4VideoProcessor"
74
+ }
75
+ }
tokenizer.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:cc8d3a0ce36466ccc1278bf987df5f71db1719b9ca6b4118264f45cb627bfe0f
3
+ size 32169626
tokenizer_config.json ADDED
@@ -0,0 +1,95 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "audio_token": "<|audio|>",
3
+ "backend": "tokenizers",
4
+ "boa_token": "<|audio>",
5
+ "boi_token": "<|image>",
6
+ "bos_token": "<bos>",
7
+ "eoa_token": "<audio|>",
8
+ "eoc_token": "<channel|>",
9
+ "eoi_token": "<image|>",
10
+ "eos_token": "<turn|>",
11
+ "eot_token": "<turn|>",
12
+ "escape_token": "<|\"|>",
13
+ "etc_token": "<tool_call|>",
14
+ "etd_token": "<tool|>",
15
+ "etr_token": "<tool_response|>",
16
+ "extra_special_tokens": [
17
+ "<|video|>"
18
+ ],
19
+ "image_token": "<|image|>",
20
+ "is_local": false,
21
+ "mask_token": "<mask>",
22
+ "model_max_length": 131072,
23
+ "model_specific_special_tokens": {
24
+ "audio_token": "<|audio|>",
25
+ "boa_token": "<|audio>",
26
+ "boi_token": "<|image>",
27
+ "eoa_token": "<audio|>",
28
+ "eoc_token": "<channel|>",
29
+ "eoi_token": "<image|>",
30
+ "eot_token": "<turn|>",
31
+ "escape_token": "<|\"|>",
32
+ "etc_token": "<tool_call|>",
33
+ "etd_token": "<tool|>",
34
+ "etr_token": "<tool_response|>",
35
+ "image_token": "<|image|>",
36
+ "soc_token": "<|channel>",
37
+ "sot_token": "<|turn>",
38
+ "stc_token": "<|tool_call>",
39
+ "std_token": "<|tool>",
40
+ "str_token": "<|tool_response>",
41
+ "think_token": "<|think|>"
42
+ },
43
+ "pad_token": "<pad>",
44
+ "padding_side": "right",
45
+ "processor_class": "Gemma4Processor",
46
+ "response_schema": {
47
+ "properties": {
48
+ "content": {
49
+ "type": "string"
50
+ },
51
+ "role": {
52
+ "const": "assistant"
53
+ },
54
+ "thinking": {
55
+ "type": "string"
56
+ },
57
+ "tool_calls": {
58
+ "items": {
59
+ "properties": {
60
+ "function": {
61
+ "properties": {
62
+ "arguments": {
63
+ "additionalProperties": {},
64
+ "type": "object",
65
+ "x-parser": "gemma4-tool-call"
66
+ },
67
+ "name": {
68
+ "type": "string"
69
+ }
70
+ },
71
+ "type": "object",
72
+ "x-regex": "call\\:(?P<name>\\w+)(?P<arguments>\\{.*\\})"
73
+ },
74
+ "type": {
75
+ "const": "function"
76
+ }
77
+ },
78
+ "type": "object"
79
+ },
80
+ "type": "array",
81
+ "x-regex-iterator": "<\\|tool_call>(.*?)<tool_call\\|>"
82
+ }
83
+ },
84
+ "type": "object",
85
+ "x-regex": "(\\<\\|channel\\>thought\\n(?P<thinking>.*?)\\<channel\\|\\>)?(?P<tool_calls>\\<\\|tool_call\\>.*\\<tool_call\\|\\>)?(?P<content>(?:(?!\\<turn\\|\\>)(?!\\<\\|tool_response\\>).)+)?(?:\\<turn\\|\\>|\\<\\|tool_response\\>)?"
86
+ },
87
+ "soc_token": "<|channel>",
88
+ "sot_token": "<|turn>",
89
+ "stc_token": "<|tool_call>",
90
+ "std_token": "<|tool>",
91
+ "str_token": "<|tool_response>",
92
+ "think_token": "<|think|>",
93
+ "tokenizer_class": "GemmaTokenizer",
94
+ "unk_token": "<unk>"
95
+ }
training_args.bin ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:ae7a694dd4875ee97139bdd8ebc7349b14ce4d529c119642d14f7f7f5ebd9df4
3
+ size 5777