How it works
Three NVIDIA Nemotron models on Nebius Token Factory, each used where it pays off, and Python wherever an answer can be computed.
The pipeline and its model routing
1. Read
Nemotron Nano: classify and extract
Every email. Category and intents, then every PO field with a confidence and the source quote.
Python checks every field
Is the quote really in the email? Do sizes add up? Is a size table missing? Dates, revisions, colours normalised.
Nemotron Super re-reads only the failing field
30% of emails; Super's answer is kept only if the same check then passes (91% do).
2. Compare
Python: match the order, diff the versions
Scored match on PO number, style, buyer and date; an unsure match becomes a question for a person.
3. Judge the risk
Python pre-fetch
Feasibility under the factory profile, value change, delivery options.
Nemotron Super: the risk agent (default)
Tool-calling loop, at most 8 rounds: compliance and buyer checks (Tavily), what-if feasibility, the report.
Nemotron Ultra, when a trigger fires
Infeasible plan · materials in-house or a partial shipment mentioned · Super contradicts the feasibility check · Super's report invalid. 21% of risk runs.
Python flag policy
Every flag must cite real evidence; severity follows a fixed rubric. An unconfirmed date never makes a high flag.
4. Reply
Nemotron Super drafts the reply and an internal note
From the order data and findings only; thresholds and internal policy never reach the model.
Python fact check
Every date, quantity and price in the draft is matched against the order and the email.
5. Approve and ship
A person approves, edits or rejects
Nothing is sent automatically.
Python: Commercial Invoice and Packing List
From the agreed plan, one set per shipment; unknown values print as TO BE CONFIRMED.
Models
| Model | Used for |
|---|---|
| Nano 30B-A3B | Classification, extraction, stated changes (thinking off) |
| Super 120B-A12B | Escalated fields, the risk agent, drafts |
| Ultra 550B-A55B | Risk runs that need it (triggers above) |
One router (backend/app/llm/router.py) logs every call: model, tokens, latency, cost. See Model calls.
Cost per email (DEV, 35 emails)
- Read (Nano, Super on escalation)
- $0.0004
- Risk (Super, Ultra on triggers)
- $0.0060
- Reply and note (Super)
- $0.0030
- Total
- $0.0094
Ultra for the risk step on every email cost $0.0215 per email on TEST v2; Super with escalation brought it to $0.0095 with the same high-risk recall.
Evaluation
| TEST v2 held out | DEV | |
|---|---|---|
| Field extraction | 96.5% | 98.7% |
| Right order matched | 98.7% | 100% |
| Changes found (recall) | 77.4% | 96.3% |
| High risks found (recall) | 100% | 100% |
| High-risk precision | 80.1% | 100% |
| Drafts passing the fact check | 97.1% | 97.1% |
TEST v2: 30 emails written by a separate session from a spec alone, run 3× before any fix. DEV: 35 emails the system was built on. Regressions and failure analysis are in the evaluation report in the repository.
Web checks (Tavily)
The risk agent may search for compliance rules for the product and destination, and for adverse news on the buyer. A compliance flag needs a concrete rule and a source URL; a buyer flag needs an adverse finding with a URL. Anything weaker is listed as checked, not flagged. Results are cached per query and day.