Spaces:
Running
Running
A newer version of the Gradio SDK is available: 6.20.0
metadata
title: CartBrawl 购物车大乱斗
emoji: 🛒
colorFrom: red
colorTo: purple
sdk: gradio
sdk_version: 6.17.3
app_file: app.py
pinned: false
license: mit
short_description: Your cart items come alive and brawl for your wallet
🛒⚔️ CartBrawl 购物车大乱斗
Paste shop links. Your cart comes alive — and fights for your wallet.
Every item you add to the cart turns into a character with a personality. Each one knows every rival's price, specs, and weak spots, and they debate, trash-talk and counter-attack to convince you to buy them. You can interject ("I only care about battery life, budget is $300"), force a final plea, and then hit the buy button. The winner gloats; the losers cope. The decision is always yours.
How it works
links / "name price" lines
│
▼
┌─────────────────────┐ ┌──────────────────────────────┐
│ Product extractor │ │ Modal · vLLM · Qwen3-30B-A3B │
│ JSON-LD → OpenGraph │ │ (OpenAI-compatible endpoint) │
│ → URL-slug fallback │ └──────────────┬───────────────┘
└─────────┬───────────┘ │
▼ ▼
cart dossiers ──────────► debate engine: personas → opening
(every item sees → attack → rebuttal → owner Q&A
every rival's specs) → closing pleas → verdict speeches
- Model: Qwen/Qwen3-30B-A3B-Instruct-2507-FP8 (30.5B total ≤ 32B ✅, MoE 3B active), served by vLLM on a Modal L40S.
- Scraping: schema.org JSON-LD first, OpenGraph meta second, URL-slug inference as a last resort — a bot-walled link still joins the brawl, it just has to bluff harder.
- Anti-hallucination rule: items may only attack with real numbers from rival dossiers; no invented specs.
- Bilingual brawls: 中文 / English.
Run locally
uv sync
export CARTBRAWL_LLM_URL=https://<your-modal-endpoint>.modal.run/v1
export CARTBRAWL_API_KEY=<your key>
uv run python app.py
Deploy your own backend: uv run modal deploy modal_server.py
(needs a Modal secret cartbrawl-api-key with CARTBRAWL_API_KEY).
Built for
Build Small Hackathon 2026 — Track 2 (Thousand Token Wood).