{
"_id": "69a380a0ae63980df575326b",
"id": "Qwen/Qwen3.5-2B",
"private": false,
"pipeline_tag": "image-text-to-text",
"library_name": "transformers",
"tags": [
"transformers",
"safetensors",
"qwen3_5",
"image-text-to-text",
"conversational",
"base_model:Qwen/Qwen3.5-2B-Base",
"base_model:finetune:Qwen/Qwen3.5-2B-Base",
"license:apache-2.0",
"eval-results",
"endpoints_compatible",
"deploy:sagemaker",
"deploy:azure",
"region:us"
],
"downloads": 3648202,
"likes": 473,
"modelId": "Qwen/Qwen3.5-2B",
"author": "Qwen",
"sha": "15852e8c16360a2fea060d615a32b45270f8a8fc",
"lastModified": "2026-03-02T11:26:29.000Z",
"gated": false,
"disabled": false,
"widgetData": [
{
"text": "Hi, what can you help me with?"
},
{
"text": "What is 84 * 3 / 2?"
},
{
"text": "Tell me an interesting fact about the universe!"
},
{
"text": "Explain quantum computing in simple terms."
}
],
"model-index": null,
"config": {
"architectures": [
"Qwen3_5ForConditionalGeneration"
],
"model_type": "qwen3_5",
"tokenizer_config": {
"bos_token": null,
"eos_token": "<|im_end|>",
"unk_token": null,
"pad_token": "<|endoftext|>",
"chat_template": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\n {%- if content is string %}\n {{- content }}\n {%- elif content is iterable and content is not mapping %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain images.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Picture ' ~ image_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain videos.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Video ' ~ video_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- else %}\n {{- raise_exception('Unexpected item type in content.') }}\n {%- endif %}\n {%- endfor %}\n {%- elif content is none or content is undefined %}\n {{- '' }}\n {%- else %}\n {{- raise_exception('Unexpected content type.') }}\n {%- endif %}\n{%- endmacro %}\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- '<|im_start|>system\\n' }}\n {{- \"# Tools\\n\\nYou have access to the following functions:\\n\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\" }}\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n\\n\\n\\nvalue_1\\n\\n\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n\\n\\n\\n\\n\\nReminder:\\n- Function calls MUST follow the specified format: an inner block must be nested within XML tags\\n- Required parameters MUST be specified\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '\\n\\n' + content }}\n {%- endif %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {{- '<|im_start|>system\\n' + 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\" %}\n {%- set content = render_content(message.content, false)|trim %}\n {%- if not(content.startswith('') and content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if ns.multi_step_tool %}\n {{- raise_exception('No user query found in messages.') }}\n{%- endif %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, true)|trim %}\n {%- if message.role == \"system\" %}\n {%- if not loop.first %}\n {{- raise_exception('System message must be at the beginning.') }}\n {%- endif %}\n {%- elif message.role == \"user\" %}\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 '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- set reasoning_content = reasoning_content|trim %}\n {%- if loop.index0 > ns.last_query_index %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content + '\\n\\n\\n' + content }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if loop.first %}\n {%- if content|trim %}\n {{- '\\n\\n\\n\\n' }}\n {%- else %}\n {{- '\\n\\n' }}\n {%- endif %}\n {%- else %}\n {{- '\\n\\n\\n' }}\n {%- endif %}\n {%- if tool_call.arguments is defined %}\n {%- for args_name, args_value in tool_call.arguments|items %}\n {{- '\\n' }}\n {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}\n {{- args_value }}\n {{- '\\n\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if not loop.last and loop.nextitem.role != \"tool\" %}\n {{- '<|im_end|>\\n' }}\n {%- elif loop.last %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- else %}\n {{- raise_exception('Unexpected message role.') }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is true %}\n {{- '\\n' }}\n {%- else %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}"
},
"chat_template_jinja": "{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- macro render_content(content, do_vision_count, is_system_content=false) %}\n {%- if content is string %}\n {{- content }}\n {%- elif content is iterable and content is not mapping %}\n {%- for item in content %}\n {%- if 'image' in item or 'image_url' in item or item.type == 'image' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain images.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set image_count.value = image_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Picture ' ~ image_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|image_pad|><|vision_end|>' }}\n {%- elif 'video' in item or item.type == 'video' %}\n {%- if is_system_content %}\n {{- raise_exception('System message cannot contain videos.') }}\n {%- endif %}\n {%- if do_vision_count %}\n {%- set video_count.value = video_count.value + 1 %}\n {%- endif %}\n {%- if add_vision_id %}\n {{- 'Video ' ~ video_count.value ~ ': ' }}\n {%- endif %}\n {{- '<|vision_start|><|video_pad|><|vision_end|>' }}\n {%- elif 'text' in item %}\n {{- item.text }}\n {%- else %}\n {{- raise_exception('Unexpected item type in content.') }}\n {%- endif %}\n {%- endfor %}\n {%- elif content is none or content is undefined %}\n {{- '' }}\n {%- else %}\n {{- raise_exception('Unexpected content type.') }}\n {%- endif %}\n{%- endmacro %}\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n{%- if tools and tools is iterable and tools is not mapping %}\n {{- '<|im_start|>system\\n' }}\n {{- \"# Tools\\n\\nYou have access to the following functions:\\n\\n\" }}\n {%- for tool in tools %}\n {{- \"\\n\" }}\n {{- tool | tojson }}\n {%- endfor %}\n {{- \"\\n\" }}\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n\\n\\n\\nvalue_1\\n\\n\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n\\n\\n\\n\\n\\nReminder:\\n- Function calls MUST follow the specified format: an inner block must be nested within XML tags\\n- Required parameters MUST be specified\\n- You may provide optional reasoning for your function call in natural language BEFORE the function call, but NOT after\\n- If there is no function call available, answer the question like normal with your current knowledge and do not tell the user about function calls\\n' }}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {%- if content %}\n {{- '\\n\\n' + content }}\n {%- endif %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n{%- else %}\n {%- if messages[0].role == 'system' %}\n {%- set content = render_content(messages[0].content, false, true)|trim %}\n {{- '<|im_start|>system\\n' + 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\" %}\n {%- set content = render_content(message.content, false)|trim %}\n {%- if not(content.startswith('') and content.endswith('')) %}\n {%- set ns.multi_step_tool = false %}\n {%- set ns.last_query_index = index %}\n {%- endif %}\n {%- endif %}\n{%- endfor %}\n{%- if ns.multi_step_tool %}\n {{- raise_exception('No user query found in messages.') }}\n{%- endif %}\n{%- for message in messages %}\n {%- set content = render_content(message.content, true)|trim %}\n {%- if message.role == \"system\" %}\n {%- if not loop.first %}\n {{- raise_exception('System message must be at the beginning.') }}\n {%- endif %}\n {%- elif message.role == \"user\" %}\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 '' in content %}\n {%- set reasoning_content = content.split('')[0].rstrip('\\n').split('')[-1].lstrip('\\n') %}\n {%- set content = content.split('')[-1].lstrip('\\n') %}\n {%- endif %}\n {%- endif %}\n {%- set reasoning_content = reasoning_content|trim %}\n {%- if loop.index0 > ns.last_query_index %}\n {{- '<|im_start|>' + message.role + '\\n\\n' + reasoning_content + '\\n\\n\\n' + content }}\n {%- else %}\n {{- '<|im_start|>' + message.role + '\\n' + content }}\n {%- endif %}\n {%- if message.tool_calls and message.tool_calls is iterable and message.tool_calls is not mapping %}\n {%- for tool_call in message.tool_calls %}\n {%- if tool_call.function is defined %}\n {%- set tool_call = tool_call.function %}\n {%- endif %}\n {%- if loop.first %}\n {%- if content|trim %}\n {{- '\\n\\n\\n\\n' }}\n {%- else %}\n {{- '\\n\\n' }}\n {%- endif %}\n {%- else %}\n {{- '\\n\\n\\n' }}\n {%- endif %}\n {%- if tool_call.arguments is defined %}\n {%- for args_name, args_value in tool_call.arguments|items %}\n {{- '\\n' }}\n {%- set args_value = args_value | tojson | safe if args_value is mapping or (args_value is sequence and args_value is not string) else args_value | string %}\n {{- args_value }}\n {{- '\\n\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '\\n' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}\n {{- '<|im_start|>user' }}\n {%- endif %}\n {{- '\\n\\n' }}\n {{- content }}\n {{- '\\n' }}\n {%- if not loop.last and loop.nextitem.role != \"tool\" %}\n {{- '<|im_end|>\\n' }}\n {%- elif loop.last %}\n {{- '<|im_end|>\\n' }}\n {%- endif %}\n {%- else %}\n {{- raise_exception('Unexpected message role.') }}\n {%- endif %}\n{%- endfor %}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is true %}\n {{- '\\n' }}\n {%- else %}\n {{- '\\n\\n\\n\\n' }}\n {%- endif %}\n{%- endif %}"
},
"cardData": {
"library_name": "transformers",
"license": "apache-2.0",
"license_link": "https://huggingface.co/Qwen/Qwen3.5-2B/blob/main/LICENSE",
"pipeline_tag": "image-text-to-text",
"base_model": [
"Qwen/Qwen3.5-2B-Base"
]
},
"transformersInfo": {
"auto_model": "AutoModelForMultimodalLM",
"pipeline_tag": "image-text-to-text",
"processor": "AutoProcessor"
},
"siblings": [
{
"rfilename": ".gitattributes",
"blobId": "52373fe24473b1aa44333d318f578ae6bf04b49b",
"size": 1570
},
{
"rfilename": "LICENSE",
"blobId": "f938136e3adacfd92be087f6e113b5d6d97f678f",
"size": 11544
},
{
"rfilename": "README.md",
"blobId": "2efa49d346c547ea81cd3d1310f414df25934f45",
"size": 62814
},
{
"rfilename": "chat_template.jinja",
"blobId": "0ef09f214eaa6d9bca297988afc1454b5827b2c7",
"size": 7755
},
{
"rfilename": "config.json",
"blobId": "d30a15be1bbfd610f58ad80f1fbeb6778f58a80f",
"size": 2908
},
{
"rfilename": "merges.txt",
"blobId": "a494e019ca1502219fd0128658b979e5f05ae8e8",
"size": 3353259
},
{
"rfilename": "model.safetensors-00001-of-00001.safetensors",
"blobId": "3868ead7f1658210f24643fa927afa7d9717083c",
"size": 4548221488,
"lfs": {
"sha256": "aa33250c4fc64891ddfaba3a314fd9542ea371843c387178b425fbcc5ed680b1",
"size": 4548221488,
"pointerSize": 135
}
},
{
"rfilename": "model.safetensors.index.json",
"blobId": "69a41758e1138259916d08b99b56fada441fd502",
"size": 64460
},
{
"rfilename": "preprocessor_config.json",
"blobId": "2ea84a437d448ff71b08df68fdd949d5cc4ebb64",
"size": 390
},
{
"rfilename": "tokenizer.json",
"blobId": "a73a846725794819aa6e1c9e97d8dc9671c2006d",
"size": 12807982,
"lfs": {
"sha256": "5f9e4d4901a92b997e463c1f46055088b6cca5ca61a6522d1b9f64c4bb81cb42",
"size": 12807982,
"pointerSize": 133
}
},
{
"rfilename": "tokenizer_config.json",
"blobId": "fae3ce993e07c092ad024dde45e592379fde91bb",
"size": 16709
},
{
"rfilename": "video_preprocessor_config.json",
"blobId": "3ba673a5ad7d4d13f54155ecd38b2a94a6dac8fe",
"size": 385
},
{
"rfilename": "vocab.json",
"blobId": "0aa0ce0658d60ac4a5d609f4eadb0e8e43514176",
"size": 6722759
}
],
"spaces": [
"pliny-the-prompter/obliteratus",
"webml-community/Qwen3.5-WebGPU",
"prithivMLmods/SAM3-Plus-Qwen3.5",
"artificialguybr/Video-Transcription-Smart-Summary",
"embedl/hfviewer",
"artificialguybr/qwen-chat-demo",
"Qwen/QwenScope",
"build-small-hackathon/LocalDuo",
"dqy08/InfoLens1",
"openenv/coding_env",
"remyxai/Feature-Finder",
"amaljoe88/vision-coder-openenv",
"openenv/echo_env",
"prithivMLmods/Multimodal-Edge-Node",
"yuhangzang/Valen-Preview-0923",
"emanforhelp/model-pulse",
"openenv/atari_env",
"openenv/openspiel_env",
"dumbordumber/obliteratus",
"Kodacoda/obliteratus",
"isahsn/MultyModelsChatbot",
"openenv/sudoku",
"rbinrs/obliteratus",
"kicfk/obliteratus",
"Chama29929/flan-t5-small-chat",
"Ev3Dev/Bio-EnvRL",
"aaahmet/obliteratus",
"Deadmon/obliteratus",
"Ngixdev/obliteratus",
"Silavon/Qwen3.5-WebGPU",
"z4iXsECHS6ND-heighTSAI-INSEGCSyX6T-SYS-ROD/Qwen3.5-WebGPU",
"Dexifried/dex-swarm-engine",
"Carnot-EBM/hallucination-detector",
"tacomilezdeeepdale/QwenScope",
"jokernifty/IND-blogger",
"Wstanislawek/RxAI-Micro-2B-Chat-Demo",
"build-small-hackathon/blind-quill",
"Girlz/TokenTrace",
"hugging-apps/internvla-a1-5-vla-explorer",
"RavichandranJ/obliteratus",
"S-Dreamer/obliteratus",
"AlanaSky/asgaard",
"marchkamal51/obliteratus",
"AdithyaSK/NayanaOCRBench",
"nolancassidy/s1v-decision-explorer",
"Steveeeeeeen/smallest-s2s",
"hugging-apps/locus-2b-grounding",
"openenv/chat_env",
"openenv/sumo_rl_env",
"openenv/tbench2",
"openenv/browsergym_env",
"openenv/wordle",
"Nt-animes/1.7b",
"cw4444/obliteratus",
"kalmuahlaunda/obliteratus",
"ankushthehacker5/Qwen3.5-WebGPU",
"sub314xxl/obliteratus",
"mastodonitis/obliteratus",
"GrozniMilitq/obliteratus",
"liminal4423/obliteratus",
"aiqtech/Qwen3.5-WebGPU",
"Marcop4/Qwen3.5-WebGPU",
"duarffodog/obliteratus",
"Joaco2802/ProductDescription",
"Joaco2802/Product_Clasification",
"cypher109/obliteratus",
"Xero1/Qwen-3.5-HF-Demo",
"Ev3Dev/hackathon",
"nagose/qw2b",
"milkygingers/obliteratus",
"TOpNeT7/obliteratus",
"kirikir13/obliteratus",
"flwa/ohmy2",
"jellewas/pii-nl-bench",
"RaccoonStampede/obliteratus",
"ntcuong2103/Qwen-3.5-Multimodal-Demo",
"bofbofai/Qwen3.5-WebGPU",
"highkay/ohmycaptcha",
"jellewas/gdpr-lora-v2train",
"zbq111/flow",
"dragg2/mycaptcha",
"Hk4crprasad/email-triage-env",
"impresionist/OBLITERATUS",
"dragggl25/ohmycaptchaa",
"zzdccww/zzdccww-ohmycaptcha",
"bresseporix22/obliteratus",
"Sendpns/obliteratus",
"oceanicdayi/Qwen3.5-WebGPU",
"digifreely/chatmessenger",
"huezcy/ohmycaptcha",
"mehraz203/zzdccww-ohmycaptcha",
"Valtry/Qwen",
"jessy38472/obliteratus",
"error5920/ohmycaptcha",
"eyalnof123/football-fan-space",
"epixdonkey/obliteratus",
"ymonoce/obliteratus",
"sidmaz666/qwen3.5api",
"Mattral/Qwen3.5-WebGPU",
"ehsaaniqbal/circuit-detective"
],
"createdAt": "2026-02-28T23:56:16.000Z",
"safetensors": {
"parameters": {
"F32": 2592,
"BF16": 2274067232
},
"total": 2274069824
},
"usedStorage": 4561029470
}