Zai provides methods for generating and transforming text. Each method handles prompting and output formatting.
Generate text
zai.text() generates content from a prompt:
import { adk } from "@botpress/runtime"
const intro = await adk.zai.text(
"Write a brief introduction about AI in customer service",
{ length: 200 }
)
| Option | Type | Description |
|---|
length | number | Target length in tokens |
Rewrite text
zai.rewrite() transforms text based on instructions:
const formal = await adk.zai.rewrite(
"hey, the meeting is tmrw at 3",
"Make this professional and formal"
)
// "The meeting has been scheduled for tomorrow at 3:00 PM."
| Option | Type | Description |
|---|
length | number | Max tokens to generate |
examples | Array<{input, output, instructions?}> | Few-shot examples to guide the rewriting |
Summarize
zai.summarize() condenses long content. It handles documents from a few paragraphs up to entire books by chunking and merging automatically:
const summary = await adk.zai.summarize(longArticle, {
length: 100,
prompt: "Focus on key findings and conclusions",
})
| Option | Type | Description |
|---|
length | number | Target summary length in tokens |
prompt | string | Instructions for what to focus on |
format | string | How to format the output (e.g. “bullet points with clear sections”) |
intermediateFactor | number | How many times longer intermediate summaries are than the final length (used for very large documents) |
maxIterations | number | Max refinement passes |
sliding | { window, overlap } | Override the default chunk size and overlap |
Answer with citations
zai.answer() answers a question from a set of documents and tells you which documents backed the answer. It doesn’t always return a direct answer: if the question is ambiguous, off-topic, or the documents don’t cover it, the result carries that information instead.
const faq = [
"Orders ship within 2 business days. Standard shipping takes 3-5 business days; expedited takes 1-2.",
"Returns are accepted within 30 days of delivery. Items must be unused and in original packaging.",
"Our warranty covers manufacturing defects for 1 year from purchase. Wear and tear is not covered.",
]
const result = await adk.zai.answer(faq, "How long do I have to return something?")
if (result.type === "answer") {
console.log(result.answer) // "Returns are accepted within 30 days of delivery..."
console.log(result.citations) // Points back to the returns policy entry
}
Branch on result.type to handle the other cases (ambiguous questions, off-topic, etc.):
| Type | Fields | When it’s returned |
|---|
answer | answer, citations | The documents support a clear answer |
ambiguous | ambiguity, follow_up, answers | The question has multiple valid interpretations |
out_of_topic | reason | The question isn’t covered by the documents’ topic |
invalid_question | reason | The question is malformed or nonsensical |
missing_knowledge | reason | The topic is relevant but the documents don’t cover it |
Patch files
zai.patch() makes surgical edits to code or text files based on natural language instructions. It produces minimal diffs rather than regenerating entire files:
const files = [{
path: "src/utils.ts",
name: "utils.ts",
content: 'export function add(a: number, b: number) {\n return a + b\n}',
}]
const patched = await adk.zai.patch(
files,
"Add JSDoc comments to all exported functions"
)
Last modified on April 24, 2026