AZAll LLM
Talk to Ollama, LM Studio, or any local model endpoint
- response
The node that turns the pack from "a very fancy file organizer" into an actual agent brain. AgentAZAll_LLM calls any OpenAI-compatible /v1/chat/completions endpoint - Ollama, LM Studio, llama.cpp server, vLLM, whatever - with a system prompt and a user prompt, and returns the model's text. It's deliberately boring under the hood: standard library urllib only, no OpenAI SDK, no requests, no extra pip dependencies beyond the pack's own agentazall.
What makes it worth using over the half-dozen other "Ollama in ComfyUI" packs is how it fits the ecosystem: it emits responses as plain STRING, which the pack's ToolParser, ChatHistory, and SystemPrompt nodes are built to consume. And it does one clever thing - it strips <think>...</think> blocks from reasoning models (Qwen, DeepSeek) so you get the answer, not the chain-of-thought monologue.
How it works
You give it a system prompt and a user prompt; it POSTs a non-streaming chat completion to the api_url. If the endpoint responds, it extracts choices[0].message.content, strips any <think> block, and returns the text. Failures don't crash your workflow - they come back as a string starting with [LLM_ERROR], which is exactly what the pack's Conditional Router is designed to catch (that's the graceful-error-handling pattern in the RAG demo).
The inputs that matter
system_prompt(required) - the model's instructions. Wire this from System Prompt to give the agent its identity, memories, and inbox. This is the node's intended best friend.user_prompt(required) - the actual task.api_url(defaulthttp://localhost:11434/v1/chat/completions) - the endpoint. The default assumes Ollama running locally; for LM Studio or llama.cpp, point this at their URL.model(defaultdefault) - the model name. With Ollama, this needs to match a model you have pulled (llama3.2,qwen2.5, whatever you've got). "default" works for servers that pick one for you, but you'll almost always want to set it explicitly.max_tokens(default 1024),temperature(default 0.7),timeout(default 120s) - the usual knobs.
The response output is the model's reply string - wire it to a Text Display to see it, to ChatHistory to save it, to ToolParser to let the model take actions, or to any downstream STRING input.
Installing it
Part of cronos3k/comfyui-agentazall. Manager search "AgentAZAll", or:
cd ComfyUI/custom_nodes
git clone https://github.com/cronos3k/comfyui-agentazall.git
pip install "agentazall>=1.0.13"
# restart ComfyUI
The node itself needs no model files - but it needs an LLM server running. That's the real dependency: ollama serve (or your LM Studio/llama.cpp server) must be up and reachable at the URL you configure.
Common issues
Nearly every failure comes back as [LLM_ERROR] text rather than a hard error, so watch the output string: "Connection failed" means the server isn't running or the URL/port is wrong; "HTTP 404" usually means the URL path isn't /v1/chat/completions; an auth-style 401/403 means your server requires a key the node has no field for - you'll need a proxy or an endpoint without auth. If the model name is wrong, Ollama will tell you explicitly. And remember streaming is off and max_tokens caps output - long generations get cut off, not failed.
Inputs (7)
| Name | Type | Default | Description |
|---|---|---|---|
| system_prompt | STRING | — | |
| user_prompt | STRING | — | |
| api_urlopt | STRING | http://localhost:11434/v1/chat/completions | — |
| modelopt | STRING | default | — |
| max_tokensopt | INT | 102464–16384 | — |
| temperatureopt | FLOAT | 0.700–2 | — |
| timeoutopt | INT | 12010–600 | — |
Outputs (1)
| Name | Type | Description |
|---|---|---|
| response | STRING | — |