Z.AI
Use Z.AI with Blazen — construct the ZaiProvider and call complete().
Z.AI is an OpenAI-compatible LLM provider. Construct it like any other Blazen provider — build a list of ChatMessages, call complete() (or stream()), and read back a typed ModelResponse.
Z.AI GLM Coding Plan OpenAI-compatible endpoint; chat at {base}/chat/completions with Bearer auth. GLM coding/reasoning completions run long and stream reasoning_content, so the streaming-safe HTTP client is used.
At a glance
| Provider id | zai |
| Base URL | https://api.z.ai/api/coding/paas/v4 |
| Default model | glm-4.6 |
| API key env var | ZAI_API_KEY |
| Auth | Authorization: Bearer <key> |
Set ZAI_API_KEY in the environment and Blazen reads it automatically, or pass the key explicitly when you construct the provider.
Capabilities
| Capability | Supported |
|---|---|
| Streaming | Yes |
| Tool calling | Yes |
| Structured output | Yes |
| Vision | No |
| Model listing | No |
| Embeddings | No |
Usage
Construct the provider and call complete(). The default model is glm-4.6; override it with with_model / model when you need a different one.
use blazen_llm::{Model, ModelRequest, ChatMessage};
use blazen_provider_zai::ZaiProvider;
// Reads ZAI_API_KEY from the environment, or pass the key to `new`.
let model = ZaiProvider::new(std::env::var("ZAI_API_KEY")?);
let resp = model
.complete(ModelRequest::new(vec![ChatMessage::user("Hello")]))
.await?;
println!("{}", resp.content.unwrap_or_default());
from blazen import ZaiProvider, ProviderOptions, ChatMessage
# Omit the api_key to read ZAI_API_KEY from the environment.
model = ZaiProvider(options=ProviderOptions(api_key="..."))
resp = await model.complete([ChatMessage.user("Hello")])
print(resp.content)
import { ZaiProvider, ChatMessage } from "blazen";
// Omit apiKey to read ZAI_API_KEY from the environment.
const model = ZaiProvider.create({ apiKey: "..." });
const resp = await model.complete([ChatMessage.user("Hello")]);
console.log(resp.content);
Streaming
async for chunk in model.stream([ChatMessage.user("Count to five")]):
print(chunk.delta, end="")
await model.stream([ChatMessage.user("Count to five")], (chunk) => {
if (chunk.delta) process.stdout.write(chunk.delta);
});
See also
- Models & Providers — the canonical provider +
ModelManagerguide