name: zai-glm description: Use the z.ai GLM API client for LLM-powered AI. Use when implementing the LLM brain, serializing game state, parsing responses, or debugging API calls.
z.ai GLM API Client
API Details
- Endpoint:
https://api.z.ai/api/paas/v4/chat/completions - Auth:
Authorization: Bearer API_KEY - Format: OpenAI-compatible (same request/response schema)
- Free models:
glm-4.7-flash,glm-4.5-flash - CORS: Supported natively — direct browser WASM calls work
Client Usage (LLMClient)
The client is at scripts/ai/llm_client.gd:
# Create and configure
var llm := LLMClient.new()
llm.api_key = "your-key" # or load from config.env
llm.model = "glm-4.7-flash" # free model
llm.temperature = 0.7
llm.max_tokens = 2048
add_child(llm) # needs to be in scene tree (uses HTTPRequest)
# Connect signals
llm.response_received.connect(_on_response)
llm.request_failed.connect(_on_error)
# Send messages
llm.send([
{"role": "system", "content": "You are a tactical AI..."},
{"role": "user", "content": "Game state JSON here..."}
])
# Or use convenience method for single prompts
llm.prompt("What action do you take?", "You are a tactical commander.")
Response Format
Signals, not await:
response_received(content: String)— the text content fromchoices[0].message.contentrequest_failed(error: String)— HTTP errors, JSON parse errors, empty responses
API Key Management
- Stored in
config.env(NOT.env— dotfiles aren't exported to WASM) - Format:
ZAI_API_KEY=your-key-here - Load with
FileAccess.open("res://config.env", FileAccess.READ)→ parse lines - Included in WASM export via
include_filter="config.env"in export_presets.cfg