Field guide / Local AI / October 6, 2026

Build a local AI ticket classifier.

Less chat. More decisions. Turn a message into a useful category, then check whether the answer holds up.

“I was charged twice.”
Which team should handle it?

Ollama introduced local decision-model support on September 29. These models return choices, yes/no probabilities, or scores from the text and criteria you supply.

Professionals can explore first-pass ticket classification. Hobbyists can try categorizing saved ideas. Skeptics can bring examples they have already labeled and compare the results.

This walkthrough uses Nimble to suggest Billing / Technical / Other. It does not connect to or change a helpdesk: application code would need to perform any routing.

The useful boundary: a confidence score is not a guarantee of correctness. Review the output and test against your own labeled examples.

AI Anonymous graphic: Less chat. More decisions. A Charged twice ticket follows an orange path into Billing, beside Tech and Other trays.
A conceptual workflow illustration, rather than a software screenshot or physical product.
01 / Prepare

Install the local model.

Install or update Ollama to 0.35 or newer and keep its local server running. Open PowerShell and check the version:

ollama --version

Review Nimble’s current model listing against your hardware before downloading. It currently lists roughly 9.3–9.5 GB of model files. Download size does not establish the memory required or how fast it will run.

ollama pull nimble
02 / Classify

Send one sample ticket.

Copy this complete PowerShell example. It sends a synthetic message to your local decision endpoint and prints the selected category and its probability distribution.

$ticketClassifierRequest = @{
    model = 'nimble'
    state = @{ ticket = 'I was charged twice. Please refund the extra payment.' }
    questions = @{
        team = @{
            type = 'choice'
            instructions = 'Which team should handle this ticket?'
            criteria = @{
                billing = 'Payments, charges, and refunds'
                technical = 'Software bugs and integrations'
                other = 'No clear match, insufficient information, or another topic'
            }
        }
    }
}

$ticketClassifierJson = $ticketClassifierRequest | ConvertTo-Json -Depth 8
$ticketClassifierResponse = Invoke-RestMethod `
    -Uri 'http://localhost:11434/v1/systemone' `
    -Method Post `
    -ContentType 'application/json' `
    -Body $ticketClassifierJson `
    -TimeoutSec 180

$ticketClassifierResponse.answers.team.choice
$ticketClassifierResponse.answers.team.probabilities | ConvertTo-Json

The official launch example selects billing for a duplicate-charge request. Your output may differ. The first request can take longer while the model loads.

03 / Compare

Bring ten examples you already labeled.

Write ten synthetic messages and assign a category yourself before running them through the model. Change only the ticket text for each run.

  • Include straightforward billing and technical requests.
  • Add an unrelated question that should land in Other.
  • Try ambiguous wording and requests that overlap categories.
  • Compare the predicted category with your label. Investigate mismatches.

Ten examples are a quick exploration, not a production validation set. Improve overlapping descriptions, retain the Other option, and test a larger representative set before connecting the model to real work.

04 / Review

Keep the person in the workflow.

Display the message, suggested category, and probabilities together for review. Separate application code can use the chosen label to propose a queue; the API itself does not move tickets or issue refunds.

Nimble’s confidence measures the concentration of its probabilities. It is not the chance an answer is correct, and a probability of 0.9 does not establish 90% accuracy on your examples. Validate any review threshold on your own data.

What was checked: this example’s PowerShell syntax and request JSON were checked. Local model execution and performance have not been tested by AI Anonymous.

05 / Troubleshoot

If the example does not run.

  • Command missing: finish the Ollama installation and open a new terminal.
  • Connection refused: check that Ollama is running locally.
  • Endpoint missing: verify the installed version supports /v1/systemone.
  • Model missing: finish the ollama pull nimble download.
  • Loading fails or runs slowly: check available memory and model requirements. Increase the request timeout if model loading exceeds the example’s limit.

This guide uses HTTP because the current model page contains inconsistent statements about native Ollama Python and JavaScript support. The launch documentation explicitly supports HTTP and the TypeSafe SDK.

Primary sources / Checked October 6, 2026

Follow the evidence.

Continue with Prompt Patterns That Hold Up →