# Omnibasket

- **Event:** [Meta Global AI Developer Hackathon](https://cerebralvalley.ai/e/meta-ai-developer-hackathon)
- **When:** Oct 26, 12:00 PM – Nov 4, 9:00 PM (EST)
- **Where:** Online
- **Team:** [Adrian Pop-Visan](https://cerebralvalley.ai/u/adrian-popvisan)
- **GitHub:** https://github.com/an-otter-lab/omnibasket
- **Demo video:** https://www.youtube.com/watch?v=ntrzr9c6UMI
- **Gallery:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery
- **Page:** https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1218

Omnibasket finds the cheapest way to buy a basket of books across online bookshops, delivery included.

Live: https://omnibasket.anottersolution.com · Code: https://github.com/an-otter-lab/omnibasket · Architecture: https://github.com/an-otter-lab/omnibasket/blob/main/docs/submission/architecture.svg · Built from scratch during the hackathon (first commit 26 Oct 2026, 23:29 UTC).

The problem. People who love books rarely buy just one. Put a few in a basket and every online bookshop adds them up differently, with its own prices, delivery fees and free-delivery threshold, and sometimes no single shop has them all. The cheapest answer is rarely "buy each book where it is cheapest": paying a little more for one book can push a shop over its free-delivery bar and win the whole basket, and one extra small order can cost more in delivery than it saves. Nobody works this out by hand, so people overpay or buy everything in one place. A parent with a school reading list has the same problem, with a deadline.

What it does. Type a title, author or ISBN in Romanian or English, paste a shop link, or photograph your list. Omnibasket finds each book in its own index of the shops, built from their sitemaps, and reads the price live from the shop's product page where the shop allows it: today two Romanian bookshops, Libris and Elefant (its imported books), with a pasted link working for any other shop. Then it solves the basket exactly: one order, the cheapest split, or a set of shops you choose, and it shows how much more one order would cost and where the difference comes from. Memberships (Prime, Genius) and edition rules are switches. A buy list per order, and a "lei short of free delivery" line per shop, say what to do next. The whole app works in Romanian and English, light and dark.

Where Muse runs. Two Meta models, both called from our server; the browser never holds a key. Muse Spark 1.3 on Meta's Model API reads photos, writes explanations and checks page reads. Muse Spark Open (meta-models/muse-spark-open-1026), Meta's open-weights model, on Baseten, turns what the shopper asks into actions. If a Muse Spark Open call fails, the same call goes to Muse Spark 1.3 and the ledger records it. All calls go through one module, tools/meta_budget.py, which picks the model, prices each call, writes a spend ledger with its provider, enforces a daily cap, and rate-limits the public demo per IP. Four jobs:
1. Ask Omnibasket (Muse Spark Open): a sentence such as "nu vreau să cumpăr de la Elefant" or "everything from one shop, and leave out Libris" becomes up to four actions from a closed list of five (choose a result tab, leave a shop out or bring it back, switch a membership, pin editions). The model picks the actions; code validates them and the solver re-runs. This is the app's agentic loop: the model decides, code acts, the result is checked. In a side-by-side test Muse Spark Open picked the same actions as Muse Spark 1.3 for 9 of 9 sentences, in 1.2 s instead of 3.3 s (median).
2. Reading a photo of a book list (Muse Spark 1.3): multimodal input; each line is matched in the index; lines with no match are listed as not found. The image is not stored.
3. "Why this split" (Muse Spark 1.3): one paragraph in the shopper's language. A checker compares every number and shop name with the solver's result; a mismatch drops the paragraph and shows a plain sentence. On a live three-book, two-order basket 10 of 10 paragraphs passed (5 in English, 5 in Romanian).
4. Checking page reads (Muse Spark 1.3): when a product page omits a price or ISBN, Muse reads the page text to fill it, and the read is compared with the page. A blank or unreadable page never reaches the model.

The search box itself is plain code: our index of the shops plus Open Library. Plain code, never a model, does prices, ISBN checks, currency and all money arithmetic. The whole build used about USD 8.9 of Meta credits across about 610 calls, plus 58 Muse Spark Open calls on Baseten (USD 0.09); both spend ledgers are in the repo.

How it stays honest. The solver works in integer cents and never treats an unknown fee as zero. Every number Muse writes is checked against captured data before it is shown. A book that no shop lists is named next to the orders, with why, instead of being dropped. Shops are treated with respect: robots.txt and terms are followed, no search page is fetched, each product page gets one attempt, Amazon.de is never read live, and covers come from Open Library, not from shops. When a shop blocks our server, the read is reported as failed and never worked around: Books-Express started blocking it on 3 Nov, so Elefant, which reads cleanly, replaced it.

Tested. pytest 966 passed, 2 skipped; Angular unit tests 341; production build green.

Next steps (future work, none of it built).
1. Finding shops: web search for "who else sells this ISBN and ships to Romania", so new shops come from search and not only from pasted links.
2. Shops learned by Muse: Muse checks a new shop's robots.txt and terms, finds its product sitemaps, and reads its delivery page into a profile that a person confirms.
3. Sanctioned data: partner feeds and affiliate APIs replace page reads where a shop offers them.
4. Beyond books: GTIN works as the match key the way ISBN does, so the same solve covers any basket from shops that publish thresholds.

## More from Meta Global AI Developer Hackathon

- [Harold Cooper](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1215)
- [Lantern Keep](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1216)
- [Pettigrew Lab](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1217)
- [LittleCreator](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1219)
- [ScoreSnap](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1220)
- [THE NEMESIS](https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1221)

---

Markdown version of https://cerebralvalley.ai/e/meta-ai-developer-hackathon/hackathon/gallery/1218. Site index for agents: https://cerebralvalley.ai/llms.txt · full text: https://cerebralvalley.ai/llms-full.txt
