{"id":267185,"date":"2026-08-14T13:57:43","date_gmt":"2026-08-14T05:57:43","guid":{"rendered":"https:\/\/www.grab.com\/sg\/?post_type=editorial&#038;p=267185"},"modified":"2026-08-14T13:57:43","modified_gmt":"2026-08-14T05:57:43","slug":"how-we-taught-llms-to-solve-the-missing-muffins-mystery","status":"publish","type":"editorial","link":"https:\/\/www.grab.com\/sg\/inside-grab\/stories\/how-we-taught-llms-to-solve-the-missing-muffins-mystery\/","title":{"rendered":"How we taught LLMs to solve the &#8220;missing muffins&#8221; mystery"},"content":{"rendered":"\t\t<div data-elementor-type=\"wp-post\" data-elementor-id=\"267185\" class=\"elementor elementor-267185\" data-elementor-post-type=\"editorial\">\n\t\t\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-5dc9a5e elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"5dc9a5e\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-36669a5\" data-id=\"36669a5\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-a410464 gr21-boxed-content editorial-gr21-boxed-content elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"a410464\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-ccac947\" data-id=\"ccac947\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap elementor-element-populated\">\n\t\t\t\t\t\t<div class=\"elementor-element elementor-element-d8fe02b elementor-widget elementor-widget-text-editor\" data-id=\"d8fe02b\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>If you\u2019ve ever unbagged a delivery order only to discover a missing side, an incorrect topping, or a forgotten drink, you know the instant flash of micro-frustration.<\/p><p>As much as GrabFood merchants try to avoid such mistakes, slip-ups happen in busy kitchens.\u00a0 Missing or wrong item (MIWI) issues are one of the most commonly reported support problems in our app.<\/p><p>What complicates the issue is that missing-item scenarios vary widely. A customer might experience:<\/p><ul><li aria-level=\"1\">A missing item from a set meal: The dessert that was supposed to be part of the combo is missing<\/li><li aria-level=\"1\">An incorrect count: Only eight chicken nuggets in a nine-piece box<\/li><li aria-level=\"1\">A missing component: The broth for a noodle soup is packed separately to prevent spillage, but was accidentally left behind by the kitchen.<\/li><\/ul><p>That\u2019s why building a support process for MIWI cases has always been a delicate balancing act.\u00a0<\/p><p>On one hand, consumers deserve a fast, hassle-free resolution when an order isn&#8217;t right. If your noodle soup arrives without the broth, it\u2019s not really a soup. You should get a full refund.<\/p><p>On the other hand, merchants deserve a system that protects them from paying full price for minor fulfillment errors. When only one nugget is missing from a box, or one dessert from a set menu, a partial refund is more appropriate. Fairness to both sides is essential for a healthy platform.<\/p><p>Historically, achieving that balance automatically was tough. To err on the side of consumer satisfaction, the system often refunded the entire item. While great for the consumer at that moment, it created unfair costs for merchants. The only alternative was sending every partial issue to human agents to figure out the fair refund amount\u2014creating long wait times for consumers and massive backlogs for support teams.<\/p><p>To build an automated resolution system that is genuinely fair, fast, and accurate for both consumers and merchants alike, our engineering team turned to Large Language Models (LLMs) which are uniquely suited for making sense of complex menu structures.\u00a0<\/p><p>Here\u2019s how we approached the problem:<\/p><h5>Phase 1: The honesty test<\/h5><p>Before writing a line of AI code, we had to test a basic hypothesis: If we give users an option to report a partially missing item, will they actually use it\u2014or will they just push for a full refund anyway?<\/p><p>We introduced a simple entry point in the app, allowing users to flag &#8220;Partially Missing&#8221; items with photos and descriptions. Initially, we routed these tickets directly to human agents to test user behaviour.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-d46c428 elementor-widget elementor-widget-image\" data-id=\"d46c428\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"580\" height=\"1024\" src=\"https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-700x1236.gif\" class=\"attachment-large size-large wp-image-267218\" alt=\"\" srcset=\"https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-700x1236.gif 700w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-250x442.gif 250w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-768x1356.gif 768w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-7x12.gif 7w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121004\/partially-missing-items-screen-demo-120x212.gif 120w\" sizes=\"(max-width: 580px) 100vw, 580px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-3843a18 elementor-widget elementor-widget-text-editor\" data-id=\"3843a18\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<p>The result? Around 20 per cent of all missing item reports were for partially missing items, and consumers were honest in reporting exact missing items rather than attempting to game the system. With the demand proven, it was time to build the intelligence layer to automate it.<\/p><h5>Under the hood: The LLM menu detective<\/h5><p>Calculating partial refunds sounds simple until you look at how restaurant menus are structured. A meal combo isn&#8217;t stored in our database as separate itemized prices; it\u2019s one master item bundle.<\/p><p>Let\u2019s revisit the different MIWI scenarios. If your muffin from a breakfast combo is missing, there is no direct price tag attached to that muffin in your receipt.<\/p><p>This is where our custom LLM sub-agents step in.<\/p><p>When a user submits a description (e.g., &#8220;Muffin was missing from my breakfast set&#8221;), the system executes a three-step reasoning flow:<\/p><ol><li aria-level=\"1\">Smart Classification: The LLM reads the user\u2019s text and categorizes the problem. If it involves safety or quality risks (e.g., mold, undercooked food, or foreign objects), the LLM immediately routes the ticket to a human agent for sensitive handling.<\/li><li aria-level=\"1\">Contextual Menu Scanning: For partial missing cases without an explicit price tag, the LLM scans the merchant&#8217;s full active menu. It looks for a standalone listing of the missing item (e.g., matching the muffin to what it costs as a single item on the merchant\u2019s menu).<\/li><li aria-level=\"1\">Approximation Engine: If the exact item isn\u2019t sold separately, the model finds the closest equivalent (like matching missing specialty fries to standard onion rings) to calculate a fair, proportionate refund value. If the missing item was essential to the meal (e.g., missing broth for a soup) it classifies it as a full refund.<\/li><\/ol>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-aae17ca elementor-widget elementor-widget-image\" data-id=\"aae17ca\" data-element_type=\"widget\" data-widget_type=\"image.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t\t\t\t\t\t\t<img loading=\"lazy\" decoding=\"async\" width=\"690\" height=\"1024\" src=\"https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-700x1039.png\" class=\"attachment-large size-large wp-image-267222\" alt=\"\" srcset=\"https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-700x1039.png 700w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-250x371.png 250w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-768x1140.png 768w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-1035x1536.png 1035w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-8x12.png 8w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow-120x178.png 120w, https:\/\/assets.grab.com\/wp-content\/uploads\/sites\/4\/2026\/08\/14121114\/partially-missing-items-support-flow.png 1078w\" sizes=\"(max-width: 690px) 100vw, 690px\" \/>\t\t\t\t\t\t\t\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t<div class=\"elementor-element elementor-element-e3ceb38 elementor-widget elementor-widget-text-editor\" data-id=\"e3ceb38\" data-element_type=\"widget\" data-widget_type=\"text-editor.default\">\n\t\t\t\t<div class=\"elementor-widget-container\">\n\t\t\t\t\t\t\t<h5>Better precision, lower friction<\/h5><p>By replacing rigid decision trees with LLM reasoning, we\u2019ve moved from blunt-force automated refunds to higher precision. Merchants aren\u2019t over-penalized, while consumers get fast, accurate reimbursement without waiting for manual agent review.<\/p><p>Thanks to the improved resolution accuracy across our markets, our support teams already handle roughly 32,000 fewer manual tickets per month, keeping support fast even as order volume grows.<\/p><h5>What\u2019s next?<\/h5><p>The LLM menu detective is already rolled out in most Grab markets. But MIWI refund automation is just the beginning.<\/p><p>In parallel, the team is piloting a conversational Support AI experience across selected verticals, with plans to scale it to more verticals by the end of the year. Stay tuned for further updates as the rollout expands.<\/p>\t\t\t\t\t\t<\/div>\n\t\t\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<section class=\"elementor-section elementor-top-section elementor-element elementor-element-3482475 elementor-section-boxed elementor-section-height-default elementor-section-height-default\" data-id=\"3482475\" data-element_type=\"section\">\n\t\t\t\t\t\t<div class=\"elementor-container elementor-column-gap-default\">\n\t\t\t\t\t<div class=\"elementor-column elementor-col-100 elementor-top-column elementor-element elementor-element-044de49\" data-id=\"044de49\" data-element_type=\"column\">\n\t\t\t<div class=\"elementor-widget-wrap\">\n\t\t\t\t\t\t\t<\/div>\n\t\t<\/div>\n\t\t\t\t\t<\/div>\n\t\t<\/section>\n\t\t\t\t<\/div>\n\t\t","protected":false},"parent":180237,"menu_order":0,"template":"grab21-default","acf":[],"_links":{"self":[{"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/editorial\/267185"}],"collection":[{"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/editorial"}],"about":[{"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/types\/editorial"}],"version-history":[{"count":59,"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/editorial\/267185\/revisions"}],"predecessor-version":[{"id":267256,"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/editorial\/267185\/revisions\/267256"}],"up":[{"embeddable":true,"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/editorial\/180237"}],"wp:attachment":[{"href":"https:\/\/www.grab.com\/sg\/wp-json\/wp\/v2\/media?parent=267185"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}