Instructions to use trl-internal-testing/tiny-MuseSparkForConditionalGeneration with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use trl-internal-testing/tiny-MuseSparkForConditionalGeneration with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="trl-internal-testing/tiny-MuseSparkForConditionalGeneration") 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)# pip install -U transformers accelerate # Load model directly from transformers import AutoProcessor, AutoModelForMultimodalLM processor = AutoProcessor.from_pretrained("trl-internal-testing/tiny-MuseSparkForConditionalGeneration") model = AutoModelForMultimodalLM.from_pretrained("trl-internal-testing/tiny-MuseSparkForConditionalGeneration", 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=256) print(processor.decode(outputs[0][inputs["input_ids"].shape[-1]:])) - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use trl-internal-testing/tiny-MuseSparkForConditionalGeneration with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "trl-internal-testing/tiny-MuseSparkForConditionalGeneration" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "trl-internal-testing/tiny-MuseSparkForConditionalGeneration", "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/trl-internal-testing/tiny-MuseSparkForConditionalGeneration
- SGLang
How to use trl-internal-testing/tiny-MuseSparkForConditionalGeneration 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 "trl-internal-testing/tiny-MuseSparkForConditionalGeneration" \ --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": "trl-internal-testing/tiny-MuseSparkForConditionalGeneration", "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 "trl-internal-testing/tiny-MuseSparkForConditionalGeneration" \ --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": "trl-internal-testing/tiny-MuseSparkForConditionalGeneration", "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" } } ] } ] }' - Docker Model Runner
How to use trl-internal-testing/tiny-MuseSparkForConditionalGeneration with Docker Model Runner:
docker model run hf.co/trl-internal-testing/tiny-MuseSparkForConditionalGeneration
File size: 16,295 Bytes
ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 c9e83e8 ceb9d94 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 | {%- set tools = tools | default(none) -%}
{%- set add_generation_prompt = add_generation_prompt | default(false) -%}
{%- set reasoning_effort = reasoning_effort | default('xhigh', true) -%}
{%- set cutoff_date = cutoff_date | default('2026-01-04') -%}
{%- set current_date = current_date | default(strftime_now('%Y-%m-%d') if strftime_now is defined else none) -%}
{%- set reasoning_effort_map = {'low': 8, 'medium': 32, 'high': 256, 'xhigh': 512} -%}
{%- if not (reasoning_effort is string and reasoning_effort in reasoning_effort_map) -%}
{{- raise_exception('Unsupported reasoning_effort: ' ~ reasoning_effort ~ '. Expected one of: low, medium, high, xhigh.') -}}
{%- endif -%}
{%- set deferred_render_mode = deferred_render_mode | default('tool_name_and_description') -%}
{#- Neutralise control sequences in caller-supplied text so it cannot be
tokenized as structure. "<|" is broken because every special token has the
form "<|...|>"; the bare media placeholders are broken because the
multimodal processor rewrites them positionally and a literal one in text
would desynchronise placeholders from the attached media. -#}
{%- macro esc(value) -%}
{{- value | string
| replace('<|', '< |')
| replace('<image>', '< image>')
| replace('<video>', '< video>')
| replace('<audio>', '< audio>') -}}
{%- endmacro -%}
{%- macro esc_header(value) -%}
{{- esc(value) | replace('\r', ' ') | replace('\n', ' ') -}}
{%- endmacro -%}
{%- macro esc_attr(value) -%}
{{- esc_header(value)
| replace('&', '&')
| replace('"', '"')
| replace("'", ''')
| replace('<', '<')
| replace('>', '>') -}}
{%- endmacro -%}
{%- macro render_content(content) -%}
{%- if content is string -%}
{{- esc(content) -}}
{%- elif content is not none -%}
{%- for part in content -%}
{%- set part_type = part.get('type', '') -%}
{%- if part_type in ['image', 'input_image', 'image_url'] -%}
{{- '<|patch|>' -}}
{%- elif part_type in ['video', 'input_video', 'video_url'] -%}
{{- '<|video|>' -}}
{%- elif part_type in ['audio', 'input_audio', 'audio_url'] -%}
{{- '<|audio|>' -}}
{%- elif part_type in ['text', 'input_text', 'output_text'] -%}
{{- esc(part.get('text', '')) -}}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endmacro -%}
{%- macro render_atem(tc) -%}
{%- set args = tc.function.arguments -%}
{%- if args is not mapping -%}
{{- raise_exception('This chat template requires tool_call.function.arguments to be a dict (mapping). The jinja sandbox has no JSON parser, so deserialize the arguments string before calling apply_chat_template.') -}}
{%- endif -%}
{{- '<atem:function_calls>\n<atem:invoke name="' -}}{{- esc_attr(tc.function.name) -}}{{- '">\n' -}}
{%- for k, v in args.items() -%}
{{- '<atem:parameter name="' -}}{{- esc_attr(k) -}}{{- '">' -}}
{%- if v is boolean -%}
{%- if v -%}
true
{%- else -%}
false
{%- endif -%}
{%- elif v is none -%}
null
{%- elif v is mapping or (v is iterable and v is not string) -%}
{{- esc(v | tojson) -}}
{%- else -%}
{{- esc(v) -}}
{%- endif -%}
{{- '</atem:parameter>\n' -}}
{%- endfor -%}
{{- '</atem:invoke>\n</atem:function_calls>' -}}
{%- endmacro -%}
{#- One function line, as the training renderer prints it. Deferred: name plus description and annotation
(tool_name_and_description) or annotation only (tool_name_only). Full: "additionalProperties": false is added
when the schema lacks it, and empty parameters become an empty object schema. -#}
{%- macro fn_line(name, fn, deferred) -%}
{%- set desc = fn.description if fn.description is defined and fn.description else '' -%}
{%- set p = fn.parameters if fn.parameters is defined and fn.parameters else {} -%}
{%- if deferred -%}
{%- set desc = ('' if deferred_render_mode == 'tool_name_only' else desc ~ ' ') ~ '[deferred: use tool_search to load full schema]' -%}
{{- '\n{"name": ' ~ esc(name | tojson) ~ ', "description": ' ~ esc(desc | tojson) ~ ', "defer_loading": true}' -}}
{%- else -%}
{%- if p is mapping and p | length == 0 -%}
{%- set p = '{"type": "object", "properties": {}, "additionalProperties": false}' -%}
{%- elif p is mapping and 'additionalProperties' not in p -%}
{%- set p = (p | tojson)[:-1] ~ ', "additionalProperties": false}' -%}
{%- else -%}
{%- set p = p | tojson -%}
{%- endif -%}
{{- '\n{"name": ' ~ esc(name | tojson) ~ ', "description": ' ~ esc(desc | tojson) ~ ', "parameters": ' ~ esc(p) ~ '}' -}}
{%- endif -%}
{%- endmacro -%}
{#- tools: OpenAI function tools, plus namespace tools {"type": "namespace", "name", "description", "defer_loading",
"tools": [function, ...]}. In a deferred namespace, functions without their own flag inherit the deferral; only
when some are true and some explicitly false do the explicitly eager ones keep their full schema. -#}
{%- macro render_tool_defs(tools) -%}
{{- 'In this environment you have access to a set of tools you can use to answer the user\'s question.\n\n' -}}
{{- 'You can invoke a function by writing a "<atem:function_calls>" block like the following as part of your reply to the user:\n' -}}
{{- '<atem:function_calls>\n<atem:invoke name="$FUNCTION_NAME">\n<atem:parameter name="$PARAMETER_NAME">$PARAMETER_VALUE</atem:parameter>\n...\n</atem:invoke>\n</atem:function_calls>\n\n' -}}
{{- 'String and scalar parameters should be specified as is, while lists and objects should use JSON format. Note that spaces for string values are not stripped. The output is not expected to be valid XML and is parsed with regular expressions.\n' -}}
{{- 'Here are the functions available in JSONSchema format:\n' -}}
{%- set td = namespace(meta='', fns='', loose=false) -%}
{%- for tool in tools -%}
{%- if tool.type is defined and tool.type == 'namespace' -%}
{%- set ns_deferred = tool.defer_loading is defined and tool.defer_loading -%}
{%- set ns_desc = tool.description if tool.description is defined and tool.description else '' -%}
{%- set members = tool.tools if tool.tools is defined and tool.tools else [] -%}
{%- set flags = namespace(t=false, f=false) -%}
{%- for m in members -%}
{%- set d = (m.function if m.function is defined else m).defer_loading -%}
{%- set flags.t = flags.t or d is not sameas false -%}
{%- set flags.f = flags.f or d is sameas false -%}
{%- endfor -%}
{%- if ns_deferred -%}
{%- set ns_desc = '[deferred: use tool_search to load descriptions and schemas]' if deferred_render_mode == 'tool_name_only' else (ns_desc ~ ' ' if ns_desc else '') ~ '[deferred: use tool_search to discover functions]' -%}
{%- endif -%}
{%- set td.meta = td.meta ~ '\n{"name": ' ~ esc(tool.name | tojson) ~ ', "description": ' ~ esc(ns_desc | tojson) ~ (', "has_deferred_functions": true}' if ns_deferred else '}') -%}
{%- for m in members -%}
{%- set mfn = m.function if m.function is defined else m -%}
{%- set eager = flags.t and flags.f and mfn.defer_loading is defined and mfn.defer_loading is sameas false -%}
{%- if not ns_deferred or eager or deferred_render_mode == 'tool_name_only' -%}
{%- set td.fns = td.fns ~ fn_line(tool.name ~ '.' ~ mfn.name, mfn, (not eager) if ns_deferred else (mfn.defer_loading is defined and mfn.defer_loading)) -%}
{%- endif -%}
{%- endfor -%}
{%- else -%}
{%- set fn = tool.function if tool.function is defined else tool -%}
{%- set td.meta = td.meta ~ ('' if td.loose else '\n{"name": "", "description": ""}') -%}
{%- set td.loose = true -%}
{%- set td.fns = td.fns ~ fn_line(fn.name, fn, fn.defer_loading is defined and fn.defer_loading) -%}
{%- endif -%}
{%- endfor -%}
{{- '// Tool metadata' ~ td.meta ~ '\n// Function schemas' ~ td.fns -}}
{{- '\n\n' -}}
{{- 'Here are examples of how to call functions in the tool set. To make parallel tool calls, emit each call as its own message (one tool call per message) in consecutive messages, as shown below:\n' -}}
{{- '(If the tool namespace is not specified, invoke the function directly as `example_function_name_1` rather than `example_tool_name_1.example_function_name_1`)\n\n' -}}
{{- 'to=example_tool_name_1.example_function_name_1\n\n' -}}
{{- '<atem:function_calls>\n<atem:invoke name="example_tool_name_1.example_function_name_1">\n' -}}
{{- '<atem:parameter name="example_parameter_1">value_1</atem:parameter>\n' -}}
{{- '</atem:invoke>\n</atem:function_calls>\n\n' -}}
{{- 'to=example_tool_name_2.example_function_name_2\n\n' -}}
{{- '<atem:function_calls>\n<atem:invoke name="example_tool_name_2.example_function_name_2">\n' -}}
{{- '<atem:parameter name="example_parameter_2">This is the value for the second parameter\nthat can span\n"multiple" lines\n</atem:parameter>\n' -}}
{{- '<atem:parameter name="example_parameter_3">value_3</atem:parameter>\n' -}}
{{- '</atem:invoke>\n</atem:function_calls>' -}}
{%- endmacro -%}
{%- macro render_valid_recipients(tools) -%}
{%- set rns = namespace(recipients=[]) -%}
{{- 'Use the appropriate recipient for each message:\n\n' -}}
{%- set rns.recipients = rns.recipients + ['"self"'] -%}
{{- '- "self": private reasoning and tool planning.\n' -}}
{%- set rns.recipients = rns.recipients + ['"commentary"'] -%}
{{- '- "commentary": user-visible intermediate updates while the assistant will continue working, including messages sent to the user before or between tool calls.\n' -}}
{%- if tools -%}
{%- set rt = namespace(first=none, ns=[]) -%}
{%- for tool in tools -%}
{%- if tool.type is defined and tool.type == 'namespace' -%}
{%- set rt.ns = rt.ns + ['"' ~ esc_header(tool.name) ~ '.*"'] -%}
{%- elif rt.first is none -%}
{%- set rt.first = (tool.function if tool.function is defined else tool).name -%}
{%- endif -%}
{%- endfor -%}
{%- set rns.recipients = rns.recipients + (['"[func_name] (e.g., ' ~ esc_header(rt.first) ~ ')"'] if rt.first is not none else []) + rt.ns -%}
{{- '- "tool" or "[tool name]": the name of the tool to call.\n' -}}
{%- endif -%}
{%- set rns.recipients = rns.recipients + ['"user"'] -%}
{{- '- "user": messages that end the assistant turn, such as a completed response or clarification question that waits for the user\'s reply; do not use for pre-tool updates or partial responses.\n' -}}
{{- '\n# Valid recipients: ' ~ rns.recipients | join(', ') ~ '.' -}}
{%- endmacro -%}
{{- bos_token -}}
{%- set ns = namespace(instructions=none, rest=messages) -%}
{%- if messages and messages[0]['role'] in ['system', 'developer'] -%}
{%- set ns.instructions = render_content(messages[0]['content'])
| replace('Reasoning effort', 'Reasoning strength')
| replace('Reasoning Effort', 'Reasoning Strength')
| replace('reasoning effort', 'reasoning strength')
| replace('REASONING EFFORT', 'REASONING STRENGTH') -%}
{%- set ns.rest = messages[1:] -%}
{%- endif -%}
{%- set sys = namespace(parts=['You are a helpful AI assistant.', 'Knowledge cutoff: ' ~ cutoff_date ~ '.']) -%}
{%- if current_date -%}
{%- set sys.parts = sys.parts + ['Current date: ' ~ current_date ~ '.'] -%}
{%- endif -%}
{%- if ns.instructions -%}
{%- set sys.parts = sys.parts + [ns.instructions] -%}
{%- endif -%}
{%- if tools -%}
{%- set sys.parts = sys.parts + [render_tool_defs(tools) | trim] -%}
{%- endif -%}
{%- if 'reasoning strength:' not in ((ns.instructions if ns.instructions else '') | lower) -%}
{%- set sys.parts = sys.parts + ['Reasoning strength: ' ~ reasoning_effort_map[reasoning_effort] ~ '.'] -%}
{%- endif -%}
{%- set sys.parts = sys.parts + [render_valid_recipients(tools) | trim] -%}
{{- '<|start|>system<|message|>' ~ sys.parts | join('\n\n') ~ '<|eot|>' -}}
{%- for message in ns.rest -%}
{%- set role = message['role'] -%}
{%- set end_token = '<|eom|>' if (not loop.last and ns.rest[loop.index0 + 1]['role'] == role) else '<|eot|>' -%}
{%- if role in ['system', 'developer'] -%}
{{- '<|start|>' + role + '<|message|>' -}}
{{- render_content(message['content']) -}}
{{- '<|eot|>' -}}
{%- elif role == 'user' -%}
{{- '<|start|>user<|message|>' -}}
{%- if message.get('render_timestamp') and message.get('timestamp') -%}
{%- set ts = message['timestamp'] -%}
{%- if ts is string -%}
{{- '[' ~ esc_header(ts) ~ '] ' -}}
{%- elif ts.strftime is defined -%}
{{- '[' ~ (ts.strftime('%a %Y-%m-%d %H:%M %Z') | trim) ~ '] ' -}}
{%- endif -%}
{%- endif -%}
{{- render_content(message['content']) -}}
{{- '<|eot|>' -}}
{%- elif role == 'tool' -%}
{%- set tname = message.get('name') -%}
{%- if not tname -%}
{%- set tcid = message.get('tool_call_id') -%}
{%- set tns = namespace(name=tcid if tcid else '') -%}
{%- for m in messages -%}
{%- if m.get('tool_calls') -%}
{%- for tc in m['tool_calls'] -%}
{%- if tcid is not none and tc.id is defined and tc.id == tcid -%}
{%- set tns.name = tc.function.name -%}
{%- endif -%}
{%- endfor -%}
{%- endif -%}
{%- endfor -%}
{%- set tname = tns.name -%}
{%- endif -%}
{%- if not tname -%}
{{- raise_exception('tool message has no name and no matching tool_call_id') -}}
{%- endif -%}
{{- '<|start|>tool ' -}}{{- esc_header(tname) -}}{{- '<|message|><tool_output name="' -}}{{- esc_attr(tname) -}}{{- '">\n' -}}
{{- render_content(message['content']) -}}
{{- '\n</tool_output><|eot|>' -}}
{%- elif role == 'assistant' -%}
{%- generation %}
{%- set reasoning = message.get('reasoning_content') or message.get('reasoning') -%}
{%- if reasoning -%}
{{- '<|start|>assistant to=self<|message|>' -}}{{- esc(reasoning) -}}{{- '<|eom|>' -}}
{%- endif -%}
{%- set body = render_content(message.get('content')) -%}
{%- if message.get('tool_calls') -%}
{%- if body -%}
{{- '<|start|>assistant to=commentary<|message|>' + body + '<|eom|>' -}}
{%- endif -%}
{%- for tc in message['tool_calls'] -%}
{{- '<|start|>assistant to=' -}}{{- esc_header(tc.function.name) -}}{{- '<|message|>' -}}
{{- render_atem(tc) -}}
{{- (end_token if loop.last else '<|eom|>') -}}
{%- endfor -%}
{%- elif body or not reasoning -%}
{%- set recipient = message.get('recipient') or 'user' -%}
{%- if recipient == 'user' -%}
{%- set end_turn = true -%}
{%- elif recipient in ['self', 'commentary'] -%}
{%- set end_turn = false -%}
{%- elif message.get('end_turn') is not none -%}
{%- set end_turn = message.get('end_turn') -%}
{%- else -%}
{%- set end_turn = false -%}
{%- endif -%}
{{- '<|start|>assistant to=' -}}{{- esc_header(recipient) -}}{{- '<|message|>' -}}
{{- body -}}
{{- ('<|eot|>' if end_turn else '<|eom|>') -}}
{%- endif -%}
{%- endgeneration %}
{%- endif -%}
{%- endfor -%}
{%- if add_generation_prompt -%}
{{- '<|start|>assistant' -}}
{%- endif -%}
|