xinference 1.10.1__py3-none-any.whl → 1.11.0.post1__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.

Potentially problematic release.


This version of xinference might be problematic. Click here for more details.

Files changed (39) hide show
  1. xinference/_version.py +3 -3
  2. xinference/api/restful_api.py +462 -3
  3. xinference/client/restful/async_restful_client.py +158 -5
  4. xinference/client/restful/restful_client.py +131 -0
  5. xinference/core/supervisor.py +12 -0
  6. xinference/model/audio/model_spec.json +20 -20
  7. xinference/model/image/model_spec.json +159 -159
  8. xinference/model/llm/__init__.py +2 -2
  9. xinference/model/llm/llm_family.json +843 -180
  10. xinference/model/llm/mlx/distributed_models/core.py +41 -0
  11. xinference/model/llm/mlx/distributed_models/qwen2.py +1 -2
  12. xinference/model/llm/sglang/core.py +20 -6
  13. xinference/model/llm/tool_parsers/qwen_tool_parser.py +29 -4
  14. xinference/model/llm/transformers/chatglm.py +3 -0
  15. xinference/model/llm/transformers/core.py +93 -16
  16. xinference/model/llm/transformers/multimodal/minicpmv45.py +340 -0
  17. xinference/model/llm/transformers/utils.py +3 -0
  18. xinference/model/llm/utils.py +37 -24
  19. xinference/model/llm/vllm/core.py +128 -69
  20. xinference/model/utils.py +74 -31
  21. xinference/thirdparty/audiotools/core/audio_signal.py +6 -6
  22. xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/text.py +1 -1
  23. xinference/thirdparty/melo/text/chinese_mix.py +2 -2
  24. xinference/types.py +9 -0
  25. xinference/ui/web/ui/build/asset-manifest.json +3 -3
  26. xinference/ui/web/ui/build/index.html +1 -1
  27. xinference/ui/web/ui/build/static/js/{main.d192c4f3.js → main.e4d9a9e1.js} +3 -3
  28. xinference/ui/web/ui/build/static/js/{main.d192c4f3.js.map → main.e4d9a9e1.js.map} +1 -1
  29. xinference/ui/web/ui/node_modules/.cache/babel-loader/e6770a05771952175c9fbf48fce283c9bb1bc8b5763e39edc36d099d1fe16b4a.json +1 -0
  30. xinference/ui/web/ui/node_modules/.cache/babel-loader/ea2a26361204e70cf1018d6990fb6354bed82b3ac69690391e0f100385e7abb7.json +1 -0
  31. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/METADATA +8 -5
  32. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/RECORD +37 -36
  33. xinference/ui/web/ui/node_modules/.cache/babel-loader/7275b67c78ec76ce38a686bb8a576d8c9cecf54e1573614c84859d538efb9be5.json +0 -1
  34. xinference/ui/web/ui/node_modules/.cache/babel-loader/f995a2425dfb0822fd07127f66ffe9b026883bc156b402eb8bd0b83d52460a93.json +0 -1
  35. /xinference/ui/web/ui/build/static/js/{main.d192c4f3.js.LICENSE.txt → main.e4d9a9e1.js.LICENSE.txt} +0 -0
  36. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/WHEEL +0 -0
  37. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/entry_points.txt +0 -0
  38. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/licenses/LICENSE +0 -0
  39. {xinference-1.10.1.dist-info → xinference-1.11.0.post1.dist-info}/top_level.txt +0 -0
@@ -1009,7 +1009,7 @@
1009
1009
  "<|im_start|>",
1010
1010
  "<|im_end|>"
1011
1011
  ],
1012
- "tool_parser":"qwen"
1012
+ "tool_parser": "qwen"
1013
1013
  },
1014
1014
  {
1015
1015
  "version": 2,
@@ -1136,7 +1136,7 @@
1136
1136
  "<|im_start|>",
1137
1137
  "<|im_end|>"
1138
1138
  ],
1139
- "tool_parser":"qwen"
1139
+ "tool_parser": "qwen"
1140
1140
  },
1141
1141
  {
1142
1142
  "version": 2,
@@ -1950,7 +1950,7 @@
1950
1950
  ],
1951
1951
  "reasoning_start_tag": "<think>",
1952
1952
  "reasoning_end_tag": "</think>",
1953
- "tool_parser":"qwen"
1953
+ "tool_parser": "qwen"
1954
1954
  },
1955
1955
  {
1956
1956
  "version": 2,
@@ -2214,7 +2214,7 @@
2214
2214
  "<|im_start|>",
2215
2215
  "<|im_end|>"
2216
2216
  ],
2217
- "tool_parser":"qwen"
2217
+ "tool_parser": "qwen"
2218
2218
  },
2219
2219
  {
2220
2220
  "version": 2,
@@ -5324,116 +5324,6 @@
5324
5324
  "reasoning_end_tag": "</think>",
5325
5325
  "tool_parser": "deepseek-r1"
5326
5326
  },
5327
- {
5328
- "version": 2,
5329
- "context_length": 131072,
5330
- "model_name": "Deepseek-V3.1",
5331
- "model_lang": [
5332
- "en",
5333
- "zh"
5334
- ],
5335
- "model_ability": [
5336
- "chat",
5337
- "reasoning",
5338
- "hybrid",
5339
- "tools"
5340
- ],
5341
- "model_description": "DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.",
5342
- "model_specs": [
5343
- {
5344
- "model_format": "pytorch",
5345
- "model_size_in_billions": 671,
5346
- "activated_size_in_billions": 37,
5347
- "model_src": {
5348
- "huggingface": {
5349
- "quantizations": [
5350
- "none"
5351
- ],
5352
- "model_id": "deepseek-ai/DeepSeek-V3.1"
5353
- },
5354
- "modelscope": {
5355
- "quantizations": [
5356
- "none"
5357
- ],
5358
- "model_id": "deepseek-ai/DeepSeek-V3.1"
5359
- }
5360
- }
5361
- },
5362
- {
5363
- "model_format": "gptq",
5364
- "model_size_in_billions": 671,
5365
- "activated_size_in_billions": 37,
5366
- "model_src": {
5367
- "huggingface": {
5368
- "quantizations": [
5369
- "Int4"
5370
- ],
5371
- "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
5372
- },
5373
- "modelscope": {
5374
- "quantizations": [
5375
- "Int4"
5376
- ],
5377
- "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
5378
- }
5379
- }
5380
- },
5381
- {
5382
- "model_format": "awq",
5383
- "model_size_in_billions": 671,
5384
- "activated_size_in_billions": 37,
5385
- "model_src": {
5386
- "huggingface": {
5387
- "quantizations": [
5388
- "Int4"
5389
- ],
5390
- "model_id": "QuantTrio/DeepSeek-V3.1-AWQ"
5391
- },
5392
- "modelscope": {
5393
- "quantizations": [
5394
- "Int4"
5395
- ],
5396
- "model_id": "tclf90/DeepSeek-V3.1-AWQ"
5397
- }
5398
- }
5399
- },
5400
- {
5401
- "model_format": "mlx",
5402
- "model_size_in_billions": 671,
5403
- "activated_size_in_billions": 37,
5404
- "model_src": {
5405
- "huggingface": {
5406
- "quantizations": [
5407
- "8bit",
5408
- "4bit"
5409
- ],
5410
- "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
5411
- },
5412
- "modelscope": {
5413
- "quantizations": [
5414
- "8bit",
5415
- "4bit"
5416
- ],
5417
- "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
5418
- }
5419
- }
5420
- }
5421
- ],
5422
- "chat_template": "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% if not thinking is defined %}{% set thinking = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- if ns.is_last_user %}{{'<|Assistant|></think>'}}{%- endif %}{%- set ns.is_last_user = false -%}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- else %}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'<|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}{%- if ns.is_last_user %}{{'<|Assistant|>'}}{%- if message['prefix'] is defined and message['prefix'] and thinking %}{{'<think>'}} {%- else %}{{'</think>'}}{%- endif %}{%- endif %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{%- set content = message['content'] -%}{%- if '</think>' in content %}{%- set content = content.split('</think>', 1)[1] -%}{%- endif %}{{content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endfor -%}{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool %}{{'<|Assistant|>'}}{%- if not thinking %}{{'</think>'}}{%- else %}{{'<think>'}}{%- endif %}{% endif %}",
5423
- "stop_token_ids": [
5424
- 1
5425
- ],
5426
- "stop": [
5427
- "<|end▁of▁sentence|>"
5428
- ],
5429
- "reasoning_start_tag": "<think>",
5430
- "reasoning_end_tag": "</think>",
5431
- "virtualenv": {
5432
- "packages": [
5433
- "transformers==4.53.0"
5434
- ]
5435
- }
5436
- },
5437
5327
  {
5438
5328
  "version": 2,
5439
5329
  "context_length": 131072,
@@ -6690,11 +6580,11 @@
6690
6580
  "quantizations": [
6691
6581
  "4bit",
6692
6582
  "5bit",
6693
- "8bit"
6583
+ "8bit"
6694
6584
  ],
6695
6585
  "model_id": "mlx-community/DeepSeek-V3-0324-{quantization}"
6696
6586
  }
6697
- }
6587
+ }
6698
6588
  }
6699
6589
  ],
6700
6590
  "chat_template": "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, is_output_first=true, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content'] + '<|Assistant|>'}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{%- endif %}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- set ns.is_output_first = true %}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}{%- else %}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'\n' + '<|tool▁call▁begin|>' + tool['type'] + '<|tool▁sep|>' + tool['function']['name'] + '\n' + '```json' + '\n' + tool['function']['arguments'] + '\n' + '```' + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none)%}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{'<|tool▁outputs▁end|>' + message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{% set content = message['content'] %}{{content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{%- if ns.is_output_first %}{{'<|tool▁outputs▁begin|><|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- set ns.is_output_first = false %}{%- else %}{{'\n<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endif %}{%- endfor -%}{% if ns.is_tool %}{{'<|tool▁outputs▁end|>'}}{% endif %}{% if add_generation_prompt and not ns.is_last_user and not ns.is_tool %}{{'<|Assistant|>'}}{% endif %}",
@@ -7929,7 +7819,7 @@
7929
7819
  "<|user|>",
7930
7820
  "<|observation|>"
7931
7821
  ],
7932
- "tool_parser":"glm4"
7822
+ "tool_parser": "glm4"
7933
7823
  },
7934
7824
  {
7935
7825
  "version": 2,
@@ -8037,7 +7927,7 @@
8037
7927
  "<|user|>",
8038
7928
  "<|observation|>"
8039
7929
  ],
8040
- "tool_parser":"glm4"
7930
+ "tool_parser": "glm4"
8041
7931
  },
8042
7932
  {
8043
7933
  "version": 2,
@@ -11930,7 +11820,7 @@
11930
11820
  "<|im_start|>",
11931
11821
  "<|im_end|>"
11932
11822
  ],
11933
- "tool_parser":"qwen"
11823
+ "tool_parser": "qwen"
11934
11824
  },
11935
11825
  {
11936
11826
  "version": 2,
@@ -11994,7 +11884,7 @@
11994
11884
  "<|im_start|>",
11995
11885
  "<|im_end|>"
11996
11886
  ],
11997
- "tool_parser":"qwen"
11887
+ "tool_parser": "qwen"
11998
11888
  },
11999
11889
  {
12000
11890
  "version": 2,
@@ -12079,6 +11969,7 @@
12079
11969
  }
12080
11970
  }
12081
11971
  ],
