尚未偵測到更新。GitHub 發布版本後會顯示在這裡。
個人 GitHub 帳號下公開儲存庫的擁有者可以登入並驗證所有權,自行管理介紹,無需管理員核准。
登入並產生驗證檔案,在 30 分鐘內將其提交至此儲存庫的預設分支。其他分支或分叉儲存庫中的檔案無效。然後在下方檢查檔案,即可無需管理員核准直接管理專案。請保留檔案以維持管理權限。
如需登入,將前往登入頁面。登入後請回到此處,再次點擊所選的驗證按鈕。
在專案資料夾中執行 /nomorevibe verify,即可驗證所有權並自行管理介紹。
一分鐘完成驗證TechCircuit
翻譯準備中
取自儲存庫 README
正在載入完整 README。
檢視完整 README ↗Audit AI checks content before it is published against a brand's own approved documents (brand guide, fact sheet, product specs). Every finding shows the evidence it is based on: the exact quote from the approved document. When no approved document covers a claim, the claim is marked "unverified", never "false". Audit AI only suggests; a person makes the final call on every draft.
Built by team CodeNinjas for the Inkloom AI hackathon.
One email is one private account that owns one or more brands. The owner writes, checks and approves their own content; nothing is ever approved for them, and every decision is saved with who, when and which version. Roles, risk routing and invites are deferred to the roadmap. See DECISIONS.md for the reasoning.
| Built today | Planned |
|---|---|
| Factual-claim checking: claims in a draft are extracted and checked against the brand's approved documents (supported / contradicted / unverified / documents disagree), with the quote behind each verdict | Tone checks |
| Upload brand documents (PDF, Word, text) and drafts (paste or upload) | Visual (logo and colour) checks |
| Terminology and accessibility checks run on every review, with a brand rules editor | Multi-user roles (separate writers, reviewers, approvers) |
| Suggestions: evidence-backed corrections, and a labelled "safer wording, not evidence-backed" for unverified claims | |
| Decide on each review: approve, send back with a note, or reject; every decision is recorded | |
| Versions: edit a draft, save a new version, check it again; an old approval never applies to a newer version | |
| Source Watch: withdrawing or replacing an approved document sends dependent approvals back for review | |
| Intent-lock: must-keep phrases saved on the server; no suggestion that removes one is offered, and an edit that drops one is warned about | |
| Dismiss and restore a finding (the verdict stays as it was), and comments on findings | |
| Trust Scorecard: run the verifier's labelled evaluation from the page and see the run's numbers (needs an AI provider key; none is configured yet) |
The landing page (components/sections/Checks.tsx) still marks terminology and accessibility as "Coming next" although they now run on every review; it needs updating (frontend).
| Part | Folder | Stack |
|---|---|---|
| Frontend | audit-ai-final/frontend | Next.js (App Router), React, TypeScript, Tailwind v4, GSAP, Lenis (landing page only) |
| Backend API | services/api | FastAPI, SQLAlchemy 2, Alembic, PostgreSQL 16 |
| Verification engine | services/verification | inkloom_verify (Python package): claim extraction, BM25 evidence retrieval, verification, citation guard, corrections |
How a review flows:
Browser (Next.js)
│ paste text or upload a file
▼
FastAPI POST /api/reviews ──► stores a content version (PostgreSQL)
│
▼
inkloom_verify
1. extract claims from the draft (LLM)
2. retrieve evidence passages (BM25 over the brand's APPROVED documents)
3. verify each claim against them (LLM) → supported / contradicted / unverified
4. check every citation is a real quote, propose evidence-backed corrections
│
▼
FastAPI stores findings + evidence ──► Browser shows each finding with its quote
a person approves / sends back / rejects
No AI provider configured? Reviews still complete, with one clearly labelled placeholder finding instead of a real check.
Requirements: Python 3.11+, Node.js, Docker Desktop (for PostgreSQL). Commands below are from
services/api/README.md and services/verification/README.md; on macOS/Linux use
.venv/bin/python instead of .venv/Scripts/python.
1. Backend (from services/api)
cp .env.example .env # then set AUTH_SECRET_KEY (see the comment in the file)
docker compose up -d # local PostgreSQL
python -m venv .venv
.venv/Scripts/python -m pip install -e ".[dev]"
.venv/Scripts/python -m pip install -e ../verification
.venv/Scripts/python -m alembic upgrade head
.venv/Scripts/python scripts/seed.py # demo data
.venv/Scripts/python -m uvicorn inkloom_api.main:app --reload
The API runs on http://localhost:8000 (interactive docs at /docs). Seed data is labelled
[SEEDED] in its names, and the script prints the demo login. A full pytest run wipes it; run
scripts/seed.py --reset afterwards.
2. Frontend (from audit-ai-final/frontend)
cp .env.example .env.local # only NEXT_PUBLIC_API_URL; never put secrets here
npm install
npm run dev
Open http://localhost:3000. The backend only accepts browser calls from that address by default
(CORS_ALLOW_ORIGINS).
3. Engine tests (from services/verification)
python -m venv .venv
.venv/Scripts/python -m pip install -e ".[dev]"
.venv/Scripts/python -m pytest
No secrets are committed. Every setting is documented in the .env.example files:
services/api/.env.example, services/verification/.env.example,
audit-ai-final/frontend/.env.example.
All optional; set in services/api/.env. The backend tries them in this fixed order and falls
through to the next on any failure:
GEMINI_API_KEY, GEMINI_MODELGROQ_API_KEY, GROQ_MODEL:free models): OPENROUTER_API_KEY, INKLOOM_LLM_MODELSOLLAMA_MODEL (no key, nothing leaves the machine)With a key set, draft text is sent to that provider. Documents marked confidential are meant
to stay on the local model (Ollama), which is the only provider allowed for them; Ollama is not
set up in the current environment. Model ids change over time, so read them from each provider's
live model list (the .env.example comments explain how).
| Step | Deterministic (no model) | Uses a language model |
|---|---|---|
| Evidence retrieval | BM25 over the brand's approved documents only | |
| Claim extraction | spans and atomicity checked against the draft | proposes claims |
| Verdict | proposes supported / contradicted / not enough evidence, with quotes | |
| Citation guard | every quote must exist verbatim in a retrieved passage of an authorised document; instruction-like text is never evidence; conflicting documents downgrade the verdict | |
| Corrections | added words and figures must come from the cited quote; the fix is re-verified; Intent-lock phrases may not be removed | proposes the fix |
| Rules (engine) | terminology, disclaimers, numeric limits, accessibility |
Anything the model says that fails a deterministic check is downgraded, never trusted. Provider errors and invalid output become "unverified, needs review", never a verdict. Every non-supported finding goes to a person.
The engine has a labelled, synthetic benchmark (80 records: 55 dev, 25 held-out) and a runner that
writes reports to services/verification/eval/reports/. From services/verification:
.venv/Scripts/python -m pytest -q # engine tests (no network)
.venv/Scripts/python eval/run_eval.py --check-baseline # CI gates (no model)
.venv/Scripts/python eval/run_eval.py --verdicts oracle --check-baseline # engine ceiling (scripted gold answers)
.venv/Scripts/python eval/run_eval.py --verdicts openrouter --pipeline verifier --check-baseline # live model
No live-model accuracy has been established. The oracle and default runs measure what the code
enforces, not a model. Live runs so far were blocked by provider availability (see
services/verification/EVAL.md, "Live evaluation status").
services/api/DISCLOSURE.md (Darsh to confirm).services/verification/DISCLOSURE.md
(draft: Krish to confirm).The visual style ("pressed paper") is inspired by the public style of relevovinco.com. It was re-implemented from scratch; no text, images, code or brand assets were copied.
| Person | Area | |
|---|---|---|
| Chahit | Frontend | TODO: confirm |
| Darsh | Backend API | TODO: confirm |
| Krish | AI verification engine (services/verification): claim extraction, evidence retrieval, verification, citation guard, corrections, softening, Intent-lock checks, terminology/accessibility rules, evaluation harness | Krish to confirm |
From docs/backend.md ("Known limitations"), plus two frontend notes:
RULES_HANDOFF.md).services/api/AI_PROVIDER_KEYS.md) and run a real evaluation.