new-term-radar
Daily radar for new AI terms: names of new models, products and repos, caught on X, Hugging Face, GitHub and sitemaps before keyword tools list them.
翻译准备中
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证制作者的介绍仅有上面的一句话。 更多详情请阅读仓库 README。 仓库 README ↗
正在加载完整 README。
查看完整 README ↗Dixi helps BMW product managers decide what the next 1, 5 or 7 Series should offer in Europe, the USA and China. It reads what customers in a market ask for, checks it against BMW's principles[...]
Named after the Dixi 3/15, BMW's first car (1928).
| Layer | What goes in | How it counts | |
|---|---|---|---|
| 🟦 | L1 · BMW principles | 53 principles in Supabase: 9 series fundamentals (3 per series, owned by named teams), 34 market principles (Europe, UK, China, USA) and 10 BMW Group principles[...] | Strongest: a hard guardrail |
| 🔵 | L2 · Market evidence | BMW's customer feedback (as feature requests with mention counts per market), customer studies, sales, today's option list, plus competitor features and trends[...] | Main signal |
| 🩵 | L3 · Social test | After profiles exist: which profile would track better on social media. Simulated (no social-media integration). | Weakest, fixed per series: 7 Series 2 %, 5 Series 3 %, 3 Series 5 % |
Dixi score (0–100, per feature request): 100 × (wD·demand + wB·market backing + wF·principle fit) / (wD + wB + wF), then decision memory. A past reject lowers it by penalty × 0.5[...]
sequenceDiagram
autonumber
actor PM as Product manager
participant Web as Dixi web (Next.js)
participant API as Dixi API (FastAPI)
participant AI as Agents (Pydantic AI · OpenAI)
participant TV as Tavily MCP (web search)
participant DB as Supabase
PM->>Web: market + series (e.g. Europe · 5 Series)
Web->>Web: feature requests from BMW data<br/>(built locally by scripts/build-pipeline-data.py)
Web->>API: GET /principles
API->>DB: series + market + Group principles
Web->>API: POST /assess/principles (titles, categories, mention counts)
API->>AI: principle assessor + get_decision_memory tool
AI-->>API: fit · principle ids · evidence vs assumptions · conflicts · gaps
API->>DB: principle_assessments
opt PM clicks "Run research agent"
Web->>API: POST /research/signals
API->>AI: lead researcher → competitor scout + trend scout
AI->>TV: tavily_search / tavily_extract
API->>API: drop sources Tavily never returned
API->>DB: research_runs
end
Web->>API: GET /generations · GET /decisions
API->>DB: earlier generations = decision memory
Web->>PM: one ranked list (Dixi score) + principles panel + competitors & trends
PM->>Web: keep · reject with reason · priority · wishlist
Web->>API: POST /decisions (append-only, undo is its own row)
PM->>Web: Build profiles
Web->>API: PUT /generations/{id} (profiles, decisions, priority, run ids)
PM->>Web: ask on a profile page ("why was X rejected?")
Web->>API: POST /chat/generation
API->>AI: generation_analyst + tools (generation · principles · assessment · research · memory)
AI-->>Web: answer + "looked up" sources
Note over Web,DB: The next analysis of this series + market reads this generation:<br/>rejected requests rank lower ("Rejected · reason · who"), kept ones get a bonus,<br/>a reject comes back [...]
After the PM picks a market and a car, the principle assessor runs live. The other inputs were analysed earlier and the screen says so:
Monthly refresh job (built, scheduled run off): backend/scripts/monthly_refresh.py labels each customer comment with the OpenAI Decisions API (request, category and type with a confidenc[...]
| Claim | Status | Code |
|---|---|---|
| BMW data → feature requests per market (taxonomy clusters, mention counts, studies, sales, option list) | ✅ deterministic script, no LLM, no network | scripts/build-pipeline-data.py |
| L1 principles stored and served per series + market (Europe includes the UK) | ✅ Supabase | supabase/migrations, backend/scripts/seed_principles.py |
| Principle assessor: fit per request, cited ids, evidence vs assumptions, conflicts, gaps | ✅ runs in the analysis step; unknown ids dropped | backend/app/agents/principles.py |
| Research agent: competitors + trends with checked sources and gaps | ✅ lead + 2 scout sub-agents on Tavily MCP | backend/app/agents/research.py, web/src/components/pipeline |
| Dixi score with decision memory, settings by sliders or plain words, change log | ✅ | scoring.ts, WeightsAssistant.tsx |
| Decisions with who · when · reason; reject needs a reason (UI, API and database) | ✅ append-only history | , |
Honest by design. Each agent returns what it could not find (gaps), and the principle assessor lists conflicts instead of averaging them away. Markets without comments fall back to all mark[...]
Data boundary. BMW customer data never leaves the machine: no verbatims or quotes go to OpenAI, Tavily or Supabase. The agents get our own request titles, categories and mention counts. Detai[...]
Web only (example data, everything stored in the browser):
cd web && pnpm install && pnpm dev # http://localhost:3000
Full stack (agents + Supabase):
# 1. keys in the repo-root .env (git-ignored): OPENAI_API_KEY, TAVILY_API_KEY
# and backend/.env: SUPABASE_URL + SUPABASE_SERVICE_ROLE_KEY (see backend/.env.example)
supabase link --project-ref <ref> && supabase db push # schema (supabase/migrations)
cd backend && uv sync
uv run python -I scripts/seed_principles.py # L1 principles (reads data/L1_Files locally)
uv run fastapi dev # http://127.0.0.1:8000/docs
# 2. web: web/.env.local → NEXT_PUBLIC_API_URL=http://localhost:8000
cd ../web && pnpm dev
Tests: cd backend && uv run pytest -q (offline: fake models, fake search, in-memory store) · cd web && pnpm lint && pnpm exec tsc --noEmit. The live site https://dixi-wheat.vercel.app ru[...]
| Folder | What |
|---|---|
web/ | The app: landing page with a market globe, the requirement pipeline, generations dashboard, settings |
backend/ | FastAPI API: research agent, principle assessor, store for principles, decisions, generations, settings |
supabase/ | Database schema (migrations) |
docs/ | Setup, architecture diagrams (Mermaid), tech stack |
scripts/ | Local BMW data build for the pipeline, image generation |
branding/ | Logo, colours, brand guide |
Built for the BMW challenge "AI for Product Decision Making" at the EHL Hackathon, Munich, October 2026. Dixi is a hackathon project and is not affiliated with BMW. Market principles come fr[...]
decision-log.tsPOST /decisions| Generations saved and read back as memory by the next generation | ✅ | sessions.ts, PUT /generations, GET /memory |
| 3 car profiles, L1 = principle fit + PM priority, tensions listed, PDF via print | ✅ | profiles.ts, Profiles.tsx |
| Evidence page per profile: every requirement with exact references (BMW record ids, study workbook cells, option codes, source URLs, principle ids, decision), filterable by source | ✅ | evidence |
| Ask questions about a generation on the profile page; answers only from retrieved facts, with what was looked up | ✅ generation chat | backend/app/agents/chat.py |
| L3 social test | 🟡 simulated, labelled in the UI | analytics.ts |
| Monthly refresh: label comments (OpenAI Decisions API), count demand, research + assess, report (cron) | ✅ job + tests (live Decisions run on fictional comments: request 12/12); 🟡 schedule[...] |
| Gates G1–G4, engineering/BOM check, Codebeamer export, postpone, side-by-side generation compare | ⚪ target design only | docs/architecture/05-hitl-map.md |