11972
+ "chat_template": "{% set audio_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system You are a helpful assistant.<|im_end|> {% endif %}<|im_start|>{{ message['role'] }} {% if message['content'] is string %}{{ message['content'] }}<|im_end|> {% else %}{% for content in message['content'] %}{% if 'audio' in content or 'audio_url' in content or message['type'] == 'audio' or content['type'] == 'audio' %}{% set audio_count.value = audio_count.value + 1 %}Audio {{ audio_count.value }}: <|audio_bos|><|AUDIO|><|audio_eos|> {% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|> {% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant {% endif %}",
12082
11973
  "prompt_style": {
12083
11974
  "style_name": "QWEN",
12084
11975
  "system_prompt": "You are a helpful assistant",
@@ -12719,7 +12610,7 @@
12719
12610
  "<|im_start|>",
12720
12611
  "<|im_end|>"
12721
12612
  ],
12722
- "tool_parser":"qwen"
12613
+ "tool_parser": "qwen"
12723
12614
  },
12724
12615
  {
12725
12616
  "version": 2,
@@ -12841,7 +12732,7 @@
12841
12732
  "<|im_start|>",
12842
12733
  "<|im_end|>"
12843
12734
  ],
12844
- "tool_parser":"qwen"
12735
+ "tool_parser": "qwen"
12845
12736
  },
12846
12737
  {
12847
12738
  "version": 2,
@@ -14024,7 +13915,7 @@
14024
13915
  "<|im_start|>",
14025
13916
  "<|im_end|>"
14026
13917
  ],
14027
- "tool_parser":"qwen"
13918
+ "tool_parser": "qwen"
14028
13919
  },
14029
13920
  {
14030
13921
  "version": 2,
@@ -15535,7 +15426,7 @@
15535
15426
  "<|im_start|>",
15536
15427
  "<|im_end|>"
15537
15428
  ],
15538
- "tool_parser":"qwen"
15429
+ "tool_parser": "qwen"
15539
15430
  },
15540
15431
  {
15541
15432
  "version": 2,
@@ -15650,7 +15541,7 @@
15650
15541
  }
15651
15542
  }
15652
15543
  ],
15653
- "chat_template": "{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n{% endif %}<|im_start|>{{ message['role'] }}\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_start|><|image_pad|><|vision_end|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_start|><|video_pad|><|vision_end|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\n{% endif %}",
15544
+ "chat_template": "{% set audio_count = namespace(value=0) %}{% set image_count = namespace(value=0) %}{% set video_count = namespace(value=0) %}{% for message in messages %}{% if loop.first and message['role'] != 'system' %}<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n{% endif %}<|im_start|>{{ message['role'] }}\n{% if message['content'] is string %}{{ message['content'] }}<|im_end|>\n{% else %}{% for content in message['content'] %}{% if content['type'] == 'image' or 'image' in content or 'image_url' in content %}{% set image_count.value = image_count.value + 1 %}{% if add_vision_id %}Picture {{ image_count.value }}: {% endif %}<|vision_bos|><|IMAGE|><|vision_eos|>{% elif content['type'] == 'audio' or 'audio' in content or 'audio_url' in content %}{% set audio_count.value = audio_count.value + 1 %}{% if add_audio_id %}Audio {{ audio_count.value }}: {% endif %}<|audio_bos|><|AUDIO|><|audio_eos|>{% elif content['type'] == 'video' or 'video' in content %}{% set video_count.value = video_count.value + 1 %}{% if add_vision_id %}Video {{ video_count.value }}: {% endif %}<|vision_bos|><|VIDEO|><|vision_eos|>{% elif 'text' in content %}{{ content['text'] }}{% endif %}{% endfor %}<|im_end|>\n{% endif %}{% endfor %}{% if add_generation_prompt %}<|im_start|>assistant\n{% endif %}",
15654
15545
  "stop_token_ids": [
15655
15546
  151645,
15656
15547
  151643
@@ -17500,6 +17391,24 @@
17500
17391
  }
17501
17392
  }
17502
17393
  },
17394
+ {
17395
+ "model_format": "pytorch",
17396
+ "model_size_in_billions": 4,
17397
+ "model_src": {
17398
+ "huggingface": {
17399
+ "quantizations": [
17400
+ "none"
17401
+ ],
17402
+ "model_id": "Qwen/Qwen3-4B-Instruct-2507"
17403
+ },
17404
+ "modelscope": {
17405
+ "quantizations": [
17406
+ "none"
17407
+ ],
17408
+ "model_id": "Qwen/Qwen3-4B-Instruct-2507"
17409
+ }
17410
+ }
17411
+ },
17503
17412
  {
17504
17413
  "model_format": "fp8",
17505
17414
  "model_size_in_billions": 235,
@@ -17538,6 +17447,24 @@
17538
17447
  }
17539
17448
  }
17540
17449
  },
17450
+ {
17451
+ "model_format": "fp8",
17452
+ "model_size_in_billions": 4,
17453
+ "model_src": {
17454
+ "huggingface": {
17455
+ "quantizations": [
17456
+ "none"
17457
+ ],
17458
+ "model_id": "Qwen/Qwen3-4B-Instruct-2507-FP8"
17459
+ },
17460
+ "modelscope": {
17461
+ "quantizations": [
17462
+ "none"
17463
+ ],
17464
+ "model_id": "Qwen/Qwen3-4B-Instruct-2507-FP8"
17465
+ }
17466
+ }
17467
+ },
17541
17468
  {
17542
17469
  "model_format": "gptq",
17543
17470
  "model_size_in_billions": 235,
@@ -17576,6 +17503,26 @@
17576
17503
  }
17577
17504
  }
17578
17505
  },
17506
+ {
17507
+ "model_format": "gptq",
17508
+ "model_size_in_billions": 4,
17509
+ "model_src": {
17510
+ "huggingface": {
17511
+ "quantizations": [
17512
+ "Int4",
17513
+ "Int8"
17514
+ ],
17515
+ "model_id": "JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}"
17516
+ },
17517
+ "modelscope": {
17518
+ "quantizations": [
17519
+ "Int4",
17520
+ "Int8"
17521
+ ],
17522
+ "model_id": "JunHowie/Qwen3-4B-Instruct-2507-GPTQ-{quantization}"
17523
+ }
17524
+ }
17525
+ },
17579
17526
  {
17580
17527
  "model_format": "awq",
17581
17528
  "model_size_in_billions": 235,
@@ -17614,6 +17561,24 @@
17614
17561
  }
17615
17562
  }
17616
17563
  },
17564
+ {
17565
+ "model_format": "awq",
17566
+ "model_size_in_billions": 4,
17567
+ "model_src": {
17568
+ "huggingface": {
17569
+ "quantizations": [
17570
+ "Int4"
17571
+ ],
17572
+ "model_id": "Eslzzyl/Qwen3-4B-Instruct-2507-AWQ"
17573
+ },
17574
+ "modelscope": {
17575
+ "quantizations": [
17576
+ "Int4"
17577
+ ],
17578
+ "model_id": "Eslzzyl/Qwen3-4B-Instruct-2507-AWQ"
17579
+ }
17580
+ }
17581
+ },
17617
17582
  {
17618
17583
  "model_format": "mlx",
17619
17584
  "model_size_in_billions": 235,
@@ -17666,6 +17631,30 @@
17666
17631
  }
17667
17632
  }
17668
17633
  },
17634
+ {
17635
+ "model_format": "mlx",
17636
+ "model_size_in_billions": 4,
17637
+ "model_src": {
17638
+ "huggingface": {
17639
+ "quantizations": [
17640
+ "4bit",
17641
+ "5bit",
17642
+ "6bit",
17643
+ "8bit"
17644
+ ],
17645
+ "model_id": "mlx-community/Qwen3-4B-Instruct-2507-{quantization}"
17646
+ },
17647
+ "modelscope": {
17648
+ "quantizations": [
17649
+ "4bit",
17650
+ "5bit",
17651
+ "6bit",
17652
+ "8bit"
17653
+ ],
17654
+ "model_id": "mlx-community/Qwen3-4B-Instruct-2507-{quantization}"
17655
+ }
17656
+ }
17657
+ },
17669
17658
  {
17670
17659
  "model_format": "ggufv2",
17671
17660
  "model_size_in_billions": 235,
@@ -18049,41 +18038,111 @@
18049
18038
  "model_file_name_split_template": "{quantization}/Qwen3-30B-A3B-Instruct-2507-{quantization}-{part}.gguf"
18050
18039
  }
18051
18040
  }
18052
- }
18053
- ],
18054
- "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip('\\n') + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}",
18055
- "stop_token_ids": [
18056
- 151643,
18057
- 151644,
18058
- 151645
18059
- ],
18060
- "stop": [
18061
- "<|endoftext|>",
18062
- "<|im_start|>",
18063
- "<|im_end|>"
18064
- ],
18065
- "tool_parser":"qwen"
18066
- },
18067
- {
18068
- "version": 2,
18069
- "context_length": 262144,
18070
- "model_name": "Qwen3-Thinking",
18071
- "model_lang": [
18072
- "en",
18073
- "zh"
18074
- ],
18075
- "model_ability": [
18076
- "chat",
18077
- "reasoning",
18078
- "tools"
18079
- ],
18080
- "model_description": "we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning",
18081
- "model_specs": [
18041
+ },
18082
18042
  {
18083
- "model_format": "pytorch",
18084
- "model_size_in_billions": 235,
18085
- "activated_size_in_billions": 22,
18086
- "model_src": {
18043
+ "model_format": "ggufv2",
18044
+ "model_size_in_billions": 4,
18045
+ "model_src": {
18046
+ "huggingface": {
18047
+ "quantizations": [
18048
+ "BF16",
18049
+ "IQ4_NL",
18050
+ "IQ4_XS",
18051
+ "Q2_K",
18052
+ "Q2_K_L",
18053
+ "Q3_K_M",
18054
+ "Q3_K_S",
18055
+ "Q4_0",
18056
+ "Q4_1",
18057
+ "Q4_K_M",
18058
+ "Q4_K_S",
18059
+ "Q5_K_M",
18060
+ "Q5_K_S",
18061
+ "Q6_K",
18062
+ "Q8_0",
18063
+ "UD-IQ1_M",
18064
+ "UD-IQ1_S",
18065
+ "UD-IQ2_M",
18066
+ "UD-IQ2_XXS",
18067
+ "UD-IQ3_XXS",
18068
+ "UD-Q2_K_XL",
18069
+ "UD-Q3_K_XL",
18070
+ "UD-Q4_K_XL",
18071
+ "UD-Q5_K_XL",
18072
+ "UD-Q6_K_XL",
18073
+ "UD-Q8_K_XL"
18074
+ ],
18075
+ "model_id": "unsloth/Qwen3-4B-Instruct-2507-GGUF",
18076
+ "model_file_name_template": "Qwen3-4B-Instruct-2507-{quantization}.gguf"
18077
+ },
18078
+ "modelscope": {
18079
+ "quantizations": [
18080
+ "BF16",
18081
+ "IQ4_NL",
18082
+ "IQ4_XS",
18083
+ "Q2_K",
18084
+ "Q2_K_L",
18085
+ "Q3_K_M",
18086
+ "Q3_K_S",
18087
+ "Q4_0",
18088
+ "Q4_1",
18089
+ "Q4_K_M",
18090
+ "Q4_K_S",
18091
+ "Q5_K_M",
18092
+ "Q5_K_S",
18093
+ "Q6_K",
18094
+ "Q8_0",
18095
+ "UD-IQ1_M",
18096
+ "UD-IQ1_S",
18097
+ "UD-IQ2_M",
18098
+ "UD-IQ2_XXS",
18099
+ "UD-IQ3_XXS",
18100
+ "UD-Q2_K_XL",
18101
+ "UD-Q3_K_XL",
18102
+ "UD-Q4_K_XL",
18103
+ "UD-Q5_K_XL",
18104
+ "UD-Q6_K_XL",
18105
+ "UD-Q8_K_XL"
18106
+ ],
18107
+ "model_id": "unsloth/Qwen3-4B-Instruct-2507-GGUF",
18108
+ "model_file_name_template": "Qwen3-4B-Instruct-2507-{quantization}.gguf"
18109
+ }
18110
+ }
18111
+ }
18112
+ ],
18113
+ "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip('\\n') + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}",
18114
+ "stop_token_ids": [
18115
+ 151643,
18116
+ 151644,
18117
+ 151645
18118
+ ],
18119
+ "stop": [
18120
+ "<|endoftext|>",
18121
+ "<|im_start|>",
18122
+ "<|im_end|>"
18123
+ ],
18124
+ "tool_parser": "qwen"
18125
+ },
18126
+ {
18127
+ "version": 2,
18128
+ "context_length": 262144,
18129
+ "model_name": "Qwen3-Thinking",
18130
+ "model_lang": [
18131
+ "en",
18132
+ "zh"
18133
+ ],
18134
+ "model_ability": [
18135
+ "chat",
18136
+ "reasoning",
18137
+ "tools"
18138
+ ],
18139
+ "model_description": "we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning",
18140
+ "model_specs": [
18141
+ {
18142
+ "model_format": "pytorch",
18143
+ "model_size_in_billions": 235,
18144
+ "activated_size_in_billions": 22,
18145
+ "model_src": {
18087
18146
  "huggingface": {
18088
18147
  "quantizations": [
18089
18148
  "none"
@@ -18117,6 +18176,24 @@
18117
18176
  }
18118
18177
  }
18119
18178
  },
18179
+ {
18180
+ "model_format": "pytorch",
18181
+ "model_size_in_billions": 4,
18182
+ "model_src": {
18183
+ "huggingface": {
18184
+ "quantizations": [
18185
+ "none"
18186
+ ],
18187
+ "model_id": "Qwen/Qwen3-4B-Thinking-2507"
18188
+ },
18189
+ "modelscope": {
18190
+ "quantizations": [
18191
+ "none"
18192
+ ],
18193
+ "model_id": "Qwen/Qwen3-4B-Thinking-2507"
18194
+ }
18195
+ }
18196
+ },
18120
18197
  {
18121
18198
  "model_format": "fp8",
18122
18199
  "model_size_in_billions": 235,
@@ -18155,6 +18232,24 @@
18155
18232
  }
18156
18233
  }
18157
18234
  },
18235
+ {
18236
+ "model_format": "fp8",
18237
+ "model_size_in_billions": 4,
18238
+ "model_src": {
18239
+ "huggingface": {
18240
+ "quantizations": [
18241
+ "none"
18242
+ ],
18243
+ "model_id": "Qwen/Qwen3-4B-Thinking-2507-FP8"
18244
+ },
18245
+ "modelscope": {
18246
+ "quantizations": [
18247
+ "none"
18248
+ ],
18249
+ "model_id": "Qwen/Qwen3-4B-Thinking-2507-FP8"
18250
+ }
18251
+ }
18252
+ },
18158
18253
  {
18159
18254
  "model_format": "gptq",
18160
18255
  "model_size_in_billions": 235,
@@ -18193,6 +18288,26 @@
18193
18288
  }
18194
18289
  }
