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 idzai
Base URLhttps://api.z.ai/api/coding/paas/v4
Default modelglm-4.6
API key env varZAI_API_KEY
AuthAuthorization: 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

CapabilitySupported
StreamingYes
Tool callingYes
Structured outputYes
VisionNo
Model listingNo
EmbeddingsNo

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