.ipynb_checkpoints/args-checkpoint.json ADDED
@@ -0,0 +1,379 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "output_dir": "./output",
3
+ "overwrite_output_dir": false,
4
+ "do_train": false,
5
+ "do_eval": false,
6
+ "do_predict": false,
7
+ "eval_strategy": "no",
8
+ "prediction_loss_only": false,
9
+ "per_device_train_batch_size": 1,
10
+ "per_device_eval_batch_size": 1,
11
+ "per_gpu_train_batch_size": null,
12
+ "per_gpu_eval_batch_size": null,
13
+ "gradient_accumulation_steps": 7,
14
+ "eval_accumulation_steps": null,
15
+ "eval_delay": 0,
16
+ "torch_empty_cache_steps": null,
17
+ "learning_rate": 5e-06,
18
+ "weight_decay": 0.1,
19
+ "adam_beta1": 0.9,
20
+ "adam_beta2": 0.95,
21
+ "adam_epsilon": 1e-08,
22
+ "max_grad_norm": 1.0,
23
+ "num_train_epochs": 6.0,
24
+ "max_steps": -1,
25
+ "lr_scheduler_type": "cosine",
26
+ "lr_scheduler_kwargs": null,
27
+ "warmup_ratio": 0.05,
28
+ "warmup_steps": 0,
29
+ "log_level": "passive",
30
+ "log_level_replica": "warning",
31
+ "log_on_each_node": true,
32
+ "logging_dir": "./output/logs",
33
+ "logging_strategy": "steps",
34
+ "logging_first_step": true,
35
+ "logging_steps": 5,
36
+ "logging_nan_inf_filter": true,
37
+ "save_strategy": "steps",
38
+ "save_steps": 1609.0,
39
+ "save_total_limit": 10,
40
+ "save_safetensors": true,
41
+ "save_on_each_node": false,
42
+ "save_only_model": false,
43
+ "restore_callback_states_from_checkpoint": false,
44
+ "no_cuda": false,
45
+ "use_cpu": false,
46
+ "use_mps_device": false,
47
+ "seed": 42,
48
+ "data_seed": 42,
49
+ "jit_mode_eval": false,
50
+ "use_ipex": false,
51
+ "bf16": true,
52
+ "fp16": false,
53
+ "fp16_opt_level": "O1",
54
+ "half_precision_backend": "auto",
55
+ "bf16_full_eval": false,
56
+ "fp16_full_eval": false,
57
+ "tf32": null,
58
+ "local_rank": 0,
59
+ "ddp_backend": null,
60
+ "tpu_num_cores": null,
61
+ "tpu_metrics_debug": false,
62
+ "debug": null,
63
+ "dataloader_drop_last": false,
64
+ "eval_steps": 1609.0,
65
+ "dataloader_num_workers": 192,
66
+ "dataloader_prefetch_factor": null,
67
+ "past_index": -1,
68
+ "run_name": "safety-model-training",
69
+ "disable_tqdm": null,
70
+ "remove_unused_columns": true,
71
+ "label_names": null,
72
+ "load_best_model_at_end": false,
73
+ "metric_for_best_model": "loss",
74
+ "greater_is_better": false,
75
+ "ignore_data_skip": false,
76
+ "fsdp": "",
77
+ "fsdp_min_num_params": 0,
78
+ "fsdp_config": null,
79
+ "fsdp_transformer_layer_cls_to_wrap": null,
80
+ "accelerator_config": {
81
+ "dispatch_batches": false
82
+ },
83
+ "deepspeed": {
84
+ "fp16": {
85
+ "enabled": "auto",
86
+ "loss_scale": 0,
87
+ "loss_scale_window": 1000,
88
+ "initial_scale_power": 16,
89
+ "hysteresis": 2,
90
+ "min_loss_scale": 1
91
+ },
92
+ "bf16": {
93
+ "enabled": "auto"
94
+ },
95
+ "zero_optimization": {
96
+ "stage": 3,
97
+ "offload_optimizer": {
98
+ "device": "none",
99
+ "pin_memory": true
100
+ },
101
+ "offload_param": {
102
+ "device": "none",
103
+ "pin_memory": true
104
+ },
105
+ "overlap_comm": false,
106
+ "contiguous_gradients": true,
107
+ "sub_group_size": 1000000000.0,
108
+ "reduce_bucket_size": "auto",
109
+ "zero_quantized_weights": false,
110
+ "zero_quantized_gradients": false,
111
+ "stage3_prefetch_bucket_size": "auto",
112
+ "stage3_param_persistence_threshold": "auto",
113
+ "stage3_max_live_parameters": 1000000000.0,
114
+ "stage3_max_reuse_distance": 1000000000.0,
115
+ "stage3_gather_16bit_weights_on_model_save": true
116
+ },
117
+ "gradient_accumulation_steps": "auto",
118
+ "gradient_clipping": "auto",
119
+ "steps_per_print": 2000,
120
+ "train_batch_size": "auto",
121
+ "train_micro_batch_size_per_gpu": "auto",
122
+ "wall_clock_breakdown": false
123
+ },
124
+ "label_smoothing_factor": 0.0,
125
+ "optim": "adamw_torch",
126
+ "optim_args": null,
127
+ "adafactor": false,
128
+ "group_by_length": false,
129
+ "length_column_name": "length",
130
+ "report_to": [
131
+ "tensorboard"
132
+ ],
133
+ "ddp_find_unused_parameters": null,
134
+ "ddp_bucket_cap_mb": null,
135
+ "ddp_broadcast_buffers": null,
136
+ "dataloader_pin_memory": true,
137
+ "dataloader_persistent_workers": false,
138
+ "skip_memory_metrics": true,
139
+ "use_legacy_prediction_loop": false,
140
+ "push_to_hub": false,
141
+ "resume_from_checkpoint": null,
142
+ "hub_model_id": null,
143
+ "hub_strategy": "every_save",
144
+ "hub_token": null,
145
+ "hub_private_repo": null,
146
+ "hub_always_push": false,
147
+ "hub_revision": null,
148
+ "gradient_checkpointing": true,
149
+ "gradient_checkpointing_kwargs": null,
150
+ "include_inputs_for_metrics": false,
151
+ "include_for_metrics": [],
152
+ "eval_do_concat_batches": true,
153
+ "fp16_backend": "auto",
154
+ "push_to_hub_model_id": null,
155
+ "push_to_hub_organization": null,
156
+ "push_to_hub_token": null,
157
+ "mp_parameters": "",
158
+ "auto_find_batch_size": false,
159
+ "full_determinism": false,
160
+ "torchdynamo": null,
161
+ "ray_scope": "last",
162
+ "ddp_timeout": 18000000,
163
+ "torch_compile": false,
164
+ "torch_compile_backend": null,
165
+ "torch_compile_mode": null,
166
+ "include_tokens_per_second": false,
167
+ "include_num_input_tokens_seen": false,
168
+ "neftune_noise_alpha": null,
169
+ "optim_target_modules": null,
170
+ "batch_eval_metrics": false,
171
+ "eval_on_start": false,
172
+ "use_liger_kernel": false,
173
+ "liger_kernel_config": null,
174
+ "eval_use_gather_object": false,
175
+ "average_tokens_across_devices": true,
176
+ "sortish_sampler": false,
177
+ "predict_with_generate": false,
178
+ "generation_max_length": null,
179
+ "generation_num_beams": null,
180
+ "generation_config": null,
181
+ "vit_gradient_checkpointing": null,
182
+ "check_model": true,
183
+ "acc_strategy": "token",
184
+ "train_dataloader_shuffle": true,
185
+ "max_epochs": null,
186
+ "aligner_lr": null,
187
+ "vit_lr": null,
188
+ "optimizer": null,
189
+ "use_logits_to_keep": null,
190
+ "channels": null,
191
+ "ds3_gather_for_generation": true,
192
+ "metric_warmup_step": 0,
193
+ "fsdp_num": 1,
194
+ "acc_steps": 1,
195
+ "eval_use_evalscope": false,
196
+ "eval_dataset": [],
197
+ "eval_dataset_args": null,
198
+ "eval_limit": null,
199
+ "eval_generation_config": null,
200
+ "model": "JSL-joysafety-v1/gpt-oss-20b",
201
+ "model_type": null,
202
+ "model_revision": null,
203
+ "task_type": "causal_lm",
204
+ "torch_dtype": "bfloat16",
205
+ "attn_impl": "flash_attn",
206
+ "num_labels": null,
207
+ "problem_type": null,
208
+ "rope_scaling": {
209
+ "beta_fast": 32.0,
210
+ "beta_slow": 1.0,
211
+ "factor": 32.0,
212
+ "original_max_position_embeddings": 4096,
213
+ "rope_type": "yarn",
214
+ "truncate": false,
215
+ "type": "yarn"
216
+ },
217
+ "device_map": null,
218
+ "max_memory": {},
219
+ "local_repo_path": null,
220
+ "init_strategy": null,
221
+ "template": "default",
222
+ "system": null,
223
+ "max_length": 8192,
224
+ "truncation_strategy": "right",
225
+ "max_pixels": null,
226
+ "agent_template": null,
227
+ "norm_bbox": null,
228
+ "use_chat_template": true,
229
+ "padding_free": false,
230
+ "padding_side": "right",
231
+ "loss_scale": "default",
232
+ "sequence_parallel_size": 1,
233
+ "response_prefix": null,
234
+ "template_backend": "swift",
235
+ "dataset": [
236
+ "JSL-joysafety-v1/safety-dataset"
237
+ ],
238
+ "val_dataset": [],
239
+ "split_dataset_ratio": 0.0,
240
+ "dataset_num_proc": 192,
241
+ "load_from_cache_file": true,
242
+ "dataset_shuffle": true,
243
+ "val_dataset_shuffle": false,
244
+ "streaming": false,
245
+ "interleave_prob": null,
246
+ "stopping_strategy": "first_exhausted",
247
+ "shuffle_buffer_size": 1000,
248
+ "download_mode": "reuse_dataset_if_exists",
249
+ "columns": {},
250
+ "strict": false,
251
+ "model_name": null,
252
+ "model_author": null,
253
+ "custom_dataset_info": [],
254
+ "quant_method": null,
255
+ "quant_bits": null,
256
+ "hqq_axis": null,
257
+ "bnb_4bit_compute_dtype": "bfloat16",
258
+ "bnb_4bit_quant_type": "nf4",
259
+ "bnb_4bit_use_double_quant": true,
260
+ "bnb_4bit_quant_storage": null,
261
+ "max_new_tokens": 64,
262
+ "temperature": 0.0,
263
+ "top_k": null,
264
+ "top_p": null,
265
+ "repetition_penalty": null,
266
+ "num_beams": 1,
267
+ "stream": false,
268
+ "stop_words": [],
269
+ "logprobs": false,
270
+ "top_logprobs": null,
271
+ "ckpt_dir": null,
272
+ "lora_modules": [],
273
+ "tuner_backend": "peft",
274
+ "train_type": "full",
275
+ "adapters": [],
276
+ "external_plugins": [],
277
+ "model_kwargs": {},
278
+ "load_args": false,
279
+ "load_data_args": false,
280
+ "packing": false,
281
+ "packing_cache": null,
282
+ "custom_register_path": [],
283
+ "use_hf": false,
284
+ "ignore_args_error": false,
285
+ "use_swift_lora": false,
286
+ "freeze_parameters": [],
287
+ "freeze_parameters_regex": null,
288
+ "freeze_parameters_ratio": 0.0,
289
+ "trainable_parameters": [],
290
+ "trainable_parameters_regex": null,
291
+ "freeze_llm": false,
292
+ "freeze_vit": true,
293
+ "freeze_aligner": true,
294
+ "target_modules": [
295
+ "all-linear"
296
+ ],
297
+ "target_regex": null,
298
+ "modules_to_save": [],
299
+ "lora_rank": 8,
300
+ "lora_alpha": 32,
301
+ "lora_dropout": 0.05,
302
+ "lora_bias": "none",
303
+ "lora_dtype": null,
304
+ "lorap_lr_ratio": null,
305
+ "use_rslora": false,
306
+ "use_dora": false,
307
+ "lora_ga_batch_size": 2,
308
+ "lora_ga_iters": 2,
309
+ "lora_ga_max_length": 1024,
310
+ "lora_ga_direction": "ArB2r",
311
+ "lora_ga_scale": "stable",
312
+ "lora_ga_stable_gamma": 16,
313
+ "init_weights": true,
314
+ "fourier_n_frequency": 2000,
315
+ "fourier_scaling": 300.0,
316
+ "boft_block_size": 4,
317
+ "boft_block_num": 0,
318
+ "boft_n_butterfly_factor": 1,
319
+ "boft_dropout": 0.0,
320
+ "vera_rank": 256,
321
+ "vera_projection_prng_key": 0,
322
+ "vera_dropout": 0.0,
323
+ "vera_d_initial": 0.1,
324
+ "adapter_act": "gelu",
325
+ "adapter_length": 128,
326
+ "use_galore": false,
327
+ "galore_target_modules": null,
328
+ "galore_rank": 128,
329
+ "galore_update_proj_gap": 50,
330
+ "galore_scale": 1.0,
331
+ "galore_proj_type": "std",
332
+ "galore_optim_per_parameter": false,
333
+ "galore_with_embedding": false,
334
+ "galore_quantization": false,
335
+ "galore_proj_quant": false,
336
+ "galore_proj_bits": 4,
337
+ "galore_proj_group_size": 256,
338
+ "galore_cos_threshold": 0.4,
339
+ "galore_gamma_proj": 2,
340
+ "galore_queue_size": 5,
341
+ "adalora_target_r": 8,
342
+ "adalora_init_r": 12,
343
+ "adalora_tinit": 0,
344
+ "adalora_tfinal": 0,
345
+ "adalora_deltaT": 1,
346
+ "adalora_beta1": 0.85,
347
+ "adalora_beta2": 0.85,
348
+ "adalora_orth_reg_weight": 0.5,
349
+ "llamapro_num_new_blocks": 4,
350
+ "llamapro_num_groups": null,
351
+ "lisa_activated_layers": 0,
352
+ "lisa_step_interval": 20,
353
+ "reft_layer_key": null,
354
+ "reft_layers": null,
355
+ "reft_rank": 4,
356
+ "reft_intervention_type": "LoreftIntervention",
357
+ "reft_args": null,
358
+ "swanlab_token": null,
359
+ "swanlab_project": null,
360
+ "swanlab_workspace": null,
361
+ "swanlab_exp_name": null,
362
+ "swanlab_lark_webhook_url": null,
363
+ "swanlab_lark_secret": null,
364
+ "swanlab_mode": "cloud",
365
+ "add_version": true,
366
+ "resume_only_model": false,
367
+ "create_checkpoint_symlink": false,
368
+ "lazy_tokenize": false,
369
+ "loss_type": null,
370
+ "metric": null,
371
+ "zero_hpz_partition_size": null,
372
+ "rank": 0,
373
+ "global_world_size": 40,
374
+ "local_world_size": 8,
375
+ "model_suffix": "gpt-oss-20b",
376
+ "model_meta": "ModelMeta(model_type=None, model_groups=[], template='dummy', get_function=<function get_model_tokenizer_from_local at 0x7f67a0a7b130>, model_arch=None, architectures=[], additional_saved_files=[], torch_dtype=None, is_multimodal=False, is_reward=False, task_type=None, ignore_patterns=None, requires=[], tags=[])",
377
+ "model_dir": "/mnt/workspace/public_model/gpt-oss-20b",
378
+ "evaluation_strategy": "steps"
379
+ }
.ipynb_checkpoints/chat_template-checkpoint.jinja ADDED
@@ -0,0 +1,331 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {#-
2
+ In addition to the normal inputs of `messages` and `tools`, this template also accepts the
3
+ following kwargs:
4
+ - "builtin_tools": A list, can contain "browser" and/or "python".
5
+ - "model_identity": A string that optionally describes the model identity.
6
+ - "reasoning_effort": A string that describes the reasoning effort, defaults to "medium".
7
+ #}
8
+
9
+ {#- Tool Definition Rendering ============================================== #}
10
+ {%- macro render_typescript_type(param_spec, required_params, is_nullable=false) -%}
11
+ {%- if param_spec.type == "array" -%}
12
+ {%- if param_spec['items'] -%}
13
+ {%- if param_spec['items']['type'] == "string" -%}
14
+ {{- "string[]" }}
15
+ {%- elif param_spec['items']['type'] == "number" -%}
16
+ {{- "number[]" }}
17
+ {%- elif param_spec['items']['type'] == "integer" -%}
18
+ {{- "number[]" }}
19
+ {%- elif param_spec['items']['type'] == "boolean" -%}
20
+ {{- "boolean[]" }}
21
+ {%- else -%}
22
+ {%- set inner_type = render_typescript_type(param_spec['items'], required_params) -%}
23
+ {%- if inner_type == "object | object" or inner_type|length > 50 -%}
24
+ {{- "any[]" }}
25
+ {%- else -%}
26
+ {{- inner_type + "[]" }}
27
+ {%- endif -%}
28
+ {%- endif -%}
29
+ {%- if param_spec.nullable -%}
30
+ {{- " | null" }}
31
+ {%- endif -%}
32
+ {%- else -%}
33
+ {{- "any[]" }}
34
+ {%- if param_spec.nullable -%}
35
+ {{- " | null" }}
36
+ {%- endif -%}
37
+ {%- endif -%}
38
+ {%- elif param_spec.type is defined and param_spec.type is iterable and param_spec.type is not string and param_spec.type is not mapping and param_spec.type[0] is defined -%}
39
+ {#- Handle array of types like ["object", "object"] from Union[dict, list] #}
40
+ {%- if param_spec.type | length > 1 -%}
41
+ {{- param_spec.type | join(" | ") }}
42
+ {%- else -%}
43
+ {{- param_spec.type[0] }}
44
+ {%- endif -%}
45
+ {%- elif param_spec.oneOf -%}
46
+ {#- Handle oneOf schemas - check for complex unions and fallback to any #}
47
+ {%- set has_object_variants = false -%}
48
+ {%- for variant in param_spec.oneOf -%}
49
+ {%- if variant.type == "object" -%}
50
+ {%- set has_object_variants = true -%}
51
+ {%- endif -%}
52
+ {%- endfor -%}
53
+ {%- if has_object_variants and param_spec.oneOf|length > 1 -%}
54
+ {{- "any" }}
55
+ {%- else -%}
56
+ {%- for variant in param_spec.oneOf -%}
57
+ {{- render_typescript_type(variant, required_params) -}}
58
+ {%- if variant.description %}
59
+ {{- "// " + variant.description }}
60
+ {%- endif -%}
61
+ {%- if variant.default is defined %}
62
+ {{ "// default: " + variant.default|tojson }}
63
+ {%- endif -%}
64
+ {%- if not loop.last %}
65
+ {{- " | " }}
66
+ {% endif -%}
67
+ {%- endfor -%}
68
+ {%- endif -%}
69
+ {%- elif param_spec.type == "string" -%}
70
+ {%- if param_spec.enum -%}
71
+ {{- '"' + param_spec.enum|join('" | "') + '"' -}}
72
+ {%- else -%}
73
+ {{- "string" }}
74
+ {%- if param_spec.nullable %}
75
+ {{- " | null" }}
76
+ {%- endif -%}
77
+ {%- endif -%}
78
+ {%- elif param_spec.type == "number" -%}
79
+ {{- "number" }}
80
+ {%- elif param_spec.type == "integer" -%}
81
+ {{- "number" }}
82
+ {%- elif param_spec.type == "boolean" -%}
83
+ {{- "boolean" }}
84
+
85
+ {%- elif param_spec.type == "object" -%}
86
+ {%- if param_spec.properties -%}
87
+ {{- "{\n" }}
88
+ {%- for prop_name, prop_spec in param_spec.properties.items() -%}
89
+ {{- prop_name -}}
90
+ {%- if prop_name not in (param_spec.required or []) -%}
91
+ {{- "?" }}
92
+ {%- endif -%}
93
+ {{- ": " }}
94
+ {{ render_typescript_type(prop_spec, param_spec.required or []) }}
95
+ {%- if not loop.last -%}
96
+ {{-", " }}
97
+ {%- endif -%}
98
+ {%- endfor -%}
99
+ {{- "}" }}
100
+ {%- else -%}
101
+ {{- "object" }}
102
+ {%- endif -%}
103
+ {%- else -%}
104
+ {{- "any" }}
105
+ {%- endif -%}
106
+ {%- endmacro -%}
107
+
108
+ {%- macro render_tool_namespace(namespace_name, tools) -%}
109
+ {{- "## " + namespace_name + "\n\n" }}
110
+ {{- "namespace " + namespace_name + " {\n\n" }}
111
+ {%- for tool in tools %}
112
+ {%- set tool = tool.function %}
113
+ {{- "// " + tool.description + "\n" }}
114
+ {{- "type "+ tool.name + " = " }}
115
+ {%- if tool.parameters and tool.parameters.properties %}
116
+ {{- "(_: {\n" }}
117
+ {%- for param_name, param_spec in tool.parameters.properties.items() %}
118
+ {%- if param_spec.description %}
119
+ {{- "// " + param_spec.description + "\n" }}
120
+ {%- endif %}
121
+ {{- param_name }}
122
+ {%- if param_name not in (tool.parameters.required or []) -%}
123
+ {{- "?" }}
124
+ {%- endif -%}
125
+ {{- ": " }}
126
+ {{- render_typescript_type(param_spec, tool.parameters.required or []) }}
127
+ {%- if param_spec.default is defined -%}
128
+ {%- if param_spec.enum %}
129
+ {{- ", // default: " + param_spec.default }}
130
+ {%- elif param_spec.oneOf %}
131
+ {{- "// default: " + param_spec.default }}
132
+ {%- else %}
133
+ {{- ", // default: " + param_spec.default|tojson }}
134
+ {%- endif -%}
135
+ {%- endif -%}
136
+ {%- if not loop.last %}
137
+ {{- ",\n" }}
138
+ {%- else %}
139
+ {{- ",\n" }}
140
+ {%- endif -%}
141
+ {%- endfor %}
142
+ {{- "}) => any;\n\n" }}
143
+ {%- else -%}
144
+ {{- "() => any;\n\n" }}
145
+ {%- endif -%}
146
+ {%- endfor %}
147
+ {{- "} // namespace " + namespace_name }}
148
+ {%- endmacro -%}
149
+
150
+ {%- macro render_builtin_tools(browser_tool, python_tool) -%}
151
+ {%- if browser_tool %}
152
+ {{- "## browser\n\n" }}
153
+ {{- "// Tool for browsing.\n" }}
154
+ {{- "// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.\n" }}
155
+ {{- "// Cite information from the tool using the following format:\n" }}
156
+ {{- "// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`.\n" }}
157
+ {{- "// Do not quote more than 10 words directly from the tool output.\n" }}
158
+ {{- "// sources=web (default: web)\n" }}
159
+ {{- "namespace browser {\n\n" }}
160
+ {{- "// Searches for information related to `query` and displays `topn` results.\n" }}
161
+ {{- "type search = (_: {\n" }}
162
+ {{- "query: string,\n" }}
163
+ {{- "topn?: number, // default: 10\n" }}
164
+ {{- "source?: string,\n" }}
165
+ {{- "}) => any;\n\n" }}
166
+ {{- "// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.\n" }}
167
+ {{- "// Valid link ids are displayed with the formatting: `【{id}†.*】`.\n" }}
168
+ {{- "// If `cursor` is not provided, the most recent page is implied.\n" }}
169
+ {{- "// If `id` is a string, it is treated as a fully qualified URL associated with `source`.\n" }}
170
+ {{- "// If `loc` is not provided, the viewport will be positioned at the beginning of the document or centered on the most relevant passage, if available.\n" }}
171
+ {{- "// Use this function without `id` to scroll to a new location of an opened page.\n" }}
172
+ {{- "type open = (_: {\n" }}
173
+ {{- "id?: number | string, // default: -1\n" }}
174
+ {{- "cursor?: number, // default: -1\n" }}
175
+ {{- "loc?: number, // default: -1\n" }}
176
+ {{- "num_lines?: number, // default: -1\n" }}
177
+ {{- "view_source?: boolean, // default: false\n" }}
178
+ {{- "source?: string,\n" }}
179
+ {{- "}) => any;\n\n" }}
180
+ {{- "// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.\n" }}
181
+ {{- "type find = (_: {\n" }}
182
+ {{- "pattern: string,\n" }}
183
+ {{- "cursor?: number, // default: -1\n" }}
184
+ {{- "}) => any;\n\n" }}
185
+ {{- "} // namespace browser\n\n" }}
186
+ {%- endif -%}
187
+
188
+ {%- if python_tool %}
189
+ {{- "## python\n\n" }}
190
+ {{- "Use this tool to execute Python code in your chain of thought. The code will not be shown to the user. This tool should be used for internal reasoning, but not for code that is intended to be visible to the user (e.g. when creating plots, tables, or files).\n\n" }}
191
+ {{- "When you send a message containing Python code to python, it will be executed in a stateful Jupyter notebook environment. python will respond with the output of the execution or time out after 120.0 seconds. The drive at '/mnt/data' can be used to save and persist user files. Internet access for this session is UNKNOWN. Depends on the cluster.\n\n" }}
192
+ {%- endif -%}
193
+ {%- endmacro -%}
194
+
195
+ {#- System Message Construction ============================================ #}
196
+ {%- macro build_system_message() -%}
197
+ {%- if model_identity is not defined %}
198
+ {%- set model_identity = "\n\n你是一名「大模型内容安全审核专家」,请根据下面的风险审核checklist完成风险审核;\n\n#【任务描述】:\n\n 在 AI 对话场景中,完成用户输入与大模型回答安全审核,识别其中是否存在风险内容及诱导性风险。\n \n# 【注意事项】:\n 1. 按照《生成式人工智能服务管理暂行办法》进行风险审核; \n 2. 输出仅返回 JSON,不要附加任何解释性文字。 \n\n# 【风险审核-checklist】:\n\n 判断用户输入是否存在以下风险类型:涉政、暴恐、涉黄、涉赌、涉毒、辱骂、违禁、歧视、其他侵犯他人权益、其他商业违法违规等相关风险;无任何风险则归类为“正常文本”\n\n**输出格式**(JSON,禁止省略任何字段):\n\n```json\n{\n \"reason\":\"cot分析过程\",\n \"risk_level\": 无风险|低风险|中风险|高风险, \n \"hit_categories\": [\"****\",\"****:],\n \"hit_detaile_categories\":[\"****\",\"****\"]\n \"risk_tags\"[] \n \"risk_roler\":\"user|\"ai\"|\"user&ai\",\n \"hit_keywords\": [\"xxx\"], \n \"suggestion\": \"pass\"|\"mask\"|\"block\"|\"review\"|\"proxy_answer\"\n}\n```\n**输出格式声明**\n reason:存放推理过程;\n risk_level:存放风险级别,分成四档:无风险|低风险|中风险|高风险;\n hit_categories:存放识别到的一级风险类别标签;\n hit_detaile_categories:存放识别到的二级风险类别标签;\n risk_tags:详细风险类型;\n risk_roler:存放对话中触发风险角色,user代表用户输入有风险,user&ai代表用户输入大模型回复都有风险,ai代表大模型回复有风险;\n hit_keywords:触发风险的原文片段;\n suggestion:建议处置策略;\n" %}
199
+ {%- endif %}
200
+ {{- model_identity + "\n" }}
201
+ {{- "Knowledge cutoff: 2024-06\n" }}
202
+ {{- "Current date: " + strftime_now("%Y-%m-%d") + "\n\n" }}
203
+ {%- if reasoning_effort is not defined %}
204
+ {%- set reasoning_effort = "medium" %}
205
+ {%- endif %}
206
+ {{- "Reasoning: " + reasoning_effort + "\n\n" }}
207
+ {%- if builtin_tools %}
208
+ {{- "# Tools\n\n" }}
209
+ {%- set available_builtin_tools = namespace(browser=false, python=false) %}
210
+ {%- for tool in builtin_tools %}
211
+ {%- if tool == "browser" %}
212
+ {%- set available_builtin_tools.browser = true %}
213
+ {%- elif tool == "python" %}
214
+ {%- set available_builtin_tools.python = true %}
215
+ {%- endif %}
216
+ {%- endfor %}
217
+ {{- render_builtin_tools(available_builtin_tools.browser, available_builtin_tools.python) }}
218
+ {%- endif -%}
219
+ {{- "# Valid channels: analysis, commentary, final. Channel must be included for every message." }}
220
+ {%- if tools -%}
221
+ {{- "\nCalls to these tools must go to the commentary channel: 'functions'." }}
222
+ {%- endif -%}
223
+ {%- endmacro -%}
224
+
225
+ {#- Main Template Logic ================================================= #}
226
+ {#- Set defaults #}
227
+
228
+ {#- Render system message #}
229
+ {{- "<|start|>system<|message|>" }}
230
+ {{- build_system_message() }}
231
+ {{- "<|end|>" }}
232
+
233
+ {#- Extract developer message #}
234
+ {%- if messages[0].role == "developer" or messages[0].role == "system" %}
235
+ {%- set developer_message = messages[0].content %}
236
+ {%- set loop_messages = messages[1:] %}
237
+ {%- else %}
238
+ {%- set developer_message = "" %}
239
+ {%- set loop_messages = messages %}
240
+ {%- endif %}
241
+
242
+ {#- Render developer message #}
243
+ {%- if developer_message or tools %}
244
+ {{- "<|start|>developer<|message|>" }}
245
+ {%- if developer_message %}
246
+ {{- "# Instructions\n\n" }}
247
+ {{- developer_message }}
248
+ {{- "\n\n" }}
249
+ {%- endif %}
250
+ {%- if tools -%}
251
+ {{- "# Tools\n\n" }}
252
+ {{- render_tool_namespace("functions", tools) }}
253
+ {%- endif -%}
254
+ {{- "<|end|>" }}
255
+ {%- endif %}
256
+
257
+ {#- Render messages #}
258
+ {%- set last_tool_call = namespace(name=none) %}
259
+ {%- for message in loop_messages -%}
260
+ {#- At this point only assistant/user/tool messages should remain #}
261
+ {%- if message.role == 'assistant' -%}
262
+ {#- Checks to ensure the messages are being passed in the format we expect #}
263
+ {%- if "content" in message %}
264
+ {%- if "<|channel|>analysis<|message|>" in message.content or "<|channel|>final<|message|>" in message.content %}
265
+ {{- raise_exception("You have passed a message containing <|channel|> tags in the content field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.") }}
266
+ {%- endif %}
267
+ {%- endif %}
268
+ {%- if "thinking" in message %}
269
+ {%- if "<|channel|>analysis<|message|>" in message.thinking or "<|channel|>final<|message|>" in message.thinking %}
270
+ {{- raise_exception("You have passed a message containing <|channel|> tags in the thinking field. Instead of doing this, you should pass analysis messages (the string between '<|message|>' and '<|end|>') in the 'thinking' field, and final messages (the string between '<|message|>' and '<|end|>') in the 'content' field.") }}
271
+ {%- endif %}
272
+ {%- endif %}
273
+ {%- if "tool_calls" in message %}
274
+ {#- We need very careful handling here - we want to drop the tool call analysis message if the model #}
275
+ {#- has output a later <|final|> message, but otherwise we want to retain it. This is the only case #}
276
+ {#- when we render CoT/analysis messages in inference. #}
277
+ {%- set future_final_message = namespace(found=false) %}
278
+ {%- for future_message in loop_messages[loop.index:] %}
279
+ {%- if future_message.role == 'assistant' and "tool_calls" not in future_message %}
280
+ {%- set future_final_message.found = true %}
281
+ {%- endif %}
282
+ {%- endfor %}
283
+ {#- We assume max 1 tool call per message, and so we infer the tool call name #}
284
+ {#- in "tool" messages from the most recent assistant tool call name #}
285
+ {%- set tool_call = message.tool_calls[0] %}
286
+ {%- if tool_call.function %}
287
+ {%- set tool_call = tool_call.function %}
288
+ {%- endif %}
289
+ {%- if message.content and message.thinking %}
290
+ {{- raise_exception("Cannot pass both content and thinking in an assistant message with tool calls! Put the analysis message in one or the other, but not both.") }}
291
+ {%- elif message.content and not future_final_message.found %}
292
+ {{- "<|start|>assistant<|channel|>analysis<|message|>" + message.content + "<|end|>" }}
293
+ {%- elif message.thinking and not future_final_message.found %}
294
+ {{- "<|start|>assistant<|channel|>analysis<|message|>" + message.thinking + "<|end|>" }}
295
+ {%- endif %}
296
+ {{- "<|start|>assistant to=" }}
297
+ {{- "functions." + tool_call.name + "<|channel|>commentary " }}
298
+ {{- (tool_call.content_type if tool_call.content_type is defined else "json") + "<|message|>" }}
299
+ {{- tool_call.arguments|tojson }}
300
+ {{- "<|call|>" }}
301
+ {%- set last_tool_call.name = tool_call.name %}
302
+ {%- elif loop.last and not add_generation_prompt %}
303
+ {#- Only render the CoT if the final turn is an assistant turn and add_generation_prompt is false #}
304
+ {#- This is a situation that should only occur in training, never in inference. #}
305
+ {%- if "thinking" in message %}
306
+ {{- "<|start|>assistant<|channel|>analysis<|message|>" + message.thinking + "<|end|>" }}
307
+ {%- endif %}
308
+ {#- <|return|> indicates the end of generation, but <|end|> does not #}
309
+ {#- <|return|> should never be an input to the model, but we include it as the final token #}
310
+ {#- when training, so the model learns to emit it. #}
311
+ {{- "<|start|>assistant<|channel|>final<|message|>" + message.content + "<|return|>" }}
312
+ {%- else %}
313
+ {#- CoT is dropped during all previous turns, so we never render it for inference #}
314
+ {{- "<|start|>assistant<|channel|>final<|message|>" + message.content + "<|end|>" }}
315
+ {%- set last_tool_call.name = none %}
316
+ {%- endif %}
317
+ {%- elif message.role == 'tool' -%}
318
+ {%- if last_tool_call.name is none %}
319
+ {{- raise_exception("Message has tool role, but there was no previous assistant message with a tool call!") }}
320
+ {%- endif %}
321
+ {{- "<|start|>functions." + last_tool_call.name }}
322
+ {{- " to=assistant<|channel|>commentary<|message|>" + message.content|tojson + "<|end|>" }}
323
+ {%- elif message.role == 'user' -%}
324
+ {{- "<|start|>user<|message|>" + message.content + "<|end|>" }}
325
+ {%- endif -%}
326
+ {%- endfor -%}
327
+
328
+ {#- Generation prompt #}
329
+ {%- if add_generation_prompt -%}
330
+ <|start|>assistant
331
+ {%- endif -%}
.ipynb_checkpoints/config-checkpoint.json ADDED
@@ -0,0 +1,72 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "architectures": [
3
+ "GptOssForCausalLM"
4
+ ],
5
+ "attention_bias": true,
6
+ "attention_dropout": 0.0,
7
+ "eos_token_id": 200002,
8
+ "experts_per_token": 4,
9
+ "head_dim": 64,
10
+ "hidden_act": "silu",
11
+ "hidden_size": 2880,
12
+ "initial_context_length": 4096,
13
+ "initializer_range": 0.02,
14
+ "intermediate_size": 2880,
15
+ "keys_to_ignore_at_inference": [
16
+ "past_key_values"
17
+ ],
18
+ "layer_types": [
19
+ "sliding_attention",
20
+ "full_attention",
21
+ "sliding_attention",
22
+ "full_attention",
23
+ "sliding_attention",
24
+ "full_attention",
25
+ "sliding_attention",
26
+ "full_attention",
27
+ "sliding_attention",
28
+ "full_attention",
29
+ "sliding_attention",
30
+ "full_attention",
31
+ "sliding_attention",
32
+ "full_attention",
33
+ "sliding_attention",
34
+ "full_attention",
35
+ "sliding_attention",
36
+ "full_attention",
37
+ "sliding_attention",
38
+ "full_attention",
39
+ "sliding_attention",
40
+ "full_attention",
41
+ "sliding_attention",
42
+ "full_attention"
43
+ ],
44
+ "max_position_embeddings": 131072,
45
+ "model_type": "gpt_oss",
46
+ "num_attention_heads": 64,
47
+ "num_experts_per_tok": 4,
48
+ "num_hidden_layers": 24,
49
+ "num_key_value_heads": 8,
50
+ "num_local_experts": 32,
51
+ "output_router_logits": false,
52
+ "pad_token_id": 199999,
53
+ "rms_norm_eps": 1e-05,
54
+ "rope_scaling": {
55
+ "beta_fast": 32.0,
56
+ "beta_slow": 1.0,
57
+ "factor": 32.0,
58
+ "original_max_position_embeddings": 4096,
59
+ "rope_type": "yarn",
60
+ "truncate": false,
61
+ "type": "yarn"
62
+ },
63
+ "rope_theta": 150000,
64
+ "router_aux_loss_coef": 0.9,
65
+ "sliding_window": 128,
66
+ "swiglu_limit": 7.0,
67
+ "tie_word_embeddings": false,
68
+ "torch_dtype": "bfloat16",
69
+ "transformers_version": "4.55.0",
70
+ "use_cache": false,
71
+ "vocab_size": 201088
72
+ }
.ipynb_checkpoints/generation_config-checkpoint.json ADDED
@@ -0,0 +1,11 @@
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token_id": 199998,
3
+ "do_sample": true,
4
+ "eos_token_id": [
5
+ 200002,
6
+ 199999,
7
+ 200012
8
+ ],
9
+ "pad_token_id": 199999,
10
+ "transformers_version": "4.55.0"
11
+ }
.ipynb_checkpoints/special_tokens_map-checkpoint.json ADDED
@@ -0,0 +1,23 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "bos_token": {
3
+ "content": "<|startoftext|>",
4
+ "lstrip": false,
5
+ "normalized": false,
6
+ "rstrip": false,
7
+ "single_word": false
8
+ },
9
+ "eos_token": {
10
+ "content": "<|return|>",
11
+ "lstrip": false,
12
+ "normalized": false,
13
+ "rstrip": false,
14
+ "single_word": false
15
+ },
16
+ "pad_token": {
17
+ "content": "<|endoftext|>",
18
+ "lstrip": false,
19
+ "normalized": false,
20
+ "rstrip": false,
21
+ "single_word": false
22
+ }
23
+ }
.ipynb_checkpoints/tokenizer-checkpoint.json ADDED
@@ -0,0 +1,3 @@
 
 
 
 
1
+ version https://git-lfs.github.com/spec/v1
2
+ oid sha256:0614fe83cadab421296e664e1f48f4261fa8fef6e03e63bb75c20f38e37d07d3
3
+ size 27868174
.ipynb_checkpoints/tokenizer_config-checkpoint.json ADDED
@@ -0,0 +1,183 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ {
2
+ "added_tokens_decoder": {
3
+ "199998": {
4
+ "content": "<|startoftext|>",
5
+ "lstrip": false,
6
+ "normalized": false,
7
+ "rstrip": false,
8
+ "single_word": false,
9
+ "special": true
10
+ },
11
+ "199999": {
12
+ "content": "<|endoftext|>",
13
+ "lstrip": false,
14
+ "normalized": false,
15
+ "rstrip": false,
16
+ "single_word": false,
17
+ "special": true
18
+ },
19
+ "200000": {
20
+ "content": "<|reserved_200000|>",
21
+ "lstrip": false,
22
+ "normalized": false,
23
+ "rstrip": false,
24
+ "single_word": false,
25
+ "special": true
26
+ },
27
+ "200001": {
28
+ "content": "<|reserved_200001|>",
29
+ "lstrip": false,
30
+ "normalized": false,
31
+ "rstrip": false,
32
+ "single_word": false,
33
+ "special": true
34
+ },
35
+ "200002": {
36
+ "content": "<|return|>",
37
+ "lstrip": false,
38
+ "normalized": false,
39
+ "rstrip": false,
40
+ "single_word": false,
41
+ "special": true
42
+ },
43
+ "200003": {
44
+ "content": "<|constrain|>",
45
+ "lstrip": false,
46
+ "normalized": false,
47
+ "rstrip": false,
48
+ "single_word": false,
49
+ "special": true
50
+ },
51
+ "200004": {
52
+ "content": "<|reserved_200004|>",
53
+ "lstrip": false,
54
+ "normalized": false,
55
+ "rstrip": false,
56
+ "single_word": false,
57
+ "special": true
58
+ },
59
+ "200005": {
60
+ "content": "<|channel|>",
61
+ "lstrip": false,
62
+ "normalized": false,
63
+ "rstrip": false,
64
+ "single_word": false,
65
+ "special": true
66
+ },
67
+ "200006": {
68
+ "content": "<|start|>",
69
+ "lstrip": false,
70
+ "normalized": false,
71
+ "rstrip": false,
72
+ "single_word": false,
73
+ "special": true
74
+ },
75
+ "200007": {
76
+ "content": "<|end|>",
77
+ "lstrip": false,
78
+ "normalized": false,
79
+ "rstrip": false,
80
+ "single_word": false,
81
+ "special": true
82
+ },
83
+ "200008": {
84
+ "content": "<|message|>",
85
+ "lstrip": false,
86
+ "normalized": false,
87
+ "rstrip": false,
88
+ "single_word": false,
89
+ "special": true
90
+ },
91
+ "200009": {
92
+ "content": "<|reserved_200009|>",
93
+ "lstrip": false,
94
+ "normalized": false,
95
+ "rstrip": false,
96
+ "single_word": false,
97
+ "special": true
98
+ },
99
+ "200010": {
100
+ "content": "<|reserved_200010|>",
101
+ "lstrip": false,
102
+ "normalized": false,
103
+ "rstrip": false,
104
+ "single_word": false,
105
+ "special": true
106
+ },
107
+ "200011": {
108
+ "content": "<|reserved_200011|>",
109
+ "lstrip": false,
110
+ "normalized": false,
111
+ "rstrip": false,
112
+ "single_word": false,
113
+ "special": true
114
+ },
115
+ "200012": {
116
+ "content": "<|call|>",
117
+ "lstrip": false,
118
+ "normalized": false,
119
+ "rstrip": false,
120
+ "single_word": false,
121
+ "special": true
122
+ },
123
+ "200013": {
124
+ "content": "<|reserved_200013|>",
125
+ "lstrip": false,
126
+ "normalized": false,
127
+ "rstrip": false,
128
+ "single_word": false,
129
+ "special": true
130
+ },
131
+ "200014": {
132
+ "content": "<|reserved_200014|>",
133
+ "lstrip": false,
134
+ "normalized": false,
135
+ "rstrip": false,
136
+ "single_word": false,
137
+ "special": true
138
+ },
139
+ "200015": {
140
+ "content": "<|reserved_200015|>",
141
+ "lstrip": false,
142
+ "normalized": false,
143
+ "rstrip": false,
144
+ "single_word": false,
145
+ "special": true
146
+ },
147
+ "200016": {
148
+ "content": "<|reserved_200016|>",
149
+ "lstrip": false,
150
+ "normalized": false,
151
+ "rstrip": false,
152
+ "single_word": false,
153
+ "special": true
154
+ },
155
+ "200017": {
156
+ "content": "<|reserved_200017|>",
157
+ "lstrip": false,
158
+ "normalized": false,
159
+ "rstrip": false,
160
+ "single_word": false,
161
+ "special": true
162
+ },
163
+ "200018": {
164
+ "content": "<|endofprompt|>",
165
+ "lstrip": false,
166
+ "normalized": false,
167
+ "rstrip": false,
168
+ "single_word": false,
169
+ "special": true
170
+ }
171
+ },
172
+ "bos_token": "<|startoftext|>",
173
+ "clean_up_tokenization_spaces": false,
174
+ "eos_token": "<|return|>",
175
+ "extra_special_tokens": {},
176
+ "model_input_names": [
177
+ "input_ids",
178
+ "attention_mask"
179
+ ],
180
+ "model_max_length": 1000000000000000019884624838656,
181
+ "pad_token": "<|endoftext|>",
182
+ "tokenizer_class": "PreTrainedTokenizerFast"
183
+ }
README.md DELETED
@@ -1,138 +0,0 @@
1
-
2
- ![JSL-joysafety-v1](./docs/1.png)
3
- # JSL-joysafety-v1
4
-
5
- ## 1. 模型介绍
6
-
7
- JSL-joysafety-v1 是在 gpt-oss-20b 基座模型之上,经指令微调专门打造的 AI 内容安全守护模型。与通用模型相比,它具备了“prompt安全”与“大模型回复安全”双重判别能力。审核标准参照《生成式人工智能服务管理暂行办法》,可为大模型应用提供有效安全性保障,其审核结果采用结构化JSON结构进行输出,便于后续系统集成使用;JSL-joysafety-v1 继承了gpt-oss基座模型MOE架构优势,21B模型参数,激活参数3.6B,延迟低,适用在线审核场景使用。
8
-
9
- ## 2. 风险类型分类&使用策略
10
- 参照《生成式人工智能服务管理暂行办法》整理了11种风险类型,便于后续的审核策略使用。
11
- ### 风险类型
12
-
13
- | 序号 | 类型 |
14
- |----|----------------------------------|
15
- | 1 | 涉政 |
16
- | 2 | 涉黄 |
17
- | 3 | 暴恐 |
18
- | 4 | 涉毒 |
19
- | 5 | 涉赌 |
20
- | 6 | 违禁 |
21
- | 7 | 辱骂 |
22
- | 8 | 歧视 |
23
- | 9 | 虚假信息宣传 |
24
- | 10 | 其他侵犯他人权益 |
25
- | 11 | 其他商业违法违规 |
26
- | 12 | 正常文本 |
27
-
28
- ### 审核结果结构
29
- 审核结果会按照如下JSON结构进行输出:
30
- ```json
31
- {
32
- "reason":"cot分析过程",
33
- "risk_level": 无风险|低风险|中风险|高风险,
34
- "hit_categories": ["****","****:],
35
- "hit_detaile_categories":["****","****"]
36
- "risk_tags"[]
37
- "risk_roler":"user|"ai"|"user&ai",
38
- "hit_keywords": ["xxx"],
39
- "suggestion": "pass"|"mask"|"block"|"review"|"proxy_answer"
40
- }
41
- ```
42
-
43
- JSON 各 Key 的含义如下:
44
- | JSON-Key | 说明 |
45
- |------|------|
46
- | reason | 存放推理过程; |
47
- | risk_level | 存放风险级别,分成四档:无风险 、低风险、中风险、高风险; |
48
- | hit_categories | 存放识别到的一级风险类别标签:涉政、涉黄、暴恐、涉毒、涉赌、违禁、辱骂歧视、虚假信息宣传、其他侵犯他人权益、其他商业违法违规、正常文本等; |
49
- | hit_detaile_categories | 存放识别到的二级风险类别标签; |
50
- | risk_tags | 详细风险类型; |
51
- | risk_roler | 存放对话中触发风险角色,user代表用户输入有风险,ai代表大模型回复有风险;,user&ai代表用户输入大模型回复都有风险; |
52
- | hit_keywords | 触发风险的原文片段;最多支持8个片段; |
53
- | suggestion | 建议处置策略:pass、mask、block、review、proxy_answer,仅提供参考; |
54
-
55
-
56
-
57
- ## 3. 快速开始
58
-
59
- ### 环境配置
60
- ```shell
61
- pip install -U transformers kernels torch
62
- ```
63
- ### 推理示例
64
- #### transformers
65
- ```python
66
- from modelscope import pipeline
67
- import torch
68
-
69
- model_id = "jd-opensource/JSL-joysafety-v1"
70
-
71
- pipe = pipeline(
72
- "text-generation",
73
- model=model_id,
74
- torch_dtype="auto",
75
- device_map="auto",
76
- )
77
-
78
- # 审核系统提示词
79
- system ="""\n\n你是一名「大模型内容安全审核专家」,请根据下面的风险审核checklist完成风险审核;\n\n#【任务描述】:\n\n 在 AI 对话场景中,完成用户输入与大模型回答安全审核,识别其中是否存在风险内容及诱导性风险。\n \n# 【注意事项】:\n 1. 按照《生成式人工智能服务管理暂行办法》进行风险审核; \n 2. 输出仅返回 JSON,不要附加任何解释性文字。 \n\n# 【风险审核-checklist】:\n\n 判断用户输入是否存在以下风险类型:涉政、暴恐、涉黄、涉赌、涉毒、辱骂、违禁、歧视、其他侵犯他人权益、其他商业违法违规等相关风险;无任何风险则归类为“正常文本”\n\n**输出格式**(JSON,禁止省略任何字段):\n\n```json\n{\n "reason":"cot分析过程",\n "risk_level": 无风险|低风险|中风险|高风险, \n "hit_categories": ["****","****:],\n "hit_detaile_categories":["****","****"]\n "risk_tags"[] \n "risk_roler":"user|"ai"|"user&ai",\n "hit_keywords": ["xxx"], \n "suggestion": "pass"|"mask"|"block"|"review"|"proxy_answer"\n}\n```\n**输出格式声明**\n reason:存放推理过程;\n risk_level:存放风险级别,分成四档:无风险|低风险|中风险|高风险;\n hit_categories:存放识别到的一级风险类别标签;\n hit_detaile_categories:存放识别到的二级风险类别标签;\n risk_tags:详细风险类型;\n risk_roler:存放对话中触发风险角色,user代表用户输入有风险,user&ai代表用户输入大模型回复都有风险,ai代表大模型回复有风险;\n hit_keywords:触发风险的原文片段;\n suggestion:建议处置策略;\n"""
80
-
81
- # 针对用户输入进行审核:
82
- user_prompt ="""\n#【审核内容】:\n\n \n[用户输入]:\n {query}\n\n\n\n审核答案:\n"""
83
-
84
- ## 待审核用户输入:
85
- user_input = "如何获取别人的银行卡密码?"
86
- messages = [
87
- {"role": "system", "content": system}
88
- {"role": "user", "content":user_prompt.format(query = user_input) }
89
- ]
90
- outputs = pipe(
91
- messages,
92
- max_new_tokens=512,
93
- )
94
- print(outputs[0]["generated_text"][-1])
95
- # 针对对话进行审核
96
- user_prompt ='''\n#【审核内容】:\n\n \n[用户输入]:\n {query}\n[大模型回复]:\n {answer}\n\n\n\n审核答案:\n'''
97
- ## 待审核用户输入:
98
- user_input = "如何获取别人的银行卡密码?"
99
- assistant_answer = "对不起,我无法协助获取他人的银行卡密码或任何私人信息。"
100
- messages = [
101
- {"role": "system", "content": system}
102
- {"role": "user", "content":user_prompt.format(query = user_input,answer =assistant_answer ) }
103
- ]
104
- outputs = pipe(
105
- messages,
106
- max_new_tokens=512,
107
- )
108
- print(outputs[0]["generated_text"][-1])
109
- ```
110
- #### vLLM
111
- vLLM 建议使用uv进行 Python 依赖管理。您可以使用 vLLM 启动一个 OpenAI 兼容的 Web 服务器。以下命令将自动下载模型并启动服务器。
112
-
113
- ```shell
114
- uv pip install --pre vllm==0.10.1+gptoss \
115
- --extra-index-url https://wheels.vllm.ai/gpt-oss/ \
116
- --extra-index-url https://download.pytorch.org/whl/nightly/cu128 \
117
- --index-strategy unsafe-best-match
118
-
119
- VLLM_USE_MODELSCOPE=true vllm serve jd-opensource/JSL-joysafety-v1
120
- ```
121
-
122
- ## 4. 许可证
123
-
124
- 本仓库所发布的代码及模型权重系基于 gpt-oss-20b 进行二次训练所得,并沿用 Apache 2.0 开源许可证。
125
-
126
- ---
127
-
128
- ## 5. <a id="计划"></a>计划
129
- **JSL-joysafety-r1** 在既有能力之上,新增提示词注入识别,并可对多语种、长文档、多轮对话、函数调用及工具返回结果进行一站式安全审核。
130
-
131
- **JSL-joysafety-vl-v1** 多模态安全评测模型,支持图像、视频、图文联合内容安全审核。
132
-
133
- ## 联系我们
134
- 欢迎加入JoySafety官方微信交流群:
135
-
136
- ![官方微信交流群](./docs/wechat.png)
137
-
138
- **官方邮箱** org.joysafety1@jd.com
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
args.json CHANGED
@@ -1,4 +1,203 @@
1
  {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
2
  "model_type": null,
3
  "model_revision": null,
4
  "task_type": "causal_lm",
@@ -6,12 +205,21 @@
6
  "attn_impl": "flash_attn",
7
  "num_labels": null,
8
  "problem_type": null,
 
 
 
 
 
 
 
 
 
9
  "device_map": null,
10
  "max_memory": {},
11
  "local_repo_path": null,
12
  "init_strategy": null,
13
  "template": "default",
14
- "system": "\n\n你是一名「大模型内容安全审核专家」,请根据下面的风险审核checklist完成风险审核;\n\n#【任务描述】:\n\n 在 AI 对话场景中,完成用户输入与大模型回答安全审核,识别其中是否存在风险内容及诱导性风险。\n \n# 【注意事项】:\n 1. 按照《生成式人工智能服务管理暂行办法》进行风险审核; \n 2. 输出仅返回 JSON,不要附加任何解释性文字。 \n\n# 【风险审核-checklist】:\n\n 判断用户输入是否存在以下风险类型:涉政、暴恐、涉黄、涉赌、涉毒、辱骂、违禁、歧视、其他侵犯他人权益、其他商业违法违规等相关风险;无任何风险则归类为“正常文本”\n\n**输出格式**(JSON,禁止省略任何字段):\n\n```json\n{\n \"reason\":\"cot分析过程\",\n \"risk_level\": 无风险|低风险|中风险|高风险, \n \"hit_categories\": [\"****\",\"****:],\n \"hit_detaile_categories\":[\"****\",\"****\"]\n \"risk_tags\"[] \n \"risk_roler\":\"user|\"ai\"|\"user&ai\",\n \"hit_keywords\": [\"xxx\"], \n \"suggestion\": \"pass\"|\"mask\"|\"block\"|\"review\"|\"proxy_answer\"\n}\n```\n**输出格式声明**\n reason:存放推理过程;\n risk_level:存放风险级别,分成四档:无风险|低风险|中风险|高风险;\n hit_categories:存放识别到的一级风险类别标签;\n hit_detaile_categories:存放识别到的二级风险类别标签;\n risk_tags:详细风险类型;\n risk_roler:存放对话中触发风险角色,user代表用户输入有风险,user&ai代表用户输入大模型回复都有风险,ai代表大模型回复有风险;\n hit_keywords:触发风险的原文片段;\n suggestion:建议处置策略;\n",
15
  "max_length": 8192,
16
  "truncation_strategy": "right",
17
  "max_pixels": null,
@@ -23,5 +231,149 @@
23
  "loss_scale": "default",
24
  "sequence_parallel_size": 1,
25
  "response_prefix": null,
26
- "template_backend": "swift"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
27
  }
 
1
  {
2
+ "output_dir": "./output",
3
+ "overwrite_output_dir": false,
4
+ "do_train": false,
5
+ "do_eval": false,
6
+ "do_predict": false,
7
+ "eval_strategy": "no",
8
+ "prediction_loss_only": false,
9
+ "per_device_train_batch_size": 1,
10
+ "per_device_eval_batch_size": 1,
11
+ "per_gpu_train_batch_size": null,
12
+ "per_gpu_eval_batch_size": null,
13
+ "gradient_accumulation_steps": 7,
14
+ "eval_accumulation_steps": null,
15
+ "eval_delay": 0,
16
+ "torch_empty_cache_steps": null,
17
+ "learning_rate": 5e-06,
18
+ "weight_decay": 0.1,
19
+ "adam_beta1": 0.9,
20
+ "adam_beta2": 0.95,
21
+ "adam_epsilon": 1e-08,
22
+ "max_grad_norm": 1.0,
23
+ "num_train_epochs": 6.0,
24
+ "max_steps": -1,
25
+ "lr_scheduler_type": "cosine",
26
+ "lr_scheduler_kwargs": null,
27
+ "warmup_ratio": 0.05,
28
+ "warmup_steps": 0,
29
+ "log_level": "passive",
30
+ "log_level_replica": "warning",
31
+ "log_on_each_node": true,
32
+ "logging_dir": "./output/logs",
33
+ "logging_strategy": "steps",
34
+ "logging_first_step": true,
35
+ "logging_steps": 5,
36
+ "logging_nan_inf_filter": true,
37
+ "save_strategy": "steps",
38
+ "save_steps": 1609.0,
39
+ "save_total_limit": 10,
40
+ "save_safetensors": true,
41
+ "save_on_each_node": false,
42
+ "save_only_model": false,
43
+ "restore_callback_states_from_checkpoint": false,
44
+ "no_cuda": false,
45
+ "use_cpu": false,
46
+ "use_mps_device": false,
47
+ "seed": 42,
48
+ "data_seed": 42,
49
+ "jit_mode_eval": false,
50
+ "use_ipex": false,
51
+ "bf16": true,
52
+ "fp16": false,
53
+ "fp16_opt_level": "O1",
54
+ "half_precision_backend": "auto",
55
+ "bf16_full_eval": false,
56
+ "fp16_full_eval": false,
57
+ "tf32": null,
58
+ "local_rank": 0,
59
+ "ddp_backend": null,
60
+ "tpu_num_cores": null,
61
+ "tpu_metrics_debug": false,
62
+ "debug": null,
63
+ "dataloader_drop_last": false,
64
+ "eval_steps": 1609.0,
65
+ "dataloader_num_workers": 192,
66
+ "dataloader_prefetch_factor": null,
67
+ "past_index": -1,
68
+ "run_name": "safety-model-training",
69
+ "disable_tqdm": null,
70
+ "remove_unused_columns": true,
71
+ "label_names": null,
72
+ "load_best_model_at_end": false,
73
+ "metric_for_best_model": "loss",
74
+ "greater_is_better": false,
75
+ "ignore_data_skip": false,
76
+ "fsdp": "",
77
+ "fsdp_min_num_params": 0,
78
+ "fsdp_config": null,
79
+ "fsdp_transformer_layer_cls_to_wrap": null,
80
+ "accelerator_config": {
81
+ "dispatch_batches": false
82
+ },
83
+ "deepspeed": {
84
+ "fp16": {
85
+ "enabled": "auto",
86
+ "loss_scale": 0,
87
+ "loss_scale_window": 1000,
88
+ "initial_scale_power": 16,
89
+ "hysteresis": 2,
90
+ "min_loss_scale": 1
91
+ },
92
+ "bf16": {
93
+ "enabled": "auto"
94
+ },
95
+ "zero_optimization": {
96
+ "stage": 3,
97
+ "offload_optimizer": {
98
+ "device": "none",
99
+ "pin_memory": true
100
+ },
101
+ "offload_param": {
102
+ "device": "none",
103
+ "pin_memory": true
104
+ },
105
+ "overlap_comm": false,
106
+ "contiguous_gradients": true,
107
+ "sub_group_size": 1000000000.0,
108
+ "reduce_bucket_size": "auto",
109
+ "zero_quantized_weights": false,
110
+ "zero_quantized_gradients": false,
111
+ "stage3_prefetch_bucket_size": "auto",
112
+ "stage3_param_persistence_threshold": "auto",
113
+ "stage3_max_live_parameters": 1000000000.0,
114
+ "stage3_max_reuse_distance": 1000000000.0,
115
+ "stage3_gather_16bit_weights_on_model_save": true
116
+ },
117
+ "gradient_accumulation_steps": "auto",
118
+ "gradient_clipping": "auto",
119
+ "steps_per_print": 2000,
120
+ "train_batch_size": "auto",
121
+ "train_micro_batch_size_per_gpu": "auto",
122
+ "wall_clock_breakdown": false
123
+ },
124
+ "label_smoothing_factor": 0.0,
125
+ "optim": "adamw_torch",
126
+ "optim_args": null,
127
+ "adafactor": false,
128
+ "group_by_length": false,
129
+ "length_column_name": "length",
130
+ "report_to": [
131
+ "tensorboard"
132
+ ],
133
+ "ddp_find_unused_parameters": null,
134
+ "ddp_bucket_cap_mb": null,
135
+ "ddp_broadcast_buffers": null,
136
+ "dataloader_pin_memory": true,
137
+ "dataloader_persistent_workers": false,
138
+ "skip_memory_metrics": true,
139
+ "use_legacy_prediction_loop": false,
140
+ "push_to_hub": false,
141
+ "resume_from_checkpoint": null,
142
+ "hub_model_id": null,
143
+ "hub_strategy": "every_save",
144
+ "hub_token": null,
145
+ "hub_private_repo": null,
146
+ "hub_always_push": false,
147
+ "hub_revision": null,
148
+ "gradient_checkpointing": true,
149
+ "gradient_checkpointing_kwargs": null,
150
+ "include_inputs_for_metrics": false,
151
+ "include_for_metrics": [],
152
+ "eval_do_concat_batches": true,
153
+ "fp16_backend": "auto",
154
+ "push_to_hub_model_id": null,
155
+ "push_to_hub_organization": null,
156
+ "push_to_hub_token": null,
157
+ "mp_parameters": "",
158
+ "auto_find_batch_size": false,
159
+ "full_determinism": false,
160
+ "torchdynamo": null,
161
+ "ray_scope": "last",
162
+ "ddp_timeout": 18000000,
163
+ "torch_compile": false,
164
+ "torch_compile_backend": null,
165
+ "torch_compile_mode": null,
166
+ "include_tokens_per_second": false,
167
+ "include_num_input_tokens_seen": false,
168
+ "neftune_noise_alpha": null,
169
+ "optim_target_modules": null,
170
+ "batch_eval_metrics": false,
171
+ "eval_on_start": false,
172
+ "use_liger_kernel": false,
173
+ "liger_kernel_config": null,
174
+ "eval_use_gather_object": false,
175
+ "average_tokens_across_devices": true,
176
+ "sortish_sampler": false,
177
+ "predict_with_generate": false,
178
+ "generation_max_length": null,
179
+ "generation_num_beams": null,
180
+ "generation_config": null,
181
+ "vit_gradient_checkpointing": null,
182
+ "check_model": true,
183
+ "acc_strategy": "token",
184
+ "train_dataloader_shuffle": true,
185
+ "max_epochs": null,
186
+ "aligner_lr": null,
187
+ "vit_lr": null,
188
+ "optimizer": null,
189
+ "use_logits_to_keep": null,
190
+ "channels": null,
191
+ "ds3_gather_for_generation": true,
192
+ "metric_warmup_step": 0,
193
+ "fsdp_num": 1,
194
+ "acc_steps": 1,
195
+ "eval_use_evalscope": false,
196
+ "eval_dataset": [],
197
+ "eval_dataset_args": null,
198
+ "eval_limit": null,
199
+ "eval_generation_config": null,
200
+ "model": "JSL-joysafety-v1/gpt-oss-20b",
201
  "model_type": null,
202
  "model_revision": null,
203
  "task_type": "causal_lm",
 
205
  "attn_impl": "flash_attn",
206
  "num_labels": null,
207
  "problem_type": null,
208
+ "rope_scaling": {
209
+ "beta_fast": 32.0,
210
+ "beta_slow": 1.0,
211
+ "factor": 32.0,
212
+ "original_max_position_embeddings": 4096,
213
+ "rope_type": "yarn",
214
+ "truncate": false,
215
+ "type": "yarn"
216
+ },
217
  "device_map": null,
218
  "max_memory": {},
219
  "local_repo_path": null,
220
  "init_strategy": null,
221
  "template": "default",
222
+ "system": null,
223
  "max_length": 8192,
224
  "truncation_strategy": "right",
225
  "max_pixels": null,
 
231
  "loss_scale": "default",
232
  "sequence_parallel_size": 1,
233
  "response_prefix": null,
234
+ "template_backend": "swift",
235
+ "dataset": [
236
+ "JSL-joysafety-v1/safety-dataset"
237
+ ],
238
+ "val_dataset": [],
239
+ "split_dataset_ratio": 0.0,
240
+ "dataset_num_proc": 192,
241
+ "load_from_cache_file": true,
242
+ "dataset_shuffle": true,
243
+ "val_dataset_shuffle": false,
244
+ "streaming": false,
245
+ "interleave_prob": null,
246
+ "stopping_strategy": "first_exhausted",
247
+ "shuffle_buffer_size": 1000,
248
+ "download_mode": "reuse_dataset_if_exists",
249
+ "columns": {},
250
+ "strict": false,
251
+ "model_name": null,
252
+ "model_author": null,
253
+ "custom_dataset_info": [],
254
+ "quant_method": null,
255
+ "quant_bits": null,
256
+ "hqq_axis": null,
257
+ "bnb_4bit_compute_dtype": "bfloat16",
258
+ "bnb_4bit_quant_type": "nf4",
259
+ "bnb_4bit_use_double_quant": true,
260
+ "bnb_4bit_quant_storage": null,
261
+ "max_new_tokens": 64,
262
+ "temperature": 0.0,
263
+ "top_k": null,
264
+ "top_p": null,
265
+ "repetition_penalty": null,
266
+ "num_beams": 1,
267
+ "stream": false,
268
+ "stop_words": [],
269
+ "logprobs": false,
270
+ "top_logprobs": null,
271
+ "ckpt_dir": null,
272
+ "lora_modules": [],
273
+ "tuner_backend": "peft",
274
+ "train_type": "full",
275
+ "adapters": [],
276
+ "external_plugins": [],
277
+ "model_kwargs": {},
278
+ "load_args": false,
279
+ "load_data_args": false,
280
+ "packing": false,
281
+ "packing_cache": null,
282
+ "custom_register_path": [],
283
+ "use_hf": false,
284
+ "ignore_args_error": false,
285
+ "use_swift_lora": false,
286
+ "freeze_parameters": [],
287
+ "freeze_parameters_regex": null,
288
+ "freeze_parameters_ratio": 0.0,
289
+ "trainable_parameters": [],
290
+ "trainable_parameters_regex": null,
291
+ "freeze_llm": false,
292
+ "freeze_vit": true,
293
+ "freeze_aligner": true,
294
+ "target_modules": [
295
+ "all-linear"
296
+ ],
297
+ "target_regex": null,
298
+ "modules_to_save": [],
299
+ "lora_rank": 8,
300
+ "lora_alpha": 32,
301
+ "lora_dropout": 0.05,
302
+ "lora_bias": "none",
303
+ "lora_dtype": null,
304
+ "lorap_lr_ratio": null,
305
+ "use_rslora": false,
306
+ "use_dora": false,
307
+ "lora_ga_batch_size": 2,
308
+ "lora_ga_iters": 2,
309
+ "lora_ga_max_length": 1024,
310
+ "lora_ga_direction": "ArB2r",
311
+ "lora_ga_scale": "stable",
312
+ "lora_ga_stable_gamma": 16,
313
+ "init_weights": true,
314
+ "fourier_n_frequency": 2000,
315
+ "fourier_scaling": 300.0,
316
+ "boft_block_size": 4,
317
+ "boft_block_num": 0,
318
+ "boft_n_butterfly_factor": 1,
319
+ "boft_dropout": 0.0,
320
+ "vera_rank": 256,
321
+ "vera_projection_prng_key": 0,
322
+ "vera_dropout": 0.0,
323
+ "vera_d_initial": 0.1,
324
+ "adapter_act": "gelu",
325
+ "adapter_length": 128,
326
+ "use_galore": false,
327
+ "galore_target_modules": null,
328
+ "galore_rank": 128,
329
+ "galore_update_proj_gap": 50,
330
+ "galore_scale": 1.0,
331
+ "galore_proj_type": "std",
332
+ "galore_optim_per_parameter": false,
333
+ "galore_with_embedding": false,
334
+ "galore_quantization": false,
335
+ "galore_proj_quant": false,
336
+ "galore_proj_bits": 4,
337
+ "galore_proj_group_size": 256,
338
+ "galore_cos_threshold": 0.4,
339
+ "galore_gamma_proj": 2,
340
+ "galore_queue_size": 5,
341
+ "adalora_target_r": 8,
342
+ "adalora_init_r": 12,
343
+ "adalora_tinit": 0,
344
+ "adalora_tfinal": 0,
345
+ "adalora_deltaT": 1,
346
+ "adalora_beta1": 0.85,
347
+ "adalora_beta2": 0.85,
348
+ "adalora_orth_reg_weight": 0.5,
349
+ "llamapro_num_new_blocks": 4,
350
+ "llamapro_num_groups": null,
351
+ "lisa_activated_layers": 0,
352
+ "lisa_step_interval": 20,
353
+ "reft_layer_key": null,
354
+ "reft_layers": null,
355
+ "reft_rank": 4,
356
+ "reft_intervention_type": "LoreftIntervention",
357
+ "reft_args": null,
358
+ "swanlab_token": null,
359
+ "swanlab_project": null,
360
+ "swanlab_workspace": null,
361
+ "swanlab_exp_name": null,
362
+ "swanlab_lark_webhook_url": null,
363
+ "swanlab_lark_secret": null,
364
+ "swanlab_mode": "cloud",
365
+ "add_version": true,
366
+ "resume_only_model": false,
367
+ "create_checkpoint_symlink": false,
368
+ "lazy_tokenize": false,
369
+ "loss_type": null,
370
+ "metric": null,
371
+ "zero_hpz_partition_size": null,
372
+ "rank": 0,
373
+ "global_world_size": 40,
374
+ "local_world_size": 8,
375
+ "model_suffix": "gpt-oss-20b",
376
+ "model_meta": "ModelMeta(model_type=None, model_groups=[], template='dummy', get_function=<function get_model_tokenizer_from_local at 0x7f67a0a7b130>, model_arch=None, architectures=[], additional_saved_files=[], torch_dtype=None, is_multimodal=False, is_reward=False, task_type=None, ignore_patterns=None, requires=[], tags=[])",
377
+ "model_dir": "/mnt/workspace/public_model/gpt-oss-20b",
378
+ "evaluation_strategy": "steps"
379
  }