Model comparison · 2026-10-22

Intern-S2 vs Qwen3.8 27B, Nemotron 3.5 Super VL, Agnes 2.5 Flash

Compare four rows that read images: context, output per response, image and video format, JSON, tool choice, reasoning and quota type.

Diagram: four boxes under https://llmtr.com/v1, Intern-S2, Qwen3.8 27B, Nemotron 3.5 Super VL and Agnes 2.5 Flash; the same image goes to all four.

Short answer: Intern-S2 for figures and tables, Nemotron 3.5 Super VL for video

LLMTR is a gateway that gives access to language models from different providers through one OpenAI-compatible API. The four models in this article read images and are called on the /v1/chat/completions endpoint at https://llmtr.com/v1 with the same API key from your llmtr.com account. If you need to read a scientific figure, chart or table from an image, use Intern-S2 (internlm/intern-s2-free); it is free until 31 October 2026, 23:59 (TRT). For free work that continues after 31 October 2026, or for video, choose Nemotron 3.5 Super VL (nvidia/nemotron-3.5-super-vl-free). Qwen3.8 27B (qwen/qwen3.8-27b-free) and Agnes 2.5 Flash (agnes/agnes-2.5-flash) also read images and run on quotas with no end date set.

According to Shanghai AI Lab's model card, Intern-S2 learns directly from raw pages of scientific literature through visual pretraining and was trained with scientific reinforcement-learning tasks across more than 20 domains. Qwen's model card describes Qwen3.8-27B as a native vision-language model that understands images and videos; on this LLMTR row, video input is not open. NVIDIA's model card describes Nemotron 3.5 Super VL as a vision-language model for reasoning, coding, tool use, document understanding and video understanding. In the LLMTR catalog, Agnes 2.5 Flash is a general-purpose model for chat, coding and agent workflows.

Models that read images: Intern-S2, Qwen3.8 27B, Nemotron 3.5 Super VL or Agnes 2.5 Flash?

Five questions decide it: whether the work continues after 31 October 2026, whether you need video, whether the output must follow a JSON schema, how much text one response has to carry, and whether you want the quota to count tokens or requests. The table shows the four rows with the values in the LLMTR catalog and docs.

Four rows that read images in the LLMTR catalog, as of 22 October 2026
PropertyIntern-S2Qwen3.8 27BNemotron 3.5 Super VLAgnes 2.5 Flash
Model idinternlm/intern-s2-freeqwen/qwen3.8-27b-freenvidia/nemotron-3.5-super-vl-freeagnes/agnes-2.5-flash
Period and quota typeuntil 31 October 2026, 23:59 (TRT); 500,000 tokens a day, new accounts start with a smaller allowance on their first dayno end date set; daily quotano end date set; daily quotano end date set; quota counts requests, not tokens, over a rolling 24 hours
Context window262,144 tokens131,042 tokens1,000,000 tokens524,288 tokens
Maximum output per responseno separate limit listed16,384 tokensno separate limit listed65,536 tokens
Image formatan https address or a base64 data URLaccepts base64 data URLssend as a base64 data URLbase64 data URLs only; an https address returns 400
Videono; video_url returns 400no; video_url returns 400yes; video_url, base64 data URLyes; video_url, base64 data URL
JSONno response_format; ask in the promptJSON mode (json_object)json_object and json_schemajson_object and json_schema
Tool choice (tool_choice)auto only; required, a named function and none with tools attached return 400tool calling (auto)auto, required, a named functionauto, required, a named function
Reasoningon by default; "reasoning": false or :fast turns it offno reasoning settingon by default; "reasoning": false or :fast turns it offon by default; :fast or "reasoning": false turns it off
reasoning_effortreturns 400returns 400returns 400returns 400
From 1 November 2026410 model_retired, no redirectcan be usedcan be usedcan be used

Sending the same image to all four models

The Python example below encodes a local figure image as base64 once and sends the same question to the four models in turn. Because the image travels as a data URL, Agnes 2.5 Flash accepts the request too; with an https address, that row would return 400. The reasoning setting is left alone, so each row answers with its own default. max_tokens is 8192: it stays below 16,384, the per-response limit of Qwen3.8 27B, and leaves room for both reasoning and the answer on the three rows that reason.

For each model the example prints finish_reason, prompt_tokens and completion_tokens. Intern-S2, Nemotron 3.5 Super VL and Agnes 2.5 Flash reason by default, so on those rows completion_tokens also includes reasoning tokens, and a short max_tokens can cut the answer off before reasoning ends. If a row returns 429 or another error status, the example prints the status and the Retry-After header and moves on to the next one. Compare the results with your own figures: the prompt_tokens value for the same image can differ from row to row.

OpenAI Python SDK example that sends the same base64 image and the same question to internlm/intern-s2-free, qwen/qwen3.8-27b-free, nvidia/nemotron-3.5-super-vl-free and agnes/agnes-2.5-flash through https://llmtr.com/v1/chat/completions and prints finish_reason and usage.

import base64
import os

from openai import APIStatusError, OpenAI

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

# One local PNG as a base64 data URL, the image form all four rows accept.
with open("figure.png", "rb") as f:
    image_url = "data:image/png;base64," + base64.b64encode(f.read()).decode("ascii")

