Image-Text-to-Text
Transformers
Safetensors
English
Chinese
agnes
text-generation
agnes-ai
reasoning
multimodal
long-context
hybrid-attention
conversational
custom_code
Instructions to use Agnes-AI/Agnes-3.0-Flash with libraries, inference providers, notebooks, and local apps. Follow these links to get started.
- Libraries
- Transformers
How to use Agnes-AI/Agnes-3.0-Flash with Transformers:
# Use a pipeline as a high-level helper from transformers import pipeline pipe = pipeline("image-text-to-text", model="Agnes-AI/Agnes-3.0-Flash", trust_remote_code=True) messages = [ { "role": "user", "content": [ {"type": "image", "url": "https://huggingface.co/datasets/huggingface/documentation-images/resolve/main/p-blog/candy.JPG"}, {"type": "text", "text": "What animal is on the candy?"} ] }, ] pipe(text=messages)# Load model directly from transformers import AutoModelForCausalLM model = AutoModelForCausalLM.from_pretrained("Agnes-AI/Agnes-3.0-Flash", trust_remote_code=True, device_map="auto") - Notebooks
- Google Colab
- Kaggle
- Local Apps Settings
- vLLM
How to use Agnes-AI/Agnes-3.0-Flash with vLLM:
Install from pip and serve model
# Install vLLM from pip: pip install vllm # Start the vLLM server: vllm serve "Agnes-AI/Agnes-3.0-Flash" # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:8000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Agnes-AI/Agnes-3.0-Flash", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker
docker model run hf.co/Agnes-AI/Agnes-3.0-Flash
- SGLang
How to use Agnes-AI/Agnes-3.0-Flash with SGLang:
Install from pip and serve model
# Install SGLang from pip: pip install sglang # Start the SGLang server: python3 -m sglang.launch_server \ --model-path "Agnes-AI/Agnes-3.0-Flash" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Agnes-AI/Agnes-3.0-Flash", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }'Use Docker images
docker run --gpus all \ --shm-size 32g \ -p 30000:30000 \ -v ~/.cache/huggingface:/root/.cache/huggingface \ --env "HF_TOKEN=<secret>" \ --ipc=host \ lmsysorg/sglang:latest \ python3 -m sglang.launch_server \ --model-path "Agnes-AI/Agnes-3.0-Flash" \ --host 0.0.0.0 \ --port 30000 # Call the server using curl (OpenAI-compatible API): curl -X POST "http://localhost:30000/v1/chat/completions" \ -H "Content-Type: application/json" \ --data '{ "model": "Agnes-AI/Agnes-3.0-Flash", "messages": [ { "role": "user", "content": [ { "type": "text", "text": "Describe this image in one sentence." }, { "type": "image_url", "image_url": { "url": "https://cdn.britannica.com/61/93061-050-99147DCE/Statue-of-Liberty-Island-New-York-Bay.jpg" } } ] } ] }' - Docker Model Runner
How to use Agnes-AI/Agnes-3.0-Flash with Docker Model Runner:
docker model run hf.co/Agnes-AI/Agnes-3.0-Flash
| #!/usr/bin/env python3 | |
| """Apply the Agnes patch to an sglang python package directory (the one that | |
| contains `srt/`). Idempotent. | |
| 1. srt/configs/agnes.py new file | |
| 2. srt/utils/hf_transformers/common.py register AgnesConfig in _CONFIG_REGISTRY | |
| 3. srt/models/qwen3_5.py load_weights: translate the Agnes checkpoint | |
| (tensor prefixes, parallel-FFN fold) | |
| Usage: apply_patch.py <path/to/sglang> e.g. .../site-packages/sglang | |
| """ | |
| import os | |
| import shutil | |
| import sys | |
| HERE = os.path.dirname(os.path.abspath(__file__)) | |
| MARK = "# === agnes ===" | |
| TRANSLATE = ''' | |
| # === agnes === | |
| # Agnes 3.0 Flash checkpoints (config model_type "agnes") use their own tensor | |
| # prefixes and carry a parallel FFN branch per layer. This generator sits at | |
| # the top of the weight stream and turns it into what the implementation below | |
| # expects: delta_attn -> linear_attn, global_attn -> self_attn, and the branch | |
| # concatenated onto the main gate / up (dim 0) and down (dim 1) projections, | |
| # matching the widened intermediate_size set by sglang.srt.configs.agnes. | |
| import json as _agnes_json | |
| import os as _agnes_os | |
| import re as _agnes_re | |
| _AGNES_MLP_RE = _agnes_re.compile(r"^(.*\\.layers\\.\\d+\\.mlp\\.)(gate_proj|up_proj|down_proj)\\.weight$") | |
| class _AgnesBranchReader: | |
| def __init__(self, model_path): | |
| from safetensors import safe_open | |
| self._open = safe_open | |
| self.path = model_path | |
| index = _agnes_os.path.join(model_path, "model.safetensors.index.json") | |
| self.weight_map = _agnes_json.load(open(index))["weight_map"] | |
| self.handles = {} | |
| def get(self, key): | |
| fn = self.weight_map[key] | |
| if fn not in self.handles: | |
| self.handles[fn] = self._open(_agnes_os.path.join(self.path, fn), framework="pt", device="cpu") | |
| return self.handles[fn].get_tensor(key) | |
| def _agnes_translate_weights(model, weights): | |
| cfg = getattr(model.config, "text_config", None) or model.config | |
| width = int(getattr(cfg, "agnes_parallel_ffn_intermediate_size", 0) or 0) | |
| if width <= 0: | |
| yield from weights | |
| return | |
| model_path = ( | |
| getattr(cfg, "agnes_model_path", None) | |
| or getattr(model.config, "agnes_model_path", None) | |
| or _agnes_os.environ.get("AGNES_MODEL_PATH") | |
| or getattr(model.config, "_name_or_path", None) | |
| ) | |
| if not model_path or not _agnes_os.path.isdir(model_path): | |
| raise RuntimeError( | |
| f"agnes: cannot locate the checkpoint directory (got {model_path!r}); " | |
| "set AGNES_MODEL_PATH to the model directory" | |
| ) | |
| reader = _AgnesBranchReader(model_path) | |
| for name, w in weights: | |
| if ".mlp.parallel_ffn." in name: | |
| continue | |
| m = _AGNES_MLP_RE.match(name) | |
| if m and "visual" not in name and not name.startswith("mtp"): | |
| extra = reader.get(f"{m.group(1)}parallel_ffn.{m.group(2)}.weight") | |
| dim = 1 if m.group(2) == "down_proj" else 0 | |
| w = torch.cat([w, extra.to(device=w.device, dtype=w.dtype)], dim=dim) | |
| name = name.replace(".delta_attn.", ".linear_attn.").replace(".global_attn.", ".self_attn.") | |
| yield name, w | |
| # === /agnes === | |
| ''' | |
| REGISTER = ''' | |
| # === agnes === | |
| from sglang.srt.configs.agnes import AgnesConfig as _AgnesConfig | |
| _CONFIG_REGISTRY[_AgnesConfig.model_type] = _AgnesConfig | |
| ''' | |
| def patch_file(path, edit): | |
| src = open(path, encoding="utf-8").read() | |
| if MARK in src: | |
| return "already patched" | |
| out = edit(src) | |
| if out is None: | |
| raise SystemExit(f"anchor not found in {path}") | |
| open(path, "w", encoding="utf-8").write(out) | |
| return "patched" | |
| def edit_model_file(src): | |
| anchor = "QWEN3_5_KV_SCALE_MAPPER = WeightsMapper(" | |
| hook = " weights = QWEN3_5_KV_SCALE_MAPPER.apply(weights)\n" | |
| if anchor not in src or src.count(hook) < 1: | |
| return None | |
| src = src.replace(anchor, TRANSLATE + anchor, 1) | |
| src = src.replace(hook, " weights = _agnes_translate_weights(self, weights)\n" + hook) | |
| return src | |
| def main(): | |
| if len(sys.argv) != 2: | |
| sys.exit(__doc__) | |
| pkg = os.path.abspath(sys.argv[1]) | |
| srt = os.path.join(pkg, "srt") | |
| if not os.path.isdir(srt): | |
| sys.exit(f"{pkg} does not contain srt/") | |
| dst = os.path.join(srt, "configs", "agnes.py") | |
| shutil.copy2(os.path.join(HERE, "agnes_sglang_config.py"), dst) | |
| print(f"configs/agnes.py: installed") | |
| print("utils/hf_transformers/common.py:", patch_file( | |
| os.path.join(srt, "utils", "hf_transformers", "common.py"), lambda s: s.rstrip("\n") + "\n" + REGISTER)) | |
| print("models/qwen3_5.py:", patch_file(os.path.join(srt, "models", "qwen3_5.py"), edit_model_file)) | |
| print("APPLY_PATCH_OK") | |
| if __name__ == "__main__": | |
| main() | |