--- 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 ```bash uv sync export CARTBRAWL_LLM_URL=https://.modal.run/v1 export CARTBRAWL_API_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).