xinference 1.10.0__py3-none-any.whl → 1.11.0__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 (328) hide show
  1. xinference/_version.py +3 -3
  2. xinference/api/restful_api.py +473 -31
  3. xinference/client/restful/async_restful_client.py +178 -8
  4. xinference/client/restful/restful_client.py +151 -3
  5. xinference/core/supervisor.py +99 -53
  6. xinference/core/worker.py +10 -0
  7. xinference/deploy/cmdline.py +15 -0
  8. xinference/model/audio/core.py +21 -6
  9. xinference/model/audio/indextts2.py +166 -0
  10. xinference/model/audio/model_spec.json +58 -21
  11. xinference/model/image/model_spec.json +159 -90
  12. xinference/model/image/stable_diffusion/core.py +13 -4
  13. xinference/model/llm/__init__.py +6 -2
  14. xinference/model/llm/llm_family.json +1299 -174
  15. xinference/model/llm/mlx/distributed_models/core.py +41 -0
  16. xinference/model/llm/mlx/distributed_models/qwen2.py +1 -2
  17. xinference/model/llm/sglang/core.py +44 -11
  18. xinference/model/llm/tool_parsers/deepseek_r1_tool_parser.py +94 -32
  19. xinference/model/llm/tool_parsers/qwen_tool_parser.py +29 -4
  20. xinference/model/llm/transformers/chatglm.py +3 -0
  21. xinference/model/llm/transformers/core.py +129 -36
  22. xinference/model/llm/transformers/multimodal/minicpmv45.py +340 -0
  23. xinference/model/llm/transformers/multimodal/qwen2_vl.py +34 -8
  24. xinference/model/llm/transformers/utils.py +23 -0
  25. xinference/model/llm/utils.py +48 -32
  26. xinference/model/llm/vllm/core.py +207 -72
  27. xinference/model/utils.py +74 -31
  28. xinference/thirdparty/audiotools/__init__.py +10 -0
  29. xinference/thirdparty/audiotools/core/__init__.py +4 -0
  30. xinference/thirdparty/audiotools/core/audio_signal.py +1682 -0
  31. xinference/thirdparty/audiotools/core/display.py +194 -0
  32. xinference/thirdparty/audiotools/core/dsp.py +390 -0
  33. xinference/thirdparty/audiotools/core/effects.py +647 -0
  34. xinference/thirdparty/audiotools/core/ffmpeg.py +211 -0
  35. xinference/thirdparty/audiotools/core/loudness.py +320 -0
  36. xinference/thirdparty/audiotools/core/playback.py +252 -0
  37. xinference/thirdparty/audiotools/core/templates/__init__.py +0 -0
  38. xinference/thirdparty/audiotools/core/templates/headers.html +322 -0
  39. xinference/thirdparty/audiotools/core/templates/pandoc.css +407 -0
  40. xinference/thirdparty/audiotools/core/templates/widget.html +52 -0
  41. xinference/thirdparty/audiotools/core/util.py +671 -0
  42. xinference/thirdparty/audiotools/core/whisper.py +97 -0
  43. xinference/thirdparty/audiotools/data/__init__.py +3 -0
  44. xinference/thirdparty/audiotools/data/datasets.py +517 -0
  45. xinference/thirdparty/audiotools/data/preprocess.py +81 -0
  46. xinference/thirdparty/audiotools/data/transforms.py +1592 -0
  47. xinference/thirdparty/audiotools/metrics/__init__.py +6 -0
  48. xinference/thirdparty/audiotools/metrics/distance.py +131 -0
  49. xinference/thirdparty/audiotools/metrics/quality.py +159 -0
  50. xinference/thirdparty/audiotools/metrics/spectral.py +247 -0
  51. xinference/thirdparty/audiotools/ml/__init__.py +5 -0
  52. xinference/thirdparty/audiotools/ml/accelerator.py +184 -0
  53. xinference/thirdparty/audiotools/ml/decorators.py +440 -0
  54. xinference/thirdparty/audiotools/ml/experiment.py +90 -0
  55. xinference/thirdparty/audiotools/ml/layers/__init__.py +2 -0
  56. xinference/thirdparty/audiotools/ml/layers/base.py +328 -0
  57. xinference/thirdparty/audiotools/ml/layers/spectral_gate.py +127 -0
  58. xinference/thirdparty/audiotools/post.py +140 -0
  59. xinference/thirdparty/audiotools/preference.py +600 -0
  60. xinference/thirdparty/fish_speech/fish_speech/text/chn_text_norm/text.py +1 -1
  61. xinference/thirdparty/indextts/BigVGAN/ECAPA_TDNN.py +656 -0
  62. xinference/thirdparty/indextts/BigVGAN/__init__.py +0 -0
  63. xinference/thirdparty/indextts/BigVGAN/activations.py +122 -0
  64. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/__init__.py +0 -0
  65. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/.gitignore +1 -0
  66. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/__init__.py +0 -0
  67. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/activation1d.py +76 -0
  68. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation.cpp +23 -0
  69. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/anti_alias_activation_cuda.cu +256 -0
  70. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/compat.h +29 -0
  71. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/load.py +121 -0
  72. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/cuda/type_shim.h +92 -0
  73. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/__init__.py +6 -0
  74. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/act.py +31 -0
  75. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/filter.py +102 -0
  76. xinference/thirdparty/indextts/BigVGAN/alias_free_activation/torch/resample.py +58 -0
  77. xinference/thirdparty/indextts/BigVGAN/alias_free_torch/__init__.py +6 -0
  78. xinference/thirdparty/indextts/BigVGAN/alias_free_torch/act.py +29 -0
  79. xinference/thirdparty/indextts/BigVGAN/alias_free_torch/filter.py +96 -0
  80. xinference/thirdparty/indextts/BigVGAN/alias_free_torch/resample.py +49 -0
  81. xinference/thirdparty/indextts/BigVGAN/bigvgan.py +534 -0
  82. xinference/thirdparty/indextts/BigVGAN/models.py +451 -0
  83. xinference/thirdparty/indextts/BigVGAN/nnet/CNN.py +546 -0
  84. xinference/thirdparty/indextts/BigVGAN/nnet/__init__.py +0 -0
  85. xinference/thirdparty/indextts/BigVGAN/nnet/linear.py +89 -0
  86. xinference/thirdparty/indextts/BigVGAN/nnet/normalization.py +670 -0
  87. xinference/thirdparty/indextts/BigVGAN/utils.py +101 -0
  88. xinference/thirdparty/indextts/__init__.py +0 -0
  89. xinference/thirdparty/indextts/cli.py +65 -0
  90. xinference/thirdparty/indextts/gpt/__init__.py +0 -0
  91. xinference/thirdparty/indextts/gpt/conformer/__init__.py +0 -0
  92. xinference/thirdparty/indextts/gpt/conformer/attention.py +312 -0
  93. xinference/thirdparty/indextts/gpt/conformer/embedding.py +163 -0
  94. xinference/thirdparty/indextts/gpt/conformer/subsampling.py +348 -0
  95. xinference/thirdparty/indextts/gpt/conformer_encoder.py +520 -0
  96. xinference/thirdparty/indextts/gpt/model.py +713 -0
  97. xinference/thirdparty/indextts/gpt/model_v2.py +747 -0
  98. xinference/thirdparty/indextts/gpt/perceiver.py +317 -0
  99. xinference/thirdparty/indextts/gpt/transformers_beam_search.py +1013 -0
  100. xinference/thirdparty/indextts/gpt/transformers_generation_utils.py +4747 -0
  101. xinference/thirdparty/indextts/gpt/transformers_gpt2.py +1878 -0
  102. xinference/thirdparty/indextts/gpt/transformers_modeling_utils.py +5525 -0
  103. xinference/thirdparty/indextts/infer.py +690 -0
  104. xinference/thirdparty/indextts/infer_v2.py +739 -0
  105. xinference/thirdparty/indextts/s2mel/dac/__init__.py +16 -0
  106. xinference/thirdparty/indextts/s2mel/dac/__main__.py +36 -0
  107. xinference/thirdparty/indextts/s2mel/dac/model/__init__.py +4 -0
  108. xinference/thirdparty/indextts/s2mel/dac/model/base.py +294 -0
  109. xinference/thirdparty/indextts/s2mel/dac/model/dac.py +400 -0
  110. xinference/thirdparty/indextts/s2mel/dac/model/discriminator.py +228 -0
  111. xinference/thirdparty/indextts/s2mel/dac/model/encodec.py +320 -0
  112. xinference/thirdparty/indextts/s2mel/dac/nn/__init__.py +3 -0
  113. xinference/thirdparty/indextts/s2mel/dac/nn/layers.py +33 -0
  114. xinference/thirdparty/indextts/s2mel/dac/nn/loss.py +368 -0
  115. xinference/thirdparty/indextts/s2mel/dac/nn/quantize.py +339 -0
  116. xinference/thirdparty/indextts/s2mel/dac/utils/__init__.py +123 -0
  117. xinference/thirdparty/indextts/s2mel/dac/utils/decode.py +95 -0
  118. xinference/thirdparty/indextts/s2mel/dac/utils/encode.py +94 -0
  119. xinference/thirdparty/indextts/s2mel/hf_utils.py +12 -0
  120. xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/__init__.py +5 -0
  121. xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/act.py +29 -0
  122. xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/filter.py +96 -0
  123. xinference/thirdparty/indextts/s2mel/modules/alias_free_torch/resample.py +57 -0
  124. xinference/thirdparty/indextts/s2mel/modules/audio.py +82 -0
  125. xinference/thirdparty/indextts/s2mel/modules/bigvgan/activations.py +120 -0
  126. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/__init__.py +0 -0
  127. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/activation1d.py +77 -0
  128. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation.cpp +23 -0
  129. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/anti_alias_activation_cuda.cu +246 -0
  130. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/compat.h +29 -0
  131. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/load.py +86 -0
  132. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/cuda/type_shim.h +92 -0
  133. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/__init__.py +6 -0
  134. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/act.py +30 -0
  135. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/filter.py +101 -0
  136. xinference/thirdparty/indextts/s2mel/modules/bigvgan/alias_free_activation/torch/resample.py +58 -0
  137. xinference/thirdparty/indextts/s2mel/modules/bigvgan/bigvgan.py +492 -0
  138. xinference/thirdparty/indextts/s2mel/modules/bigvgan/config.json +63 -0
  139. xinference/thirdparty/indextts/s2mel/modules/bigvgan/env.py +18 -0
  140. xinference/thirdparty/indextts/s2mel/modules/bigvgan/meldataset.py +354 -0
  141. xinference/thirdparty/indextts/s2mel/modules/bigvgan/utils.py +99 -0
  142. xinference/thirdparty/indextts/s2mel/modules/campplus/DTDNN.py +115 -0
  143. xinference/thirdparty/indextts/s2mel/modules/campplus/classifier.py +70 -0
  144. xinference/thirdparty/indextts/s2mel/modules/campplus/layers.py +253 -0
  145. xinference/thirdparty/indextts/s2mel/modules/commons.py +632 -0
  146. xinference/thirdparty/indextts/s2mel/modules/diffusion_transformer.py +257 -0
  147. xinference/thirdparty/indextts/s2mel/modules/encodec.py +292 -0
  148. xinference/thirdparty/indextts/s2mel/modules/flow_matching.py +171 -0
  149. xinference/thirdparty/indextts/s2mel/modules/gpt_fast/generate.py +436 -0
  150. xinference/thirdparty/indextts/s2mel/modules/gpt_fast/model.py +360 -0
  151. xinference/thirdparty/indextts/s2mel/modules/gpt_fast/quantize.py +622 -0
  152. xinference/thirdparty/indextts/s2mel/modules/hifigan/f0_predictor.py +55 -0
  153. xinference/thirdparty/indextts/s2mel/modules/hifigan/generator.py +454 -0
  154. xinference/thirdparty/indextts/s2mel/modules/layers.py +354 -0
  155. xinference/thirdparty/indextts/s2mel/modules/length_regulator.py +141 -0
  156. xinference/thirdparty/indextts/s2mel/modules/openvoice/__init__.py +0 -0
  157. xinference/thirdparty/indextts/s2mel/modules/openvoice/api.py +186 -0
  158. xinference/thirdparty/indextts/s2mel/modules/openvoice/attentions.py +465 -0
  159. xinference/thirdparty/indextts/s2mel/modules/openvoice/checkpoints_v2/converter/config.json +57 -0
  160. xinference/thirdparty/indextts/s2mel/modules/openvoice/commons.py +160 -0
  161. xinference/thirdparty/indextts/s2mel/modules/openvoice/mel_processing.py +183 -0
  162. xinference/thirdparty/indextts/s2mel/modules/openvoice/models.py +499 -0
  163. xinference/thirdparty/indextts/s2mel/modules/openvoice/modules.py +598 -0
  164. xinference/thirdparty/indextts/s2mel/modules/openvoice/openvoice_app.py +275 -0
  165. xinference/thirdparty/indextts/s2mel/modules/openvoice/se_extractor.py +153 -0
  166. xinference/thirdparty/indextts/s2mel/modules/openvoice/transforms.py +209 -0
  167. xinference/thirdparty/indextts/s2mel/modules/openvoice/utils.py +194 -0
  168. xinference/thirdparty/indextts/s2mel/modules/quantize.py +229 -0
  169. xinference/thirdparty/indextts/s2mel/modules/rmvpe.py +631 -0
  170. xinference/thirdparty/indextts/s2mel/modules/vocos/__init__.py +4 -0
  171. xinference/thirdparty/indextts/s2mel/modules/vocos/heads.py +164 -0
  172. xinference/thirdparty/indextts/s2mel/modules/vocos/helpers.py +71 -0
  173. xinference/thirdparty/indextts/s2mel/modules/vocos/loss.py +114 -0
  174. xinference/thirdparty/indextts/s2mel/modules/vocos/models.py +118 -0
  175. xinference/thirdparty/indextts/s2mel/modules/vocos/modules.py +213 -0
  176. xinference/thirdparty/indextts/s2mel/modules/vocos/pretrained.py +51 -0
  177. xinference/thirdparty/indextts/s2mel/modules/vocos/spectral_ops.py +192 -0
  178. xinference/thirdparty/indextts/s2mel/modules/wavenet.py +174 -0
  179. xinference/thirdparty/indextts/s2mel/optimizers.py +96 -0
  180. xinference/thirdparty/indextts/s2mel/wav2vecbert_extract.py +148 -0
  181. xinference/thirdparty/indextts/utils/__init__.py +0 -0
  182. xinference/thirdparty/indextts/utils/arch_util.py +120 -0
  183. xinference/thirdparty/indextts/utils/checkpoint.py +34 -0
  184. xinference/thirdparty/indextts/utils/common.py +121 -0
  185. xinference/thirdparty/indextts/utils/feature_extractors.py +50 -0
  186. xinference/thirdparty/indextts/utils/front.py +536 -0
  187. xinference/thirdparty/indextts/utils/maskgct/models/codec/__init__.py +0 -0
  188. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/codec.py +427 -0
  189. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/__init__.py +11 -0
  190. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/factorized_vector_quantize.py +150 -0
  191. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/lookup_free_quantize.py +77 -0
  192. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/residual_vq.py +177 -0
  193. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/quantize/vector_quantize.py +401 -0
  194. xinference/thirdparty/indextts/utils/maskgct/models/codec/amphion_codec/vocos.py +881 -0
  195. xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_dataset.py +264 -0
  196. xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_inference.py +515 -0
  197. xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_sampler.py +126 -0
  198. xinference/thirdparty/indextts/utils/maskgct/models/codec/codec_trainer.py +166 -0
  199. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/__init__.py +0 -0
  200. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/__init__.py +5 -0
  201. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/act.py +29 -0
  202. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/filter.py +96 -0
  203. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/alias_free_torch/resample.py +57 -0
  204. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_dataset.py +98 -0
  205. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_inference.py +137 -0
  206. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/facodec_trainer.py +776 -0
  207. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/__init__.py +1 -0
  208. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/bst.t7 +0 -0
  209. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/JDC/model.py +219 -0
  210. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/attentions.py +437 -0
  211. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/commons.py +331 -0
  212. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/gradient_reversal.py +35 -0
  213. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/layers.py +460 -0
  214. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/quantize.py +741 -0
  215. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/style_encoder.py +110 -0
  216. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/modules/wavenet.py +224 -0
  217. xinference/thirdparty/indextts/utils/maskgct/models/codec/facodec/optimizer.py +104 -0
  218. xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/repcodec_model.py +210 -0
  219. xinference/thirdparty/indextts/utils/maskgct/models/codec/kmeans/vocos.py +850 -0
  220. xinference/thirdparty/indextts/utils/maskgct/models/codec/melvqgan/melspec.py +108 -0
  221. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/README.md +216 -0
  222. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/__init__.py +6 -0
  223. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/__init__.py +5 -0
  224. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/act.py +29 -0
  225. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/filter.py +96 -0
  226. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/alias_free_torch/resample.py +57 -0
  227. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/facodec.py +1222 -0
  228. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/gradient_reversal.py +35 -0
  229. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/melspec.py +102 -0
  230. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/__init__.py +7 -0
  231. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/fvq.py +116 -0
  232. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/quantize/rvq.py +87 -0
  233. xinference/thirdparty/indextts/utils/maskgct/models/codec/ns3_codec/transformer.py +234 -0
  234. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/model.py +184 -0
  235. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/__init__.py +27 -0
  236. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/conv.py +346 -0
  237. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/lstm.py +46 -0
  238. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/norm.py +37 -0
  239. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/__init__.py +14 -0
  240. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/ac.py +317 -0
  241. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/core_vq.py +388 -0
  242. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/distrib.py +135 -0
  243. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/quantization/vq.py +125 -0
  244. xinference/thirdparty/indextts/utils/maskgct/models/codec/speechtokenizer/modules/seanet.py +414 -0
  245. xinference/thirdparty/indextts/utils/maskgct/models/codec/vevo/vevo_repcodec.py +592 -0
  246. xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/ckpt/wav2vec2bert_stats.pt +0 -0
  247. xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/llama_nar.py +650 -0
  248. xinference/thirdparty/indextts/utils/maskgct/models/tts/maskgct/maskgct_s2a.py +503 -0
  249. xinference/thirdparty/indextts/utils/maskgct_utils.py +259 -0
  250. xinference/thirdparty/indextts/utils/text_utils.py +41 -0
  251. xinference/thirdparty/indextts/utils/typical_sampling.py +30 -0
  252. xinference/thirdparty/indextts/utils/utils.py +93 -0
  253. xinference/thirdparty/indextts/utils/webui_utils.py +42 -0
  254. xinference/thirdparty/indextts/utils/xtransformers.py +1247 -0
  255. xinference/thirdparty/indextts/vqvae/__init__.py +0 -0
  256. xinference/thirdparty/indextts/vqvae/xtts_dvae.py +395 -0
  257. xinference/thirdparty/melo/text/chinese_mix.py +2 -2
  258. xinference/types.py +9 -0
  259. xinference/ui/gradio/media_interface.py +66 -8
  260. xinference/ui/web/ui/build/asset-manifest.json +6 -6
  261. xinference/ui/web/ui/build/index.html +1 -1
  262. xinference/ui/web/ui/build/static/css/main.5ea97072.css +2 -0
  263. xinference/ui/web/ui/build/static/css/main.5ea97072.css.map +1 -0
  264. xinference/ui/web/ui/build/static/js/main.45e78536.js +3 -0
  265. xinference/ui/web/ui/build/static/js/{main.1086c759.js.LICENSE.txt → main.45e78536.js.LICENSE.txt} +0 -7
  266. xinference/ui/web/ui/build/static/js/main.45e78536.js.map +1 -0
  267. xinference/ui/web/ui/node_modules/.cache/babel-loader/089c38df5f52348d212ed868dda5c518a42e0c2762caed4175487c0405830c35.json +1 -0
  268. xinference/ui/web/ui/node_modules/.cache/babel-loader/2b6e3a5b6eb2c5c5f2d007e68cd46c372721cd52bf63508adcdb21ecf79241d8.json +1 -0
  269. xinference/ui/web/ui/node_modules/.cache/babel-loader/2d887825fd07a56f872eda4420da25fba0b5b62a23bdcc6c6da1a5281887f618.json +1 -0
  270. xinference/ui/web/ui/node_modules/.cache/babel-loader/4001f9c3e64e73a4f2158826650c174a59d5e3f89ddecddf17cbb6bb688cc4ca.json +1 -0
  271. xinference/ui/web/ui/node_modules/.cache/babel-loader/4a7018a69e6b7f90fc313248c2aa86f2a8f1eb1db120df586047a8023549b44b.json +1 -0
  272. xinference/ui/web/ui/node_modules/.cache/babel-loader/64b12aaa1c1d1bf53820ada8a63769067c0ccc5aab46b32348eb1917ae7f2a11.json +1 -0
  273. xinference/ui/web/ui/node_modules/.cache/babel-loader/7275b67c78ec76ce38a686bb8a576d8c9cecf54e1573614c84859d538efb9be5.json +1 -0
  274. xinference/ui/web/ui/node_modules/.cache/babel-loader/a68b6ee3b31eadc051fb95ce8f8ccb9c2e8b52c60f290dbab545a1917e065282.json +1 -0
  275. xinference/ui/web/ui/node_modules/.cache/babel-loader/ae8771cc37693feb160fa8727231312a0c54ef2d1d1ca893be568cd70016ca7e.json +1 -0
  276. xinference/ui/web/ui/node_modules/.cache/babel-loader/bb4e8722d2d41d87f1fce3661bc8937bffe9448e231fc5f0462630849e851592.json +1 -0
  277. xinference/ui/web/ui/node_modules/.cache/babel-loader/be6aada1ee4adc2bbf65dbe56d17db32bb3b5478be05d6b527805a8ba6cfb2b9.json +1 -0
  278. xinference/ui/web/ui/node_modules/.cache/babel-loader/de91c352653c233cf0cb6674e6e04049a44fd0e1156560de65d5c4620521391e.json +1 -0
  279. xinference/ui/web/ui/node_modules/.cache/babel-loader/e85f7002fc325c83b9c9cd8a1619e5b3ebc701d30e811afc284b88e6ae710cb5.json +1 -0
  280. xinference/ui/web/ui/node_modules/.cache/babel-loader/e8b603c78944bf3d213639078bfe155ff5c0dfa4048a93cbb967cad6a4eb4ff3.json +1 -0
  281. xinference/ui/web/ui/node_modules/.cache/babel-loader/ea2a26361204e70cf1018d6990fb6354bed82b3ac69690391e0f100385e7abb7.json +1 -0
  282. xinference/ui/web/ui/node_modules/.cache/babel-loader/f05535160a508b2a312de546a6de234776c613db276479ea4253c0b1bdeeb7d6.json +1 -0
  283. xinference/ui/web/ui/node_modules/.cache/babel-loader/f09ba9e11106bd59a0de10cc85c55084097729dcab575f43dfcf07375961ed87.json +1 -0
  284. xinference/ui/web/ui/node_modules/.package-lock.json +0 -33
  285. xinference/ui/web/ui/package-lock.json +0 -34
  286. xinference/ui/web/ui/package.json +0 -1
  287. xinference/ui/web/ui/src/locales/en.json +9 -3
  288. xinference/ui/web/ui/src/locales/ja.json +9 -3
  289. xinference/ui/web/ui/src/locales/ko.json +9 -3
  290. xinference/ui/web/ui/src/locales/zh.json +9 -3
  291. {xinference-1.10.0.dist-info → xinference-1.11.0.dist-info}/METADATA +24 -6
  292. {xinference-1.10.0.dist-info → xinference-1.11.0.dist-info}/RECORD +296 -77
  293. xinference/ui/web/ui/build/static/css/main.013f296b.css +0 -2
  294. xinference/ui/web/ui/build/static/css/main.013f296b.css.map +0 -1
  295. xinference/ui/web/ui/build/static/js/main.1086c759.js +0 -3
  296. xinference/ui/web/ui/build/static/js/main.1086c759.js.map +0 -1
  297. xinference/ui/web/ui/node_modules/.cache/babel-loader/0b0f77000cc1b482ca091cfbcae511dfe02f08916971645fad21d0b1234d04a2.json +0 -1
  298. xinference/ui/web/ui/node_modules/.cache/babel-loader/1c5f8ff423a7c9202bea60b15680f04b1e9964b445b0da3f86c6ff70cf24e797.json +0 -1
  299. xinference/ui/web/ui/node_modules/.cache/babel-loader/44ce7993e344980e3ed4f13e8f69237d4a5dfc60e37ca6b54f51f8ee1357bd67.json +0 -1
  300. xinference/ui/web/ui/node_modules/.cache/babel-loader/4aec1cc414ac3ebb3481d3d915e4db597d9127de813291346eacb8554ab170d4.json +0 -1
  301. xinference/ui/web/ui/node_modules/.cache/babel-loader/644cfec52f3c57a6e222ce60f112237a1efefe9835efd9aad857a685f53d8eed.json +0 -1
  302. xinference/ui/web/ui/node_modules/.cache/babel-loader/663436f72af53fe0d72394f56d003fa4e0bba489e5bb4e483fd34b00f84637f7.json +0 -1
  303. xinference/ui/web/ui/node_modules/.cache/babel-loader/69db82ca9bfe27fe417cc6cf2b1716b09be9c6f0cd198530f12bfc60e801bbcf.json +0 -1
  304. xinference/ui/web/ui/node_modules/.cache/babel-loader/85087e27618d740c236bf159f30e0219db443ab55f0997388eed5fde6f9e90cc.json +0 -1
  305. xinference/ui/web/ui/node_modules/.cache/babel-loader/88b07838348864aa86c672be3bbca1e9f58f6f3a2881b32070ec27f4e7b449d1.json +0 -1
  306. xinference/ui/web/ui/node_modules/.cache/babel-loader/8b8cd408ccfbe115acef27ccfa5b233da8597131a2a5712add13e1e4d5d4504b.json +0 -1
  307. xinference/ui/web/ui/node_modules/.cache/babel-loader/a23824fe746b9c6ca5eee9159b5764d1ff1653c1d856288c0f75c742bbb0023b.json +0 -1
  308. xinference/ui/web/ui/node_modules/.cache/babel-loader/a3eb18af328280b139693c9092dff2a0ef8c9a967e6c8956ceee0996611f1984.json +0 -1
  309. xinference/ui/web/ui/node_modules/.cache/babel-loader/bc1aacc65a102db325ca61bcd2f681e1ae22c36a1f1d98a6ff5e4ad49dc7544f.json +0 -1
  310. xinference/ui/web/ui/node_modules/.cache/babel-loader/c682fd521747c19dae437d83ce3235a306ce6b68e24a117bc57c27ebb8d1f1ca.json +0 -1
  311. xinference/ui/web/ui/node_modules/.cache/babel-loader/d5c224be7081f18cba1678b7874a9782eba895df004874ff8f243f94ba79942a.json +0 -1
  312. xinference/ui/web/ui/node_modules/.cache/babel-loader/f7f18bfb539b036a6a342176dd98a85df5057a884a8da978d679f2a0264883d0.json +0 -1
  313. xinference/ui/web/ui/node_modules/clipboard/.babelrc.json +0 -11
  314. xinference/ui/web/ui/node_modules/clipboard/.eslintrc.json +0 -24
  315. xinference/ui/web/ui/node_modules/clipboard/.prettierrc.json +0 -9
  316. xinference/ui/web/ui/node_modules/clipboard/bower.json +0 -18
  317. xinference/ui/web/ui/node_modules/clipboard/composer.json +0 -25
  318. xinference/ui/web/ui/node_modules/clipboard/package.json +0 -63
  319. xinference/ui/web/ui/node_modules/delegate/package.json +0 -31
  320. xinference/ui/web/ui/node_modules/good-listener/bower.json +0 -11
  321. xinference/ui/web/ui/node_modules/good-listener/package.json +0 -35
  322. xinference/ui/web/ui/node_modules/select/bower.json +0 -13
  323. xinference/ui/web/ui/node_modules/select/package.json +0 -29
  324. xinference/ui/web/ui/node_modules/tiny-emitter/package.json +0 -53
  325. {xinference-1.10.0.dist-info → xinference-1.11.0.dist-info}/WHEEL +0 -0
  326. {xinference-1.10.0.dist-info → xinference-1.11.0.dist-info}/entry_points.txt +0 -0
  327. {xinference-1.10.0.dist-info → xinference-1.11.0.dist-info}/licenses/LICENSE +0 -0
  328. {xinference-1.10.0.dist-info → xinference-1.11.0.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,
@@ -5321,117 +5321,8 @@
5321
5321
  "<|end▁of▁sentence|>"
5322
5322
  ],
