feat(sources): Semantic Scholar como segundo motor (ADR 0042)#250
Open
complexluise wants to merge 2 commits into
Open
feat(sources): Semantic Scholar como segundo motor (ADR 0042)#250complexluise wants to merge 2 commits into
complexluise wants to merge 2 commits into
Conversation
…ocol)
Adaptador de Semantic Scholar (Academic Graph API) que cumple el Protocol
Source (ADR 0042): seed con query nativa (sin traducción WoS),
fetch_works_by_ids (POST /paper/batch, lotes <=500), fetch_citing_batch y
_with_works (citantes directos via /paper/{id}/citations, duck-typed para el
Forager) y _paper_to_row con identidad DOI-first (ADR 0036, reusa
_normalize_doi para no introducir drift).
Divergencias S2 vs OpenAlex: auth por header x-api-key (no Bearer), citantes
directos sin el truco cites:+cruce de refs, paperId como source_id, limites
propios. seed sin API key ante 429 levanta NetworkError accionable que nombra
la key gratuita de S2 (sella D2). load() declara NotImplementedError.
35 tests con MockTransport (sin red en CI; 1 @network opcional).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Registra las dos decisiones que ADR 0036 difirio para el 2o motor: D2 asimetria de credenciales por rol (search exige API key, el grafo de citas no) y D3 query nativa sin traduccion. Indexa el ADR en el README de decisiones. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Owner
Author
|
Aún no se va a brindar multiples proveedores, en v0.12.0 queremos terminar de hacer CLI agent native. |
Owner
Author
|
Estado: diferida a v0.13.0 (no entra en 0.11.0 ni 0.12.0). Contexto:
Refs #233, ADR 0042, nota 29. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Qué
Implementa
SemanticScholarSource(src/bib2graph/sources/semanticscholar.py), el adaptador de Semantic Scholar (Academic Graph API) como segundo motor además de OpenAlex, cumpliendo elProtocol Source. Registra la decisión en ADR 0042 (Propuesta).Primer paso del soporte multi-proveedor (ver
docs/Notas/25-multiproveedor-requerimientos.md): no depender solo de OpenAlex.Alcance (un PR = una idea)
SemanticScholarSource:seed(query nativa, sin traducción WoS),fetch_works_by_ids(POST /paper/batch, lotes ≤500),fetch_citing_batch/_with_works(citantes directos vía/paper/{id}/citations, duck-typed para elForager),_paper_to_rowcon identidad DOI-first (ADR 0036).--sourcey wiring alForager(hoyforager.py:494importaopenalex._work_to_rowhardcodeado — anotado en el docstring del módulo); escritura deexternal_ids; traducción rica WoS→S2.Decisiones (del ADR 0042)
/paper/searchda 429 sostenido sin API key, pero el grafo de citas responde sin key.seedsin key levanta unNetworkErroraccionable que nombra la key gratuita de S2 (no error pelado, no loop).translation_reportlo declara honestamente.Divergencias S2 vs OpenAlex
Auth por header
x-api-key(no Bearer) · citantes directos sin el trucocites:+cruce de refs ·paperIdcomosource_id· consulta por DOI con prefijoDOI:· límites propios (≤500).Tests / gate
35 tests con
MockTransport(sin red en CI; 1@networkopcional). Gate verde:ruff✓,ruff format✓,mypy src✓,pytest1249 passed, 6 deselected. Revisado por el verifier (aprobado; reservas de higiene de rama ya resueltas): los tests de D2 y dedup cross-motor sellan lo que aseveran.🤖 Generated with Claude Code