Image-Text-to-Text
Transformers
Safetensors
English
qwen3_5
text-generation-inference
unsloth
conversational
Instructions to use SvalTek/Q3-ChatThink-9B-TestZZ with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use SvalTek/Q3-ChatThink-9B-TestZZ with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="SvalTek/Q3-ChatThink-9B-TestZZ") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("SvalTek/Q3-ChatThink-9B-TestZZ") model = AutoModelForMultimodalLM.from_pretrained("SvalTek/Q3-ChatThink-9B-TestZZ", device_map="auto") messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] inputs = processor.apply_chat_template( messages, add_generation_prompt=True, tokenize=True, return_dict=True, return_tensors="pt", ).to(model.device) outputs = model.generate(**inputs, max_new_tokens=40) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use SvalTek/Q3-ChatThink-9B-TestZZ with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "SvalTek/Q3-ChatThink-9B-TestZZ" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SvalTek/Q3-ChatThink-9B-TestZZ", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/SvalTek/Q3-ChatThink-9B-TestZZ
- SGLang
How to use SvalTek/Q3-ChatThink-9B-TestZZ with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "SvalTek/Q3-ChatThink-9B-TestZZ" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SvalTek/Q3-ChatThink-9B-TestZZ", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "SvalTek/Q3-ChatThink-9B-TestZZ" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "SvalTek/Q3-ChatThink-9B-TestZZ", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Unsloth Studio
How to use SvalTek/Q3-ChatThink-9B-TestZZ with Unsloth Studio:
Install Unsloth Studio (macOS, Linux, WSL)
curl -fsSL https://unsloth.ai/install.sh | sh # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for SvalTek/Q3-ChatThink-9B-TestZZ to start chatting
Install Unsloth Studio (Windows)
irm https://unsloth.ai/install.ps1 | iex # Run unsloth studio unsloth studio -H 0.0.0.0 -p 8888 # Then open http://localhost:8888 in your browser # Search for SvalTek/Q3-ChatThink-9B-TestZZ to start chatting
Using HuggingFace Spaces for Unsloth
# No setup required # Open https://huggingface.co/spaces/unsloth/studio in your browser # Search for SvalTek/Q3-ChatThink-9B-TestZZ to start chatting
Load model with FastModel
pip install unsloth from unsloth import FastModel model, tokenizer = FastModel.from_pretrained( model_name="SvalTek/Q3-ChatThink-9B-TestZZ", max_seq_length=2048, ) - Docker Model Runner
How to use SvalTek/Q3-ChatThink-9B-TestZZ with Docker Model Runner:
docker model run hf.co/SvalTek/Q3-ChatThink-9B-TestZZ
| { | |
| "add_prefix_space": false, | |
| "audio_bos_token": "<|audio_start|>", | |
| "audio_eos_token": "<|audio_end|>", | |
| "audio_token": "<|audio_pad|>", | |
| "backend": "tokenizers", | |
| "bos_token": null, | |
| "clean_up_tokenization_spaces": false, | |
| "eos_token": "<|im_end|>", | |
| "errors": "replace", | |
| "image_token": "<|image_pad|>", | |
| "is_local": false, | |
| "local_files_only": false, | |
| "model_max_length": 262144, | |
| "model_specific_special_tokens": { | |
| "audio_bos_token": "<|audio_start|>", | |
| "audio_eos_token": "<|audio_end|>", | |
| "audio_token": "<|audio_pad|>", | |
| "image_token": "<|image_pad|>", | |
| "video_token": "<|video_pad|>", | |
| "vision_bos_token": "<|vision_start|>", | |
| "vision_eos_token": "<|vision_end|>" | |
| }, | |
| "pad_token": "<|endoftext|>", | |
| "padding_side": "right", | |
| "pretokenize_regex": "(?i:'s|'t|'re|'ve|'m|'ll|'d)|[^\\r\\n\\p{L}\\p{N}]?[\\p{L}\\p{M}]+|\\p{N}| ?[^\\s\\p{L}\\p{M}\\p{N}]+[\\r\\n]*|\\s*[\\r\\n]+|\\s+(?!\\S)|\\s+", | |
| "processor_class": "Qwen3VLProcessor", | |
| "split_special_tokens": false, | |
| "tokenizer_class": "Qwen2Tokenizer", | |
| "unk_token": null, | |
| "video_token": "<|video_pad|>", | |
| "vision_bos_token": "<|vision_start|>", | |
| "vision_eos_token": "<|vision_end|>", | |
| "added_tokens_decoder": { | |
| "248044": { | |
| "content": "<|endoftext|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248045": { | |
| "content": "<|im_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248046": { | |
| "content": "<|im_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248047": { | |
| "content": "<|object_ref_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248048": { | |
| "content": "<|object_ref_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248049": { | |
| "content": "<|box_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248050": { | |
| "content": "<|box_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248051": { | |
| "content": "<|quad_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248052": { | |
| "content": "<|quad_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248053": { | |
| "content": "<|vision_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248054": { | |
| "content": "<|vision_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248055": { | |
| "content": "<|vision_pad|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248056": { | |
| "content": "<|image_pad|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248057": { | |
| "content": "<|video_pad|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248058": { | |
| "content": "<tool_call>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248059": { | |
| "content": "</tool_call>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248060": { | |
| "content": "<|fim_prefix|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248061": { | |
| "content": "<|fim_middle|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248062": { | |
| "content": "<|fim_suffix|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248063": { | |
| "content": "<|fim_pad|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248064": { | |
| "content": "<|repo_name|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248065": { | |
| "content": "<|file_sep|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248066": { | |
| "content": "<tool_response>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248067": { | |
| "content": "</tool_response>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248068": { | |
| "content": "<think>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248069": { | |
| "content": "</think>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": false | |
| }, | |
| "248070": { | |
| "content": "<|audio_start|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248071": { | |
| "content": "<|audio_end|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248072": { | |
| "content": "<tts_pad>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248073": { | |
| "content": "<tts_text_bos>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248074": { | |
| "content": "<tts_text_eod>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248075": { | |
| "content": "<tts_text_bos_single>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| }, | |
| "248076": { | |
| "content": "<|audio_pad|>", | |
| "single_word": false, | |
| "lstrip": false, | |
| "rstrip": false, | |
| "normalized": false, | |
| "special": true | |
| } | |
| }, | |
| "chat_template": "{# Define the macros for XML conversion #}\n{%- macro render_item_list(item_list, tag_name='required') -%}\n {%- if item_list is defined and item_list is iterable and item_list | length > 0 -%}\n <{{ tag_name }}>[{{- item_list | join(\", \") -}}]</{{ tag_name }}>\n {%- endif -%}\n{%- endmacro -%}\n\n{%- macro render_extra_keys(json_dict, handled_keys) -%}\n {%- if json_dict is mapping -%}\n {%- for json_key in json_dict if json_key not in handled_keys -%}\n <{{ json_key }}>{{ json_dict[json_key] }}</{{ json_key }}>\n {%- endfor -%}\n {%- endif -%}\n{%- endmacro -%}\n\n\n{%- set image_count = namespace(value=0) %}\n{%- set video_count = namespace(value=0) %}\n{%- set add_vision_id = add_vision_id if add_vision_id is defined else true %}\n\n{# Set Instruct mode here #}\n\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 is mapping and item.get('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 is mapping and item.get('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 item is mapping and '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\n{%- if not messages %}\n {{- raise_exception('No messages provided.') }}\n{%- endif %}\n\n{# Flag to prevent double-rendering system prompt #}\n{%- set ns = namespace(system_rendered=false) %}\n\n{%- if tools and tools is iterable and tools is not mapping %}\n\n {{- '<|im_start|>system\\n# Tools\\n\\nYou have access to the following functions:\\n\\n<tools>' -}}\n {%- for tool in tools -%}\n {%- set function = tool.function -%}\n {{- \"\\n<tool>\\n<name>\" + function.name + \"</name>\\n<description>\" + function.description + \"</description>\" -}}\n {%- if function.parameters and function.parameters.properties -%}\n {%- for param_name, param_details in function.parameters.properties.items() -%}\n {{- \"\\n<parameter>\\n<name>\" + param_name + \"</name>\\n<type>\" + param_details.type + \"</type>\\n<description>\" + (param_details.description | default('')) + \"</description>\" -}}\n {{- render_item_list(function.parameters.required) -}}\n {{- render_extra_keys(param_details, ['type', 'description']) -}}\n {{- \"\\n</parameter>\" -}}\n {%- endfor -%}\n {%- endif -%}\n {{- \"\\n</tool>\" -}}\n {%- endfor -%}\n\n {{- '\\n\\nIf you choose to call a function ONLY reply in the following format with NO suffix:\\n\\n<tool_call>\\n<function=example_function_name>\\n<parameter=example_parameter_1>\\nvalue_1\\n</parameter>\\n<parameter=example_parameter_2>\\nThis is the value for the second parameter\\nthat can span\\nmultiple lines\\n</parameter>\\n</function>\\n</tool_call>\\n\\n<IMPORTANT>\\nReminder:\\n- Function calls MUST follow the specified format: an inner <function=...></function> block must be nested within <tool_call></tool_call> 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</IMPORTANT>' }}\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 {%- set ns.system_rendered = true %}\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 {%- set ns.system_rendered = true %}\n {%- endif %}\n{%- endif %}\n\n{# Main Message Loop #}\n{%- for message in messages %}\n {%- if message.role == \"system\" and ns.system_rendered and loop.first %}\n {%- continue %}\n {%- endif %}\n\n {%- set content = render_content(message.content, true)|trim %}\n \n {%- if message.role == \"system\" %}\n {{- '<|im_start|>system\\n' + content + '<|im_end|>\\n' }}\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 defined and message.reasoning_content is string %}\n {%- set reasoning_content = message.reasoning_content | trim %}\n {%- elif '<think>' in content and '</think>' in content %}\n {%- set reasoning_content = content.split('</think>')[0].split('<think>')[-1] | trim %}\n {%- set content = content.split('</think>')[-1] | trim %}\n {%- endif %}\n\n {{- '<|im_start|>' + message.role + '\\n' }}\n \n {%- if reasoning_content %}\n {{- '<think>\\n' + reasoning_content + '\\n</think>\\n\\n' }}\n {%- endif %}\n \n {{- content }}\n\n {# Tool call formatting #}\n {%- if message.tool_calls %}\n {%- for tool_call in message.tool_calls %}\n {%- set tc = tool_call.function if tool_call.function is defined else tool_call %}\n {%- if loop.first and content %}{{- '\\n\\n' }}{%- elif not loop.first %}{{- '\\n' }}{%- endif %}\n {{- '<tool_call>\\n<function=' + tc.name + '>\\n' }}\n {%- for args_name, args_value in tc.arguments|items %}\n {{- '<parameter=' + args_name + '>\\n' }}\n {{- (args_value | tojson | safe if args_value is mapping or args_value is sequence else args_value | string) + '\\n</parameter>\\n' }}\n {%- endfor %}\n {{- '</function>\\n</tool_call>' }}\n {%- endfor %}\n {%- endif %}\n {{- '<|im_end|>\\n' }}\n {%- elif message.role == \"tool\" %}\n {%- if loop.previtem and loop.previtem.role != \"tool\" %}{{- '<|im_start|>user' }}{%- endif %}\n {{- '\\n<tool_response>\\n' + content + '\\n</tool_response>' }}\n {%- if loop.last or (loop.nextitem and loop.nextitem.role != \"tool\") %}{{- '<|im_end|>\\n' }}{%- endif %}\n {%- endif %}\n{%- endfor %}\n\n{# Final Generation Prompt #}\n{%- if add_generation_prompt %}\n {{- '<|im_start|>assistant\\n' }}\n {%- if enable_thinking is defined and enable_thinking is false %}\n {{- '<think>\\n\\n</think>\\n\\n' }}\n {%- else %}\n {{- '<think>\\n' }}\n {%- endif %}\n{%- endif %}" | |
| } |