Pricing and budget · 2026-10-22

Reasoning and the daily token allowance on Shanghai AI Lab models

How reasoning tokens use the daily allowance on Shanghai AI Lab's five rows, and how to turn reasoning off and on with "reasoning": false, :fast and :think.

Diagram: three boxes under https://llmtr.com/v1, :fast, "reasoning": false and :think.

Short answer: reasoning counts as output tokens, and :fast or "reasoning": false turns it off

LLMTR is a gateway that gives access to language models from different providers through one OpenAI-compatible API. Shanghai AI Lab's Intern-S2 (internlm/intern-s2-free), Atria-Dawn (internlm/atria-dawn-free), Atria-Dawn Preview (internlm/atria-dawn-preview-free), Agents-A1 (internlm/agents-a1-free) and Sage-A1.5 (internlm/sage-a1.5-free) are called on the /v1/chat/completions endpoint at https://llmtr.com/v1 and are free until 31 October 2026, 23:59 (TRT). All five reason before answering by default; reasoning tokens are counted inside completion_tokens and come out of the daily token allowance. To turn reasoning off, add "reasoning": false to the request body or append :fast to the model id; :think or "reasoning": true keeps it on. From 1 November 2026 you continue the same work on Nemotron 3.5 Super VL (nvidia/nemotron-3.5-super-vl-free), Nemotron 3 Ultra (nvidia/nemotron-3-ultra-550b-a55b), Agnes 2.5 Flash (agnes/agnes-2.5-flash), Qwen3.6 35B-A3B (qwen/qwen3.6-35b-a3b), DeepSeek V4.1 Flash (deepseek/deepseek-flash) or MiniMax M3.1 Flash (minimax/minimax-m3.1-flash).

The allowance is separate for each account and for each model: 500,000 tokens a day, input and output combined, reasoning tokens included; new accounts start with a smaller allowance on their first day. It renews every day at 00:00 (TRT), and on these rows nothing is charged to your balance.

How does reasoning use the daily token allowance, and how do you turn it off?

What a request takes from the allowance is the sum of prompt_tokens and completion_tokens in the response's usage field. The reasoning text arrives separately from the answer, in the reasoning_content field, but its tokens are counted inside completion_tokens. When you turn reasoning off, completion_tokens counts only the answer and the response carries no reasoning_content text.

The table shows the four settings. The setting applies per request, so the same model id can run with reasoning off on one request and on for the next.

Reasoning settings on the five Shanghai AI Lab rows as of 22 October 2026
SettingHow to send itResult
Defaultsend no fieldthe model reasons first; reasoning tokens count toward the allowance inside completion_tokens
Reasoning off"reasoning": false or :fast at the end of the idthe model answers directly; completion_tokens counts only the answer
Reasoning on"reasoning": true or :think at the end of the idthe same behaviour as the default, asked for explicitly
Choosing a levelreasoning_effort or reasoning.effort400 invalid_request; these rows have no levels, only on and off

How many requests fit in the allowance with reasoning on and off?

For example, take a classification request with a 1,500-token prompt and a 500-token answer. With reasoning on, assume the model reasons for 3,000 tokens before answering: the request costs 1,500 + 3,000 + 500 = 5,000 tokens, and the daily allowance of 500,000 tokens covers 100 requests of this size (500,000 / 5,000); new accounts start with a smaller allowance on their first day, so on that day the number is lower too. With reasoning off, the same request costs 1,500 + 500 = 2,000 tokens and the allowance covers 250 requests (500,000 / 2,000). These numbers are hypothetical; reasoning length varies by question, so check the usage values of your own requests.

When little of the allowance is left, an answer can stop with finish_reason: "length". Once the allowance is used up, the request returns 429 rate_limit_error; the Retry-After header tells you when to try again, and the allowance renews at 00:00 (TRT). If the prompt is larger than what is left, the error tells you to send a shorter request.

Hypothetical example: an allowance of 500,000 tokens a day; new accounts start with a smaller allowance on their first day
SettingPromptReasoningAnswerTotal per requestRequests that fit in a day
Reasoning on (default)1,500 tokens3,000 tokens500 tokens5,000 tokens100
Reasoning off (:fast)1,500 tokens0 tokens500 tokens2,000 tokens250

max_tokens, finish_reason and reasoning chunks in a stream

Reasoning tokens count toward max_tokens. A short max_tokens can cut the response off before reasoning ends; the response then carries finish_reason: "length" and the answer is incomplete. With reasoning on, give max_tokens at least 4,096, and use a more generous value such as 16,384 on long problems. Output is bounded by the context window rather than by a separate limit: 262,144 tokens on Intern-S2, Agents-A1 and Sage-A1.5, and 524,288 on the two Atria rows; the prompt and the output share the same window.

When streaming (stream: true), the reasoning text arrives in delta.reasoning_content and the answer in delta.content. Send "include_usage": true inside stream_options and usage arrives in the last chunk and shows what the request took from the allowance. In a tool loop every turn is a separate request: the reasoning of each turn is counted on its own, and the messages of earlier turns count again as prompt on every request.

Sending the same question with and without :fast

