Blog Post

Apps on Azure Blog
5 MIN READ

Run an Ollaya decision model on Azure Container Apps

simonjj's avatar
simonjj
Icon for Microsoft rankMicrosoft
Oct 01, 2026

Use generated tokens where they add value, not where software only needs a decision.

Many AI calls are not really conversations. A support message needs an intent. A workflow needs a route. A policy check needs a yes or no. An agent needs to select its next action from a known list.

These are bounded decisions, but they are often sent to a general-purpose LLM. The LLM reads the request, generates an answer token by token, and then the application validates and parses the response. That is useful when the task needs reasoning or language generation. It is more machinery than necessary when the only valid answer is one of 60 labels.

On September 15, 2026, TypeSafe released Jev, its first public System One Model, in early access. Jev has helped bring attention to models built specifically for decisions: structured state goes in, and typed choices with probabilities come out.

Ollaya approaches the same problem from a self-hosted direction. It is a model runtime that can serve open decision models, including the winnow:e4b model used here. Jev and Ollaya are not connected products. Jev is a hosted model from TypeSafe; Ollaya provides a way to run decision models in infrastructure you control. They are related by the kind of work they target.

What decision models are good at

A decision model scores predefined options rather than generating open-ended text:

Decision modelTraditional LLM
Selects from allowed choicesGenerates text
Returns a probability for each decisionUsually returns one generated answer
Has a bounded, typed outputNeeds schema constraints and validation
Supports confidence thresholdsOften needs a separate confidence strategy
Fits classification, routing, scoring, policy, and prioritizationFits generation, summarization, coding, and open-ended reasoning

That narrower interface creates several practical benefits:

  • Predictable outputs: the application receives an allowed value rather than text that must be repaired or parsed.
  • Lower decision latency: there is no autoregressive output sequence to generate.
  • Token savings: a decision can be returned without generating output tokens.
  • Useful uncertainty: calibrated probabilities let the application act, reject, or escalate.
  • Smaller infrastructure: a specialized model can fit on hardware that would be modest for a general LLM.

Decision models are not replacements for every LLM call. They make sense when the possible outcomes are known before the request arrives. An LLM remains the better tool when the output itself is language, code, or open-ended reasoning.

Why Azure Container Apps serverless GPU

Azure Container Apps serverless GPUs make self-hosted inference feel much closer to consuming a managed API. You bring the container and model; Azure manages the underlying GPU infrastructure.

The Consumption GPU profile provides:

  • NVIDIA T4 or A100 GPUs without managing GPU nodes or a Kubernetes cluster.
  • Automatic scaling with the option to scale to zero.
  • Per-second GPU billing while replicas are running.
  • Container Apps networking, identity, ingress, logging, and revision management.
  • A private inference path where the model and request data stay inside your Azure environment.

That last point matters for data-sensitive decisions. In the Ollaya-only configuration, text is sent to an internal Ollaya endpoint rather than an external model API. The model, API, persistent cache, and operational controls remain in the application's Azure environment.

Serverless does not remove the need to think about cold starts. A model still needs to be loaded into VRAM. For low or sporadic traffic, scaling to zero can avoid idle GPU cost. For latency-sensitive traffic, a warm minimum replica avoids making a user wait for the model to load. Azure Files can retain the model layers across revisions so a new deployment does not download the full model again.

The T4 is also an important part of this experiment. It is not the largest GPU available, but the goal is not to run the largest model. The goal is to match the hardware to a model designed for the task. A focused decision model on a T4 can compete with a hosted API when the workload is a bounded classification rather than text generation.

The experiment

I deployed winnow:e4b through Ollaya on an Azure Container Apps Consumption-GPU-NC8as-T4 workload profile. An authenticated API exposed the classifier while Ollaya remained on internal-only ingress. A second path sent the same requests to GPT-5.4 Nano through Azure OpenAI using managed identity.

The evaluation used the complete 2,974-record test partition from Amazon MASSIVE 1.1. It contains 18 scenarios and 60 intents. Both providers received the same records, labels, and descriptions.

The benchmark measured latency at concurrency 1 and throughput at concurrency 8. Providers and modes ran sequentially so one measurement did not load the service used by another. This was not a direct benchmark of Jev; it tested the same decision-model pattern with an open model that could run inside the Azure environment.

What the results showed

The benchmark ran on September 30, 2026.

ProviderSuccessfulIntent accuracyMacro-F1p50p95
Winnow on T42,974 / 2,97475.59%76.40%946 ms960 ms
GPT-5.4 Nano2,974 / 2,97479.12%78.07%1,369 ms2,489 ms

Nano led intent accuracy by 3.53 percentage points. Winnow was 30.9% faster at p50 and 61.4% faster at p95. This is the useful T4 result: a smaller GPU running the right specialized model matched and beat the hosted endpoint on response latency, though not on accuracy.

At concurrency 8, Nano delivered 1.367 requests per second compared with Winnow's 1.120. Nano also had 25 requests fail after eight retries because the deployment exceeded its token-rate limit. Winnow completed all 2,974 requests, but its single loaded runner serialized work and increased queue time.

The token comparison shows what the decision-only path removes:

Provider, both benchmark passesInput tokensCached input tokensOutput tokens
Winnow on T49,252,87200
GPT-5.4 Nano8,501,2007,564,800122,759

Winnow returned every decision without generating output tokens. Nano generated 122,759 output tokens across the latency and throughput passes. The rows do not represent equivalent billing models: Winnow consumes self-hosted GPU time, while Nano is metered by hosted token usage. The comparison isolates the generated tokens that a bounded decision did not need.

Winnow also returned calibrated probabilities. At a 0.90 threshold, it accepted 53.73% of the records and was correct on 94.43% of those accepted decisions. An application could handle that high-confidence group locally and send only the uncertain remainder to an LLM or human reviewer.

In brief

A decision model is useful when software needs a bounded answer rather than generated language. In this experiment, Winnow on a serverless T4 traded some accuracy for lower latency, zero generated output tokens, private inference, and an explicit confidence signal. The practical design is often a combination: use the decision model for fast, high-confidence choices and reserve LLM calls for uncertain or open-ended work.

Try it with the template

The Azure Developer CLI template packages the Container Apps environment, T4 workload profile, authenticated API, internal Ollaya service, persistent model cache, GPU readiness checks, and benchmark.

It supports two deployment modes:

ModeWhat it deploys
ollaya-onlyPrivate Winnow inference on a serverless T4 plus the authenticated API
fullThe Ollaya deployment, GPT-5.4 Nano, and the comparison benchmark
Published Oct 01, 2026
Version 1.0
No CommentsBe the first to comment