5323
5323
  "reasoning_start_tag": "<think>",
5324
- "reasoning_end_tag": "</think>"
5325
- },
5326
- {
5327
- "version": 2,
5328
- "context_length": 131072,
5329
- "model_name": "Deepseek-V3.1",
5330
- "model_lang": [
5331
- "en",
5332
- "zh"
5333
- ],
5334
- "model_ability": [
5335
- "chat",
5336
- "reasoning",
5337
- "hybrid",
5338
- "tools"
5339
- ],
5340
- "model_description": "DeepSeek-V3.1 is a hybrid model that supports both thinking mode and non-thinking mode.",
5341
- "model_specs": [
5342
- {
5343
- "model_format": "pytorch",
5344
- "model_size_in_billions": 671,
5345
- "activated_size_in_billions": 37,
5346
- "model_src": {
5347
- "huggingface": {
5348
- "quantizations": [
5349
- "none"
5350
- ],
5351
- "model_id": "deepseek-ai/DeepSeek-V3.1"
5352
- },
5353
- "modelscope": {
5354
- "quantizations": [
5355
- "none"
5356
- ],
5357
- "model_id": "deepseek-ai/DeepSeek-V3.1"
5358
- }
5359
- }
5360
- },
5361
- {
5362
- "model_format": "gptq",
5363
- "model_size_in_billions": 671,
5364
- "activated_size_in_billions": 37,
5365
- "model_src": {
5366
- "huggingface": {
5367
- "quantizations": [
5368
- "Int4"
5369
- ],
5370
- "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
5371
- },
5372
- "modelscope": {
5373
- "quantizations": [
5374
- "Int4"
5375
- ],
5376
- "model_id": "cpatonn/DeepSeek-V3.1-GPTQ-4bit"
5377
- }
5378
- }
5379
- },
5380
- {
5381
- "model_format": "awq",
5382
- "model_size_in_billions": 671,
5383
- "activated_size_in_billions": 37,
5384
- "model_src": {
5385
- "huggingface": {
5386
- "quantizations": [
5387
- "Int4"
5388
- ],
5389
- "model_id": "QuantTrio/DeepSeek-V3.1-AWQ"
5390
- },
5391
- "modelscope": {
5392
- "quantizations": [
5393
- "Int4"
5394
- ],
5395
- "model_id": "tclf90/DeepSeek-V3.1-AWQ"
5396
- }
5397
- }
5398
- },
5399
- {
5400
- "model_format": "mlx",
5401
- "model_size_in_billions": 671,
5402
- "activated_size_in_billions": 37,
5403
- "model_src": {
5404
- "huggingface": {
5405
- "quantizations": [
5406
- "8bit",
5407
- "4bit"
5408
- ],
5409
- "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
5410
- },
5411
- "modelscope": {
5412
- "quantizations": [
5413
- "8bit",
5414
- "4bit"
5415
- ],
5416
- "model_id": "mlx-community/DeepSeek-V3.1-{quantization}"
5417
- }
5418
- }
5419
- }
5420
- ],
5421
- "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 %}",
5422
- "stop_token_ids": [
5423
- 1
5424
- ],
5425
- "stop": [
5426
- "<|end▁of▁sentence|>"
5427
- ],
5428
- "reasoning_start_tag": "<think>",
5429
5324
  "reasoning_end_tag": "</think>",
5430
- "virtualenv": {
5431
- "packages": [
5432
- "transformers==4.53.0"
5433
- ]
5434
- }
5325
+ "tool_parser": "deepseek-r1"
5435
5326
  },