18195
18290
  },
18291
+ {
18292
+ "model_format": "gptq",
18293
+ "model_size_in_billions": 4,
18294
+ "model_src": {
18295
+ "huggingface": {
18296
+ "quantizations": [
18297
+ "Int4",
18298
+ "Int8"
18299
+ ],
18300
+ "model_id": "JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}"
18301
+ },
18302
+ "modelscope": {
18303
+ "quantizations": [
18304
+ "Int4",
18305
+ "Int8"
18306
+ ],
18307
+ "model_id": "JunHowie/Qwen3-4B-Thinking-2507-GPTQ-{quantization}"
18308
+ }
18309
+ }
18310
+ },
18196
18311
  {
18197
18312
  "model_format": "awq",
18198
18313
  "model_size_in_billions": 235,
@@ -18231,6 +18346,24 @@
18231
18346
  }
18232
18347
  }
18233
18348
  },
18349
+ {
18350
+ "model_format": "awq",
18351
+ "model_size_in_billions": 4,
18352
+ "model_src": {
18353
+ "huggingface": {
18354
+ "quantizations": [
18355
+ "Int4"
18356
+ ],
18357
+ "model_id": "Eslzzyl/Qwen3-4B-Thinking-2507-AWQ"
18358
+ },
18359
+ "modelscope": {
18360
+ "quantizations": [
18361
+ "Int4"
18362
+ ],
18363
+ "model_id": "Eslzzyl/Qwen3-4B-Thinking-2507-AWQ"
18364
+ }
18365
+ }
18366
+ },
18234
18367
  {
18235
18368
  "model_format": "mlx",
18236
18369
  "model_size_in_billions": 235,
@@ -18277,6 +18410,30 @@
18277
18410
  }
18278
18411
  }
18279
18412
  },
18413
+ {
18414
+ "model_format": "mlx",
18415
+ "model_size_in_billions": 4,
18416
+ "model_src": {
18417
+ "huggingface": {
18418
+ "quantizations": [
18419
+ "4bit",
18420
+ "5bit",
18421
+ "6bit",
18422
+ "8bit"
18423
+ ],
18424
+ "model_id": "mlx-community/Qwen3-4B-Thinking-2507-{quantization}"
18425
+ },
18426
+ "modelscope": {
18427
+ "quantizations": [
18428
+ "4bit",
18429
+ "5bit",
18430
+ "6bit",
18431
+ "8bit"
18432
+ ],
18433
+ "model_id": "mlx-community/Qwen3-4B-Thinking-2507-{quantization}"
18434
+ }
18435
+ }
18436
+ },
18280
18437
  {
18281
18438
  "model_format": "ggufv2",
18282
18439
  "model_size_in_billions": 235,
@@ -18660,6 +18817,76 @@
18660
18817
  "model_file_name_split_template": "{quantization}/Qwen3-30B-A3B-Thinking-2507-{quantization}-{part}.gguf"
18661
18818
  }
18662
18819
  }
18820
+ },
18821
+ {
18822
+ "model_format": "ggufv2",
18823
+ "model_size_in_billions": 4,
18824
+ "model_src": {
18825
+ "huggingface": {
18826
+ "quantizations": [
18827
+ "BF16",
18828
+ "IQ4_NL",
18829
+ "IQ4_XS",
18830
+ "Q2_K",
18831
+ "Q2_K_L",
18832
+ "Q3_K_M",
18833
+ "Q3_K_S",
18834
+ "Q4_0",
18835
+ "Q4_1",
18836
+ "Q4_K_M",
18837
+ "Q4_K_S",
18838
+ "Q5_K_M",
18839
+ "Q5_K_S",
18840
+ "Q6_K",
18841
+ "Q8_0",
18842
+ "UD-IQ1_M",
18843
+ "UD-IQ1_S",
18844
+ "UD-IQ2_M",
18845
+ "UD-IQ2_XXS",
18846
+ "UD-IQ3_XXS",
18847
+ "UD-Q2_K_XL",
18848
+ "UD-Q3_K_XL",
18849
+ "UD-Q4_K_XL",
18850
+ "UD-Q5_K_XL",
18851
+ "UD-Q6_K_XL",
18852
+ "UD-Q8_K_XL"
18853
+ ],
18854
+ "model_id": "unsloth/Qwen3-4B-Thinking-2507-GGUF",
18855
+ "model_file_name_template": "Qwen3-4B-Thinking-2507-{quantization}.gguf"
18856
+ },
18857
+ "modelscope": {
18858
+ "quantizations": [
18859
+ "BF16",
18860
+ "IQ4_NL",
18861
+ "IQ4_XS",
18862
+ "Q2_K",
18863
+ "Q2_K_L",
18864
+ "Q3_K_M",
18865
+ "Q3_K_S",
18866
+ "Q4_0",
18867
+ "Q4_1",
18868
+ "Q4_K_M",
18869
+ "Q4_K_S",
18870
+ "Q5_K_M",
18871
+ "Q5_K_S",
18872
+ "Q6_K",
18873
+ "Q8_0",
18874
+ "UD-IQ1_M",
18875
+ "UD-IQ1_S",
18876
+ "UD-IQ2_M",
18877
+ "UD-IQ2_XXS",
18878
+ "UD-IQ3_XXS",
18879
+ "UD-Q2_K_XL",
18880
+ "UD-Q3_K_XL",
18881
+ "UD-Q4_K_XL",
18882
+ "UD-Q5_K_XL",
18883
+ "UD-Q6_K_XL",
18884
+ "UD-Q8_K_XL"
18885
+ ],
18886
+ "model_id": "unsloth/Qwen3-4B-Thinking-2507-GGUF",
18887
+ "model_file_name_template": "Qwen3-4B-Thinking-2507-{quantization}.gguf"
18888
+ }
18889
+ }
18663
18890
  }
18664
18891
  ],
18665
18892
  "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- messages[0].content + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = '' %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip('\\n') + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n<think>\\n' }}\n{%- endif %}",
@@ -18675,7 +18902,7 @@
18675
18902
  ],
18676
18903
  "reasoning_start_tag": "<think>",
18677
18904
  "reasoning_end_tag": "</think>",
18678
- "tool_parser":"qwen"
18905
+ "tool_parser": "qwen"
18679
18906
  },
18680
18907
  {
18681
18908
  "version": 2,
@@ -19459,7 +19686,7 @@
19459
19686
  "<|endoftext|>",
19460
19687
  "<|im_end|>"
19461
19688
  ],
19462
- "tool_parser":"qwen"
19689
+ "tool_parser": "qwen"
19463
19690
  },
19464
19691
  {
19465
19692
  "version": 2,
@@ -20453,7 +20680,7 @@
20453
20680
  },
