Inspiration
Real shoppers rarely express a complete, stable query. They start broad, add a budget, change a brand preference, switch between focused buying and open-ended browsing, or ask for a combination that does not exist. Traditional keyword search often forgets valid context or leaves an obsolete condition active. Our goal was to make each turn move the search closer to the shopper's current intent without silently breaking constraints.
What it does
Shopping Copilot routes each turn into Buying or Browsing behavior while maintaining transactional session state. Buying protects hard eligibility and precise preferences; Browsing keeps scene context and result diversity. The Agent detects overrides, clears only the conflicting slot, retains every still-valid condition, filters catalog-ineligible products before ranking, asks one useful clarification when the candidate space is too broad, and applies controlled relaxation when no result remains. Budget and explicit exclusions are never silently relaxed. Every response is sanitized to at most ten unique, catalog-valid parent_asin values.
How we built it
The official starter.Agent adapter delegates to a typed Python core. A deterministic parser and event detector feed a transactional state reducer. The resulting Buying/Browsing route plan drives hard filtering, local lexical/attribute retrieval and route-aware reranking. A dialogue policy chooses whether to clarify, safely relax or recommend, with late-turn protection to guarantee a legal response within the challenge limit.
The architecture includes opt-in boundaries for dense retrieval, a local intent classifier and a schema-bounded DeepSeek/OpenAI-compatible parser. These optional modules fail back to deterministic behavior. They were disabled in the frozen headline run, so the reported result used no external model calls.
Challenges we ran into
The hardest part was not retrieving more products; it was deciding which parts of conversation state remained valid after each update.
Accomplishments that we're proud of
What we learned
Treating intent as transactional state made overrides, negation, clarification and safe relaxation composable. We also learned that optional model sophistication does not automatically improve end-to-end quality: every module must earn its place through the same evaluator, hard-constraint checks, latency budget and fallback behavior.
What's next for ShoppingCopilot
Next we would connect live inventory and pricing, add semantic assistance only behind quality/cost gates, improve multilingual and typo-tolerant understanding, and validate conversion and satisfaction through online experiments.
Log in or sign up for Devpost to join the conversation.