Give it a goal and a toolbox — it plans the sequence, calls the right tools with the
right arguments, reads every result, recovers from failures, and reports back
in the user's own language.
Verified orchestration flow
Multi-step orchestration — chains 4+ tool calls per task without hand-holding
Strict, valid JSON — arguments match the schema every step
Multilingual by default — English, हिंदी, and Hinglish in, matching language out
Grounded answers — final confirmations quote real values from tool results (order IDs, totals, ETAs)
Graceful failure handling — surfaces errors and proposes alternatives instead of hallucinating success
Verified episode 1 — end-to-end order (English)
Unedited transcript, temperature 0.1. One request → four correct tool calls → grounded confirmation:
text
1USER: Order 2 packets of Amul milk and 1 brown bread on Zepto. Pay cash on delivery.
23[1] → search_multiple_products({"queries": ["Amul milk", "brown bread"]})
4[2] → update_cart({"items": [{"product_id": "ZP-MILK-001", "quantity": 2},
5 {"product_id": "ZP-BREAD-007", "quantity": 1}]})
6[3] → get_payment_methods({})
7[4] → create_order({"payment_method": "COD"})
89MODEL: Your order has been confirmed! 🛒
10 Order ID: ZO-88121
11 Items: 2 × Amul Taaza Toned Milk 500ml (₹29 each)
12 1 × Britannia Brown Bread 400g (₹50)
13 Total: ₹108 | Payment: Cash on Delivery
14 Estimated delivery: 9 minutes.
Every value in the confirmation (order ID, prices, ETA) is read from tool results — nothing invented.
Verified episode 2 — same task, in Hinglish
text
1USER: yaar zepto se 2 amul doodh aur ek brown bread mangwa de, cash on delivery rakhna
23[1] → search_multiple_products({"queries": ["Amul doodh", "brown bread"]})
4[2] → update_cart({"items": [{"product_id": "ZP-MILK-001", "quantity": 2},
5 {"product_id": "ZP-BREAD-007", "quantity": 1}]})
6[3] → get_payment_methods({})
7[4] → create_order({"payment_method": "COD"})
89MODEL: Your order has been confirmed! 🛒 Order ID: ZO-88121 · Total ₹108 ·
10 COD · delivery in ~9 minutes.
Note the search query: the model kept the user's own word — "Amul doodh" — and the
catalog still resolved. Casual romanized Hindi is a first-class input, not an edge case.
Verified episode 3 — Hindi in, Hindi out
text
1USER: कृपया Zepto से 2 अमूल दूध और 1 ब्राउन ब्रेड ऑर्डर करें। भुगतान कैश ऑन डिलीवरी होगा।
23[1] → search_multiple_products({"queries": ["Amul milk", "brown bread"]})
4[2] → update_cart({...}) [3] → get_payment_methods({}) [4] → create_order({"payment_method": "COD"})
56MODEL: आपका ऑर्डर स्वीकृत हो गया है!
7 ऑर्डर ID: ZO-88121
8 कुल राशि: ₹108 · भुगतान विधि: कैश ऑन डिलीवरी (COD)
9 अनुमानित डिलीवरी समय: 9 मिनट
10 हम जल्द से जल्द आपके पास डिलीवर करेंगे! 🚚
Devanagari request → identical tool plan → full Devanagari confirmation. No language
flag, no prompt engineering — the model mirrors the user.
Verified episode 4 — error recovery
The backend rejects COD mid-flow. The model does the right thing for a payments flow:
it stops, explains, and asks — instead of silently switching or pretending success.
text
1USER: Order 2 Amul milk on Zepto, cash on delivery.
23[1] → search_multiple_products({"queries": ["Amul milk"]})
4[2] → update_cart({"items": [{"product_id": "ZP-MILK-001", "quantity": 2}]})
5[3] → create_order({"payment_method": "cod"})
6 ← {"status": "error", "reason": "COD not available for this store. Available: UPI, Zepto Cash"}
78MODEL: The Cash on Delivery (COD) option is not available for this store. You can
9 proceed using UPI or Zepto Cash. Would you like to update your payment preference?
Measured results
All episodes above are unedited runs against the released weights (temperature 0.1),
using a real quick-commerce tool set (search / cart / payments / ordering).
What we measured
Result
Multi-step episodes completed correctly
4 / 4 (English, Hinglish, Hindi, error-injection)
Tool selection across all steps
13 / 13 calls — correct tool every time
Argument validity (schema-conformant JSON)
13 / 13 calls
Language fidelity (reply matches user's language)
3 / 3
Hallucinated values in final answers
0 — every figure traceable to a tool result
Generation throughput (2× NVIDIA A40, released GGUF build)
Prefer an OpenAI-compatible endpoint on a single GPU? Use the
GGUF build —
one llama-server command, full tools API support.
Checkpoints in this repo
Location
Step
Train loss
Notes
root / checkpoint-600/
600
0.070
✅ released — best checkpoint
checkpoint-400/
400
0.229
conservative early checkpoint
🔬 How we trained it
Trained on NVIDIA A100 GPUs with LLaMA-Factory,
using LoRA on top of Qwen3-32B.
Training loss curve
The curve tells the story: the model spends epoch 1 learning the format of structured
tool calls (plateau ~0.45), masters it in a sharp drop at the epoch boundary (0.44 → 0.23),
grinds through epoch 2 refining planning, then locks in at 0.070 by step 600.
Training continued to step 800 but began to overfit (0.077) — step 600 is the release.