5436
5327
  {
5437
5328
  "version": 2,
@@ -5778,7 +5669,7 @@
5778
5669
  ],
5779
5670
  "reasoning_start_tag": "<think>",
5780
5671
  "reasoning_end_tag": "</think>",
5781
- "tool_parser": "deepseek_r1"
5672
+ "tool_parser": "deepseek-r1"
5782
5673
  },
5783
5674
  {
5784
5675
  "version": 2,
@@ -6689,11 +6580,11 @@
6689
6580
  "quantizations": [
6690
6581
  "4bit",
6691
6582
  "5bit",
6692
- "8bit"
6583
+ "8bit"
6693
6584
  ],
6694
6585
  "model_id": "mlx-community/DeepSeek-V3-0324-{quantization}"
6695
6586
  }
6696
- }
6587
+ }
6697
6588
  }
6698
6589
  ],
6699
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 %}",
@@ -7928,7 +7819,7 @@
7928
7819
  "<|user|>",
7929
7820
  "<|observation|>"
7930
7821
  ],
7931
- "tool_parser":"glm4"
7822
+ "tool_parser": "glm4"
7932
7823
  },
7933
7824
  {
7934
7825
  "version": 2,
@@ -8036,7 +7927,7 @@
8036
7927
  "<|user|>",
8037
7928
  "<|observation|>"
8038
7929
  ],