The example below sends the same question to Atria-Dawn once with the plain model id and once with :fast appended; it prints finish_reason, completion_tokens, the length of reasoning_content and the total taken from the allowance. reasoning_content is not a standard OpenAI field, so it is read safely with getattr. You can run the same comparison on the other four rows; instead of :fast, sending extra_body={"reasoning": False} with the plain id also turns reasoning off.

OpenAI Python SDK example that sends the same question to Atria-Dawn with reasoning on and with :fast through https://llmtr.com/v1/chat/completions and compares completion_tokens and the length of reasoning_content.

import os

from openai import OpenAI

client = OpenAI(base_url="https://llmtr.com/v1", api_key=os.environ["LLMTR_API_KEY"])

QUESTION = "A train leaves at 09:40 and arrives at 13:05. How long is the trip in minutes?"

# Same question with reasoning on (plain id) and off (":fast" suffix).
# extra_body={"reasoning": False} on the plain id turns it off as well.
for model in ["internlm/atria-dawn-free", "internlm/atria-dawn-free:fast"]:
    response = client.chat.completions.create(
        model=model,
        messages=[{"role": "user", "content": QUESTION}],
        max_tokens=8192,
    )
    message = response.choices[0].message
    reasoning = getattr(message, "reasoning_content", None) or ""
    usage = response.usage
    # The daily allowance counts prompt + completion tokens; reasoning is inside completion_tokens.
    print(model, response.choices[0].finish_reason)
    print("  completion_tokens:", usage.completion_tokens)
    print("  reasoning_content characters:", len(reasoning))
    print("  counted toward the allowance:", usage.prompt_tokens + usage.completion_tokens)
    print("  answer:", (message.content or "").strip()[:200])

Which one when?

The choices below follow from how tokens are counted and make no quality claim; compare the output with your own samples.

  • Short classification, labelling or field extraction: turn reasoning off (:fast or "reasoning": false); most of the allowance then goes to the prompt and the answer.
  • A multi-step maths, code or planning problem: leave reasoning on, give max_tokens a generous value and raise it if finish_reason: "length" comes back.
  • Intermediate steps in a tool loop: since the reasoning of each turn is counted separately, try the intermediate turns with reasoning off and the final review turn with it on; compare the result with your own samples.
  • A streaming interface where the answer must start at once: the model reasons before it answers, so turn reasoning off.
  • Sensitive, personal or customer data: do not use these rows whatever the reasoning setting; the data notice says prompts and completions may be logged by the provider and used to improve the model.

How to carry the reasoning setting over after 1 November 2026

After 31 October 2026, 23:59 (TRT), that is from 1 November 2026, 00:00, all five rows return 410 model_retired, requests are not redirected to another model and there is no successor; you have to change the model id. After 31 October 2026, for Intern-S2's scientific questions with images, the row to keep going at no cost is Nemotron 3.5 Super VL (nvidia/nemotron-3.5-super-vl-free): it reasons by default and is turned off with the same "reasoning": false or :fast. The paid Qwen3.6 35B-A3B (qwen/qwen3.6-35b-a3b) accepts images and, according to Qwen's model card, runs in thinking mode by default; on LLMTR it is turned off the same way. These two rows also fit Agents-A1 and Sage-A1.5 flows; as a paid option, DeepSeek V4.1 Flash accepts images too.

For long-text and JSON work after 31 October 2026, the free Nemotron 3 Ultra (nvidia/nemotron-3-ultra-550b-a55b) has reasoning off by default. Agnes 2.5 Flash (agnes/agnes-2.5-flash) accepts :fast and :think, but its quota counts requests, not tokens, so turning reasoning off there does not change the allowance used. The paid DeepSeek V4.1 Flash (deepseek/deepseek-flash) reasons by default, and its card lists no option to turn reasoning off. On MiniMax M3.1 Flash (minimax/minimax-m3.1-flash) reasoning cannot be turned off; its depth is set with reasoning_effort from low to max. On paid rows reasoning tokens are billed at the output price.

Seeing the effect of reasoning on the daily allowance with your own request

Send the same question with reasoning on and off, compare the usage values and choose the setting for the job.

  1. Key. Create an API key on llmtr.com under Dashboard > API Keys.
  2. Two requests. Send the same question with the plain model id and with :fast appended to the https://llmtr.com/v1/chat/completions endpoint.
  3. Decision. Compare the prompt_tokens and completion_tokens totals; turn reasoning off for short jobs and leave it on for multi-step ones.

Frequently asked questions

What happens if I send reasoning_effort to these rows?

The request returns 400 invalid_request. The error message says the model exposes thinking as an on/off mode and suggests "reasoning": true or :think to turn it on. To turn it off, send "reasoning": false or add :fast to the model id.

Do reasoning tokens count toward the daily allowance?

Yes. The allowance counts input and output tokens combined, and reasoning tokens are part of the output. It renews every day at 00:00 (TRT); once it is used up, the request returns 429 rate_limit_error and the Retry-After header gives the time to try again.

Does reasoning_content come back when reasoning is off?

No. With reasoning off the model answers directly and the response carries no reasoning_content text. With reasoning on, the reasoning text arrives in reasoning_content, and in a stream in delta.reasoning_content.

Related posts