Skip to content

InclusionAI Ling

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

Model Context Max output Input / Cache read / Output ($/1M)
inclusionai/ling-3.1-flash 262,144 32,768 0 / 0 / 0
inclusionai/ling-3.0-flash 262,144 32,768 0.06 / 0.012 / 0.18
inclusionai/ling-3.0-flash-fin — — retired 2026-09-30
inclusionai/ling-3.0-flash-vl — — retired 2026-09-22
inclusionai/ling-3.0-flash-sante — — retired 2026-09-22
inclusionai/ling-3.0-tiny — — retired 2026-08-15

3.1 Flash is a 560-billion-parameter hybrid reasoning model, activating roughly 25 billion parameters per token. It is free until 13 October 2026 at 19:00 Turkey time. See Ling 3.1 Flash.

3.0 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.

The Fin, VL and Sante rows were time-limited free builds and have been retired; their pages stay up and requests return an error naming the model to use instead.

3.0 Flash 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.1-flash offers a 262,144-token context and at most 32,768 output tokens per response. It accepts text only and supports tool calling and prompt caching.

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.1-flash",
"messages": [
{ "role": "user", "content": "Explain why this query runs slowly." }
],
"max_tokens": 8192
}'

Reasoning control is the same as on 3.0 Flash: it reasons by default, the only supported reasoning_effort value is none, and the :none suffix on the model id works too. Any other level is refused with 400.

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

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.

The free period ends on 13 October 2026 at 19:00

Section titled “The free period ends on 13 October 2026 at 19:00”

The free period ends on 13 October 2026 at 19:00 Turkey time. After that, requests return 410 model_retired and the error body names the model to use instead: inclusionai/ling-3.0-flash. It is the earlier, smaller release of the family and it is metered. Context, output ceiling, tool calling and the none reasoning switch are the same.

Your requests are never silently rerouted to another model; nothing is charged to your account until you change the model id yourself.

inclusionai/ling-3.0-flash-fin was the finance-tuned build of Ling 3.0 Flash, served free. The free offer ended on 2026-09-30.

Requests for this identifier return 410 model_retired:

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

The suggested inclusionai/ling-3.0-flash is the base model Fin was built on: context, output ceiling, tool calling, prompt caching and the none reasoning switch are identical. The two differences you inherit are that it is metered and that it has no finance tuning. Your requests are not silently rerouted; you change the model id yourself.

This row was retired on 2026-09-22; the section below describes how it behaved before retirement.

inclusionai/ling-3.0-flash-vl shares Flash's architecture (124B MoE, ~5.1B active per token), its 262,144-token context and its 32,768-token output ceiling. What sets it apart is that it accepts image and video input alongside text — it is the only row in the family that does.

Images are sent as a standard OpenAI image_url content part:

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-vl",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "What does the error message in this screenshot say?" },
{ "type": "image_url", "image_url": { "url": "data:image/png;base64,BASE64_DATA" } }
]
}],
"max_tokens": 4096
}'

Video uses a video_url part. The model reads the whole clip rather than a single frame: in testing, two clips whose colours changed over time were read back in the correct order.

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-vl",
"messages": [{
"role": "user",
"content": [
{ "type": "text", "text": "What happens in this video, in order?" },
{ "type": "video_url", "video_url": { "url": "data:video/mp4;base64,BASE64_DATA" } }
]
}],
"max_tokens": 4096
}'

Image and video tokens come out of the input budget and are counted in usage.prompt_tokens.

Reasoning control is the same as on Flash: the only supported reasoning_effort value is none, and the :none suffix on the model id works too.

All three forms of tool_choice — auto, required and a named function — work with reasoning on and with reasoning off.

Audio input (input_audio) and schema-enforced JSON output through response_format are not supported; both return 400.

This row was retired on 2026-09-22; the section below describes how it behaved before retirement.

inclusionai/ling-3.0-flash-sante is the health and medicine build of the same architecture, tuned for medical knowledge reasoning, evidence-based retrieval and long-horizon clinical tasks. Context, output ceiling and API surface match Flash, and it accepts text only.

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-sante",
"messages": [
{ "role": "user", "content": "Extract the primary endpoint from this abstract." }
],
"max_tokens": 8192
}'

Reasoning control and tool_choice behaviour match Flash VL: none is the only effective level, and tool_choice works in every reasoning state.

Its answers are not medical advice and are not a substitute for a clinician. The provider's clinical-safety training claim describes what the model was trained for; LLMTR has not verified it and does not repeat it as its own.

inclusionai/ling-3.0-flash-vl and inclusionai/ling-3.0-flash-sante were covered by the provider's time-limited free offer and were retired on 2026-09-22. Requests for these identifiers return 410 model_retired and the error body says where to go. Nothing is charged to your account until you change the model id yourself.

The two rows answer differently, because their successor situations differ.

Sante has a complete successor — inclusionai/ling-3.0-flash, the base model it is built on. Context, output ceiling, tool calling and prompt caching are identical; the two differences you inherit are that it is metered and that it has no health tuning.

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

VL has no direct successor, and that is a decision rather than an oversight. After the cutoff no free Ling row accepts image and video input, and the family's metered row accepts text only. Naming the wrong successor would send an image request to a model that answers 400. So the error body describes both directions instead of imposing one id: inclusionai/ling-3.0-flash for the text half of your traffic, and a metered vision model if you need image and video input.

Your requests are never silently rerouted to another model; you change the id yourself.

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.

3.1 Flash and 3.0 Flash support native tool/function calling. You supply the tools array in standard OpenAI format, and all three forms of tool_choice work — auto, required, and a named function — in every reasoning state.

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.

On the metered inclusionai/ling-3.0-flash row 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.

On the free inclusionai/ling-3.1-flash row both input and cache read are $0, so the cache is not a price advantage there; the gain is latency.

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.

3.1 Flash and 3.0 Flash accept text only. On those two rows the following are rejected with 400:

  • Image input (image_url content part)
  • Video input (video_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.

These limits are the same on 3.1 Flash and 3.0 Flash. 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.