8039
- "tool_parser":"glm4"
7930
+ "tool_parser": "glm4"
8040
7931
  },
8041
7932
  {
8042
7933
  "version": 2,
@@ -11929,7 +11820,7 @@
11929
11820
  "<|im_start|>",
11930
11821
  "<|im_end|>"
11931
11822
  ],
11932
- "tool_parser":"qwen"
11823
+ "tool_parser": "qwen"
11933
11824
  },
11934
11825
  {
11935
11826
  "version": 2,
@@ -11993,7 +11884,7 @@
11993
11884
  "<|im_start|>",
11994
11885
  "<|im_end|>"
11995
11886
  ],
11996
- "tool_parser":"qwen"
11887
+ "tool_parser": "qwen"
11997
11888
  },
11998
11889
  {
11999
11890
  "version": 2,
@@ -12078,6 +11969,7 @@
12078
11969
  }
12079
11970
  }
12080
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 %}",
12081
11973
  "prompt_style": {
12082
11974
  "style_name": "QWEN",
12083
11975
  "system_prompt": "You are a helpful assistant",
@@ -12718,7 +12610,7 @@
12718
12610
  "<|im_start|>",
12719
12611
  "<|im_end|>"
12720
12612
  ],
12721
- "tool_parser":"qwen"
12613
+ "tool_parser": "qwen"
12722
12614
  },
