Model comparison · 2026-10-22
Shanghai AI Lab models after 1 November 2026: migration guide
Intern-S2, Atria-Dawn, Agents-A1 and Sage-A1.5 return 410 from 1 November 2026. The LLMTR rows that replace them, setting changes and a Python client.
Short answer: image work moves to Nemotron 3.5 Super VL or Qwen3.6 35B-A3B, long text to Nemotron 3 Ultra, Agnes, DeepSeek or MiniMax
LLMTR is a gateway that gives access to language models from different providers through one OpenAI-compatible API. Shanghai AI Lab's five models, 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 free on the /v1/chat/completions endpoint at https://llmtr.com/v1 until 31 October 2026, 23:59 (TRT); from 1 November 2026, 00:00 (TRT), they return 410 model_retired. In their place you call 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) on the same endpoint, with the same API key from your llmtr.com account.
The 31 October 2026 date ends only the five Shanghai AI Lab rows; of the six rows, Nemotron 3.5 Super VL, Nemotron 3 Ultra and Agnes 2.5 Flash are free with a quota, while Qwen3.6 35B-A3B, DeepSeek V4.1 Flash and MiniMax M3.1 Flash are billed per token from your balance. You can switch before 1 November 2026, since all six are on the same endpoint.
Which model replaces these from 1 November 2026?
From 1 November 2026, 00:00 (TRT), the five ids are not redirected to another model and have no successor; you change the model id yourself. The mapping follows the kind of work: scientific questions with images, long text-based agents, or agents that read images. Each row of the table gives a series model, the free option after 31 October 2026 and the paid option; paid rows need a balance.
| Series model | Free option | Paid option | Why this mapping |
|---|---|---|---|
| Intern-S2 (internlm/intern-s2-free), until 31 October 2026, 23:59 | Nemotron 3.5 Super VL (nvidia/nemotron-3.5-super-vl-free) | Qwen3.6 35B-A3B (qwen/qwen3.6-35b-a3b) or DeepSeek V4.1 Flash (deepseek/deepseek-flash) | all three accept images |
| Atria-Dawn (internlm/atria-dawn-free), until 31 October 2026, 23:59 | Nemotron 3 Ultra (nvidia/nemotron-3-ultra-550b-a55b) or Agnes 2.5 Flash (agnes/agnes-2.5-flash) | DeepSeek V4.1 Flash or MiniMax M3.1 Flash (minimax/minimax-m3.1-flash) | all four have a context of 524,288 tokens or more |
| Atria-Dawn Preview (internlm/atria-dawn-preview-free), until 31 October 2026, 23:59 | Nemotron 3 Ultra or Agnes 2.5 Flash | DeepSeek V4.1 Flash or MiniMax M3.1 Flash | the same mapping as Atria-Dawn |
| Agents-A1 (internlm/agents-a1-free), until 31 October 2026, 23:59 | Nemotron 3.5 Super VL | Qwen3.6 35B-A3B | an agent that reads images; Qwen3.6 35B-A3B is in the same size class (35B total, 3B active) |
| Sage-A1.5 (internlm/sage-a1.5-free), until 31 October 2026, 23:59 | Nemotron 3.5 Super VL | Qwen3.6 35B-A3B | according to its model card, Sage-A1.5 is built on Qwen3.6 and Agents-A1 |
How the six rows differ: price, context, JSON and images
The table shows the six rows with the values in the LLMTR catalog and docs; prices are per 1M tokens, in the order input / cached input / output.
A request with a 50,000-token prompt and 8,000 output tokens including reasoning, without a cache hit, costs $0.0091 on Qwen3.6 35B-A3B and $0.0123 on MiniMax M3.1 Flash. On DeepSeek V4.1 Flash the same request costs $0.0123 off-peak and double, $0.0246, on weekday peak hours; peak hours are 01:00-04:00 and 06:00-10:00 UTC (04:00-07:00 and 09:00-13:00 TRT), and weekends and Chinese public holidays are billed at the normal price all day. Nemotron 3.5 Super VL, Nemotron 3 Ultra and Agnes 2.5 Flash take nothing from your balance, and the 31 October 2026 end date does not apply to them: the Nemotron rows run on a daily quota, while the Agnes 2.5 Flash quota counts requests over a rolling 24 hours, so a long prompt also uses one slot.
| Row | Price (1M tokens) | Context | JSON | Images |
|---|---|---|---|---|
| Nemotron 3.5 Super VL | free, daily quota; no end date set | 1,000,000 tokens | json_object and json_schema | images and video, base64 data URL |
| Nemotron 3 Ultra | free, daily quota; no end date set | 1,000,000 tokens | JSON mode (json_object) | none, text only |
| Agnes 2.5 Flash | free; the quota counts requests, not tokens (rolling 24 hours); no end date set | 524,288 tokens; at most 65,536 per response | json_object and json_schema | images and video, base64 data URL only |
| Qwen3.6 35B-A3B | $0.07 / no cache discount / $0.70 | 262,144 tokens | json_object and json_schema | images |
| DeepSeek V4.1 Flash | $0.15 / $0.003 / $0.60; every item doubles on weekday peak hours | 1,000,000 tokens; at most 393,216 per response | JSON mode (json_object); no json_schema | images, base64 or an https link |
| MiniMax M3.1 Flash | $0.15 / $0.015 / $0.60 | 1,000,000 tokens; at most 524,288 per response | JSON mode (json_object); strict json_schema is not enforced | images (base64 or an https link) and video (base64) |
What changes when you move?
The model id changes first; the rest of the request body is adjusted to the new row. Intern-S2 takes no response_format, so you asked for JSON in the prompt; Nemotron 3.5 Super VL and Qwen3.6 35B-A3B accept json_object and json_schema. If you use json_schema on the Atria rows, Agnes 2.5 Flash accepts json_schema as well; on Nemotron 3 Ultra, DeepSeek V4.1 Flash and MiniMax M3.1 Flash, send json_object and validate the schema on your side.
tool_choice forms change too. Intern-S2 works with auto only, and Qwen3.6 35B-A3B does not support required or a named function either. If you force a tool by name on Agents-A1 or Sage-A1.5, send auto on Qwen3.6 35B-A3B, cut the tools list to the tools you need and say in the prompt when to use them. Agnes 2.5 Flash accepts auto, required and a named function, and the Nemotron 3.5 Super VL docs list the same three.
How images are sent depends on the row. Intern-S2, Agents-A1 and Sage-A1.5 take an image as a URL or base64; Agnes 2.5 Flash accepts images and video only as base64 data URLs and rejects a public https link. The LLMTR card of Nemotron 3.5 Super VL also says to send images as base64 data URLs; DeepSeek V4.1 Flash and MiniMax M3.1 Flash take base64 or an https link. Nemotron 3 Ultra accepts no images.
Reasoning control differs as well. Nemotron 3.5 Super VL, Qwen3.6 35B-A3B and Agnes 2.5 Flash reason by default and turn it off with "reasoning": false or :fast, so your extra_body={"reasoning": False} line keeps working. On this Nemotron 3 Ultra row reasoning is off by default. DeepSeek V4.1 Flash reasons by default, and its card lists no way to turn that off. On MiniMax M3.1 Flash reasoning cannot be turned off: "reasoning": false returns 400, the depth is set with reasoning_effort as low, medium, high, xhigh or max, and max applies when the field is omitted. Of these eleven rows, only MiniMax M3.1 Flash accepts reasoning_effort.
Check the output limit too: one response is at most 65,536 tokens on Agnes 2.5 Flash, 393,216 on DeepSeek V4.1 Flash and 524,288 on MiniMax M3.1 Flash. Set max_tokens accordingly.
A client that switches ids on 410 model_retired
From 1 November 2026, requests to these ids come back with HTTP 410; in the error body, error.type is model_retired, error.details.retirement_date is 2026-11-01, and there is no replacement_model field. The client below catches openai.APIStatusError; when status_code is 410 and the type is model_retired, it tries the next id in the map and remembers the one that answered. Other errors (402, 429 and the rest) are raised as they are; handle them in your own error handling. The client sends only the messages and max_tokens; add response_format, tool_choice and reasoning settings per candidate according to the differences above.
OpenAI Python SDK client on https://llmtr.com/v1 that catches 410 model_retired and switches to a fallback model id from a configured map.
import os
import openai
from openai import OpenAI
client = OpenAI(base_url="https://llmtr.com/v1", api_key=os.environ["LLMTR_API_KEY"])
# From 1 November 2026, 00:00 (TRT) the Shanghai AI Lab ids answer 410
# model_retired and are not redirected. Candidates are tried in order;
# paid candidates need a balance.
FALLBACKS = {
"internlm/intern-s2-free": ["nvidia/nemotron-3.5-super-vl-free", "qwen/qwen3.6-35b-a3b", "deepseek/deepseek-flash"],
"internlm/atria-dawn-free": ["nvidia/nemotron-3-ultra-550b-a55b", "agnes/agnes-2.5-flash", "deepseek/deepseek-flash", "minimax/minimax-m3.1-flash"],
"internlm/atria-dawn-preview-free": ["nvidia/nemotron-3-ultra-550b-a55b", "agnes/agnes-2.5-flash", "deepseek/deepseek-flash", "minimax/minimax-m3.1-flash"],
"internlm/agents-a1-free": ["nvidia/nemotron-3.5-super-vl-free", "qwen/qwen3.6-35b-a3b"],
"internlm/sage-a1.5-free": ["nvidia/nemotron-3.5-super-vl-free", "qwen/qwen3.6-35b-a3b"],
}
chosen = {} # requested id -> index of the candidate that answered
def is_retired(error):
body = error.body if isinstance(error.body, dict) else {}
body = body.get("error", body)
return error.status_code == 410 and body.get("type") == "model_retired"
def chat(model, messages, **options):
candidates = [model] + FALLBACKS.get(model, [])
for index in range(chosen.get(model, 0), len(candidates)):
try:
response = client.chat.completions.create(model=candidates[index], messages=messages, **options)
except openai.APIStatusError as error:
if is_retired(error):
continue # retired: try the next candidate
raise # 402, 429 and the rest: handle them in your own code
chosen[model] = index
return candidates[index], response
raise RuntimeError("every candidate for " + model + " answered 410 model_retired")
used, response = chat(
"internlm/atria-dawn-free",
[{"role": "user", "content": "Summarise the trade-offs of event sourcing in five bullet points."}],
max_tokens=8192,
)
print(used, response.choices[0].finish_reason, response.usage.total_tokens)
Which one when?
The choices follow from the differences in price, context, input and settings between the rows; compare output quality with your own examples. Do not use free rows, including the Shanghai AI Lab rows until 31 October 2026, for sensitive, personal or customer data; the data notice of the Nemotron rows also says prompts may be logged and used to improve the model. Read each row's data notice on its model page.
- Continuing scientific questions with images, or an agent that reads images, for free after 31 October 2026: Nemotron 3.5 Super VL (nvidia/nemotron-3.5-super-vl-free); a 1,000,000-token context, json_schema and an on/off reasoning switch.
- Continuing long text-based agent work for free after 31 October 2026: Nemotron 3 Ultra (nvidia/nemotron-3-ultra-550b-a55b) for a 1,000,000-token context, Agnes 2.5 Flash (agnes/agnes-2.5-flash) for json_schema and required tool_choice.
- A paid agent in the size class of Agents-A1 and Sage-A1.5 that needs images and json_schema: Qwen3.6 35B-A3B (qwen/qwen3.6-35b-a3b); use auto for tool_choice.
- Paid batch work that needs a 1,000,000-token context and a cache discount and can run outside peak hours: DeepSeek V4.1 Flash (deepseek/deepseek-flash).
- Paid work where you set reasoning depth with reasoning_effort instead of turning it off, and send video input: MiniMax M3.1 Flash (minimax/minimax-m3.1-flash).
Moving off the Shanghai AI Lab rows before 1 November 2026
Choose a fallback row for each id you use, adapt the request settings, and deploy a client that catches 410 model_retired.
- Mapping. For each id, pick from the table a free and a paid row to use after 31 October 2026; top up your balance under Dashboard > Billing for the paid rows.
- Settings. Change response_format, tool_choice, the image format and the reasoning setting to values the new row accepts, and try it with the same task.
- Client. Deploy the client that catches 410 model_retired before 1 November 2026, 00:00 (TRT), and watch in your logs which candidate answers.
Frequently asked questions
What happens to ids like internlm/intern-s2-free after 1 November 2026?
The five models are free until 31 October 2026, 23:59 (TRT). From 1 November 2026, 00:00, requests return 410 model_retired and are not redirected to another model; the error body has no replacement_model field. You change the model id yourself.
When does DeepSeek V4.1 Flash cost double?
On weekdays between 01:00-04:00 and 06:00-10:00 UTC, which is 04:00-07:00 and 09:00-13:00 TRT. In those hours input, cache and output double; weekends and Chinese public holidays are billed at the normal price all day.
Why Qwen3.6 35B-A3B in place of Sage-A1.5?
Sage-A1.5's model card says the model is built on Qwen3.6 and Agents-A1, and Qwen3.6 35B-A3B is in the same size class with 35 billion total and 3 billion active parameters. It accepts a 262,144-token context, images and json_schema; use auto for tool_choice. To continue for free after 31 October 2026, choose Nemotron 3.5 Super VL.
Related posts
- Shanghai AI Lab models: Intern-S2 to Sage-A1.5 compared
- Agents-A1, Sage-A1.5 and Qwen3.6 35B-A3B compared
- Intern-S2 vs Qwen3.8 27B, Nemotron 3.5 Super VL, Agnes 2.5 Flash
- Free Nemotron 3.5 Super VL API: image and video input
- Nemotron 3 Ultra 550B A55B 262K: NVIDIA's largest open-weight MoE model
- MiniMax M3.1 Flash API: first request, reasoning_effort, price
- Reading scientific charts and tables with the Intern-S2 API
- Atria-Dawn vs Atria-Dawn Preview: stable release or open preview
- Intern-S2 model
- Atria-Dawn model
- Atria-Dawn Preview model
- Agents-A1 model
- Sage-A1.5 model
- Nemotron 3.5 Super VL (Free) model
- Nemotron 3 Ultra 550B A55B model
- Agnes 2.5 Flash model
- Qwen3.6 35B-A3B model
- DeepSeek V4.1 Flash model
- MiniMax M3.1 Flash model
- Errors documentation
- Reasoning effort documentation
- Tool calling documentation
- Multimodal images