尚未检测到更新。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.