12723
12615
  {
12724
12616
  "version": 2,
@@ -12840,7 +12732,7 @@
12840
12732
  "<|im_start|>",
12841
12733
  "<|im_end|>"
12842
12734
  ],
12843
- "tool_parser":"qwen"
12735
+ "tool_parser": "qwen"
12844
12736
  },
12845
12737
  {
12846
12738
  "version": 2,
@@ -14023,7 +13915,7 @@
14023
13915
  "<|im_start|>",
14024
13916
  "<|im_end|>"
14025
13917
  ],
14026
- "tool_parser":"qwen"
13918
+ "tool_parser": "qwen"
14027
13919
  },
14028
13920
  {
14029
13921
  "version": 2,
@@ -15534,7 +15426,7 @@
15534
15426
  "<|im_start|>",
15535
15427
  "<|im_end|>"
15536
15428
  ],
15537
- "tool_parser":"qwen"
15429
+ "tool_parser": "qwen"
15538
15430
  },
15539
15431
  {
15540
15432
  "version": 2,
@@ -15649,7 +15541,7 @@
15649
15541
  }
15650
15542
  }
15651
15543
  ],
15652
- "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 %}",
15653
15545
  "stop_token_ids": [
15654
15546
  151645,
15655
15547
  151643
@@ -17499,6 +17391,24 @@
17499
17391
  }
17500
17392
  }
17501
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
+ },
17502
17412
  {
17503
17413
  "model_format": "fp8",
17504
17414
  "model_size_in_billions": 235,
@@ -17537,6 +17447,24 @@
17537
17447
  }
17538
17448
  }
17539
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
+ },
17540
17468
  {
17541
17469
  "model_format": "gptq",
17542
17470
  "model_size_in_billions": 235,
@@ -17575,6 +17503,26 @@
17575
17503
  }
17576
17504
  }
17577
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
+ },
17578
17526
  {
17579
17527
  "model_format": "awq",
17580
17528
  "model_size_in_billions": 235,
@@ -17613,6 +17561,24 @@
17613
17561
  }
17614
17562
  }
17615
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
+ },
17616
17582
  {
17617
17583
  "model_format": "mlx",
17618
17584
  "model_size_in_billions": 235,
@@ -17665,6 +17631,30 @@
17665
17631
  }
17666
17632
  }
17667
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
+ },
17668
17658
  {
17669
17659
  "model_format": "ggufv2",
17670
17660
  "model_size_in_billions": 235,
@@ -18048,41 +18038,111 @@
18048
18038
  "model_file_name_split_template": "{quantization}/Qwen3-30B-A3B-Instruct-2507-{quantization}-{part}.gguf"
18049
18039
  }
18050
18040
  }
