Windows-GPU-UNLOCK
RTX3090 UEFI 포트, 한국어 무리셋 윈도우 부팅 가이드, 검증된 소스와 벤치마크 제공
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기메이커가 쓴 소개는 위의 한 줄이 전부입니다. 더 자세한 내용은 저장소 README에서 읽을 수 있습니다. 저장소 README ↗
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Ask questions about public policy documents and get answers that cite the exact page they came from. This project rebuilds the retrieval-augmented generation (RAG) assistant from my class notebook and fixes its main weakness: duplicate chunks.
/): anyone can ask questions. Answers come only from the published documents, with numbered citations and the cited passage highlighted.Live demo: https://policy-knowledge-assistant.vercel.app
Demo video: link to be added
In the class notebook, uploading the same file twice indexed every chunk twice. A question would then retrieve the top 5 chunks, but several of those 5 were identical copies, so:
Admin upload ──► fingerprint check ──► parse ──► strip headers/footers ──► page-aware chunks
│ (SHA-256) │
└─ already indexed? block ▼
exact-duplicate check (normalized text hash)
│
near-duplicate check (shared vocabulary ≥ 0.9,
or embedding similarity ≥ 0.985 when embeddings are on)
│
▼
index: keywords (BM25) + optional embeddings
│
Public question ──► keyword ranking ─┬─► merged ranking ──► top 5 *distinct* passages ──► Groq answer with [n] citations
meaning ranking ─┘ (reciprocal rank fusion)
Duplicates are handled at four levels:
| Level | What it catches | How |
|---|---|---|
| File | The same file uploaded again, even under a new name | SHA-256 of the bytes, checked in the browser before upload and again on the server |
| Boilerplate | Running headers, footers, page numbers repeated on every page | Lines appearing on at least half the pages are removed before chunking |
| Passage | The same text arriving in a different file (re-saved copy, reprint) | SHA-256 of normalized text (case, spacing, punctuation ignored) |
| Retrieval | Anything that still slips through | Top-k selection skips results with the same hash, near-identical vocabulary, or embedding similarity ≥ 0.95 to a chosen result |
Other changes from the notebook:
The admin page builds and runs the test set:
Metrics reported:
| Metric | Meaning |
|---|---|
| Right page in top 5 | Share of questions where the source page was retrieved |
| Mean reciprocal rank | 1.0 = the right page was always ranked first |
| Duplicate results in top 5 | Share of result slots wasted on a copy of another result |
| Faithfulness | Answers fully supported by their cited passages |
| Correctness | Answers matching the reference |
Results can be downloaded from the admin page as CSV or JSON.
Run the evaluation on the deployed site and paste the table here.
| Metric | Improved | Baseline |
|---|---|---|
| Right page in top 5 | ||
| Mean reciprocal rank | ||
| Duplicate results in top 5 | ||
| Faithfulness | n/a | |
| Correctness | n/a |
Limits of this evaluation: questions are generated from single passages, so they favour fact-lookup questions over questions that need several passages; grading uses the same model family that produced the answers.
openai/gpt-oss-120b writes answers (falling back to openai/gpt-oss-20b if it hits its limit), and openai/gpt-oss-20b writes test questions and grades them, using strict JSON schemas. Groq's free limits are per model, so evaluation doesn't use up the chat budget. All models are configurable.gemini-embedding-2, 768 dimensions) for meaning-based search. Groq has no embedding models.src/
app/
page.tsx public chat
admin/page.tsx admin (login or dashboard)
api/chat streaming answers with sources
api/library public list of documents
api/admin/* login, upload, ingest, documents, evaluation
components/ chat, admin dashboard, answer rendering
lib/
ingest.ts upload pipeline and all duplicate checks
chunk.ts boilerplate removal and page-aware chunking
retrieve.ts distinct top-k and the naive baseline
eval.ts test-set builder, runner, scoring
ai.ts Groq generation, optional Gemini embeddings, rate-limit handling; offline mock
bm25.ts keyword search
storage.ts Vercel Blob or local folder
session.ts, auth.ts signed admin session cookie
proxy.ts serves the admin page only at the secret path and signs you in
npm install
cp .env.example .env.local # fill in GROQ_API_KEY and ADMIN_PATH (GEMINI_API_KEY optional)
npm run dev
Without BLOB_READ_WRITE_TOKEN, files are stored in ./.data. To try the app without any key, set
MOCK_AI=1 (offline stand-in: answers are not real, useful only for testing the pipeline and UI).
BLOB_READ_WRITE_TOKEN).GROQ_API_KEY and ADMIN_PATH (a long random string) as environment variables. Add GEMINI_API_KEY too for meaning-based search.https://<your-site>/<ADMIN_PATH> and upload documents.On Groq's free plan the binding limit is usually tokens per minute (8,000 for the gpt-oss models). One answer uses about 2,000 to 3,000 tokens, so expect roughly three answers a minute on the main model before the fallback model takes over. When a limit is hit:
/, and the admin page at /<ADMIN_PATH>, which only the owner knows. /admin and any wrong path return 404.ADMIN_PATH, so changing ADMIN_PATH in Vercel immediately locks out every old link and session. Do this if the link is ever shared by mistake.noindex and no-referrer, so it isn't indexed and its address isn't leaked to other sites.