new-term-radar
신규 AI 용어를 매일 추적, X·Hugging Face·GitHub 등에서 모델·제품·레포 이름을 빠르게 수집
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기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/ |