Inspiration
Shopping decisions rarely follow a perfect, linear path. We often begin with an incomplete idea, discover new requirements as we think, and sometimes change our minds entirely. However, many search systems still treat each message as an isolated query. They either forget useful context or continue applying preferences that the user no longer wants.
This gap inspired me to build Adaptive Conversational Product Search for Challenge 4 of TikTok TechJam 2026.
This is only the second complete project that I have built independently. At the beginning, I was not certain whether I could turn the idea into a complete submission with a working retrieval system, reproducible evaluation, documentation, and a usable demonstration interface. Taking responsibility for every part of the project made the process challenging, but it also made every improvement meaningful.
My goal was simple: create a product-search system that listens as a conversation develops and adapts when the person behind the query changes direction.
What it does
The system supports multi-turn product discovery by maintaining a structured representation of the user's current shopping intent.
For every conversation turn, it can:
- identify the requested product category;
- extract attributes such as color, material, comfort, and intended use;
- preserve compatible preferences from earlier turns;
- recognize when the user changes their mind;
- remove outdated or conflicting constraints;
- retrieve and rerank products according to the latest intent.
For example, a user may first request women's ankle boots, then add waterproof and comfort requirements, and finally change the request to black leather ankle boots for casual wear.
Instead of blindly combining all three messages, the system recognizes the final turn as an intent override. It clears conflicting preferences, preserves relevant context, and produces a new product ranking.
The interface shows the active dialogue state, detected intent changes, ranked products, and response latency so that the recommendation process is visible rather than hidden.
How I built it
I developed the project independently in Python using SQLite FTS5, Model2Vec, and a bundled Potion 8M static embedding model.
The final V5.13 pipeline combines:
- Dialogue-state tracking to maintain active product categories, attributes, and usage scenarios.
- Conflict and intent-change detection to distinguish an additional preference from a genuine change of mind.
- Keyword and lexical retrieval for precise term matching.
- Local semantic embeddings for queries and products that express similar meanings with different words.
- Attribute-aware scoring to reward matches on properties such as category, material, color, comfort, and intended use.
- Buying-intent reranking to improve the ordering of commercially relevant results.
- Fallback behavior so the core system remains usable when the optional semantic model is unavailable.
The demonstration runs locally with no external API calls. The submission also includes reproducible setup instructions, dependencies, benchmark results, a technical report, and records of how AI development tools supported the project.
Challenges I faced
The most difficult technical problem was deciding whether a new message should refine the existing request or replace part of it.
At first, accumulating every extracted preference seemed reasonable. In practice, this caused outdated requirements to remain active after the user changed direction. Clearing the entire state was not a good solution either because it removed context that was still useful.
I addressed this by separating compatible preference updates from explicit intent overrides. The system removes only the constraints that conflict with the latest request while preserving the parts of the conversation that remain relevant.
Another challenge was balancing semantic similarity with exact product requirements. Semantic retrieval can find broadly related products, but a product may still be wrong if it fails an important requirement such as color, material, or category. The final ranking therefore combines semantic, lexical, categorical, and attribute-level evidence instead of relying on a single similarity score.
There were also moments when an attempted improvement reduced the benchmark score. Those moments taught me not to treat a more complicated model as an automatic improvement. I learned to return to the evidence, compare versions fairly, and keep only changes that survived repeatable evaluation.
Accomplishments
The final V5.13 system achieved:
- Hit@10: 77.0%
- MRR: 0.4149
- Overall technical score: 0.6407
- External API calls during the demo: 0
I am proud of these results, but my most meaningful accomplishment is completing the entire path from an uncertain idea to a working and documented system.
As my second independently completed project, it required me to work across algorithm design, debugging, evaluation, interface development, documentation, and presentation. The finished project is more than a benchmark script: it is a reproducible prototype that another person can run, inspect, and understand.
What I learned
This project taught me that conversational search is not only a retrieval problem. It also requires state management, conflict resolution, ranking design, evaluation, engineering discipline, and clear communication.
I learned to evaluate every change against a consistent benchmark, investigate failures rather than hide them, and balance semantic recall with precise attribute matching. I also learned how to work with AI coding tools as development partners while remaining responsible for testing, selecting, and documenting the final implementation.
Most of all, I learned that independent development does not mean knowing every answer before starting. It means continuing to test, revise, and learn until the different pieces finally work together.
What's next
Future improvements could include training a dedicated reranker, expanding attribute extraction across more product domains, learning ranking weights from additional labeled interactions, and evaluating the system with a larger and more diverse set of conversational shopping sessions.
The current version is the strongest system I could build and validate within the event timeline. It is also a foundation I can continue improving beyond this hackathon.
Completing it gave me greater confidence that I can take a difficult idea, stay with it through uncertainty and failed experiments, and turn it into something real.
Built With
- ai
- conversational
- e-commerce
- face
- hugging
- information
- language
- learning
- machine
- model2vec
- natural
- numpy
- offline
- processing
- python
- reranking
- retrieval
- search
- semantic
Log in or sign up for Devpost to join the conversation.