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 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證正在載入完整 README。 以下為已儲存的摘錄。
Demand-aware promo planning for Dubai retail. Events, weather, holidays and
school calendars drive footfall. MAWSIM forecasts that demand per store zone,
lets a bounded agent crew plan promotions and creatives against the forecast,
checks every claim against brand and food-advertising rules with citations, and
then measures incremental lift rather than clicks.
Built for SP Jain MAIB Term 4, AI 208 AI in Marketing. Owner: Krishna Mathur.檢視完整 README ↗Demand-aware promo planning for Dubai retail. Events, weather, holidays and school calendars drive footfall. MAWSIM forecasts that demand per store zone, lets a bounded agent crew plan promotions and creatives against the forecast, checks every claim against brand and food-advertising rules with citations, and then measures incremental lift rather than clicks.
Built for SP Jain MAIB Term 4, AI 208 AI in Marketing. Owner: Krishna Mathur.
The brand is fictional
SIDRA (سدرة) is an invented Dubai speciality coffee and bakery chain with four locations. It is not a real company, and nothing here is a claim about any real business. The footfall and point-of-sale figures it is planned against are generated by a seeded model in
pipeline/footfall.py.FootfallRecordcannot be constructed withoutsimulated=True, the database column isNOT NULL CHECK (simulated = 1), and every API response and every chart says so. A real pilot replaces that dataset with an actual export; nothing else in the system changes.
The chart on the lower right is the argument. Four sites, one axis, evening footfall against apparent temperature. Marina Walk — 54% of its seats outdoors — falls away as the evening heats up. Al Barsha, fully enclosed, barely moves. All four sit in neighbouring ERA5 grid cells, so they get the same weather: what differs is how they respond to it, and that is why demand is forecast per site rather than per brand.
That elasticity is not written into the simulator. It is derived from the
seat counts in data/brand/sidra.yaml, so the measured result — Marina Walk
2.4× more temperature-sensitive than Al Barsha, with the ordering across all
four sites matching their outdoor share exactly — is emergent rather than
assumed. Change the seat counts and it follows.
Captured from a local run against a built database. Regenerate with
cd apps/web && node scripts/screenshots.mjs.
| Application | https://uplift-mawsim.vercel.app |
| API | https://mawsim-api.onrender.com — /docs · /healthz |
| Verify it | LIVE_API_URL=https://mawsim-api.onrender.com LIVE_WEB_URL=https://uplift-mawsim.vercel.app make smoke-live |
All fifteen tabs serve measured data. The seven live checks pass: the API answers, no dataset is empty, the page carries the disclaimer, the web app reaches the API across origins, every tab is present, the Security tab carries the red-team result rather than the scorecard alone, and the instance grants no Admin — fail-closed asserted against the real URL rather than inferred from the code.
The API sleeps after fifteen minutes idle, so the first request after a
quiet period takes about fifty seconds while the free instance wakes. For a
live demo, open /healthz a minute
before you start. Every page renders an honest "API unreachable" state in the
meantime rather than an empty chart.
Three failures reached production and were caught by things built to catch them.
The database went to /tmp and vanished. Render's build and its runtime are
different containers. The four pipelines ran, wrote a complete database, and
threw it away. /healthz reported degraded and named all five empty datasets
on the first request — which is the entire reason it reports what is loaded
rather than only that the process is up.
A global gitignore was hiding a required input. ~/.gitignore_global
excludes data/raw/ for every repository on the machine, so the curated events
seed was never committed. git status was clean, the file was on disk, and
nothing inside the repository revealed it. tests/invariants/test_repo_is_complete.py
now asserts that every input the project needs to rebuild itself is tracked.
The forecast endpoint fitted models per request — ninety seconds on a 512 MB instance. The horizon is precomputed at build time and served as data; the endpoint went to 21 ms.
docs/datasets.md with its URL, the date it was verified
by fetching it, and its licence. The sources that refused are recorded
there as prominently as the ones that worked, because which sources refused is
part of what shaped the design.docs/results/. Not as a promise —
tests/test_docs_match_results.py extracts the figures quoted in
docs/models.md and fails if they disagree with the JSON that produced them.Every tab renders measured output. None is a scaffold.
| Group | Tabs |
|---|---|
| Plan | Season (3D terrain + map) · Forecast · Plan · Segments |
| Make | Creatives · Brand · Compliance · Panel |
| Prove | Measure · Experiments · Report |
| System | Ask · Crew · Data · Security |
| Claim | Evidence | Result |
|---|---|---|
| Forecast beats seasonal naive | python scripts/run_phase_b.py | 36/36 site-weeks, MAE 28–34% lower — B1 |
| An injected lift is recovered | same | all 5 checks within 2.61 pts of a 5-point tolerance — B4 |
| Segments survive resampling | same | 91.8% keep their segment — B2 |
| The allocator finds the optimum | same | KKT marginal spread ~0 — B3 |
| Compliance catches violations in three languages | python scripts/run_phase_c.py | recall 100% worst language, precision 100% — C1 |
| Weather history is complete | python -m pipeline.weather --verify | 18,048 hours per site, no gap over 3 h — A4 |
| Islamic dates reproduce UAE observances | python -m pipeline.calendar --verify | all four 2025 observances matched — A5 |
| Events are curated and say so | python -m pipeline.events --verify |
uv sync --extra dev
cd apps/web && npm install && cd ../..
make etl # build the datasets — weather and events reach the network, cached to data/raw/
uv run python scripts/run_phase_b.py # forecast, segments, allocator, uplift
uv run python scripts/run_phase_c.py # compliance and panel
uv run python scripts/build_report.py # the AI 208 artefact, from docs/results/
uv run python scripts/red_team.py # 34 attacks against the safety claims
make check # the green bar: ruff, pytest, contrast, palette, red team, placeholders, typecheck
make e2e # Playwright; starts both servers itself
make api # http://localhost:8000/docs
make web # http://localhost:3000
| Path | What lives there |
|---|---|
services/api/ | FastAPI service: dataset registry, series endpoints, brand kit loader |
pipeline/ | The four ETLs — weather, calendar, events, footfall — each with --verify |
apps/web/ | Next 16 application: fifteen tabs, three languages, two registers |
data/brand/sidra.yaml | The single source of truth for the fictional brand |
docs/results/ | Every measured number, written by a script |
docs/datasets.md · docs/models.md | What the data is, what the models are, and why |
docs/directions.md | The three design directions that were built, and which one was chosen |
docs/artefacts/ | The AI 208 report (markdown + docx), deck outline, 15 viva answers, three-minute demo script, and a notebook that re-runs the numbers |
scripts/red_team.py | The 34 attacks, run inside make check |
Stated here rather than discovered by a reader.
date_confidence: annual_window.clause_verified: false, the generated brand PDF prints "clause unverified"
beside each, and no clause text is written from memory. A citation that looks
verified and is unsourced is worse than one that admits what it is.assumed: true./admin/tokens/revoke refuses an id immediately, though that set is process
memory and clears on restart./admin/roles answers which
state the instance is actually in rather than leaving this paragraph to go
stale. Either way an anonymous caller is a Viewer, and the live checks assert
that rather than asserting the mode.MAWSIM produces a marketing plan and a compliance opinion for a fictional brand as coursework. It is not legal advice, not regulatory clearance, and not a substitute for real customer research. Its persona panel simulates reactions; it does not observe them.
245 instances, no row claiming a verified date — A6 |
| Sites respond differently to weather | python -m pipeline.footfall --verify | slope ordering matches outdoor-share ordering — A7 |
| The embedding model is fit for trilingual retrieval | python scripts/spike_embeddings.py | bge-m3 +0.447/+0.318 margin; nomic-embed-text disqualified — A9 |
| Text and UI meet WCAG in both registers | node apps/web/scripts/check-contrast.mjs | 38 pairs measured, including the inverted pressed-toggle composite — A2 |
| Chart series and verdicts are distinguishable | node apps/web/scripts/check-palette.mjs | six checks per register plus the zone rule, deuteranopia included — A10 |
| The shell is responsive, accessible and RTL-correct | make e2e | 78 Playwright tests, no serious axe violation on any tab in either register |
| No agent can reach the outside world | pytest tests/invariants | every route is a GET; the crew's side-effects column is none on every row |
| Retrieval answers what it can and refuses what it cannot | python scripts/spike_retrieval.py | 6/8 in-domain answered, 10/10 out-of-domain refused — C2 |
| The 3D scene holds its frame budget | npx playwright test frames.spec.ts | median 60 fps, 95th percentile 30 — D1 |
| The deployed pair is what it claims to be | python scripts/verify_deploy.py | 10/10 checks, including that no anonymous caller reaches Admin — A12 |
| The safety claims survive being attacked | python scripts/red_team.py | 48 attacks, 7 controls, 48 held — including 11 against the capability token that replaced the forgeable header — E1 |
| A privileged role is proved, not claimed | pytest tests/security | signed tokens; role, expiry, signature and revocation all attacked — 26 cases |
| Provider spend stays at zero | pytest tests/core/test_llm.py | Anthropic reports itself unavailable with a key set; the chain ends in a deterministic stub |
| Every artefact still matches its builder | pytest tests/test_artefacts_are_current.py | report, deck, viva, demo and notebook regenerate byte-identically from docs/results/ |