一键导入
add-model
Add a new model to the a2go registry — both GGUF (Linux/Windows) and MLX (macOS) variants, with full testing on Runpod.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Add a new model to the a2go registry — both GGUF (Linux/Windows) and MLX (macOS) variants, with full testing on Runpod.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
| name | add-model |
| description | Add a new model to the a2go registry — both GGUF (Linux/Windows) and MLX (macOS) variants, with full testing on Runpod. |
Follow every step in order. Do NOT skip testing. Do NOT create a PR until all steps pass.
Find the model on HuggingFace. Identify:
Find quantized variants:
unsloth/, bartowski/, or the official org. Pick the best quant that fits on an RTX 4090 (24GB) — prefer Q8_0 if it fits, otherwise Q4_K_M. For very large models, check Q2_K_XL or IQ4_XS.mlx-community/. Pick the best quant that fits in 24GB unified memory (M3 Pro baseline). Prefer 8-bit, fall back to 4-bit.Create two files in registry/models/:
{model-name}-gguf.json — for Linux/Windows (engine: a2go-llamacpp){model-name}-mlx.json — for macOS (engine: mlx-lm)Use existing models in the same family as templates. Both files MUST share the same group, family, and catalogKey.
Key fields to get right:
id: org/model-name format (lowercase)group: shared identifier across GGUF/MLX variants (e.g. qwen35-9b)family: broader family (e.g. qwen35)catalogKey: same as group unless the family has models that need separate catalog rowssize: parameter count string (e.g. "754B", "27B", "1T") — required for UI displayvram.model: model weight size in MB (check HuggingFace file sizes)vram.overhead: compute graph buffers (1.5-3GB for large models, 0 for MLX)kvCacheMbPer1kTokens: KV cache rate. MLX rate must be ~1.88x the GGUF rate (MLX uses fp16, GGUF uses q8_0)defaults.contextLength: must be >= 16384 (OpenClaw minimum)platform: set to "mlx" for MLX variants, omit for GGUFFor GGUF models, also set:
files: array of GGUF files to download (include mmproj if vision)downloadDir: must start with /workspace/models/extraStartArgs: any extra llama.cpp flags (check existing similar models)
-ctk q4_0 -ctv q4_0 for KV cache quantization — this reduces KV cache VRAM by ~4x, enabling much larger context windows. All models should use this unless there's a specific reason not to (e.g., model quality degrades with quantized KV).kvCacheMbPer1kTokens based on q4_0 rates (roughly 1/4 of f16 rates), not the default f16/q8_0 rates.startDefaults.gpuLayers: "999" to offload all layers to GPUprovider.name: "local-llamacpp"cd site && npx tsx scripts/validate.ts
Fix any errors. Warnings about MLX/GGUF KV ratio should be investigated.
git add registry/models/
git commit -m "feat: add {model-name} model configs"
git push origin {branch-name}
Use the /runpodctl skill to deploy a Runpod GPU pod using A2GO_CONFIG — the same way any user would deploy a model.
Use A2GO_CONFIG to specify the model. The entrypoint resolves the model from the registry, downloads it, starts llama-server, starts the agent gateway, and starts any additional services — all automatically.
runpodctl pod create \
--name "{model-name}-test" \
--gpu-id "{gpu-id}" \
--gpu-count {count} \
--image "runpod/a2go:latest" \
--container-disk-in-gb {size} \
--ports "8000/http,8080/http,8642/http,18789/http,22/tcp" \
--env '{"A2GO_CONFIG":"{\"agent\":\"hermes\",\"llm\":\"{repo}:{bits}bit\"}","A2GO_AUTH_TOKEN":"test123","HF_TOKEN":"{{ RUNPOD_SECRET_HF_TOKEN }}"}'
Key points:
A2GO_CONFIG takes JSON with an agent field (required) and role fields like llm, image, etc."unsloth/GLM-5.1-GGUF:1bit"{"agent":"hermes","llm":"{repo}:{bits}bit","image":"Disty0/FLUX.2-klein-4B-SDNQ-4bit-dynamic"}Do NOT manually start servers, freeze entrypoints, or inject configs via SSH. Let the entrypoint handle it.
Wait for the model to finish downloading and loading. Check with:
curl http://localhost:8000/health
Basic chat completion — simple factual question:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {api-key}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "What is the capital of France?"}], "max_tokens": 100}'
Tool/function calling:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {api-key}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "What is the weather in Berlin?"}], "tools": [{"type": "function", "function": {"name": "get_weather", "description": "Get weather for a location", "parameters": {"type": "object", "properties": {"location": {"type": "string"}}, "required": ["location"]}}}], "max_tokens": 256}'
Multi-turn with tool results:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {api-key}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "What is the weather in Berlin?"}, {"role": "assistant", "content": null, "tool_calls": [{"id": "call_1", "type": "function", "function": {"name": "get_weather", "arguments": "{\"location\": \"Berlin\"}"}}]}, {"role": "tool", "tool_call_id": "call_1", "content": "{\"temp\": 18, \"condition\": \"cloudy\"}"}], "max_tokens": 256}'
Reasoning/thinking mode (if supported) — verify reasoning_content is populated:
curl http://localhost:8000/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {api-key}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "How many rs are in strawberry? Think step by step."}], "max_tokens": 512}'
Hermes is the agent framework. It manages tools internally (browser, terminal, search, etc.).
Basic Hermes chat — verify the gateway responds and lists tools:
curl http://localhost:8642/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {auth-token}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "Hello, what tools do you have available?"}], "max_tokens": 256}'
Hermes agentic tool use — ask something that requires tools. Hermes will use its built-in tools (browser, search) to resolve the query end-to-end:
curl http://localhost:8642/v1/chat/completions \
-H "Content-Type: application/json" \
-H "Authorization: Bearer {auth-token}" \
-d '{"model": "{served-as}", "messages": [{"role": "user", "content": "What is the weather in Berlin?"}], "max_tokens": 256}'
/agent-browserIf the pod was deployed with "agent":"openclaw", OpenClaw serves a web UI on port 18789. Use the /agent-browser skill to test end-to-end:
https://{pod-id}-18789.proxy.runpod.netopenclaw devices list then openclaw devices approve <id> (unless A2GO_DISABLE_DEVICE_AUTH=true is set)For each GPU tested:
nvidia-smi — update vram.model in the config to match realitytimings.predicted_per_second — add to tps fieldkvCacheMbPer1kTokens — calculate: (vram_with_context - vram_model_only) / (context_tokens / 1000)verifiedOn arrayAlways test with the model's full default context length — never reduce it. If it OOMs, that's a real finding.
Update both GGUF and MLX model JSON files with:
vram.model from actual nvidia-smi readingstps object with measured tok/s per GPUverifiedOn array with tested GPU IDskvCacheMbPer1kTokens valuescd site && npx tsx scripts/validate.ts
Create a changeset:
npx changeset
Then create the PR. Include test results (VRAM, tok/s, GPUs tested) in the PR description.
Use open weight models (LLM, image, audio) with open source agents on Mac, Linux, and Windows.
Generate images from text prompts using the local FLUX.2 model on the GPU.
Transcribe speech audio to text using the local LFM2.5 model on the GPU.
Convert text to speech audio using the local LFM2.5 model on the GPU.