Inspiration
A shopper can say, "I need a wallet," without giving a colour, material, brand, or price. Somewhere inside 50,000 products is the item they actually want. The challenge was not simply finding wallets. It was remembering what the shopper meant, asking for the right missing detail, and improving the results as the conversation continued.
What it does
The Renegaders is a multi-turn conversational shopping agent. It remembers useful product terms from earlier messages, asks a follow-up question when information is missing, and reranks products whenever the shopper adds another requirement.
For example, a shopper can begin with "I'm looking for wallets," then reply with only "leather, black." The agent remembers the original category and moves black leather wallets to the top without requiring the shopper to repeat themselves.
It runs entirely offline with zero model tokens, zero API cost, and no network connection.
How we built it
We built the agent in Python using SQLite FTS5.
First, it creates a fast searchable index over the 50,000-product catalog. It then keeps useful words from each conversation turn while removing conversational filler.
SQLite retrieves the strongest candidates, and our deterministic reranker scores how well each product covers the shopper's requirements. Matches in important fields, such as the product title, count more than loose mentions in a description.
Every change was tested against the released 200-session public development set. Changes were kept only when they improved the measured result without breaking sessions that already worked.
Challenges we ran into
Several ideas that sounded intelligent actually made the agent worse.
An explicit intent-state system that removed earlier preferences reduced the technical score. Increasing the candidate pool from 50 to 100 or 200 changed nothing. A local embedding reranker added complexity without moving missed targets into the top ten.
The hardest part was resisting the temptation to keep features simply because they sounded impressive. We measured each experiment and removed the ones that did not help.
Accomplishments that we're proud of
The official starter found 25 of 200 targets on the released public set. The Renegaders found 187 of 200.
It achieved:
- 0.935 Hit Rate@10
- 0.600468 Mean Reciprocal Rank
- 2.945 average turns to convergence
- 0.808740 technical score
- Zero model tokens and zero API cost
The complete result was reproduced exactly in a fresh evaluation. We also built 32 automated tests covering determinism, session memory, output validity, package safety, and clean-room execution.
These are public development results only. We have not seen or tested the organizer's private set.
What we learned
Measured performance matters more than plausible ideas.
Some of our most convincing improvements either reduced the score or changed nothing. The strongest system was not the most complicated one. It was the one where every component had a clear purpose and measurable evidence behind it.
We also learned that conversational search is partly a memory problem. A system can retrieve good products and still fail if it forgets what the customer said one turn earlier.
What's next for The Renegaders
Next, we would make the clarification questions more natural by detecting whether someone is buying immediately or still browsing.
We would also explore safe personalization from anonymized customer profiles, better handling of natural-language preference changes, and short explanations showing why each product was recommended.
The current agent proves the retrieval approach locally. The next step is making the conversation feel as natural as the ranking is reliable.
Built With
- bm25

Log in or sign up for Devpost to join the conversation.