DocsUse cases
Issue triage
Label each new issue by its kind and its owning team, out of the box, apply the labels decisio can stand behind, and leave the rest for a maintainer.
It sorts issues well untaught; this script asks for the issue’s kind and applies the label only when the answer is certified:
import jsonimport urllib.request
QUESTION = { "type": "choice", "instructions": "What kind of issue is this?", "criteria": { "bug": "Something is broken", "feature": "A request for something new", "docs": "The documentation is wrong or missing", "question": "A question about how to use it", "other": "Anything else" }}
def route(text): request = urllib.request.Request( "http://127.0.0.1:8000/v1/systemone", data=json.dumps({"state": text, "questions": {"kind": QUESTION}}).encode(), headers={"Content-Type": "application/json"}, ) with urllib.request.urlopen(request) as response: answer = json.load(response)["answers"]["kind"] # A certified answer acts on its own; anything else goes to a person. if answer.get("certified"): return f"label {answer['choice']}" return f"to a maintainer, {answer['choice']} suggested"
print(route("The scheduler crashes when a pod has no resource limits."))Run against the CPU stand-in at v0.18.1 on 2026-10-19. It printed:
to a maintainer, bug suggested
Until the task is certified (step 2), every answer goes to a person, as on the stand-in.
Good fit
- The kind of an issue: 85.1% right untaught on real Kubernetes issues.
- The team that owns it: 85.3% right untaught on the owning SIG.
Not a good fit
- Priority: 51.0% right, taught or not.
- Whether an issue needs more information from its reporter: a balanced accuracy of 61.3%, and teaching lowers it slightly.
All four come from one run: Gemma 4 31B, decisio 0.11.1, one RTX PRO 6000, vLLM 0.30.0, 2026-10-14 to 2026-10-15; What it did, below, gives its full conditions.
1. Write the questions
Section titled “1. Write the questions”One choice question per label family: one for the kind, one for the owning team.
Ask them in the same request, so the issue is read once (Scale).
2. Certify them
Section titled “2. Certify them”They work untaught, so there is little to teach; certify each question on labelled issues, so that each label says whether it can be applied on its own.
Send at least 118 labelled issues. The server holds back half to certify, and a 5% certificate needs 59 of those. More examples certify a larger share.
POST /v1/tasks{"id": "issue-triage", "examples": [{"request": {"state": "<a past item of yours>", "questions": {"kind": <the question above>}}, "answer": "bug"}, ...], "certify": {"alpha": 0.05}}A shape to fill in, not a command to run.
Certify answers runs this call on a server, with its answer.
3. Route on the certificate
Section titled “3. Route on the certificate”- A certified answer applies its label.
- Everything else waits for a maintainer, with decisio’s suggestion beside it.
- If the issues change, a new component or a new kind of report, certification is suspended until you certify again (Watch for drift).
What it did
Section titled “What it did”- 85.1% right on the kind of an issue (macro-F1 81.2%) and 85.3% on its owning SIG, the 12 most frequent (macro-F1 81.0%), by Gemma 4 31B, untaught, on 1,000 real kubernetes/kubernetes issues.
- It works out of the box: teaching changed accuracy by under a point, except on the owning SIG at 1,000 examples, 85.3% to 85.9% (macro-F1 81.0% to 82.4%).
- Priority is 51.0% right, and needs-information has a balanced accuracy of 61.3%, which teaching lowers slightly.
- These figures are fitted offline on the readouts the server returns; the live server's head gave the same answer on every item we compared.
- Issues from kubernetes/kubernetes (Apache-2.0), created 2018-01-01 to 2026-09-30 and fetched through the GitHub API on 2026-10-14; used under the repository's licence (GitHub Terms of Service D.6: content added to a repository containing a licence notice is licensed under the same terms). No issue text, user name or e-mail address is shown or stored here; the results are aggregates.
Read through decisio v0.11.1 on vLLM 0.30.0, on one NVIDIA RTX PRO 6000 Blackwell Workstation Edition (600 W, AMD EPYC 9534 64-Core Processor, driver 595.104.02), on 2026-10-14 and 2026-10-15 (the session ran from 2026-10-14T19:34Z to 2026-10-15T03:38Z); the 31B is tachara-ai/decisio-gemma-4-31b at 931a9dad (fp8_e4m3 weights of google/gemma-4-31B-it), the 12B is tachara-ai/decisio-gemma-4-12b at a5a1ac8f (bfloat16 weights of google/gemma-4-12B-it); the teaching was fitted offline on the readouts afterwards.
What next
Section titled “What next”- Support routing: the same recipe on a support inbox.
- Certify answers: the promise, and how to choose the error target.
- Use cases: the other recipes.