Lalabase
Tickets, Doku, Zeiterfassung und Kundengespräche an einem Ort, durchsuchbar per KI. Für Softwarefirmen mit Kundenprojekten. Open Source: auf deinem eigenen Server oder in unserer Cloud in Deutschland.
翻译准备中
尚未检测到更新。GitHub 发布版本后会显示在这里。
个人 GitHub 账号下公开仓库的所有者可以登录并验证所有权,自行管理介绍,无需管理员批准。
登录并生成验证文件,在 30 分钟内将其提交到此仓库的默认分支。其他分支或分叉仓库中的文件无效。然后在下方检查文件,即可无需管理员批准直接管理项目。请保留文件以维持管理权限。
如需登录,将前往登录页面。登录后请回到此处,再次点击所选的验证按钮。
在项目文件夹中运行 /nomorevibe verify,即可验证所有权并自行管理介绍。
一分钟完成验证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.