MAX Nightly 26.8.0.dev2026102305 (Mojo 1.3.0.dev2026102305) Released

:astronaut: A new nightly version has been released! :astronaut:

See the quickstart guide for installation instructions: Quickstart | MAX

MAX changelog updates:

  • Qwen 3.5 now passes every chat_template_kwargs entry to its chat template,
    such as add_generation_prompt or preserve_thinking. It used to keep only
    enable_thinking, which still defaults to on.

  • generate(), GenerateIterator, AutoModel.generate(),
    AutoModel.generate_iter() and AutoPipeline take chat_template_kwargs,
    which reach the chat template of every messages row, such as
    {"enable_thinking": False} to turn off Qwen 3.5’s thinking.

  • images on generate(), GenerateIterator, AutoModel.generate() and
    AutoModel.generate_iter() takes PIL images as well as encoded bytes, and
    the tokenizer uses a PIL image without decoding it again. AutoProcessor
    now passes a copy of each PIL image instead of encoding it.

  • AutoProcessor and AutoPipeline now read images from http(s) URLs, data:
    URIs and base64 data, including OpenAI image_url parts. URLs are fetched
    with a 30 second timeout and a 100 MiB limit per image.

  • max serve now returns a 400 for a prompt given as token ids, on
    completions, chat prompt_tokens or embeddings, when an id is below 0 or
    past the model’s vocabulary. Such a request used to fail its whole batch.
    generate(), GenerateIterator and AutoModel.generate() raise
    InputError for such an id in input_ids. Embeddings requests the
    tokenizer rejects, such as a too-long prompt, now return a 400, not a 500.

Mojo changelog updates:

  • [stdlib] Make String nicheable.

Raw MAX diff: https://github.com/modular/modular/compare/f85b9f5ef2f9986dbfdfab9c65534959deba8030...da0db31d422e19ad5952d8d106b6da1d6899cf0a
Current Mojo changelog: https://github.com/modular/modular/blob/main/Mojo/docs/site/nightly-changelog.md