messages = [{
    "role": "user",
    "content": [
        {"type": "text", "text": "What does the y-axis show, and which series reaches the highest value? Answer in two sentences."},
        {"type": "image_url", "image_url": {"url": image_url}},
    ],
}]

# Each row answers with its own reasoning default; nothing here switches it.
MODELS = [
    "internlm/intern-s2-free",            # until 31 October 2026, 23:59 (TRT)
    "qwen/qwen3.8-27b-free",              # at most 16,384 output tokens per response
    "nvidia/nemotron-3.5-super-vl-free",
    "agnes/agnes-2.5-flash",              # images only as base64 data URLs
]

for model in MODELS:
    try:
        response = client.chat.completions.create(model=model, messages=messages, max_tokens=8192)
    except APIStatusError as err:
        print(model, "error", err.status_code, "Retry-After:", err.response.headers.get("retry-after"))
        continue
    choice = response.choices[0]
    usage = response.usage
    print(model, choice.finish_reason, usage.prompt_tokens, usage.completion_tokens)
    print(choice.message.content)

Video, JSON, tool choice and output limits

Video is open only on Nemotron 3.5 Super VL and Agnes 2.5 Flash: send the clip as a video_url part carrying a base64 data URL. On Intern-S2 and Qwen3.8 27B, a video_url part returns 400. None of the four rows takes audio input.

JSON support differs from row to row. Do not send response_format to Intern-S2; describe the format in the prompt and parse the answer in your own code. Qwen3.8 27B supports JSON mode, that is json_object. Nemotron 3.5 Super VL and Agnes 2.5 Flash also return output that follows a schema through json_schema, in addition to json_object. For tool choice, Intern-S2 works only with auto; Nemotron 3.5 Super VL and Agnes 2.5 Flash accept auto, required and a named function. One response can be at most 16,384 tokens on Qwen3.8 27B and at most 65,536 tokens on Agnes 2.5 Flash; a larger max_tokens is refused. Intern-S2 and Nemotron 3.5 Super VL list no separate output limit; check finish_reason on long answers.

Quota type and what changes from 1 November 2026

Intern-S2's allowance is 500,000 tokens a day per model; it counts input, output and reasoning tokens combined, renews every day at 00:00 (TRT), and new accounts start with a smaller allowance on their first day. Qwen3.8 27B and Nemotron 3.5 Super VL run with a daily quota. The Agnes 2.5 Flash quota counts requests, not tokens: every successful call uses one slot in a rolling 24-hour window, and the :fast suffix removes reasoning tokens but does not change the number of slots used. On all four rows, a request that hits the limit returns 429, and the Retry-After header tells you when to try again.

From 1 November 2026, 00:00 (TRT), requests to Intern-S2 return 410 model_retired and are not redirected to another model. To keep going free of charge after 31 October 2026, use Nemotron 3.5 Super VL with the id nvidia/nemotron-3.5-super-vl-free. When you move, change the model id, turn the JSON instruction in the prompt into a json_schema response_format if you like, and send the image as a base64 data URL; "reasoning": false and :fast turn reasoning off the same way. If short answers and JSON mode are enough, Qwen3.8 27B, and if you want a long context and a quota that counts requests, Agnes 2.5 Flash can also be used after 31 October 2026.

Which one when?

The choices below follow from the differences in date, input, JSON, reasoning and quota between the four rows; compare reading accuracy with your own images.

  • A scientific figure, chart or table: Intern-S2; it is free until 31 October 2026, 23:59 (TRT), then move to Nemotron 3.5 Super VL.
  • A free row with no end date set, and video input: Nemotron 3.5 Super VL; with its 1,000,000-token context, it can be used after 31 October 2026 as well.
  • Work that needs short answers and JSON mode, with no reasoning setting to manage: Qwen3.8 27B; one response is at most 16,384 tokens.
  • A long context, json_schema and a quota that counts requests instead of tokens: Agnes 2.5 Flash; send images and video only as base64 data URLs.
  • Sensitive, personal or customer data: use none of the four; the data notices of Intern-S2, Qwen3.8 27B and Nemotron 3.5 Super VL say content may be logged and used to improve the model.

Comparing four image-reading models with the same image

Send the same base64 image and question to the four models with one LLMTR key, then compare the answer, finish_reason and token counts.

  1. Key. Open an account on llmtr.com and create a key under Dashboard > API Keys.
  2. Image. Turn the image into a data URL with the data:image/png;base64, prefix; all four rows accept this form.
  3. Comparison. Send the same question with the four model ids to the https://llmtr.com/v1/chat/completions endpoint, then compare the answers and the usage values.

Frequently asked questions

Which of these four models read video?

Nemotron 3.5 Super VL and Agnes 2.5 Flash. Send the clip to either of them as a video_url part carrying a base64 data URL. On Intern-S2 and Qwen3.8 27B, a video_url part returns 400.

Why send images to Agnes 2.5 Flash as base64?

Agnes 2.5 Flash accepts images and video only as base64 data URLs; a request that sends an image as an https address returns 400 unsupported_input, and the error message asks for a base64 data URL. If you send the same request to all four rows, make the image a data URL; the other three rows accept that form too.

What happens to Intern-S2 after 1 November 2026?

Requests return 410 model_retired and are not redirected to another model. To keep going free of charge after 31 October 2026, change the model id to nvidia/nemotron-3.5-super-vl-free; if you need JSON, you can use json_schema in response_format there.

Related posts