InclusionAI Ling 3.0
Ling 3.0 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.0-flash | 262,144 | 32,768 | 0.06 / 0.012 / 0.18 |
inclusionai/ling-3.0-flash-fin | 262,144 | 32,768 | 0 / 0 / 0 |
inclusionai/ling-3.0-tiny | — | — | retired 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.
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 }'Ling 3.0 Flash: turning reasoning off
Section titled “Ling 3.0 Flash: turning reasoning off”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 offcurl "$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 }'Why only none is offered
Section titled “Why only none is offered”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.
Budgeting max_tokens with reasoning on
Section titled “Budgeting max_tokens with reasoning on”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.
Ling 3.0 Flash Fin
Section titled “Ling 3.0 Flash Fin”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.
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 }'Turning reasoning off
Section titled “Turning reasoning off”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 offThe 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.
Prompt cache and price
Section titled “Prompt cache and price”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.
Ling 3.0 Tiny has been retired
Section titled “Ling 3.0 Tiny has been retired”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.
Tool calling
Section titled “Tool calling”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.
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.
Prompt cache
Section titled “Prompt cache”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.
Unsupported inputs and outputs
Section titled “Unsupported inputs and outputs”Flash accepts text only. The following are rejected with 400:
- Image input (
image_urlcontent part) - Audio input (
input_audiocontent part) response_formatwithjson_objectorjson_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.
Context and output limits
Section titled “Context and output limits”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 } }}Data handling
Section titled “Data handling”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.