20454
20681
  {
20455
20682
  "model_format": "ggufv2",
20456
- "model_size_in_billions": "0_3",
20683
+ "model_size_in_billions": "0_3",
20457
20684
  "model_src": {
20458
20685
  "huggingface": {
20459
20686
  "quantizations": [
@@ -20638,25 +20865,25 @@
20638
20865
  "Q8_0"
20639
20866
  ],
20640
20867
  "quantization_parts": {
20641
- "Q2_K": [
20868
+ "Q2_K": [
20642
20869
  "00001-of-00003",
20643
20870
  "00002-of-00003",
20644
20871
  "00003-of-00003"
20645
20872
  ],
20646
- "Q4_K_M": [
20873
+ "Q4_K_M": [
20647
20874
  "00001-of-00004",
20648
20875
  "00002-of-00004",
20649
20876
  "00003-of-00004",
20650
20877
  "00004-of-00004"
20651
20878
  ],
20652
- "Q6_K": [
20879
+ "Q6_K": [
20653
20880
  "00001-of-00005",
20654
20881
  "00002-of-00005",
20655
20882
  "00003-of-00005",
20656
20883
  "00004-of-00005",
20657
20884
  "00005-of-00005"
20658
20885
  ],
20659
- "Q8_0": [
20886
+ "Q8_0": [
20660
20887
  "00001-of-00007",
20661
20888
  "00002-of-00007",
20662
20889
  "00003-of-00007",
@@ -20678,25 +20905,25 @@
20678
20905
  "Q8_0"
20679
20906
  ],
20680
20907
  "quantization_parts": {
20681
- "Q2_K": [
20908
+ "Q2_K": [
20682
20909
  "00001-of-00003",
20683
20910
  "00002-of-00003",
20684
20911
  "00003-of-00003"
20685
20912
  ],
20686
- "Q4_K_M": [
20913
+ "Q4_K_M": [
20687
20914
  "00001-of-00004",
20688
20915
  "00002-of-00004",
20689
20916
  "00003-of-00004",
20690
20917
  "00004-of-00004"
20691
20918
  ],
20692
- "Q6_K": [
20919
+ "Q6_K": [
20693
20920
  "00001-of-00005",
20694
20921
  "00002-of-00005",
20695
20922
  "00003-of-00005",
20696
20923
  "00004-of-00005",
20697
20924
  "00005-of-00005"
20698
20925
  ],
20699
- "Q8_0": [
20926
+ "Q8_0": [
20700
20927
  "00001-of-00007",
20701
20928
  "00002-of-00007",
20702
20929
  "00003-of-00007",
@@ -21266,7 +21493,7 @@
21266
21493
  }
21267
21494
  }
21268
21495
  ],
21269
- "chat_template": "{#-\n In addition to the normal inputs of `messages` and `tools`, this template also accepts the\n following kwargs:\n - \"builtin_tools\": A list, can contain \"browser\" and/or \"python\".\n - \"model_identity\": A string that optionally describes the model identity.\n - \"reasoning_effort\": A string that describes the reasoning effort, defaults to \"medium\".\n #}\n\n{#- Tool Definition Rendering ============================================== #}\n{%- macro render_typescript_type(param_spec, required_params, is_nullable=false) -%}\n {%- if param_spec.type == \"array\" -%}\n {%- if param_spec['items'] -%}\n {%- if param_spec['items']['type'] == \"string\" -%}\n {{- \"string[]\" }}\n {%- elif param_spec['items']['type'] == \"number\" -%}\n {{- \"number[]\" }}\n {%- elif param_spec['items']['type'] == \"integer\" -%}\n {{- \"number[]\" }}\n {%- elif param_spec['items']['type'] == \"boolean\" -%}\n {{- \"boolean[]\" }}\n {%- else -%}\n {%- set inner_type = render_typescript_type(param_spec['items'], required_params) -%}\n {%- if inner_type == \"object | object\" or inner_type|length > 50 -%}\n {{- \"any[]\" }}\n {%- else -%}\n {{- inner_type + \"[]\" }}\n {%- endif -%}\n {%- endif -%}\n {%- if param_spec.nullable -%}\n {{- \" | null\" }}\n {%- endif -%}\n {%- else -%}\n {{- \"any[]\" }}\n {%- if param_spec.nullable -%}\n {{- \" | null\" }}\n {%- endif -%}\n {%- endif -%}\n {%- 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 -%}\n {#- Handle array of types like [\"object\", \"object\"] from Union[dict, list] #}\n {%- if param_spec.type | length > 1 -%}\n {{- param_spec.type | join(\" | \") }}\n {%- else -%}\n {{- param_spec.type[0] }}\n {%- endif -%}\n {%- elif param_spec.oneOf -%}\n {#- Handle oneOf schemas - check for complex unions and fallback to any #}\n {%- set has_object_variants = false -%}\n {%- for variant in param_spec.oneOf -%}\n {%- if variant.type == \"object\" -%}\n {%- set has_object_variants = true -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if has_object_variants and param_spec.oneOf|length > 1 -%}\n {{- \"any\" }}\n {%- else -%}\n {%- for variant in param_spec.oneOf -%}\n {{- render_typescript_type(variant, required_params) -}}\n {%- if variant.description %}\n {{- \"// \" + variant.description }}\n {%- endif -%}\n {%- if variant.default is defined %}\n {{ \"// default: \" + variant.default|tojson }}\n {%- endif -%}\n {%- if not loop.last %}\n {{- \" | \" }}\n {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n {%- elif param_spec.type == \"string\" -%}\n {%- if param_spec.enum -%}\n {{- '\"' + param_spec.enum|join('\" | \"') + '\"' -}}\n {%- else -%}\n {{- \"string\" }}\n {%- if param_spec.nullable %}\n {{- \" | null\" }}\n {%- endif -%}\n {%- endif -%}\n {%- elif param_spec.type == \"number\" -%}\n {{- \"number\" }}\n {%- elif param_spec.type == \"integer\" -%}\n {{- \"number\" }}\n {%- elif param_spec.type == \"boolean\" -%}\n {{- \"boolean\" }}\n\n {%- elif param_spec.type == \"object\" -%}\n {%- if param_spec.properties -%}\n {{- \"{\n\" }}\n {%- for prop_name, prop_spec in param_spec.properties.items() -%}\n {{- prop_name -}}\n {%- if prop_name not in (param_spec.required or []) -%}\n {{- \"?\" }}\n {%- endif -%}\n {{- \": \" }}\n {{ render_typescript_type(prop_spec, param_spec.required or []) }}\n {%- if not loop.last -%}\n {{-\", \" }}\n {%- endif -%}\n {%- endfor -%}\n {{- \"}\" }}\n {%- else -%}\n {{- \"object\" }}\n {%- endif -%}\n {%- else -%}\n {{- \"any\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{%- macro render_tool_namespace(namespace_name, tools) -%}\n {{- \"## \" + namespace_name + \"\n\n\" }}\n {{- \"namespace \" + namespace_name + \" {\n\n\" }}\n {%- for tool in tools %}\n {%- set tool = tool.function %}\n {{- \"// \" + tool.description + \"\n\" }}\n {{- \"type \"+ tool.name + \" = \" }}\n {%- if tool.parameters and tool.parameters.properties %}\n {{- \"(_: {\n\" }}\n {%- for param_name, param_spec in tool.parameters.properties.items() %}\n {%- if param_spec.description %}\n {{- \"// \" + param_spec.description + \"\n\" }}\n {%- endif %}\n {{- param_name }}\n {%- if param_name not in (tool.parameters.required or []) -%}\n {{- \"?\" }}\n {%- endif -%}\n {{- \": \" }}\n {{- render_typescript_type(param_spec, tool.parameters.required or []) }}\n {%- if param_spec.default is defined -%}\n {%- if param_spec.enum %}\n {{- \", // default: \" + param_spec.default }}\n {%- elif param_spec.oneOf %}\n {{- \"// default: \" + param_spec.default }}\n {%- else %}\n {{- \", // default: \" + param_spec.default|tojson }}\n {%- endif -%}\n {%- endif -%}\n {%- if not loop.last %}\n {{- \",\n\" }}\n {%- else %}\n {{- \"\n\" }}\n {%- endif -%}\n {%- endfor %}\n {{- \"}) => any;\n\n\" }}\n {%- else -%}\n {{- \"() => any;\n\n\" }}\n {%- endif -%}\n {%- endfor %}\n {{- \"} // namespace \" + namespace_name }}\n{%- endmacro -%}\n\n{%- macro render_builtin_tools(browser_tool, python_tool) -%}\n {%- if browser_tool %}\n {{- \"## browser\n\n\" }}\n {{- \"// Tool for browsing.\n\" }}\n {{- \"// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.\n\" }}\n {{- \"// Cite information from the tool using the following format:\n\" }}\n {{- \"// `\u3010{cursor}\u2020L{line_start}(-L{line_end})?\u3011`, for example: `\u30106\u2020L9-L11\u3011` or `\u30108\u2020L3\u3011`.\n\" }}\n {{- \"// Do not quote more than 10 words directly from the tool output.\n\" }}\n {{- \"// sources=web (default: web)\n\" }}\n {{- \"namespace browser {\n\n\" }}\n {{- \"// Searches for information related to `query` and displays `topn` results.\n\" }}\n {{- \"type search = (_: {\n\" }}\n {{- \"query: string,\n\" }}\n {{- \"topn?: number, // default: 10\n\" }}\n {{- \"source?: string,\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.\n\" }}\n {{- \"// Valid link ids are displayed with the formatting: `\u3010{id}\u2020.*\u3011`.\n\" }}\n {{- \"// If `cursor` is not provided, the most recent page is implied.\n\" }}\n {{- \"// If `id` is a string, it is treated as a fully qualified URL associated with `source`.\n\" }}\n {{- \"// 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\" }}\n {{- \"// Use this function without `id` to scroll to a new location of an opened page.\n\" }}\n {{- \"type open = (_: {\n\" }}\n {{- \"id?: number | string, // default: -1\n\" }}\n {{- \"cursor?: number, // default: -1\n\" }}\n {{- \"loc?: number, // default: -1\n\" }}\n {{- \"num_lines?: number, // default: -1\n\" }}\n {{- \"view_source?: boolean, // default: false\n\" }}\n {{- \"source?: string,\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.\n\" }}\n {{- \"type find = (_: {\n\" }}\n {{- \"pattern: string,\n\" }}\n {{- \"cursor?: number, // default: -1\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"} // namespace browser\n\n\" }}\n {%- endif -%}\n\n {%- if python_tool %}\n {{- \"## python\n\n\" }}\n {{- \"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\" }}\n {{- \"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\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{#- System Message Construction ============================================ #}\n{%- macro build_system_message() -%}\n {%- if model_identity is not defined %}\n {%- set model_identity = \"You are ChatGPT, a large language model trained by OpenAI.\" %}\n {%- endif %}\n {{- model_identity + \"\n\" }}\n {{- \"Knowledge cutoff: 2024-06\n\" }}\n {{- \"Current date: \" + strftime_now(\"%Y-%m-%d\") + \"\n\n\" }}\n {%- if reasoning_effort is not defined %}\n {%- set reasoning_effort = \"medium\" %}\n {%- endif %}\n {{- \"Reasoning: \" + reasoning_effort + \"\n\n\" }}\n {%- if builtin_tools %}\n {{- \"# Tools\n\n\" }}\n {%- set available_builtin_tools = namespace(browser=false, python=false) %}\n {%- for tool in builtin_tools %}\n {%- if tool == \"browser\" %}\n {%- set available_builtin_tools.browser = true %}\n {%- elif tool == \"python\" %}\n {%- set available_builtin_tools.python = true %}\n {%- endif %}\n {%- endfor %}\n {{- render_builtin_tools(available_builtin_tools.browser, available_builtin_tools.python) }}\n {%- endif -%}\n {{- \"# Valid channels: analysis, commentary, final. Channel must be included for every message.\" }}\n {%- if tools -%}\n {{- \"\nCalls to these tools must go to the commentary channel: 'functions'.\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{#- Main Template Logic ================================================= #}\n{#- Set defaults #}\n\n{#- Render system message #}\n{{- \"<|start|>system<|message|>\" }}\n{{- build_system_message() }}\n{{- \"<|end|>\" }}\n\n{#- Extract developer message #}\n{%- if messages[0].role == \"developer\" or messages[0].role == \"system\" %}\n {%- set developer_message = messages[0].content %}\n {%- set loop_messages = messages[1:] %}\n{%- else %}\n {%- set developer_message = \"\" %}\n {%- set loop_messages = messages %}\n{%- endif %}\n\n{#- Render developer message #}\n{%- if developer_message or tools %}\n {{- \"<|start|>developer<|message|>\" }}\n {%- if developer_message %}\n {{- \"# Instructions\n\n\" }}\n {{- developer_message }}\n {%- endif %}\n {%- if tools -%}\n {{- \"\n\n\" }}\n {{- \"# Tools\n\n\" }}\n {{- render_tool_namespace(\"functions\", tools) }}\n {%- endif -%}\n {{- \"<|end|>\" }}\n{%- endif %}\n\n{#- Render messages #}\n{%- set last_tool_call = namespace(name=none) %}\n{%- for message in loop_messages -%}\n {#- At this point only assistant/user/tool messages should remain #}\n {%- if message.role == 'assistant' -%}\n {#- Checks to ensure the messages are being passed in the format we expect #}\n {%- if \"content\" in message %}\n {%- if \"<|channel|>analysis<|message|>\" in message.content or \"<|channel|>final<|message|>\" in message.content %}\n {{- 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.\") }}\n {%- endif %}\n {%- endif %}\n {%- if \"thinking\" in message %}\n {%- if \"<|channel|>analysis<|message|>\" in message.thinking or \"<|channel|>final<|message|>\" in message.thinking %}\n {{- 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.\") }}\n {%- endif %}\n {%- endif %}\n {%- if \"tool_calls\" in message %}\n {#- We assume max 1 tool call per message, and so we infer the tool call name #}\n {#- in \"tool\" messages from the most recent assistant tool call name #}\n {%- set tool_call = message.tool_calls[0] %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if message.content and message.thinking %}\n {{- 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.\") }}\n {%- elif message.content %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.content + \"<|end|>\" }}\n {%- elif message.thinking %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.thinking + \"<|end|>\" }}\n {%- endif %}\n {{- \"<|start|>assistant to=\" }}\n {{- \"functions.\" + tool_call.name + \"<|channel|>commentary \" }}\n {{- (tool_call.content_type if tool_call.content_type is defined else \"json\") + \"<|message|>\" }}\n {{- tool_call.arguments|tojson }}\n {{- \"<|call|>\" }}\n {%- set last_tool_call.name = tool_call.name %}\n {%- elif loop.last and not add_generation_prompt %}\n {#- Only render the CoT if the final turn is an assistant turn and add_generation_prompt is false #}\n {#- This is a situation that should only occur in training, never in inference. #}\n {%- if \"thinking\" in message %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.thinking + \"<|end|>\" }}\n {%- endif %}\n {#- <|return|> indicates the end of generation, but <|end|> does not #}\n {#- <|return|> should never be an input to the model, but we include it as the final token #}\n {#- when training, so the model learns to emit it. #}\n {{- \"<|start|>assistant<|channel|>final<|message|>\" + message.content + \"<|return|>\" }}\n {%- else %}\n {#- CoT is dropped during all previous turns, so we never render it for inference #}\n {{- \"<|start|>assistant<|channel|>final<|message|>\" + message.content + \"<|end|>\" }}\n {%- set last_tool_call.name = none %}\n {%- endif %}\n {%- elif message.role == 'tool' -%}\n {%- if last_tool_call.name is none %}\n {{- raise_exception(\"Message has tool role, but there was no previous assistant message with a tool call!\") }}\n {%- endif %}\n {{- \"<|start|>functions.\" + last_tool_call.name }}\n {{- \" to=assistant<|channel|>commentary<|message|>\" + message.content|tojson + \"<|end|>\" }}\n {%- elif message.role == 'user' -%}\n {{- \"<|start|>user<|message|>\" + message.content + \"<|end|>\" }}\n {%- endif -%}\n{%- endfor -%}\n\n{#- Generation prompt #}\n{%- if add_generation_prompt -%}\n<|start|>assistant\n{%- endif -%}",
21496
+ "chat_template": "{#-\n In addition to the normal inputs of `messages` and `tools`, this template also accepts the\n following kwargs:\n - \"builtin_tools\": A list, can contain \"browser\" and/or \"python\".\n - \"model_identity\": A string that optionally describes the model identity.\n - \"reasoning_effort\": A string that describes the reasoning effort, defaults to \"medium\".\n #}\n\n{#- Tool Definition Rendering ============================================== #}\n{%- macro render_typescript_type(param_spec, required_params, is_nullable=false) -%}\n {%- if param_spec.type == \"array\" -%}\n {%- if param_spec['items'] -%}\n {%- if param_spec['items']['type'] == \"string\" -%}\n {{- \"string[]\" }}\n {%- elif param_spec['items']['type'] == \"number\" -%}\n {{- \"number[]\" }}\n {%- elif param_spec['items']['type'] == \"integer\" -%}\n {{- \"number[]\" }}\n {%- elif param_spec['items']['type'] == \"boolean\" -%}\n {{- \"boolean[]\" }}\n {%- else -%}\n {%- set inner_type = render_typescript_type(param_spec['items'], required_params) -%}\n {%- if inner_type == \"object | object\" or inner_type|length > 50 -%}\n {{- \"any[]\" }}\n {%- else -%}\n {{- inner_type + \"[]\" }}\n {%- endif -%}\n {%- endif -%}\n {%- if param_spec.nullable -%}\n {{- \" | null\" }}\n {%- endif -%}\n {%- else -%}\n {{- \"any[]\" }}\n {%- if param_spec.nullable -%}\n {{- \" | null\" }}\n {%- endif -%}\n {%- endif -%}\n {%- 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 -%}\n {#- Handle array of types like [\"object\", \"object\"] from Union[dict, list] #}\n {%- if param_spec.type | length > 1 -%}\n {{- param_spec.type | join(\" | \") }}\n {%- else -%}\n {{- param_spec.type[0] }}\n {%- endif -%}\n {%- elif param_spec.oneOf -%}\n {#- Handle oneOf schemas - check for complex unions and fallback to any #}\n {%- set has_object_variants = false -%}\n {%- for variant in param_spec.oneOf -%}\n {%- if variant.type == \"object\" -%}\n {%- set has_object_variants = true -%}\n {%- endif -%}\n {%- endfor -%}\n {%- if has_object_variants and param_spec.oneOf|length > 1 -%}\n {{- \"any\" }}\n {%- else -%}\n {%- for variant in param_spec.oneOf -%}\n {{- render_typescript_type(variant, required_params) -}}\n {%- if variant.description %}\n {{- \"// \" + variant.description }}\n {%- endif -%}\n {%- if variant.default is defined %}\n {{ \"// default: \" + variant.default|tojson }}\n {%- endif -%}\n {%- if not loop.last %}\n {{- \" | \" }}\n {% endif -%}\n {%- endfor -%}\n {%- endif -%}\n {%- elif param_spec.type == \"string\" -%}\n {%- if param_spec.enum -%}\n {{- '\"' + param_spec.enum|join('\" | \"') + '\"' -}}\n {%- else -%}\n {{- \"string\" }}\n {%- if param_spec.nullable %}\n {{- \" | null\" }}\n {%- endif -%}\n {%- endif -%}\n {%- elif param_spec.type == \"number\" -%}\n {{- \"number\" }}\n {%- elif param_spec.type == \"integer\" -%}\n {{- \"number\" }}\n {%- elif param_spec.type == \"boolean\" -%}\n {{- \"boolean\" }}\n\n {%- elif param_spec.type == \"object\" -%}\n {%- if param_spec.properties -%}\n {{- \"{\n\" }}\n {%- for prop_name, prop_spec in param_spec.properties.items() -%}\n {{- prop_name -}}\n {%- if prop_name not in (param_spec.required or []) -%}\n {{- \"?\" }}\n {%- endif -%}\n {{- \": \" }}\n {{ render_typescript_type(prop_spec, param_spec.required or []) }}\n {%- if not loop.last -%}\n {{-\", \" }}\n {%- endif -%}\n {%- endfor -%}\n {{- \"}\" }}\n {%- else -%}\n {{- \"object\" }}\n {%- endif -%}\n {%- else -%}\n {{- \"any\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{%- macro render_tool_namespace(namespace_name, tools) -%}\n {{- \"## \" + namespace_name + \"\n\n\" }}\n {{- \"namespace \" + namespace_name + \" {\n\n\" }}\n {%- for tool in tools %}\n {%- set tool = tool.function %}\n {{- \"// \" + tool.description + \"\n\" }}\n {{- \"type \"+ tool.name + \" = \" }}\n {%- if tool.parameters and tool.parameters.properties %}\n {{- \"(_: {\n\" }}\n {%- for param_name, param_spec in tool.parameters.properties.items() %}\n {%- if param_spec.description %}\n {{- \"// \" + param_spec.description + \"\n\" }}\n {%- endif %}\n {{- param_name }}\n {%- if param_name not in (tool.parameters.required or []) -%}\n {{- \"?\" }}\n {%- endif -%}\n {{- \": \" }}\n {{- render_typescript_type(param_spec, tool.parameters.required or []) }}\n {%- if param_spec.default is defined -%}\n {%- if param_spec.enum %}\n {{- \", // default: \" + param_spec.default }}\n {%- elif param_spec.oneOf %}\n {{- \"// default: \" + param_spec.default }}\n {%- else %}\n {{- \", // default: \" + param_spec.default|tojson }}\n {%- endif -%}\n {%- endif -%}\n {%- if not loop.last %}\n {{- \",\n\" }}\n {%- else %}\n {{- \"\n\" }}\n {%- endif -%}\n {%- endfor %}\n {{- \"}) => any;\n\n\" }}\n {%- else -%}\n {{- \"() => any;\n\n\" }}\n {%- endif -%}\n {%- endfor %}\n {{- \"} // namespace \" + namespace_name }}\n{%- endmacro -%}\n\n{%- macro render_builtin_tools(browser_tool, python_tool) -%}\n {%- if browser_tool %}\n {{- \"## browser\n\n\" }}\n {{- \"// Tool for browsing.\n\" }}\n {{- \"// The `cursor` appears in brackets before each browsing display: `[{cursor}]`.\n\" }}\n {{- \"// Cite information from the tool using the following format:\n\" }}\n {{- \"// `【{cursor}†L{line_start}(-L{line_end})?】`, for example: `【6†L9-L11】` or `【8†L3】`.\n\" }}\n {{- \"// Do not quote more than 10 words directly from the tool output.\n\" }}\n {{- \"// sources=web (default: web)\n\" }}\n {{- \"namespace browser {\n\n\" }}\n {{- \"// Searches for information related to `query` and displays `topn` results.\n\" }}\n {{- \"type search = (_: {\n\" }}\n {{- \"query: string,\n\" }}\n {{- \"topn?: number, // default: 10\n\" }}\n {{- \"source?: string,\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"// Opens the link `id` from the page indicated by `cursor` starting at line number `loc`, showing `num_lines` lines.\n\" }}\n {{- \"// Valid link ids are displayed with the formatting: `【{id}†.*】`.\n\" }}\n {{- \"// If `cursor` is not provided, the most recent page is implied.\n\" }}\n {{- \"// If `id` is a string, it is treated as a fully qualified URL associated with `source`.\n\" }}\n {{- \"// 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\" }}\n {{- \"// Use this function without `id` to scroll to a new location of an opened page.\n\" }}\n {{- \"type open = (_: {\n\" }}\n {{- \"id?: number | string, // default: -1\n\" }}\n {{- \"cursor?: number, // default: -1\n\" }}\n {{- \"loc?: number, // default: -1\n\" }}\n {{- \"num_lines?: number, // default: -1\n\" }}\n {{- \"view_source?: boolean, // default: false\n\" }}\n {{- \"source?: string,\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"// Finds exact matches of `pattern` in the current page, or the page given by `cursor`.\n\" }}\n {{- \"type find = (_: {\n\" }}\n {{- \"pattern: string,\n\" }}\n {{- \"cursor?: number, // default: -1\n\" }}\n {{- \"}) => any;\n\n\" }}\n {{- \"} // namespace browser\n\n\" }}\n {%- endif -%}\n\n {%- if python_tool %}\n {{- \"## python\n\n\" }}\n {{- \"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\" }}\n {{- \"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\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{#- System Message Construction ============================================ #}\n{%- macro build_system_message() -%}\n {%- if model_identity is not defined %}\n {%- set model_identity = \"You are ChatGPT, a large language model trained by OpenAI.\" %}\n {%- endif %}\n {{- model_identity + \"\n\" }}\n {{- \"Knowledge cutoff: 2024-06\n\" }}\n {{- \"Current date: \" + strftime_now(\"%Y-%m-%d\") + \"\n\n\" }}\n {%- if reasoning_effort is not defined %}\n {%- set reasoning_effort = \"medium\" %}\n {%- endif %}\n {{- \"Reasoning: \" + reasoning_effort + \"\n\n\" }}\n {%- if builtin_tools %}\n {{- \"# Tools\n\n\" }}\n {%- set available_builtin_tools = namespace(browser=false, python=false) %}\n {%- for tool in builtin_tools %}\n {%- if tool == \"browser\" %}\n {%- set available_builtin_tools.browser = true %}\n {%- elif tool == \"python\" %}\n {%- set available_builtin_tools.python = true %}\n {%- endif %}\n {%- endfor %}\n {{- render_builtin_tools(available_builtin_tools.browser, available_builtin_tools.python) }}\n {%- endif -%}\n {{- \"# Valid channels: analysis, commentary, final. Channel must be included for every message.\" }}\n {%- if tools -%}\n {{- \"\nCalls to these tools must go to the commentary channel: 'functions'.\" }}\n {%- endif -%}\n{%- endmacro -%}\n\n{#- Main Template Logic ================================================= #}\n{#- Set defaults #}\n\n{#- Render system message #}\n{{- \"<|start|>system<|message|>\" }}\n{{- build_system_message() }}\n{{- \"<|end|>\" }}\n\n{#- Extract developer message #}\n{%- if messages[0].role == \"developer\" or messages[0].role == \"system\" %}\n {%- set developer_message = messages[0].content %}\n {%- set loop_messages = messages[1:] %}\n{%- else %}\n {%- set developer_message = \"\" %}\n {%- set loop_messages = messages %}\n{%- endif %}\n\n{#- Render developer message #}\n{%- if developer_message or tools %}\n {{- \"<|start|>developer<|message|>\" }}\n {%- if developer_message %}\n {{- \"# Instructions\n\n\" }}\n {{- developer_message }}\n {%- endif %}\n {%- if tools -%}\n {{- \"\n\n\" }}\n {{- \"# Tools\n\n\" }}\n {{- render_tool_namespace(\"functions\", tools) }}\n {%- endif -%}\n {{- \"<|end|>\" }}\n{%- endif %}\n\n{#- Render messages #}\n{%- set last_tool_call = namespace(name=none) %}\n{%- for message in loop_messages -%}\n {#- At this point only assistant/user/tool messages should remain #}\n {%- if message.role == 'assistant' -%}\n {#- Checks to ensure the messages are being passed in the format we expect #}\n {%- if \"content\" in message %}\n {%- if \"<|channel|>analysis<|message|>\" in message.content or \"<|channel|>final<|message|>\" in message.content %}\n {{- 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.\") }}\n {%- endif %}\n {%- endif %}\n {%- if \"thinking\" in message %}\n {%- if \"<|channel|>analysis<|message|>\" in message.thinking or \"<|channel|>final<|message|>\" in message.thinking %}\n {{- 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.\") }}\n {%- endif %}\n {%- endif %}\n {%- if \"tool_calls\" in message %}\n {#- We assume max 1 tool call per message, and so we infer the tool call name #}\n {#- in \"tool\" messages from the most recent assistant tool call name #}\n {%- set tool_call = message.tool_calls[0] %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if message.content and message.thinking %}\n {{- 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.\") }}\n {%- elif message.content %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.content + \"<|end|>\" }}\n {%- elif message.thinking %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.thinking + \"<|end|>\" }}\n {%- endif %}\n {{- \"<|start|>assistant to=\" }}\n {{- \"functions.\" + tool_call.name + \"<|channel|>commentary \" }}\n {{- (tool_call.content_type if tool_call.content_type is defined else \"json\") + \"<|message|>\" }}\n {{- tool_call.arguments|tojson }}\n {{- \"<|call|>\" }}\n {%- set last_tool_call.name = tool_call.name %}\n {%- elif loop.last and not add_generation_prompt %}\n {#- Only render the CoT if the final turn is an assistant turn and add_generation_prompt is false #}\n {#- This is a situation that should only occur in training, never in inference. #}\n {%- if \"thinking\" in message %}\n {{- \"<|start|>assistant<|channel|>analysis<|message|>\" + message.thinking + \"<|end|>\" }}\n {%- endif %}\n {#- <|return|> indicates the end of generation, but <|end|> does not #}\n {#- <|return|> should never be an input to the model, but we include it as the final token #}\n {#- when training, so the model learns to emit it. #}\n {{- \"<|start|>assistant<|channel|>final<|message|>\" + message.content + \"<|return|>\" }}\n {%- else %}\n {#- CoT is dropped during all previous turns, so we never render it for inference #}\n {{- \"<|start|>assistant<|channel|>final<|message|>\" + message.content + \"<|end|>\" }}\n {%- set last_tool_call.name = none %}\n {%- endif %}\n {%- elif message.role == 'tool' -%}\n {%- if last_tool_call.name is none %}\n {{- raise_exception(\"Message has tool role, but there was no previous assistant message with a tool call!\") }}\n {%- endif %}\n {{- \"<|start|>functions.\" + last_tool_call.name }}\n {{- \" to=assistant<|channel|>commentary<|message|>\" + message.content|tojson + \"<|end|>\" }}\n {%- elif message.role == 'user' -%}\n {{- \"<|start|>user<|message|>\" + message.content + \"<|end|>\" }}\n {%- endif -%}\n{%- endfor -%}\n\n{#- Generation prompt #}\n{%- if add_generation_prompt -%}\n<|start|>assistant\n{%- endif -%}",
21270
21497
  "stop_token_ids": [
21271
21498
  200002,
21272
21499
  199999
@@ -21361,6 +21588,116 @@
21361
21588
  "<|im_end|>"
21362
21589
  ]
21363
21590
  },
21591
+ {
21592
+ "version": 2,
21593
+ "context_length": 131072,
21594
+ "model_name": "Deepseek-V3.1",
21595
+ "model_lang": [
21596
+ "en",
21597
+ "zh"
21598
+ ],
21599
+ "model_ability": [
21600
+ "chat",
21601
+ "reasoning",
21602
+ "hybrid",
21603
+ "tools"
21604
+ ],
21605
+ "model_description": "DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.",
21606
+ "model_specs": [
21607
+ {
21608
+ "model_format": "pytorch",
21609
+ "model_size_in_billions": 671,
21610
+ "activated_size_in_billions": 37,
21611
+ "model_src": {
21612
+ "huggingface": {
21613
+ "quantizations": [
21614
+ "none"
21615
+ ],
21616
+ "model_id": "deepseek-ai/DeepSeek-V3.1"
21617
+ },
21618
+ "modelscope": {
21619
+ "quantizations": [
21620
+ "none"
21621
+ ],
21622
+ "model_id": "deepseek-ai/DeepSeek-V3.1"
21623
+ }
21624
+ }
21625
+ },
21626
+ {
21627
+ "model_format": "gptq",
21628
+ "model_size_in_billions": 671,
21629
+ "activated_size_in_billions": 37,
21630
+ "model_src": {
21631
+ "huggingface": {
21632
+ "quantizations": [
21633
+ "Int4"
21634
+ ],
21635
+ "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
21636
+ },
21637
+ "modelscope": {
21638
+ "quantizations": [
21639
+ "Int4"
21640
+ ],
21641
+ "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
21642
+ }
21643
+ }
21644
+ },
21645
+ {
21646
+ "model_format": "awq",
21647
+ "model_size_in_billions": 671,
21648
+ "activated_size_in_billions": 37,
21649
+ "model_src": {
21650
+ "huggingface": {
21651
+ "quantizations": [
21652
+ "Int4"
21653
+ ],
21654
+ "model_id": "QuantTrio/DeepSeek-V3.1-AWQ"
21655
+ },
21656
+ "modelscope": {
21657
+ "quantizations": [
21658
+ "Int4"
21659
+ ],
21660
+ "model_id": "tclf90/DeepSeek-V3.1-AWQ"
21661
+ }
21662
+ }
21663
+ },
21664
+ {
21665
+ "model_format": "mlx",
21666
+ "model_size_in_billions": 671,
21667
+ "activated_size_in_billions": 37,
21668
+ "model_src": {
21669
+ "huggingface": {
21670
+ "quantizations": [
21671
+ "8bit",
21672
+ "4bit"
21673
+ ],
21674
+ "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
21675
+ },
21676
+ "modelscope": {
21677
+ "quantizations": [
21678
+ "8bit",
21679
+ "4bit"
21680
+ ],
21681
+ "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
21682
+ }
21683
+ }
21684
+ }
21685
+ ],
21686
+ "chat_template": "{% if not add_generation_prompt is defined %}{% set add_generation_prompt = false %}{% endif %}{% if not thinking is defined %}{% set thinking = false %}{% endif %}{% set ns = namespace(is_first=false, is_tool=false, system_prompt='', is_first_sp=true, is_last_user=false) %}{%- for message in messages %}{%- if message['role'] == 'system' %}{%- if ns.is_first_sp %}{% set ns.system_prompt = ns.system_prompt + message['content'] %}{% set ns.is_first_sp = false %}{%- else %}{% set ns.system_prompt = ns.system_prompt + '\n\n' + message['content'] %}{%- endif %}{%- endif %}{%- endfor %}{{ bos_token }}{{ ns.system_prompt }}{%- for message in messages %}{%- if message['role'] == 'user' %}{%- set ns.is_tool = false -%}{%- set ns.is_first = false -%}{%- set ns.is_last_user = true -%}{{'<|User|>' + message['content']}}{%- endif %}{%- if message['role'] == 'assistant' and message['tool_calls'] is defined and message['tool_calls'] is not none %}{%- if ns.is_last_user %}{{'<|Assistant|></think>'}}{%- endif %}{%- set ns.is_last_user = false -%}{%- set ns.is_first = false %}{%- set ns.is_tool = false -%}{%- for tool in message['tool_calls'] %}{%- if not ns.is_first %}{%- if message['content'] is none %}{{'<|tool▁calls▁begin|><|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- else %}{{message['content'] + '<|tool▁calls▁begin|><|tool▁call▁begin|>' + tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- endif %}{%- set ns.is_first = true -%}{%- else %}{{'<|tool▁call▁begin|>'+ tool['function']['name'] + '<|tool▁sep|>' + tool['function']['arguments'] + '<|tool▁call▁end|>'}}{%- endif %}{%- endfor %}{{'<|tool▁calls▁end|><|end▁of▁sentence|>'}}{%- endif %}{%- if message['role'] == 'assistant' and (message['tool_calls'] is not defined or message['tool_calls'] is none) %}{%- if ns.is_last_user %}{{'<|Assistant|>'}}{%- if message['prefix'] is defined and message['prefix'] and thinking %}{{'<think>'}} {%- else %}{{'</think>'}}{%- endif %}{%- endif %}{%- set ns.is_last_user = false -%}{%- if ns.is_tool %}{{message['content'] + '<|end▁of▁sentence|>'}}{%- set ns.is_tool = false -%}{%- else %}{%- set content = message['content'] -%}{%- if '</think>' in content %}{%- set content = content.split('</think>', 1)[1] -%}{%- endif %}{{content + '<|end▁of▁sentence|>'}}{%- endif %}{%- endif %}{%- if message['role'] == 'tool' %}{%- set ns.is_last_user = false -%}{%- set ns.is_tool = true -%}{{'<|tool▁output▁begin|>' + message['content'] + '<|tool▁output▁end|>'}}{%- endif %}{%- endfor -%}{%- if add_generation_prompt and ns.is_last_user and not ns.is_tool %}{{'<|Assistant|>'}}{%- if not thinking %}{{'</think>'}}{%- else %}{{'<think>'}}{%- endif %}{% endif %}",
21687
+ "stop_token_ids": [
21688
+ 1
21689
+ ],
21690
+ "stop": [
21691
+ "<|end▁of▁sentence|>"
21692
+ ],
21693
+ "reasoning_start_tag": "<think>",
21694
+ "reasoning_end_tag": "</think>",
21695
+ "virtualenv": {
21696
+ "packages": [
21697
+ "transformers==4.53.0"
21698
+ ]
21699
+ }
21700
+ },
21364
21701
  {
21365
21702
  "version": 2,
21366
21703
  "context_length": 524288,
@@ -21485,7 +21822,7 @@
21485
21822
  "UD-Q6_K_XL",
21486
21823
  "UD-Q8_K_XL"
21487
21824
  ],
21488
- "quantization_parts": {
21825
+ "quantization_parts": {
21489
21826
  "BF16": [
21490
21827
  "00001-of-00002",
21491
21828
  "00002-of-00002"
@@ -21524,7 +21861,7 @@
21524
21861
  "UD-Q6_K_XL",
21525
21862
  "UD-Q8_K_XL"
21526
21863
  ],
21527
- "quantization_parts": {
21864
+ "quantization_parts": {
21528
21865
  "BF16": [
21529
21866
  "00001-of-00002",
21530
21867
  "00002-of-00002"
@@ -21661,13 +21998,13 @@
21661
21998
  "quantizations": [
21662
21999
  "fp8"
21663
22000
  ],
21664
- "model_id": "QuantTrio/Qwen3-VL-235B-A22B-Instruct-FP8"
22001
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8"
21665
22002
  },
21666
22003
  "modelscope": {
21667
22004
  "quantizations": [
21668
22005
  "fp8"
21669
22006
  ],
21670
- "model_id": "tclf90/Qwen3-VL-235B-A22B-Instruct-FP8"
22007
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8"
21671
22008
  }
21672
22009
  }
21673
22010
  },
@@ -21689,6 +22026,65 @@
21689
22026
  "model_id": "tclf90/Qwen3-VL-235B-A22B-Instruct-AWQ"
21690
22027
  }
21691
22028
  }
22029
+ },
22030
+ {
22031
+ "model_format": "pytorch",
22032
+ "model_size_in_billions": 30,
22033
+ "activated_size_in_billions": 3,
22034
+ "model_src": {
22035
+ "huggingface": {
22036
+ "quantizations": [
22037
+ "none"
22038
+ ],
22039
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Instruct"
22040
+ },
22041
+ "modelscope": {
22042
+ "quantizations": [
22043
+ "none"
22044
+ ],
22045
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Instruct"
22046
+ }
22047
+ }
22048
+ },
22049
+ {
22050
+ "model_format": "fp8",
22051
+ "model_size_in_billions": 30,
22052
+ "activated_size_in_billions": 3,
22053
+ "model_src": {
22054
+ "huggingface": {
22055
+ "quantizations": [
22056
+ "fp8"
22057
+ ],
22058
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Instruct-FP8"
22059
+ },
22060
+ "modelscope": {
22061
+ "quantizations": [
22062
+ "fp8"
22063
+ ],
22064
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Instruct-FP8"
22065
+ }
22066
+ }
22067
+ },
22068
+ {
22069
+ "model_format": "awq",
22070
+ "model_size_in_billions": 30,
22071
+ "activated_size_in_billions": 3,
22072
+ "model_src": {
22073
+ "huggingface": {
22074
+ "quantizations": [
22075
+ "4bit",
22076
+ "8bit"
22077
+ ],
22078
+ "model_id": "cpatonn/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}"
22079
+ },
22080
+ "modelscope": {
22081
+ "quantizations": [
22082
+ "4bit",
22083
+ "8bit"
22084
+ ],
22085
+ "model_id": "cpatonn-mirror/Qwen3-VL-30B-A3B-Instruct-AWQ-{quantization}"
22086
+ }
22087
+ }
21692
22088
  }
21693
22089
  ],
21694
22090
  "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- if messages[0].content is string %}\n {{- messages[0].content }}\n {%- else %}\n {%- for content in messages[0].content %}\n {%- if 'text' in content %}\n {{- content.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {{- '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].content is string %}\n {{- messages[0].content }}\n {%- else %}\n {%- for content in messages[0].content %}\n {%- if 'text' in content %}\n {{- content.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- for message in messages %}\n {%- if message.role == \"user\" %}\n {{- '<|im_start|>' + message.role + '\\n' }}\n {%- if message.content is string %}\n {{- message.content }}\n {%- else %}\n {%- for content in message.content %}\n {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\n <|vision_start|><|image_pad|><|vision_end|>\n {%- elif content.type == 'video' or 'video' in content %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\n <|vision_start|><|video_pad|><|vision_end|>\n {%- elif 'text' in content %}\n {{- content.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"assistant\" %}\n {{- '<|im_start|>' + message.role + '\\n' }}\n {%- if message.content is string %}\n {{- message.content }}\n {%- else %}\n {%- for content_item in message.content %}\n {%- if 'text' in content_item %}\n {{- content_item.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and message.content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {%- if message.content is string %}\n {{- message.content }}\n {%- else %}\n {%- for content in message.content %}\n {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\n <|vision_start|><|image_pad|><|vision_end|>\n {%- elif content.type == 'video' or 'video' in content %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\n <|vision_start|><|video_pad|><|vision_end|>\n {%- elif 'text' in content %}\n {{- content.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n{%- endif %}\n",
@@ -21700,7 +22096,7 @@
21700
22096
  "<|endoftext|>",
21701
22097
  "<|im_end|>"
21702
22098
  ],
21703
- "tool_parser":"qwen"
22099
+ "tool_parser": "qwen"
21704
22100
  },
21705
22101
  {
21706
22102
  "version": 2,
@@ -21746,13 +22142,13 @@
21746
22142
  "quantizations": [
21747
22143
  "fp8"
21748
22144
  ],
21749
- "model_id": "QuantTrio/Qwen3-VL-235B-A22B-Thinking-FP8"
22145
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking-FP8"
21750
22146
  },
21751
22147
  "modelscope": {
21752
22148
  "quantizations": [
21753
22149
  "fp8"
21754
22150
  ],
21755
- "model_id": "tclf90/Qwen3-VL-235B-A22B-Thinking-FP8"
22151
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking-FP8"
21756
22152
  }
21757
22153
  }
21758
22154
  },
@@ -21774,6 +22170,65 @@
21774
22170
  "model_id": "tclf90/Qwen3-VL-235B-A22B-Thinking-AWQ"
21775
22171
  }
21776
22172
  }
22173
+ },
22174
+ {
22175
+ "model_format": "pytorch",
22176
+ "model_size_in_billions": 30,
22177
+ "activated_size_in_billions": 3,
22178
+ "model_src": {
22179
+ "huggingface": {
22180
+ "quantizations": [
22181
+ "none"
22182
+ ],
22183
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Thinking"
22184
+ },
22185
+ "modelscope": {
22186
+ "quantizations": [
22187
+ "none"
22188
+ ],
22189
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Thinking"
22190
+ }
22191
+ }
22192
+ },
22193
+ {
22194
+ "model_format": "fp8",
22195
+ "model_size_in_billions": 30,
22196
+ "activated_size_in_billions": 3,
22197
+ "model_src": {
22198
+ "huggingface": {
22199
+ "quantizations": [
22200
+ "fp8"
22201
+ ],
22202
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Thinking-FP8"
22203
+ },
22204
+ "modelscope": {
22205
+ "quantizations": [
22206
+ "fp8"
22207
+ ],
22208
+ "model_id": "Qwen/Qwen3-VL-30B-A3B-Thinking-FP8"
22209
+ }
22210
+ }
22211
+ },
22212
+ {
22213
+ "model_format": "awq",
22214
+ "model_size_in_billions": 30,
22215
+ "activated_size_in_billions": 3,
22216
+ "model_src": {
22217
+ "huggingface": {
22218
+ "quantizations": [
22219
+ "4bit",
22220
+ "8bit"
22221
+ ],
22222
+ "model_id": "cpatonn/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}"
22223
+ },
22224
+ "modelscope": {
22225
+ "quantizations": [
22226
+ "4bit",
22227
+ "8bit"
22228
+ ],
22229
+ "model_id": "cpatonn-mirror/Qwen3-VL-30B-A3B-Thinking-AWQ-{quantization}"
22230
+ }
22231
+ }
21777
22232
  }
