{ "_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", "flwa/ohmy2", "kirikir13/obliteratus", "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 }