Skip to content

Meta Muse Spark

Muse Spark is Meta's reasoning model tuned for coding and agent workflows. All three ids serve the same family, with a 1,048,576-token context window and the same capability set; they differ by checkpoint and tier. They are called through /v1/chat/completions.

ModelContextInput / Cache Read / Output ($/1M)Tier
meta/muse-spark-1.21M1.25 / 0.15 / 4.25Standard
meta/muse-spark-1.11M1.25 / 0.15 / 4.25Standard
meta/muse-spark-1.2-contributor1M0.10 / 0.002 / 0.20Contributor

muse-spark-1.2 is the current checkpoint and the default choice for new work. muse-spark-1.1 is the earlier checkpoint; it costs the same and suits validated flows that want to pin their behaviour.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "meta/muse-spark-1.2",
"messages": [
{ "role": "user", "content": "Find the bug in this function." }
],
"max_tokens": 2048
}'

meta/muse-spark-1.2-contributor is the same checkpoint as muse-spark-1.2. It costs 12x less on input and 21x less on output. Here is what pays for that:

The prompts you send to this model and the responses you receive are used by Meta to train future models.

Do not send confidential, personal, or customer data to this model; meta/muse-spark-1.2 on the standard tier returns the same answers and is not used for training. The Contributor tier is for work whose data is not sensitive, such as prototypes, load tests, and integration trials.

This tier also carries a low provider-side rate limit that is shared across LLMTR users, so it is not suited to high-volume production traffic.

Muse Spark reasons before answering on every request, and reasoning cannot be turned off. You tune the effort with the reasoning_effort field across five levels: minimal, low, medium, high, xhigh.

reasoning_effort: "none" is not supported on this model and is rejected with 400. If you need reasoning fully off, choose a non-reasoning model.

Effort can also be supplied as a suffix on the model id:

meta/muse-spark-1.2 -> default
meta/muse-spark-1.2:minimal -> lowest effort
meta/muse-spark-1.2:high -> high effort
meta/muse-spark-1.2:xhigh -> highest effort
Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "meta/muse-spark-1.2",
"messages": [{ "role": "user", "content": "What is 17 * 23?" }],
"reasoning_effort": "minimal",
"max_tokens": 512
}'

Reasoning tokens are returned inside completion_tokens and billed as output. The practical consequence: if max_tokens is set too low, the budget can be spent during reasoning, leaving content empty and finish_reason set to length. Keep max_tokens generous even for short answers. See Reasoning Effort for details.

Beyond text, Muse Spark accepts images, video, and PDFs. Audio input is not supported; requests containing audio are rejected with 400.

Images can be supplied either as a base64 data URL or as a remote https URL:

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "meta/muse-spark-1.2",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "What is in this screenshot?" },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,iVBORw0KG..." } }
]
}],
"max_tokens": 1024
}'

When using a remote URL, make sure the origin does not refuse the request: the provider downloads the image itself, and a failed download returns 400 with a failed to download media message. Prefer base64 for sources with restricted access.

Use the video_url content part for video and the file content part for PDFs.

Muse Spark supports tool/function calling; you supply the tools array in standard OpenAI format and the model returns tool_calls when it needs one.

One important constraint: this model accepts only tool_choice: "auto". "required", "none", and named function choices are not supported; LLMTR rejects those requests with 400 without forwarding them to the provider.

  • To let the model decide whether to call a tool, omit tool_choice entirely.
  • To prevent a tool call on a given turn, omit the tools array from that request.
Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "meta/muse-spark-1.2",
"messages": [{ "role": "user", "content": "What is the weather in Istanbul?" }],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Return current weather for the given location.",
"parameters": {
"type": "object",
"properties": { "location": { "type": "string" } },
"required": ["location"]
}
}
}]
}'

See Tool Calling for the general flow.

Muse Spark produces both JSON objects via response_format: { "type": "json_object" } and schema-conforming structured output via json_schema. The schema is genuinely enforced; the returned object carries the fields you declared.

When the same prefix is sent again, the provider may apply a prompt cache, and cached tokens are reported in usage.prompt_tokens_details.cached_tokens. Those tokens are billed at the cache read rate instead of the full input rate.

Cache hits are not guaranteed: even identical back-to-back requests may miss on some calls. Treat the cache as a discount when planning cost, not as a fixed saving.

All three models offer a 1,048,576-token context window. Input tokens and max_tokens share one budget, so do not set max_tokens to the full window. Requests that exceed the combined limit return 400.