Skip to content

InclusionAI Ling 3.0

Ling 3.0 is InclusionAI's Mixture-of-Experts model family. It is called through /v1/chat/completions.

ModelContextMax outputInput / Cache read / Output ($/1M)
inclusionai/ling-3.0-flash262,14432,7680.06 / 0.012 / 0.18
inclusionai/ling-3.0-flash-fin262,14432,7680 / 0 / 0
inclusionai/ling-3.0-tinyretired 2026-08-15

Flash is the 124-billion-parameter model, activating roughly 5.1 billion parameters per token. It is tuned for token efficiency in agentic workloads and is metered.

Flash Fin is the finance-tuned build of the same model, aimed at multi-step investment research and long-horizon planning, and it is served free. For the two places its behaviour differs from Flash, see Ling 3.0 Flash Fin.

It reasons by default and returns that chain separately in reasoning_content, while content carries the final answer.

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

On Flash, reasoning is controlled with reasoning_effort, and the only supported value is none. You can also append the :none suffix to the model id:

inclusionai/ling-3.0-flash -> reasoning on (default)
inclusionai/ling-3.0-flash:none -> reasoning off
Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "inclusionai/ling-3.0-flash",
"messages": [{ "role": "user", "content": "What is 17 * 23?" }],
"reasoning_effort": "none",
"max_tokens": 512
}'

The provider also accepts minimal, low, medium, high, xhigh and max, but in measurement those values did not change reasoning length in any ordered way: across three samples per level on a fixed prompt, max produced 809-1366 characters of reasoning while medium produced 2323-4524. The ranges overlap, so they do not form a scale. Offering a level with no effect would leave you paying for reasoning tokens on a setting that changes nothing.

Requests that send a level other than none are therefore rejected with 400, and the error lists the supported values. For models with graded control, see Reasoning Effort.

The :fast and :think suffixes are not valid on Flash and return 400. Those suffixes belonged to the retired Tiny row.

Reasoning tokens are output too, and they are returned inside completion_tokens. Flash can think at length on some prompts; in measurement, on some prompts the reasoning was written straight into content rather than reasoning_content and the response burned the whole budget, ending with finish_reason: "length". The same prompt answered correctly in a handful of tokens with reasoning_effort: "none".

When you need a short, direct answer, none is both faster and cheaper. When you do want reasoning, keep max_tokens generous — without going above 32,768.

inclusionai/ling-3.0-flash-fin shares Flash's architecture (124B MoE, ~5.1B active per token), its 262,144-token context and its 32,768-token output ceiling. What differs is that it is tuned for finance and served free.

Free rows run against a daily usage quota. When it is exhausted the call is refused with 429 and the error body says when you can retry; paid models are unaffected.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "inclusionai/ling-3.0-flash-fin",
"messages": [
{ "role": "user", "content": "How do I compute the clean price of a bond?" }
],
"max_tokens": 8192
}'

Identical to Flash: reasoning_effort is accepted and the only supported value is none. You can also append the :none suffix to the model id.

inclusionai/ling-3.0-flash-fin -> reasoning on (default)
inclusionai/ling-3.0-flash-fin:none -> reasoning off

The provider also accepts minimal, low, medium, high, xhigh and max, but in measurement those values did not change reasoning length in any ordered way: on a fixed prompt minimal produced 3,312-4,196 characters while low produced 1,956-2,840. The ranges overlap, so they are not a scale and are not offered; a request carrying any level other than none is refused with 400.

tool_choice is constrained while reasoning is off

Section titled “tool_choice is constrained while reasoning is off”

This is the one behaviour where this row departs from Flash. With reasoning off, the model does not honour required or named function choices in tool_choice: in measurement that combination returned 200 in 12 of 12 calls, with finish_reason stop and no tool call anywhere in the response. With reasoning on, all 12 of the same calls called the tool.

A required that silently returns prose is the hardest failure shape to diagnose inside an agent loop, so LLMTR refuses the combination with a 400 before it reaches the provider:

{
"error": {
"message": "\"inclusionai/ling-3.0-flash-fin\" ignores \"required\" for tool_choice when reasoning is disabled and answers in prose instead, so the request is refused rather than silently returning no tool call. Either keep reasoning on (drop `reasoning_effort: \"none\"` and the `:none` suffix), or send `tool_choice: \"auto\"` and let the model decide.",
"type": "invalid_request",
"details": {
"reason": "tool_choice_requires_reasoning",
"model": "inclusionai/ling-3.0-flash-fin"
}
}
}

There are two ways out and which one is right depends on what you are optimizing for: keep reasoning on when forcing the tool call is the point, or set tool_choice to auto when you need to run with reasoning off. auto works in both states.

Fin also reads repeated prefixes from a prompt cache, and the number of tokens read from it is returned in usage.prompt_tokens_details.cached_tokens. Because the row is free, the cache is a latency advantage here rather than a cost one.

inclusionai/ling-3.0-tiny was retired on 2026-08-15. The provider withdrew the model from its own catalog; this was not an LLMTR decision and it is not reversible.

Requests for this identifier return 410 model_retired. The error body carries the retirement date and the model to use instead:

{
"error": {
"message": "Model \"inclusionai/ling-3.0-tiny\" was retired on 2026-08-15. Use \"inclusionai/ling-3.0-flash\" instead.",
"type": "model_retired",
"details": {
"model": "inclusionai/ling-3.0-tiny",
"replacement_model": "inclusionai/ling-3.0-flash",
"retirement_date": "2026-08-15"
}
}
}

Your requests are not silently forwarded to another model. Tiny was free and the suggested Flash is metered; a call you chose because it was free must not start being billed without your knowing. So you change the model id yourself.

If you need a free model, the catalog still carries free rows — they are shown with a "Free" label in the model list.

The :fast / :think suffixes and the reasoning boolean, both specific to Tiny, went with this row. Reasoning on Flash is controlled with reasoning_effort: "none" as described above.

Both models support native tool/function calling. You supply the tools array in standard OpenAI format, and on Flash all three forms of tool_choice work — auto, required, and a named function.

On Flash Fin, required and named function choices work only while reasoning is on; see Ling 3.0 Flash Fin for the detail and the error body.

Terminal window
curl "$LLMTR_BASE_URL/v1/chat/completions" \
-H "Authorization: Bearer llmtr-your_key" \
-H "Content-Type: application/json" \
-d '{
"model": "inclusionai/ling-3.0-flash",
"messages": [{ "role": "user", "content": "What is the weather in Istanbul?" }],
"tools": [{
"type": "function",
"function": {
"name": "get_weather",
"description": "Return the current weather for the given city.",
"parameters": {
"type": "object",
"properties": { "city": { "type": "string" } },
"required": ["city"]
}
}
}],
"max_tokens": 4096
}'

See Tool Calling for the general flow.

When the same prefix is sent again, the provider may apply a prompt cache, and the number of tokens read from it is returned in usage.prompt_tokens_details.cached_tokens.

This is a direct cost saving: cached tokens are billed at $0.012 per 1M, a fifth of the normal input price. The difference is noticeable for agents that run with a long, fixed system prompt.

Cache hits are not guaranteed; when the same prefix is sent repeatedly the first call counts as warm-up and hits begin on later calls.

Flash accepts text only. The following are rejected with 400:

  • Image input (image_url content part)
  • Audio input (input_audio content part)
  • response_format with json_object or json_schema

If you need schema-enforced JSON output, pick a model that supports it. You can ask this model for JSON in the prompt, but the format is not guaranteed.

The context window is 262,144 tokens and a single response can be at most 32,768 tokens. Input and output share the same context budget, so do not set max_tokens to the full window.

When max_tokens (or max_completion_tokens) is above 32,768, LLMTR rejects the request with 400 invalid_request before it reaches the provider. The error body carries the limit and the value you sent:

{
"error": {
"message": "\"inclusionai/ling-3.0-flash\" can return at most 32,768 tokens in one response, but \"max_tokens\" was 100,000. Lower it to 32,768 or below.",
"type": "invalid_request",
"details": {
"reason": "max_output_tokens_exceeded",
"field": "max_tokens",
"requested": 100000,
"maxOutputTokens": 32768
}
}
}

This model is not hosted in Turkey. Requests are processed on third-party infrastructure abroad, and prompts and completions may be logged by the provider. Do not send confidential or personal data.