Repository navigation
v0.43.0
v0.43.0
Ask is a Task: the model fills a small spec, the page finds the relation, and oracles check it before anything runs. Models can run in the page. Breaking: see What to change.
Highlights
- Tasks (
@kanzo-tech/ai/task).defineTaskdeclares what a model may answer and which oracles check it.runTaskasks for it, sends the oracles' diagnostics back for a repair, and answers aProposal: accepted, with its diagnostics, or with aDecisionfor the person.proposeasks for several at once and keeps those the oracles accept.verifychecks a value no model wrote. A Task can declare agrammarinstead of anoutputschema when its artefact is text in a language.useTaskis a screen's list of proposals. See/docs/ai/tasks. - Ask runs in the chat as a Task.
useAskChat({ model, engine, graph, types, selection }): each question is one run ofask, its answer is the sameanswerpartAnswerCarddraws, and the reply is written from the rows, not by the model. When two relations answer a question equally, the chat asks which, numbered.askOffersgives the questions to start from, each one checked. - Chips on an answer.
AskChipsdraws what an answer was read as: what is counted, what a chart is by, each condition. Each chip opens the values it can hold instead, checked by Ask's oracles. Taking one (askEdit) re-reads the answer with no model call. - A page chip reaches an answer as it reaches a tile. A chip published on another relation narrows the answer through the key both reach.
resolveRelation(@kanzo-tech/mosaic) computes the relation a question needs: the shortest path that covers its fields and reaches the page's chips. It answers that relation, the tied ones (ambiguous), or what nothing reaches (unreachable).- A model in the page (
@kanzo-tech/llm/local).localModel("Qwen3-4B-q4f16_1-MLC", { worker, onProgress })runs on WebGPU through WebLLM, an optional peer only this subpath reaches. Without WebGPU a call fails asai/unavailable. A call can hold the model to a grammar withproviderOptions: { kanzo: { grammar } }.
What to change
useAgentChat(dataAgent(…))→useAskChat({ model, engine, graph, types, selection }).typesis each type alone:readAnswerRelations(coordinator, graph, answerRelationsOf(graph, { hops: 0 })).dataSuggestions→askOffers(a promise, not a stream).dataAgent,dataInstructions,DataAgentOptions,DataSuggestionsOptions,DataToolsand thecontext: { tokens, reserve }option are gone.Chat'ssuggestions/suggesting→proposals/proposing.ChatSkeleton'ssuggestions→proposals.suggest()andSuggestOptionsare gone. Questions to start from are a Task's, throughpropose.AiError'sai/contextcode, and itstokensandbudgetdata, are gone from@kanzo-tech/llm.
Every @kanzo-tech/* is published at 0.43.0; move them together (they pin each other exactly).