DigestAI news desk
Generative AI & Models updated 3 min read

Agnes AI releases Agnes-3.0-Flash, a 33B open‑weights multimodal model with tool calling

Agnes AI announced the open‑weights release of Agnes-3.0-Flash, a 33‑billion‑parameter multimodal model that handles text, image and video inputs while offering built‑in tool‑calling and adjustable reasoning effort. The model uses a hybrid‑attention decoder where three out of four layers run a gated‑delta recurrent rule, leaving only 18 of the 72 layers with a KV cache, which reduces memory…

1 source primary source

Key points

  • Agnes-3.0-Flash is a 33B multimodal model supporting text, image, video, and tool‑calling.
  • Hybrid‑attention decoder reduces KV‑cache layers to 18, enabling a 144‑token context window on cheaper hardware.
  • Released under Apache 2.0 with Hugging Face integration and Docker serving scripts.

The team provided a full Hugging Face‑compatible pipeline, including a custom chat template that lets developers select high, medium or low reasoning levels, toggle thinking off, and embed tool definitions that the model emits as structured calls. Sample Docker commands show how to serve the model with sglang, and the release is licensed under Apache 2.0 with a citation pointing to https://agnes‑ai.com/. While the benchmark table is a reference compilation rather than a controlled head‑to‑head test, the authors claim competitive results on reasoning, coding and instruction‑following tasks, positioning Agnes‑3.0‑Flash as a cost‑effective alternative to larger flagship models.

Full story from huggingface.co · via Reddit AI communities primary source Open source ↗

Agnes-AI/Agnes-3.0-Flash 33B Multimodal, AA score: 36

huggingface.co · 12 September 2026

Hello! 👋 Today we are introducing Agnes-3.0-Flash, an open-weights multimodal model built for people who want flagship-class reasoning without flagship-class hardware.

Highlights:

  • Competitive across core capabilities. Agnes-3.0-Flash posts competitive results across reasoning, coding, and instruction-following evaluations.
  • Built for demanding work. A262 144-token context window , adjustable reasoning effort, tool calling, andtext, image and video understanding.

Agnes-3.0-Flash

Reference results across contemporary models are shown below. The figures were compiled from different sources, harnesses, and model snapshots and do not constitute a controlled head-to-head comparison.

Higher is better for every row. Header parameter figures mix total and active counts, and harnesses and snapshot dates differ across sources, so treat cross-column comparisons as reference values rather than a controlled head-to-head evaluation.

Agnes-3.0-Flash is a hybrid-attention decoder: three of every four layers run a gated delta rule (recurrent, with per-layer state independent of sequence length), and the fourth runs standard global attention. Only 18 of the 72 layers therefore hold a KV cache that grows with context.

pip install "transformers>=5.12" torch torchvision accelerate

Tested on transformers 5.12.1. Image and video inputs go through the bundled processor, which needs torchvision.

from transformers import AutoModelForCausalLM, AutoTokenizer
path = "Agnes-AI/Agnes-3.0-Flash"
tok = AutoTokenizer.from_pretrained(path)
model = AutoModelForCausalLM.from_pretrained(
    path, dtype="bfloat16", device_map="auto", trust_remote_code=True
)
msgs = [{"role": "user", "content": "请用三句话解释什么是人工智能。"}]
ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=256)
print(tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True))

Image and video inputs go through the bundled processor (also remote code):

from transformers import AutoProcessor
proc = AutoProcessor.from_pretrained(path, trust_remote_code=True)
msgs = [{"role": "user", "content": [{"type": "image", "image": "photo.jpg"},
                                     {"type": "text", "text": "描述这张图。"}]}]
inputs = proc.apply_chat_template(msgs, add_generation_prompt=True, tokenize=True,
                                  return_dict=True, return_tensors="pt").to(model.device)
out = model.generate(**inputs, max_new_tokens=256)
print(proc.batch_decode(out[:, inputs["input_ids"].shape[1]:], skip_special_tokens=True)[0])

The chat template exposes three reasoning levels — high (default), medium, low — plus a thinking-off switch:

ids = tok.apply_chat_template(msgs, add_generation_prompt=True, return_tensors="pt",
                              reasoning_effort="medium")   # or enable_thinking=False

The chat template renders tool definitions for you. The model emits calls as <tool_call><function=…><parameter=…>, and you feed results back as a tool role message:

tools = [{
    "type": "function",
    "function": {
        "name": "get_weather",
        "description": "Look up current weather for a city",
        "parameters": {
            "type": "object",
            "properties": {"city": {"type": "string", "description": "City name"}},
            "required": ["city"],
        },
    },
}]
msgs = [{"role": "user", "content": "What's the weather in Beijing right now?"}]
ids = tok.apply_chat_template(msgs, tools=tools, add_generation_prompt=True,
                              return_tensors="pt").to(model.device)
out = model.generate(ids, max_new_tokens=256)
reply = tok.decode(out[0][ids.shape[1]:], skip_special_tokens=True)
# <tool_call>
# <function=get_weather>
# <parameter=city>
# Beijing
# </parameter>
# </function>
# </tool_call>
# run the tool, append the result, generate the final answer
msgs += [{"role": "assistant", "content": reply},
         {"role": "tool", "content": "Clear, 26°C, light northeasterly wind"}]

Over the OpenAI API pass tools= the same way. The server returns the text above verbatim by default; to get structured tool_calls, configure sglang with a tool-call parser matching this format (likewise a reasoning parser, if you want the thinking span in reasoning_content).

serve.sh starts a server from a stock public image, overlaying three files onto the image's sglang package and nothing else. See sglang_patch/README.md.

docker run --gpus all --shm-size 64g -p 30001:8080 \
    -v /path/to/agnes-3.0-flash:/model \
    lmsysorg/sglang:nightly-dev-20260908-20ca564b \
    bash /agnes-3.0-flash/serve.sh --served-model-name Agnes-3.0-Flash

serve.sh forwards extra command-line arguments to sglang, which is how --served-model-name takes effect; --tp 2 works the same way. The server listens on port 8080 inside the container:

from openai import OpenAI
client = OpenAI(api_key="EMPTY", base_url="http://localhost:30001/v1")
response = client.chat.completions.create(
    model="Agnes-3.0-Flash",
    messages=[{"role": "user", "content": "Design a fault-tolerant event processing architecture."}],
    temperature=1.0,
    max_tokens=2000,
)
print(response.choices[0].message.content)

Pass stream=True for streaming; tools= and reasoning_effort= are accepted the same way.

Actual context length and concurrency depend on KV-cache allocation, runtime overhead, and tensor-parallel configuration; validate the target workload on the intended hardware.

These are the checkpoint's own generation_config.json defaults.

Released under the Apache License 2.0.

@misc{agnes30flash2026,
  title        = {Agnes-3.0-Flash},
  author       = {{Agnes AI}},
  year         = {2026},
  month        = sep,
  howpublished = {Open-weights model},
  url          = {https://agnes-ai.com/}
}
  • Downloads last month

This text was published by huggingface.co . It is reproduced here with attribution so you can read it in full; the rights remain with the publisher. Read it at the source ↗

Coverage and discussion

1 source
Topics · follow one to build your own front page
Agnes AILMSYSAgnes-3.0-Flash

The headline, key points and digest above were generated by Digest AI's editorial model from the linked sources. Automated summaries can contain errors: the sources are the record. Spotted a mistake? Tell us.

Comments

via GitHub Discussions

More in Generative AI & Models

All →

Related stories