18051
- }
18052
- ],
18053
- "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 %}",
18054
- "stop_token_ids": [
18055
- 151643,
18056
- 151644,
18057
- 151645
18058
- ],
18059
- "stop": [
18060
- "<|endoftext|>",
18061
- "<|im_start|>",
18062
- "<|im_end|>"
18063
- ],
18064
- "tool_parser":"qwen"
18065
- },
18066
- {
18067
- "version": 2,
18068
- "context_length": 262144,
18069
- "model_name": "Qwen3-Thinking",
18070
- "model_lang": [
18071
- "en",
18072
- "zh"
18073
- ],
18074
- "model_ability": [
18075
- "chat",
18076
- "reasoning",
18077
- "tools"
18078
- ],
18079
- "model_description": "we have continued to scale the thinking capability of Qwen3-235B-A22B, improving both the quality and depth of reasoning",
18080
- "model_specs": [
18041
+ },
18081
18042
  {
18082
- "model_format": "pytorch",
18083
- "model_size_in_billions": 235,
18084
- "activated_size_in_billions": 22,
18085
- "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": {
18086
18146
  "huggingface": {
18087
18147
  "quantizations": [
18088
18148
  "none"
@@ -18116,6 +18176,24 @@
18116
18176
  }
18117
18177
  }
18118
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
+ },
18119
18197
  {
18120
18198
  "model_format": "fp8",
18121
18199
  "model_size_in_billions": 235,
@@ -18154,6 +18232,24 @@
18154
18232
  }
18155
18233
  }
18156
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
+ },
18157
18253
  {
18158
18254
  "model_format": "gptq",
18159
18255
  "model_size_in_billions": 235,
@@ -18192,6 +18288,26 @@
18192
18288
  }
18193
18289
  }
18194
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
+ },
18195
18311
  {
18196
18312
  "model_format": "awq",
18197
18313
  "model_size_in_billions": 235,
@@ -18230,6 +18346,24 @@
18230
18346
  }
18231
18347
  }
18232
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
+ },
18233
18367
  {
18234
18368
  "model_format": "mlx",
18235
18369
  "model_size_in_billions": 235,
@@ -18276,6 +18410,30 @@
18276
18410
  }
18277
18411
  }
18278
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
+ },
18279
18437
  {
18280
18438
  "model_format": "ggufv2",
18281
18439
  "model_size_in_billions": 235,
@@ -18659,6 +18817,76 @@
18659
18817
  "model_file_name_split_template": "{quantization}/Qwen3-30B-A3B-Thinking-2507-{quantization}-{part}.gguf"
18660
18818
  }
18661
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
+ }
18662
18890
  }
18663
18891
  ],
18664
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 %}",
@@ -18674,7 +18902,7 @@
18674
18902
  ],
18675
18903
  "reasoning_start_tag": "<think>",
18676
18904
  "reasoning_end_tag": "</think>",
18677
- "tool_parser":"qwen"
18905
+ "tool_parser": "qwen"
18678
18906
  },
18679
18907
  {
18680
18908
  "version": 2,
@@ -19458,7 +19686,7 @@
19458
19686
  "<|endoftext|>",
19459
19687
  "<|im_end|>"
19460
19688
  ],
19461
- "tool_parser":"qwen"
19689
+ "tool_parser": "qwen"
19462
19690
  },
19463
19691
  {
19464
19692
  "version": 2,
@@ -20452,7 +20680,7 @@
20452
20680
  },
