Spaces:
Running
ResearchBee v1.4 β verified-sources release
What changed, in one line
Policy facts now come from databases, not from the language model. Where no source could be reached, the system says so instead of filling the gap.
1. HuggingFace Space β researchbee-hf/
| File | Status |
|---|---|
app.py |
modified β DOI-first /api/check-license, registry-backed /api/find-repository, fixed publisher matcher, Khazna startup + 23:30 refresh, new /api/health |
prompts.py |
modified β "ResearchPilot" β "ResearchBee" everywhere; LICENSE_SYSTEM_PROMPT can no longer state policy facts; new ADVISORY_NOTE_PROMPT; REPO_SYSTEM_PROMPT constrained to registry selection |
oaworks.py |
new β OA.Works Permissions client, schema-confirmed against T&F / Elsevier / Springer |
doi_utils.py |
new β DOI extraction from URLs and text; ISSN mod-11 validation |
repositories.py |
new β 25-entry curated repository registry |
khazna_loader.py |
new β loads the harvested Khazna index from an HF Dataset |
requirements.txt |
modified β added huggingface_hub, apscheduler |
Upload all seven. ku_knowledge.py, openalex.py, scimago_index.py,
utils.py, Dockerfile, and the SCImago CSV are unchanged β leave them.
Before you deploy
- Set
KU_RORinoaworks.py. Find it at https://ror.org (search "Khalifa University"). This matters more than it looks: Elsevier publishes a 12-month embargo for UK institutions and 24 months for everyone else, and the ROR lets OA.Works pick the right one. - Optionally set
KHAZNA_DATASETandHF_TOKENin Space secrets. - Check
GET /api/healthafter deploy β it reports every source's status.
Khazna lookups return checked: false until the harvest has run. That is
correct behaviour, not a failure.
2. GitHub Pages β researchbee-github/
| File | Status |
|---|---|
index.html |
modified β DOI/URL field added as the primary input |
js/license.js |
modified β sends the DOI, renders provenance, Khazna status, deposit statement |
js/render_license.js |
new β the new render helpers |
css/style.css |
modified β styles appended at the end |
khazna_oai.py |
new β the OAI-PMH harvester (runs in Actions, not in the Space) |
.github/workflows/harvest-khazna.yml |
new β nightly 23:00 Dubai harvest |
test_publishers.py |
new β validation harness |
Other JS files are untouched.
3. Khazna harvest β first run
# See the deposit gap before automating anything
python khazna_oai.py gap
# Verify the parser against real records
python khazna_oai.py inspect --set publications:withFiles --format mods -n 2 --raw
python khazna_oai.py inspect --set openaire --format oai_dc -n 2 --raw
Then:
- Create an HF Dataset repo (default:
nikeshn/researchbee-data) - Add
HF_TOKENas a GitHub repository secret - Actions β "Harvest Khazna" β Run workflow (first full run)
- Nightly thereafter: Sunday full, MonβSat incremental
Sunday is full because Khazna's OAI reports deletedRecord: no β incrementals
can never learn that a record was withdrawn.
4. How to tell it is working
With a DOI β green "Verified Β· OA.Works Permissions" badge, per-version rights, the publisher's required deposit statement with a copy button, a source panel with evidence links, and Khazna status.
Without a DOI β amber "Unverified Β· journal-level estimate", all version
blocks "Unclear", a prompt to enter a DOI. The backend forcibly downgrades any
policy_status: "Confirmed" the model returns, so this cannot be bypassed.
Khazna unavailable β "Khazna status not checked", explicitly distinguished from "Not yet in Khazna".
Test DOIs from this build:
10.1080/19322909.2023.2221477 T&F β no embargo stated
10.1016/j.jclepro.2023.136775 Elsevier β 24 months (not 12; see below)
10.1007/s11192-023-04812-4 Springer β preprint immediate, AAM 12 months
5. Things worth knowing
The Elsevier embargo trap. OA.Works returns two permissions with identical
score: 1100 β 12 months (UK) and 24 months (everyone else). Ranking by score
alone silently picks 12. _permission_rank() in oaworks.py breaks the tie by
the longer embargo. Do not "optimise" that away.
Absent is not zero. T&F records carry no embargo field. The system reports "Not stated in the permission record" rather than "no embargo", because T&F's published policy is normally 12 months and a wrong permissive answer costs the library a takedown notice.
Publisher matcher. Now covers imprints whose SCImago string never says the
parent publisher β W.B. Saunders, Academic Press, Cell Press, BioMed Central,
Palgrave, Blackwell, Informa, Dove Medical. Q1 APC badge coverage went from
45.8% to 51.1% (+497 journals). AMBIGUOUS_ALIASES prevents "Maximum Academic
Press" from being mistaken for Elsevier.
Repository registry. The model selects entries by id and writes the
fit_reason; every factual field is overwritten from repositories.py.
Unknown ids are dropped. Entries you have not personally verified are left
blank rather than guessed β please fill them in and bump verified.
6. Still open
KU_RORis empty- Repository registry has blank fields awaiting your verification
- Wiley, IEEE and ACS not yet validated against OA.Works (
test_publishers.py) - Worth telling OA.Works about the UK/non-UK tie:
help@openaccessbutton.org