21778
22233
  ],
21779
22234
  "chat_template": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count) %}\n {%- if content is string %}\n {{- content }}\n {%- else %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}Picture {{ image_count.value }}: {% endif -%}\n <|vision_start|><|image_pad|><|vision_end|>\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}Video {{ video_count.value }}: {% endif -%}\n <|vision_start|><|video_pad|><|vision_end|>\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n{%- endmacro %}\n{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {{- render_content(messages[0].content, false) + '\\n\\n' }}\n {%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {{- '<|im_start|>system\\n' + render_content(messages[0].content, false) + '<|im_end|>\\n' }}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" %}\n {%- set content = render_content(message.content, false) %}\n {%- if not(content.startswith('<tool_response>') and content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, True) %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip('\\n') + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}\n {{- '\\n' }}\n {%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n<think>\\n' }}\n{%- endif %}\n",
@@ -21787,7 +22242,7 @@
21787
22242
  ],
21788
22243
  "reasoning_start_tag": "<think>",
21789
22244
  "reasoning_end_tag": "</think>",
21790
- "tool_parser":"qwen"
22245
+ "tool_parser": "qwen"
21791
22246
  },
21792
22247
  {
21793
22248
  "version": 2,
@@ -21897,7 +22352,7 @@
21897
22352
  "<|endoftext|>",
21898
22353
  "<|im_end|>"
21899
22354
  ],