20453
20681
  {
20454
20682
  "model_format": "ggufv2",
20455
- "model_size_in_billions": "0_3",
20683
+ "model_size_in_billions": "0_3",
20456
20684
  "model_src": {
20457
20685
  "huggingface": {
20458
20686
  "quantizations": [
@@ -20637,25 +20865,25 @@
20637
20865
  "Q8_0"
20638
20866
  ],
20639
20867
  "quantization_parts": {
20640
- "Q2_K": [
20868
+ "Q2_K": [
20641
20869
  "00001-of-00003",
20642
20870
  "00002-of-00003",
20643
20871
  "00003-of-00003"
20644
20872
  ],
20645
- "Q4_K_M": [
20873
+ "Q4_K_M": [
20646
20874
  "00001-of-00004",
20647
20875
  "00002-of-00004",
20648
20876
  "00003-of-00004",
20649
20877
  "00004-of-00004"
20650
20878
  ],
20651
- "Q6_K": [
20879
+ "Q6_K": [
20652
20880
  "00001-of-00005",
20653
20881
  "00002-of-00005",
20654
20882
  "00003-of-00005",
20655
20883
  "00004-of-00005",
20656
20884
  "00005-of-00005"
20657
20885
  ],
20658
- "Q8_0": [
20886
+ "Q8_0": [
20659
20887
  "00001-of-00007",
20660
20888
  "00002-of-00007",
20661
20889
  "00003-of-00007",
@@ -20677,25 +20905,25 @@
20677
20905
  "Q8_0"
20678
20906
  ],
20679
20907
  "quantization_parts": {
20680
- "Q2_K": [
20908
+ "Q2_K": [
20681
20909
  "00001-of-00003",
20682
20910
  "00002-of-00003",
20683
20911
  "00003-of-00003"
20684
20912
  ],
20685
- "Q4_K_M": [
20913
+ "Q4_K_M": [
20686
20914
  "00001-of-00004",
20687
20915
  "00002-of-00004",
20688
20916
  "00003-of-00004",
20689
20917
  "00004-of-00004"
20690
20918
  ],
20691
- "Q6_K": [
20919
+ "Q6_K": [
20692
20920
  "00001-of-00005",
20693
20921
  "00002-of-00005",
20694
20922
  "00003-of-00005",
20695
20923
  "00004-of-00005",
20696
20924
  "00005-of-00005"
20697
20925
  ],
20698
- "Q8_0": [
20926
+ "Q8_0": [
20699
20927
  "00001-of-00007",
20700
20928
  "00002-of-00007",
20701
20929
  "00003-of-00007",
@@ -21265,7 +21493,7 @@
21265
21493
  }
21266
21494
  }
21267
21495
  ],
21268
- "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 -%}",
21269
21497
  "stop_token_ids": [
21270
21498
  200002,
21271
21499
  199999
@@ -21360,6 +21588,116 @@
21360
21588
  "<|im_end|>"
21361
21589
  ]
21362
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
+ },
21363
21701
  {
21364
21702
  "version": 2,
21365
21703
  "context_length": 524288,
@@ -21484,7 +21822,7 @@
21484
21822
  "UD-Q6_K_XL",
21485
21823
  "UD-Q8_K_XL"
21486
21824
  ],
21487
- "quantization_parts": {
21825
+ "quantization_parts": {
21488
21826
  "BF16": [
21489
21827
  "00001-of-00002",
21490
21828
  "00002-of-00002"
@@ -21523,7 +21861,7 @@
21523
21861
  "UD-Q6_K_XL",
21524
21862
  "UD-Q8_K_XL"
21525
21863
  ],
21526
- "quantization_parts": {
21864
+ "quantization_parts": {
21527
21865
  "BF16": [
21528
21866
  "00001-of-00002",
21529
21867
  "00002-of-00002"
@@ -21549,5 +21887,792 @@
21549
21887
  ],
21550
21888
  "reasoning_start_tag": "<think>",
21551
21889
  "reasoning_end_tag": "</think>"
21890
+ },
21891
+ {
21892
+ "version": 2,
21893
+ "context_length": 131072,
21894
+ "model_name": "Baichuan-M2",
21895
+ "model_lang": [
21896
+ "en",
21897
+ "zh"
21898
+ ],
21899
+ "model_ability": [
21900
+ "chat",
21901
+ "reasoning",
21902
+ "hybrid",
21903
+ "tools"
21904
+ ],
21905
+ "model_description": "Baichuan-M2-32B is Baichuan AI's medical-enhanced reasoning model, the second medical model released by Baichuan. Designed for real-world medical reasoning tasks, this model builds upon Qwen2.5-32B with an innovative Large Verifier System. Through domain-specific fine-tuning on real-world medical questions, it achieves breakthrough medical performance while maintaining strong general capabilities.",
21906
+ "model_specs": [
21907
+ {
21908
+ "model_format": "pytorch",
21909
+ "model_size_in_billions": 32,
21910
+ "model_src": {
21911
+ "huggingface": {
21912
+ "quantizations": [
21913
+ "none"
21914
+ ],
21915
+ "model_id": "baichuan-inc/Baichuan-M2-32B"
21916
+ },
21917
+ "modelscope": {
21918
+ "quantizations": [
21919
+ "none"
21920
+ ],
21921
+ "model_id": "baichuan-inc/Baichuan-M2-32B"
21922
+ }
21923
+ }
21924
+ },
21925
+ {
21926
+ "model_format": "gptq",
21927
+ "model_size_in_billions": 32,
21928
+ "model_src": {
21929
+ "huggingface": {
21930
+ "quantizations": [
21931
+ "Int4"
21932
+ ],
21933
+ "model_id": "baichuan-inc/Baichuan-M2-32B-GPTQ-Int4"
21934
+ },
21935
+ "modelscope": {
21936
+ "quantizations": [
21937
+ "Int4"
21938
+ ],
21939
+ "model_id": "baichuan-inc/Baichuan-M2-32B-GPTQ-Int4"
21940
+ }
21941
+ }
21942
+ }
21943
+ ],
21944
+ "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 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.role == \"user\") or (message.role == \"system\" and not loop.first) %}\n {{- '<|im_start|>' + message.role + '\\n' + message.content + '<|im_end|>' + '\\n' }}\n {%- elif message.role == \"assistant\" %}\n {%- set content = message.content %}\n {%- set reasoning_content = '' %}\n {%- if message.reasoning_content is defined and message.reasoning_content is not none %}\n {%- set reasoning_content = message.reasoning_content %}\n {%- else %}\n {%- if '</think>' in message.content %}\n {%- set content = message.content.split('</think>')[-1].lstrip('\\n') %}\n {%- set reasoning_content = message.content.split('</think>')[0].rstrip('\\n').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 {{- message.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 {%- if thinking_mode is defined %}\n {%- if thinking_mode == \"on\" %}\n {{- '<think>\\n' }}\n {%- elif thinking_mode == \"off\" %}\n {{- '<think>\\n\\n' }}\n {%- endif %}\n {%- endif %}\n{%- endif %}\n",
21945
+ "stop_token_ids": [
21946
+ 151643,
21947
+ 151644,
21948
+ 151645
21949
+ ],
21950
+ "stop": [
21951
+ "<|endoftext|>",
21952
+ "<|im_start|>",
21953
+ "<|im_end|>"
21954
+ ],
21955
+ "reasoning_start_tag": "<think>",
21956
+ "reasoning_end_tag": "</think>"
21957
+ },
21958
+ {
21959
+ "version": 2,
21960
+ "context_length": 262144,
21961
+ "model_name": "Qwen3-VL-Instruct",
21962
+ "model_lang": [
21963
+ "en",
21964
+ "zh"
21965
+ ],
21966
+ "model_ability": [
21967
+ "chat",
21968
+ "vision",
21969
+ "tools"
21970
+ ],
21971
+ "model_description": "Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.",
21972
+ "model_specs": [
21973
+ {
21974
+ "model_format": "pytorch",
21975
+ "model_size_in_billions": 235,
21976
+ "activated_size_in_billions": 22,
21977
+ "model_src": {
21978
+ "huggingface": {
21979
+ "quantizations": [
21980
+ "none"
21981
+ ],
21982
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct"
21983
+ },
21984
+ "modelscope": {
21985
+ "quantizations": [
21986
+ "none"
21987
+ ],
21988
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct"
21989
+ }
21990
+ }
21991
+ },
21992
+ {
21993
+ "model_format": "fp8",
21994
+ "model_size_in_billions": 235,
21995
+ "activated_size_in_billions": 22,
21996
+ "model_src": {
21997
+ "huggingface": {
21998
+ "quantizations": [
21999
+ "fp8"
22000
+ ],
22001
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8"
22002
+ },
22003
+ "modelscope": {
22004
+ "quantizations": [
22005
+ "fp8"
22006
+ ],
22007
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Instruct-FP8"
22008
+ }
22009
+ }
22010
+ },
22011
+ {
22012
+ "model_format": "awq",
22013
+ "model_size_in_billions": 235,
22014
+ "activated_size_in_billions": 22,
22015
+ "model_src": {
22016
+ "huggingface": {
22017
+ "quantizations": [
22018
+ "Int4"
22019
+ ],
22020
+ "model_id": "QuantTrio/Qwen3-VL-235B-A22B-Instruct-AWQ"
22021
+ },
22022
+ "modelscope": {
22023
+ "quantizations": [
22024
+ "Int4"
22025
+ ],
22026
+ "model_id": "tclf90/Qwen3-VL-235B-A22B-Instruct-AWQ"
22027
+ }
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
+ }
22088
+ }
22089
+ ],
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",
22091
+ "stop_token_ids": [
22092
+ 151643,
22093
+ 151645
22094
+ ],
22095
+ "stop": [
22096
+ "<|endoftext|>",
22097
+ "<|im_end|>"
22098
+ ],
22099
+ "tool_parser": "qwen"
22100
+ },
22101
+ {
22102
+ "version": 2,
22103
+ "context_length": 262144,
22104
+ "model_name": "Qwen3-VL-Thinking",
22105
+ "model_lang": [
22106
+ "en",
22107
+ "zh"
22108
+ ],
22109
+ "model_ability": [
22110
+ "chat",
22111
+ "vision",
22112
+ "reasoning",
22113
+ "tools"
22114
+ ],
22115
+ "model_description": "Meet Qwen3-VL — the most powerful vision-language model in the Qwen series to date.",
22116
+ "model_specs": [
22117
+ {
22118
+ "model_format": "pytorch",
22119
+ "model_size_in_billions": 235,
22120
+ "activated_size_in_billions": 22,
22121
+ "model_src": {
22122
+ "huggingface": {
22123
+ "quantizations": [
22124
+ "none"
22125
+ ],
22126
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking"
22127
+ },
22128
+ "modelscope": {
22129
+ "quantizations": [
22130
+ "none"
22131
+ ],
22132
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking"
22133
+ }
22134
+ }
22135
+ },
22136
+ {
22137
+ "model_format": "fp8",
22138
+ "model_size_in_billions": 235,
22139
+ "activated_size_in_billions": 22,
22140
+ "model_src": {
22141
+ "huggingface": {
22142
+ "quantizations": [
22143
+ "fp8"
22144
+ ],
22145
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking-FP8"
22146
+ },
22147
+ "modelscope": {
22148
+ "quantizations": [
22149
+ "fp8"
22150
+ ],
22151
+ "model_id": "Qwen/Qwen3-VL-235B-A22B-Thinking-FP8"
22152
+ }
22153
+ }
22154
+ },
22155
+ {
22156
+ "model_format": "awq",
22157
+ "model_size_in_billions": 235,
22158
+ "activated_size_in_billions": 22,
22159
+ "model_src": {
22160
+ "huggingface": {
22161
+ "quantizations": [
22162
+ "Int4"
22163
+ ],
22164
+ "model_id": "QuantTrio/Qwen3-VL-235B-A22B-Thinking-AWQ"
22165
+ },
22166
+ "modelscope": {
22167
+ "quantizations": [
22168
+ "Int4"
22169
+ ],
22170
+ "model_id": "tclf90/Qwen3-VL-235B-A22B-Thinking-AWQ"
22171
+ }
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
+ }
22232
+ }
22233
+ ],
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",
22235
+ "stop_token_ids": [
22236
+ 151643,
22237
+ 151645
22238
+ ],
22239
+ "stop": [
22240
+ "<|endoftext|>",
22241
+ "<|im_end|>"
22242
+ ],
22243
+ "reasoning_start_tag": "<think>",
22244
+ "reasoning_end_tag": "</think>",
22245
+ "tool_parser": "qwen"
22246
+ },
22247
+ {
22248
+ "version": 2,
22249
+ "context_length": 262144,
22250
+ "model_name": "Qwen3-Next-Instruct",
22251
+ "model_lang": [
22252
+ "en",
22253
+ "zh"
22254
+ ],
22255
+ "model_ability": [
22256
+ "chat",
22257
+ "tools"
22258
+ ],
22259
+ "model_description": "Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series",
22260
+ "model_specs": [
22261
+ {
22262
+ "model_format": "pytorch",
22263
+ "model_size_in_billions": 80,
22264
+ "activated_size_in_billions": 3,
22265
+ "model_src": {
22266
+ "huggingface": {
22267
+ "quantizations": [
22268
+ "none"
22269
+ ],
22270
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Instruct"
22271
+ },
22272
+ "modelscope": {
22273
+ "quantizations": [
22274
+ "none"
22275
+ ],
22276
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Instruct"
22277
+ }
22278
+ }
22279
+ },
22280
+ {
22281
+ "model_format": "fp8",
22282
+ "model_size_in_billions": 80,
22283
+ "activated_size_in_billions": 3,
22284
+ "model_src": {
22285
+ "huggingface": {
22286
+ "quantizations": [
22287
+ "fp8"
22288
+ ],
22289
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Instruct-FP8"
22290
+ },
22291
+ "modelscope": {
22292
+ "quantizations": [
22293
+ "fp8"
22294
+ ],
22295
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Instruct-FP8"
22296
+ }
22297
+ }
22298
+ },
22299
+ {
22300
+ "model_format": "awq",
22301
+ "model_size_in_billions": 80,
22302
+ "activated_size_in_billions": 3,
22303
+ "model_src": {
22304
+ "huggingface": {
22305
+ "quantizations": [
22306
+ "4bit",
22307
+ "8bit"
22308
+ ],
22309
+ "model_id": "cpatonn/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}"
22310
+ },
22311
+ "modelscope": {
22312
+ "quantizations": [
22313
+ "4bit",
22314
+ "8bit"
22315
+ ],
22316
+ "model_id": "cpatonn-mirror/Qwen3-Next-80B-A3B-Instruct-AWQ-{quantization}"
22317
+ }
22318
+ }
22319
+ },
22320
+ {
22321
+ "model_format": "mlx",
22322
+ "model_size_in_billions": 80,
22323
+ "activated_size_in_billions": 3,
22324
+ "model_src": {
22325
+ "huggingface": {
22326
+ "quantizations": [
22327
+ "4bit",
22328
+ "5bit",
22329
+ "6bit",
22330
+ "8bit"
22331
+ ],
22332
+ "model_id": "mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}"
22333
+ },
22334
+ "modelscope": {
22335
+ "quantizations": [
22336
+ "4bit",
22337
+ "5bit",
22338
+ "6bit",
22339
+ "8bit"
22340
+ ],
22341
+ "model_id": "mlx-community/Qwen3-Next-80B-A3B-Instruct-{quantization}"
22342
+ }
22343
+ }
22344
+ }
22345
+ ],
22346
+ "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{%- 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 {{- '<|im_start|>' + message.role + '\\n' + content }}\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 %}",
22347
+ "stop_token_ids": [
22348
+ 151643,
22349
+ 151645
22350
+ ],
22351
+ "stop": [
22352
+ "<|endoftext|>",
22353
+ "<|im_end|>"
22354
+ ],
22355
+ "tool_parser": "qwen"
22356
+ },
22357
+ {
22358
+ "version": 2,
22359
+ "context_length": 262144,
22360
+ "model_name": "Qwen3-Next-Thinking",
22361
+ "model_lang": [
22362
+ "en",
22363
+ "zh"
22364
+ ],
22365
+ "model_ability": [
22366
+ "chat",
22367
+ "reasoning",
22368
+ "tools"
22369
+ ],
22370
+ "model_description": "Qwen3-Next-80B-A3B is the first installment in the Qwen3-Next series",
22371
+ "model_specs": [
22372
+ {
22373
+ "model_format": "pytorch",
22374
+ "model_size_in_billions": 80,
22375
+ "activated_size_in_billions": 3,
22376
+ "model_src": {
22377
+ "huggingface": {
22378
+ "quantizations": [
22379
+ "none"
22380
+ ],
22381
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Thinking"
22382
+ },
22383
+ "modelscope": {
22384
+ "quantizations": [
22385
+ "none"
22386
+ ],
22387
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Thinking"
22388
+ }
22389
+ }
22390
+ },
22391
+ {
22392
+ "model_format": "fp8",
22393
+ "model_size_in_billions": 80,
22394
+ "activated_size_in_billions": 3,
22395
+ "model_src": {
22396
+ "huggingface": {
22397
+ "quantizations": [
22398
+ "fp8"
22399
+ ],
22400
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Thinking-FP8"
22401
+ },
22402
+ "modelscope": {
22403
+ "quantizations": [
22404
+ "fp8"
22405
+ ],
22406
+ "model_id": "Qwen/Qwen3-Next-80B-A3B-Thinking-FP8"
22407
+ }
22408
+ }
22409
+ },
22410
+ {
22411
+ "model_format": "awq",
22412
+ "model_size_in_billions": 80,
22413
+ "activated_size_in_billions": 3,
22414
+ "model_src": {
22415
+ "huggingface": {
22416
+ "quantizations": [
22417
+ "4bit",
22418
+ "8bit"
22419
+ ],
22420
+ "model_id": "cpatonn/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}"
22421
+ },
22422
+ "modelscope": {
22423
+ "quantizations": [
22424
+ "4bit",
22425
+ "8bit"
22426
+ ],
22427
+ "model_id": "cpatonn-mirror/Qwen3-Next-80B-A3B-Thinking-AWQ-{quantization}"
22428
+ }
22429
+ }
22430
+ },
22431
+ {
22432
+ "model_format": "mlx",
22433
+ "model_size_in_billions": 80,
22434
+ "activated_size_in_billions": 3,
22435
+ "model_src": {
22436
+ "huggingface": {
22437
+ "quantizations": [
22438
+ "4bit",
22439
+ "5bit",
22440
+ "6bit",
22441
+ "8bit"
22442
+ ],
22443
+ "model_id": "mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}"
22444
+ },
22445
+ "modelscope": {
22446
+ "quantizations": [
22447
+ "4bit",
22448
+ "5bit",
22449
+ "6bit",
22450
+ "8bit"
22451
+ ],
22452
+ "model_id": "mlx-community/Qwen3-Next-80B-A3B-Thinking-{quantization}"
22453
+ }
22454
+ }
22455
+ }
22456
+ ],
22457
+ "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 %}",
22458
+ "stop_token_ids": [
22459
+ 151643,
22460
+ 151645
22461
+ ],
22462
+ "stop": [
22463
+ "<|endoftext|>",
22464
+ "<|im_end|>"
22465
+ ],
22466
+ "reasoning_start_tag": "<think>",
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
+ ],
22676
+ "tool_parser":"qwen"
21552
22677
  }
21553
22678
  ]