Lalabase
티켓·문서·근무시간·고객대화를 한 곳에 모아 KI로 검색, 소프트웨어 기업 고객 프로젝트용, 오픈소스로 자체 서버·독일 클라우드에 배포
아직 감지된 업데이트가 없습니다. GitHub 릴리스가 나오면 여기에 보입니다.
개인 계정의 공개 저장소 소유자는 GitHub로 로그인해 운영자를 확인하고 소개를 직접 관리할 수 있습니다. 관리자 승인은 필요하지 않습니다.
로그인한 뒤 확인 파일을 만들어 이 저장소의 기본 브랜치에 30분 안에 커밋해 주세요. 다른 브랜치나 포크의 파일은 인정하지 않습니다. 파일을 올린 뒤 아래에서 확인하면 관리자 승인 없이 관리할 수 있습니다. 자격을 유지하려면 파일을 남겨 두세요.
로그인이 필요하면 로그인 화면으로 이동합니다. 로그인 후 이곳으로 돌아와 원하는 확인 버튼을 다시 눌러 주세요.
프로젝트 폴더에서 /nomorevibe verify를 실행하면 소유권을 확인하고 소개를 직접 관리할 수 있습니다.
1분 만에 확인하기AI-powered tender intelligence for Canadian contractors — opportunity recommendations, citation-verified compliance, and bid risk simulation.
저장소 README에서 가져옴
README 전체를 불러오는 중입니다.
README 전문 보기 ↗Citation-verified compliance intelligence for Canadian public tenders.
Under Canada's Contract A framework, one missed mandatory clause voids an otherwise winning bid. Estimators read 34–93-page tender packages under deadline pressure, and the clauses that disqualify them are often buried deep — page 75 of a 93-page RFT. TenderSentry extracts every mandatory requirement, proves each one with a verbatim quote and true page number, and tells a contractor whether they can even submit.
Every displayed requirement carries a verbatim quote and a true page number, verified by exact-substring match against the source PDF. If the model's quote can't be found on the cited page, the requirement is repaired or dropped — never shown. No hallucinated compliance advice, ever.
flowchart LR
A[Tender PDF] --> B[Page-tagged<br/>provenance store]
B --> C[Map-reduce extraction<br/>GPT-4o, temperature 0]
C --> D{Hallucination guard<br/>exact-substring check}
D -->|quote verified| E[Phase classifier]
D -->|not found| X[Dropped<br/>never displayed]
E --> F[Qualification engine<br/>rules + LLM judge]
F --> G[Bid board<br/>quote + page on every card]
The entire codebase was built through Codex working against written specs across the Build Week window. That spec-first workflow produced the extraction pipeline, hallucination guard, phase classifier, qualification engine, Streamlit UI, and accompanying test suite.
The configured OpenAI model is gpt-4o. It is used for map-reduce requirement extraction, phase classification, and the fuzzy qualification judge. All three call sites use temperature 0 and JSON-object response mode. Extracted requirements then pass through the hallucination guard: each verbatim quote is normalized and checked against its cited source page, cross-page repair is attempted when necessary, and any quote that still cannot be verified is dropped before classification, qualification, or display.
| Tender | Pages | Extracted | Verified | Dropped by guard | Verdict |
|---|---|---|---|---|---|
| Federal crane rental RFSO | 55 | 98 | 92 | 6 | No bid (fax submission required) |
| Muskoka Lakes T-2026-31 | 34 | 33 | 31 | 2 | No bid (physical delivery required) |
| Augusta PW-2026-04 | 65 | 88 | 87 | 1 | No bid (physical delivery to clerk's office) |
| Kincardine CS-2025-01 | 93 | 79 | 76 | 3 | Review (33 items for human judgment) |
12 fabricated or unverifiable requirements were caught and dropped by the guard before any human saw them.
Buried clauses it surfaced, with citations:
pip install -r requirements.txt
cp .env.example .env # add your OPENAI_API_KEY
python3 -m extract.pipeline <tender_id> --force # extraction + verification
python3 -m match.engine <tender_id> --force # qualification
streamlit run ui/app.py
Tender PDFs live in data/tenders/<tender_id>/raw/. The firm profile is data/profile.json.
data/ is committed, and what regeneratesCommitted, because something downstream reads it and could not rebuild it:
| Path | Why it is in git |
|---|---|
data/tendersentry-slim.db | The daily refresh runs against it. A projection of the full database, rebuilt by scripts/build_slim_db.py after every retrain, and stamped with the source it came from. |
data/statcan/bcpi-*.json | The 4 KB price-index slice the scale estimator deflates with. |
model/artifacts/scale-estimator.* | The fitted estimators. Published band figures are unreproducible without them. |
web/data/** | The serving artifacts the site imports statically. |
Gitignored, because each is a cache or a working file that regenerates on demand:
data/tendersentry.db (the full database), data/seao/ (downloaded weekly OCDS
files), data/model_cache/ (sentence-transformer vectors), data/statcan/*.csv,
data/rankings/, data/census/.
data/open_tender_notices.csv was tracked and is now gitignored.
docs/STATE-20260830.md §10 left this open as UNVERIFIED; it is answered. Nothing
reads it as data. Both references — ingest/canadabuys.py:334 and
notices/canadabuys.py:130 — pass it to fetch_notices_csv as a download
destination, and that function re-downloads whenever the file on disk is older than
24 hours (ingest/canadabuys.py:42). It is a download cache, exactly like
data/seao/. Keeping it tracked was actively harmful: the daily workflow stages only
web/data and the slim database, so the committed copy would have frozen at its
2026-07-29 state while the database it fed moved on — 6 MB in git disagreeing with
everything derived from it. Regenerate with
python3 -m notices.ingest --source canadabuys.
bonding_capacity in <region>) is downgraded to fuzzy judgment with a logged warning.Built solo during OpenAI Build Week, July 2026.