21900
- "tool_parser":"qwen"
22355
+ "tool_parser": "qwen"
21901
22356
  },
21902
22357
  {
21903
22358
  "version": 2,
@@ -22010,6 +22465,214 @@
22010
22465
  ],
22011
22466
  "reasoning_start_tag": "<think>",
22012
22467
  "reasoning_end_tag": "</think>",
22468
+ "tool_parser": "qwen"
22469
+ },
22470
+ {
22471
+ "version": 2,
22472
+ "context_length": 32768,
22473
+ "model_name": "MiniCPM-V-4.5",
22474
+ "model_lang": [
22475
+ "en",
22476
+ "zh"
22477
+ ],
22478
+ "model_ability": [
22479
+ "chat",
22480
+ "vision"
22481
+ ],
22482
+ "model_description": "MiniCPM-V 4.5 is an improved version in the MiniCPM-V series with enhanced multimodal capabilities and better performance.",
22483
+ "model_specs": [
22484
+ {
22485
+ "model_format": "pytorch",
22486
+ "model_size_in_billions": 8,
22487
+ "model_src": {
22488
+ "huggingface": {
22489
+ "quantizations": [
22490
+ "none"
22491
+ ],
22492
+ "model_id": "openbmb/MiniCPM-V-4_5",
22493
+ "model_revision": "main"
22494
+ },
22495
+ "modelscope": {
22496
+ "quantizations": [
22497
+ "none"
22498
+ ],
22499
+ "model_id": "OpenBMB/MiniCPM-V-4_5",
22500
+ "model_revision": "master"
22501
+ }
22502
+ }
22503
+ },
22504
+ {
22505
+ "model_format": "pytorch",
22506
+ "model_size_in_billions": 8,
22507
+ "model_src": {
22508
+ "huggingface": {
22509
+ "quantizations": [
22510
+ "none"
22511
+ ],
22512
+ "model_id": "openbmb/MiniCPM-V-4_5-int4",
22513
+ "model_revision": "main"
22514
+ },
22515
+ "modelscope": {
22516
+ "quantizations": [
22517
+ "none"
22518
+ ],
22519
+ "model_id": "OpenBMB/MiniCPM-V-4_5-int4",
22520
+ "model_revision": "master"
22521
+ }
22522
+ }
22523
+ }
22524
+ ],
22525
+ "chat_template": "{% for message in messages %}{% if loop.first and messages[0]['role'] != 'system' %}{{ '<|im_start|>system\nYou are a helpful assistant.<|im_end|>\n' }}{% endif %}{{'<|im_start|>' + message['role'] + '\n' + message['content'] + '<|im_end|>' + '\n'}}{% endfor %}{% if add_generation_prompt %}{{ '<|im_start|>assistant\n' }}{% endif %}",
22526
+ "stop_token_ids": [
22527
+ 151645,
22528
+ 151643
22529
+ ],
22530
+ "stop": [
22531
+ "<|im_end|>"
22532
+ ],
22533
+ "virtualenv": {
22534
+ "packages": []
22535
+ }
22536
+ },
22537
+ {
22538
+ "version": 2,
22539
+ "context_length": 262144,
22540
+ "model_name": "Qwen3-Omni-Thinking",
22541
+ "model_lang": [
22542
+ "en",
22543
+ "zh"
22544
+ ],
22545
+ "model_ability": [
22546
+ "chat",
22547
+ "vision",
22548
+ "audio",
22549
+ "omni",
22550
+ "reasoning",
22551
+ "tools"
22552
+ ],
22553
+ "model_description": "Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.",
22554
+ "model_specs": [
22555
+ {
22556
+ "model_format": "pytorch",
22557
+ "model_size_in_billions": 30,
22558
+ "activated_size_in_billions": 3,
22559
+ "model_src": {
22560
+ "huggingface": {
22561
+ "quantizations": [
22562
+ "none"
22563
+ ],
22564
+ "model_id": "Qwen/Qwen3-Omni-30B-A3B-Thinking"
22565
+ },
22566
+ "modelscope": {
22567
+ "quantizations": [
22568
+ "none"
22569
+ ],
22570
+ "model_id": "Qwen/Qwen3-Omni-30B-A3B-Thinking"
22571
+ }
22572
+ }
22573
+ },
22574
+ {
22575
+ "model_format": "awq",
22576
+ "model_size_in_billions": 30,
22577
+ "activated_size_in_billions": 3,
22578
+ "model_src": {
22579
+ "huggingface": {
22580
+ "quantizations": [
22581
+ "4bit",
22582
+ "8bit"
22583
+ ],
22584
+ "model_id": "cpatonn/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}"
22585
+ },
22586
+ "modelscope": {
22587
+ "quantizations": [
22588
+ "4bit",
22589
+ "8bit"
22590
+ ],
22591
+ "model_id": "cpatonn-mirror/Qwen3-Omni-30B-A3B-Thinking-AWQ-{quantization}"
22592
+ }
22593
+ }
22594
+ }
22595
+ ],
22596
+ "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}{{- messages[0].content + '\\n\\n' }}{%- endif %}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- if messages[0].content is string %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- else %}\n {%- for content in messages[0].content %}\n {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\n {{- '<|im_start|>system\\n' +\"<|vision_start|><|image_pad|><|vision_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\n {{- '<|im_start|>system\\n' +\"<|audio_start|><|audio_pad|><|audio_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'video' or 'video' in content %}\n {{- '<|im_start|>system\\n' +\"<|vision_start|><|video_pad|><|vision_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'text' %}\n {{- '<|im_start|>system\\n' +content.text+ '<|im_end|>\\n' }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = namespace(text=\"\") %}\n {%- for mcontent in message.content %}\n {%- if mcontent.type == 'image' or 'image' in mcontent or 'image_url' in mcontent %}\n {%- set content.text = content.text~\"<|vision_start|><|image_pad|><|vision_end|>\" %}\n {%- elif mcontent.type == 'audio' or 'audio' in mcontent or 'audio_url' in mcontent %}\n {%- set content.text = content.text~\"<|audio_start|><|audio_pad|><|audio_end|>\" %}\n {%- elif mcontent.type == 'video' or 'video' in mcontent %}\n {%- set content.text = content.text~\"<|vision_start|><|video_pad|><|vision_end|>\" %}\n {%- elif mcontent.type == 'text' %}\n {%- set content.text = content.text~mcontent.text %}\n {%- endif %}\n {%- endfor %}\n {%- set content = content.text %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = \"\" %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip(\"\\n\") + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}{{- '\\n' }}{%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}{{- '<|im_start|>user' }}{%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}{{- '<|im_end|>\\n' }}{%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}{{- '<think>\\n\\n</think>\\n\\n' }}{%- endif %}\n{%- endif %}\n",
22597
+ "stop_token_ids": [
22598
+ 151643,
22599
+ 151645
22600
+ ],
22601
+ "stop": [
22602
+ "<|endoftext|>",
22603
+ "<|im_end|>"
22604
+ ],
22605
+ "reasoning_start_tag": "<think>",
22606
+ "reasoning_end_tag": "</think>",
22607
+ "tool_parser":"qwen"
22608
+ },
22609
+ {
22610
+ "version": 2,
22611
+ "context_length": 262144,
22612
+ "model_name": "Qwen3-Omni-Instruct",
22613
+ "model_lang": [
22614
+ "en",
22615
+ "zh"
22616
+ ],
22617
+ "model_ability": [
22618
+ "chat",
22619
+ "vision",
22620
+ "audio",
22621
+ "omni",
22622
+ "tools"
22623
+ ],
22624
+ "model_description": "Qwen3-Omni is the natively end-to-end multilingual omni-modal foundation models. It processes text, images, audio, and video, and delivers real-time streaming responses in both text and natural speech. We introduce several architectural upgrades to improve performance and efficiency.",
22625
+ "model_specs": [
22626
+ {
22627
+ "model_format": "pytorch",
22628
+ "model_size_in_billions": 30,
22629
+ "activated_size_in_billions": 3,
22630
+ "model_src": {
22631
+ "huggingface": {
22632
+ "quantizations": [
22633
+ "none"
22634
+ ],
22635
+ "model_id": "Qwen/Qwen3-Omni-30B-A3B-Instruct"
22636
+ },
22637
+ "modelscope": {
22638
+ "quantizations": [
22639
+ "none"
22640
+ ],
22641
+ "model_id": "Qwen/Qwen3-Omni-30B-A3B-Instruct"
22642
+ }
22643
+ }
22644
+ },
22645
+ {
22646
+ "model_format": "awq",
22647
+ "model_size_in_billions": 30,
22648
+ "activated_size_in_billions": 3,
22649
+ "model_src": {
22650
+ "huggingface": {
22651
+ "quantizations": [
22652
+ "4bit",
22653
+ "8bit"
22654
+ ],
22655
+ "model_id": "cpatonn/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}"
22656
+ },
22657
+ "modelscope": {
22658
+ "quantizations": [
22659
+ "4bit",
22660
+ "8bit"
22661
+ ],
22662
+ "model_id": "cpatonn-mirror/Qwen3-Omni-30B-A3B-Instruct-AWQ-{quantization}"
22663
+ }
22664
+ }
22665
+ }
22666
+ ],
22667
+ "chat_template": "{%- if tools %}\n {{- '<|im_start|>system\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- if messages[0].content is string %}\n {{- messages[0].content }}\n {%- else %}\n {%- for content in messages[0].content %}\n {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\n {{- \"<|vision_start|><|image_pad|><|vision_end|>\" }}\n {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\n {{- \"<|audio_start|><|audio_pad|><|audio_end|>\" }}\n {%- elif content.type == 'video' or 'video' in content %}\n {{- \"<|vision_start|><|video_pad|><|vision_end|>\" }}\n {%- elif content.type == 'text' %}\n {{- content.text }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- \"# Tools\\n\\nYou may call one or more functions to assist with the user query.\\n\\nYou are provided with function signatures within <tools></tools> XML tags:\\n<tools>\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n</tools>\\n\\nFor each function call, return a json object with function name and arguments within <tool_call></tool_call> XML tags:\\n<tool_call>\\n{\\\"name\\\": <function-name>, \\\"arguments\\\": <args-json-object>}\\n</tool_call><|im_end|>\\n\" }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- if messages[0].content is string %}\n {{- '<|im_start|>system\\n' + messages[0].content + '<|im_end|>\\n' }}\n {%- else %}\n {%- for content in messages[0].content %}\n {%- if content.type == 'image' or 'image' in content or 'image_url' in content %}\n {{- '<|im_start|>system\\n' +\"<|vision_start|><|image_pad|><|vision_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'audio' or 'audio' in content or 'audio_url' in content %}\n {{- '<|im_start|>system\\n' +\"<|audio_start|><|audio_pad|><|audio_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'video' or 'video' in content %}\n {{- '<|im_start|>system\\n' +\"<|vision_start|><|video_pad|><|vision_end|>\"+ '<|im_end|>\\n' }}\n {%- elif content.type == 'text' %}\n {{- '<|im_start|>system\\n' +content.text+ '<|im_end|>\\n' }}\n {%- endif %}\n {%- endfor %}\n {%- endif %}\n {%- endif %}\n{%- endif %}\n{%- set ns = namespace(multi_step_tool=true, last_query_index=messages|length - 1) %}\n{%- for message in messages[::-1] %}\n {%- set index = (messages|length - 1) - loop.index0 %}\n {%- if ns.multi_step_tool and message.role == \"user\" and message.content is string and not(message.content.startswith('<tool_response>') and message.content.endswith('</tool_response>')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n{%- endfor %}\n{%- for message in messages %}\n {%- if message.content is string %}\n {%- set content = message.content %}\n {%- else %}\n {%- set content = namespace(text=\"\") %}\n {%- for mcontent in message.content %}\n {%- if mcontent.type == 'image' or 'image' in mcontent or 'image_url' in mcontent %}\n {%- set content.text = content.text~\"<|vision_start|><|image_pad|><|vision_end|>\" %}\n {%- elif mcontent.type == 'audio' or 'audio' in mcontent or 'audio_url' in mcontent %}\n {%- set content.text = content.text~\"<|audio_start|><|audio_pad|><|audio_end|>\" %}\n {%- elif mcontent.type == 'video' or 'video' in mcontent %}\n {%- set content.text = content.text~\"<|vision_start|><|video_pad|><|vision_end|>\" %}\n {%- elif mcontent.type == 'text' %}\n {%- set content.text = content.text~mcontent.text %}\n {%- endif %}\n {%- endfor %}\n {%- set content = content.text %}\n {%- endif %}\n {%- if (message.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set reasoning_content = \"\" %}\n {%- if message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].rstrip('\\n').split('<think>')[-1].lstrip('\\n') %}\n {%- set content = content.split('</think>')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- if loop.index0 > ns.last_query_index %}\n {%- if loop.last or (not loop.last and reasoning_content) %}\n {{- '<|im_start|>' + message.role + '\\n<think>\\n' + reasoning_content.strip(\"\\n\") + '\\n</think>\\n\\n' + content.lstrip('\\n') }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- if (loop.first and content) or (not loop.first) %}{{- '\\n' }}{%- endif %}\n {%- if tool_call.function %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {{- '<tool_call>\\n{\"name\": \"' }}\n {{- tool_call.name }}\n {{- '\", \"arguments\": ' }}\n {%- if tool_call.arguments is string %}\n {{- tool_call.arguments }}\n {%- else %}\n {{- tool_call.arguments | tojson }}\n {%- endif %}\n {{- '}\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.first or (messages[loop.index0 - 1].role != \"tool\") %}{{- '<|im_start|>user' }}{%- endif %}\n {{- '\\n<tool_response>\\n' }}\n {{- content }}\n {{- '\\n</tool_response>' }}\n {%- if loop.last or (messages[loop.index0 + 1].role != \"tool\") %}{{- '<|im_end|>\\n' }}{%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}{{- '<think>\\n\\n</think>\\n\\n' }}{%- endif %}\n{%- endif %}",
22668
+ "stop_token_ids": [
22669
+ 151643,
22670
+ 151645
22671
+ ],
22672
+ "stop": [
22673
+ "<|endoftext|>",
22674
+ "<|im_end|>"
22675
+ ],
22013
22676
  "tool_parser":"qwen"
22014
22677
  }
22015
22678
  ]