{"id":178,"date":"2026-10-14T12:16:48","date_gmt":"2026-10-14T12:16:48","guid":{"rendered":"https:\/\/aunhumano.com\/?p=178"},"modified":"2026-10-14T13:59:06","modified_gmt":"2026-10-14T13:59:06","slug":"four-ai-models-walked-into-a-supermarket-none-could-replace-the-person-who-audits-it","status":"publish","type":"post","link":"https:\/\/aunhumano.com\/index.php\/2026\/10\/14\/four-ai-models-walked-into-a-supermarket-none-could-replace-the-person-who-audits-it\/","title":{"rendered":"Can LLMs audit a supermarket shelf yet?"},"content":{"rendered":"\n<p class=\"wp-block-paragraph\">A few years before the advent of gpt-3, a colleague introduced me to an entrepreneur who had a problem he wanted to solve. He ran a &#8220;human supermarket shelf supervisors&#8221; business where each supervisor visited many supermarkets q day in order to check whether some products of a target brand were being &#8220;optimally presented&#8221; on the shelves.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Their job was to go to each supermarket, find the right shelves, take one or more pictures to each shelf and then upload the pictures to an app along with some data: how many spaces does the product occupied on a shelf and whether there were empty spaces at the front and how many. This process presented two issues, the time it took and human errors like bad pictures or wrong annotations.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">The entrepreneur&#8217;s idea was to partially solve the time issue and the annotations issue. He knew I was working in &#8220;AI&#8221; at the moment so we talked about the problem, I was able to get access to some pictures and the data extracted of them in order to get an idea of the difficulty of this problem. The next time we talked I gave him my conclusion: &#8220;this is not possible unless you deploy many monies to hire a team to do it&#8221;. That was the end of the conversation, in Argentina the salaries in that year were very low so it was cheaper to still pay humans instead of building that kind of technology.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">And that brings us to today, I&#8217;m working on several products where I need to check whether the newest LLMs finally crack some challenges so, with the help of my friend Claude, I built <a href=\"https:\/\/github.com\/mfalcon\/tinybenchmarks\" data-type=\"link\" data-id=\"https:\/\/github.com\/mfalcon\/tinybenchmarks\">tinybenchmarks<\/a>, a project to quickly run a one off test of a given task and check if some LLMs can solve it correctly.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">This problem came to mind while I was thinking about interesting problems outside my current focus (I&#8217;ll share them soon) to start testing the tinybenchmarks project, in the next section I&#8217;ll share the results.<\/p>\n\n\n\n<h3 class=\"wp-block-heading\">The supermarket shelf tiny benchmark<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">I used tinybenchmarks to check how good are some current LLM models (OpenAI family for now) when they need to do shelf supervision work, the chosen models were: gpt-6-astra, gpt-6.1-sol, gpt-6-luna and gpt-4.1.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">I&#8217;ve picked 3 photos from argentinian supermarkets available online and created five tasks for the models to accomplish.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Let&#8217;s see them case by case:<\/p>\n\n\n\n<h4 class=\"wp-block-heading\">Case 1: Facings of Ala sachets<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c1-full.jpg\" alt=\"Full photo of the detergent aisle, with the second shelf's Ala sachets boxed\"\/><figcaption class=\"wp-element-caption\">The detergent aisle. The yellow box marks the zoomed area.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c1-ala.jpg\" alt=\"Six yellow Ala detergent sachets standing side by side on a blue shelf\"\/><figcaption class=\"wp-element-caption\">Zoom: second shelf from the top.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>How many facings of the yellow &#8220;Ala concentrado&#8221; sachets are on the second shelf from the top?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected: <strong>6<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Run 1<\/th><th>Run 2<\/th><th>Run 3<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>\u2705 6<\/td><td>\u2705 6<\/td><td>\u2705 6<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>\u2705 6<\/td><td>\u2705 6<\/td><td>\u2705 6<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>\u274c 7<\/td><td>\u2705 6<\/td><td>\u274c 7<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>\u274c 5<\/td><td>\u2705 6<\/td><td>\u2705 6<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Case 2: Gaps on a detergent shelf<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c2-full.jpg\" alt=\"Full photo of the detergent aisle, with the shelf of yellow Limzul and blue Magistral bottles boxed\"\/><figcaption class=\"wp-element-caption\">The detergent aisle. The yellow box marks the zoomed area.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c2-gaps.jpg\" alt=\"Detergent shelf with large yellow Limzul bottles on the left and blue Magistral bottles\"\/><figcaption class=\"wp-element-caption\">Zoom: the shelf with the large yellow Limzul bottles at the left end and the blue Magistral bottles. One Limzul and one Magistral spot are empty.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>On the shelf with the large yellow &#8220;Limzul&#8221; bottles at the left end and the blue &#8220;Magistral&#8221; bottles, count the empty facings, split into yellow Limzul, blue Magistral and anything else.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected: <strong>2<\/strong> (1 Limzul \u00b7 1 Magistral \u00b7 0 other)<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Run 1<\/th><th>Run 2<\/th><th>Run 3<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><td>\u274c 3 (1 Lim \u00b7 2 Mag)<\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>\u274c 1 (1 Mag)<\/td><td>\u274c 0<\/td><td>\u274c 0<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>\u274c 1 (1 Mag)<\/td><td>\u2705 2 (1 Lim \u00b7 1 Mag)<\/td><td>\u274c 1 (1 Mag)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Case 3: Facings of Gallo Largo rice<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c3-full.jpg\" alt=\"Full photo of the rice aisle, with the Gallo Largo shelf on the right-hand unit boxed\"\/><figcaption class=\"wp-element-caption\">The rice aisle. The yellow box marks the zoomed area.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c3-gallo.jpg\" alt=\"Eight orange Gallo Largo rice bags in a row, with a ninth bag cut off at the right edge\"\/><figcaption class=\"wp-element-caption\">Zoom: right-hand unit, third shelf. A ninth bag is cut off by the edge of the photo.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>How many facings of &#8220;Gallo Largo&#8221; rice are there? Count only bags whose logo is visible; ignore the bag cut off at the right edge.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected: <strong>8<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Run 1<\/th><th>Run 2<\/th><th>Run 3<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>\u2705 8<\/td><td>\u2705 8<\/td><td>\u2705 8<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>\u2705 8<\/td><td>\u2705 8<\/td><td>\u2705 8<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>\u2705 8<\/td><td>\u2705 8<\/td><td>\u274c 9<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>\u274c 5<\/td><td>\u274c 5<\/td><td>\u274c 6<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Case 4: Bags placed backwards<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c4-full.jpg\" alt=\"Full photo of the rice aisle, with the bottom shelf of the right-hand unit boxed\"\/><figcaption class=\"wp-element-caption\">The rice aisle. The yellow box marks the zoomed area.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c4-backwards.jpg\" alt=\"Bottom shelf with orange Don Bernardo rice bags; two bags in between are turned around, showing their pale yellow backs\"\/><figcaption class=\"wp-element-caption\">Zoom: right-hand unit, bottom shelf. The two pale yellow packs are Don Bernardo bags turned around.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>Count the facings that need restocking. A bag placed backwards also counts as a missing facing. Classify each gap by the product that should be there.<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected: <strong>2<\/strong> (2 Don Bernardo \u00b7 0 other)<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Run 1<\/th><th>Run 2<\/th><th>Run 3<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>\u2705 2 (2 DB)<\/td><td>\u2705 2 (2 DB)<\/td><td>\u2705 2 (2 DB)<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>\u2705 2 (2 DB)<\/td><td>\u2705 2 (2 DB)<\/td><td>\u2705 2 (2 DB)<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>\u274c 3 (3 DB)<\/td><td>\u274c 3 (3 DB)<\/td><td>\u274c 3 (3 DB)<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>\u274c 5 (4 DB \u00b7 1 other)<\/td><td>\u274c 3 (2 DB \u00b7 1 other)<\/td><td>\u274c 5 (3 DB \u00b7 2 other)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\">Case 5: The missing top layer<\/h4>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c5-full.jpg\" alt=\"Full photo of the dairy fridge aisle, with the Yogur\u00edsimo cups on the third shelf boxed\"\/><figcaption class=\"wp-element-caption\">The dairy fridge. The yellow box marks the zoomed area.<\/figcaption><\/figure>\n\n\n\n<figure class=\"wp-block-image size-large\"><img decoding=\"async\" src=\"https:\/\/aunhumano.com\/wp-content\/uploads\/2026\/10\/c5-toplayer.jpg\" alt=\"Yogur\u00edsimo strawberry yogurt cups in a dairy fridge; the cups in front have no second cup stacked on top\"\/><figcaption class=\"wp-element-caption\">Zoom: third shelf. The cups at the back are stacked two high; six cups at the front are missing their top cup.<\/figcaption><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\"><em>The strawberry &#8220;Yogur\u00edsimo&#8221; cups are stacked two high. How many cups need restocking in the top layer?<\/em><\/p>\n\n\n\n<p class=\"wp-block-paragraph\">Expected: <strong>6<\/strong><\/p>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Run 1<\/th><th>Run 2<\/th><th>Run 3<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>\u274c 7<\/td><td>\u274c 7<\/td><td>\u274c 7<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>\u274c 7<\/td><td>\u2705 6<\/td><td>\u274c 8<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>\u274c 3<\/td><td>\u274c 3<\/td><td>\u274c 4<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>\u274c 4<\/td><td>\u274c 2<\/td><td>\u274c 3<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\">The results<\/h3>\n\n\n\n<figure class=\"wp-block-table\"><table><thead><tr><th>Model<\/th><th>Facings error \u2193<\/th><th>Facings exact<\/th><th>Gap count error \u2193<\/th><th>Gap count exact<\/th><th>Gaps by product<\/th><th>Cost per run<\/th><\/tr><\/thead><tbody><tr><td><code>gpt-6-astra<\/code><\/td><td>0.00<\/td><td>100%<\/td><td>0.44<\/td><td>56%<\/td><td>80%<\/td><td>$1.15<\/td><\/tr><tr><td><code>gpt-6.1-sol<\/code><\/td><td>0.00<\/td><td>100%<\/td><td>0.33<\/td><td>78%<\/td><td>89%<\/td><td>$0.24<\/td><\/tr><tr><td><code>gpt-6-luna<\/code><\/td><td>0.50<\/td><td>50%<\/td><td>1.78<\/td><td>0%<\/td><td>48%<\/td><td>$0.02<\/td><\/tr><tr><td><code>gpt-4.1<\/code><\/td><td>1.50<\/td><td>33%<\/td><td>2.00<\/td><td>11%<\/td><td>48%<\/td><td>\u2014<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p class=\"wp-block-paragraph\">Errors are the mean absolute difference from the right count. &#8220;Gaps by product&#8221; is the share of products whose gap count was right. Means over 3 runs of each case. The three GPT-6 models ran with <code>reasoning_effort: high<\/code>; gpt-4.1 doesn&#8217;t reason. Cost is the whole run per model (15 calls) at list prices; gpt-4.1&#8217;s price isn&#8217;t included.<\/p>\n\n\n \n  <h3 class=\"wp-block-heading\">Conclusion<\/h3>\n  \n\n  \n  <p class=\"wp-block-paragraph\">Back then the problem was the cost: building this would have meant hiring a team, and humans were cheaper. Today the cost is partly\n  gone. Running all five tasks with gpt-6.1-sol costs about eight cents so I don&#8217;t think that would be a big issue to take it into consideration.<\/p>\n  \n\n  \n  <p class=\"wp-block-paragraph\">What&#8217;s still missing is reliability. The two best models count facings perfectly, but that&#8217;s the easy half of the job. The\n  point of auditing a shelf is finding what needs restocking, and there even the best models get the gap count wrong in one or two\n  answers out of every four or five. Nobody reliably counted the missing layer of yogurts. A supervisor who missed one gap out of\n  every four or five wouldn&#8217;t keep the job.<\/p>\n  \n\n  \n  <p class=\"wp-block-paragraph\">So, not yet. The models could already help, for example by counting facings and flagging photos for a human to check, but\n  they can&#8217;t replace the person walking the aisles. This is five cases on three photos, so take it as a first look, not a final\n  answer. I&#8217;ll keep adding harder cases and re-run it when new models come out.<\/p>\n  \n\n\n<h3 class=\"wp-block-heading\">Run it yourself<\/h3>\n\n\n\n<p class=\"wp-block-paragraph\">The benchmark is already available in <a href=\"https:\/\/github.com\/mfalcon\/tinybenchmarks\/blob\/main\/bites\/shelf.yaml\" target=\"_blank\" rel=\"noopener\">tinybenchmarks<\/a> if you&#8217;d like to take a look.<\/p>\n\n\n\n<p class=\"wp-block-paragraph\"><\/p>\n","protected":false},"excerpt":{"rendered":"<p>A few years before the advent of gpt-3, a colleague introduced me to an entrepreneur who had a problem he wanted to solve. He ran a &#8220;human supermarket shelf supervisors&#8221; business where each supervisor visited many supermarkets q day in order to check whether some products of a target brand were being &#8220;optimally presented&#8221; on [&hellip;]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"_import_markdown_pro_load_document_selector":0,"_import_markdown_pro_submit_text_textarea":"","footnotes":""},"categories":[1],"tags":[],"class_list":["post-178","post","type-post","status-publish","format-standard","hentry","category-uncategorized"],"_links":{"self":[{"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/posts\/178","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/comments?post=178"}],"version-history":[{"count":11,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/posts\/178\/revisions"}],"predecessor-version":[{"id":203,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/posts\/178\/revisions\/203"}],"wp:attachment":[{"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/media?parent=178"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/categories?post=178"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/aunhumano.com\/index.php\/wp-json\/wp\/v2\/tags?post=178"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}