@mantra-ai/core 0.4.2 → 0.4.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/discovery/ranking.d.ts +17 -3
- package/dist/discovery/ranking.d.ts.map +1 -1
- package/dist/discovery/ranking.js +35 -12
- package/dist/discovery/ranking.js.map +1 -1
- package/dist/discovery/registry.d.ts.map +1 -1
- package/dist/discovery/registry.js +4 -1
- package/dist/discovery/registry.js.map +1 -1
- package/dist/discovery/types.d.ts +4 -1
- package/dist/discovery/types.d.ts.map +1 -1
- package/dist/sources/opencitations/citation-graph-provider.d.ts +10 -0
- package/dist/sources/opencitations/citation-graph-provider.d.ts.map +1 -1
- package/dist/sources/opencitations/citation-graph-provider.js +43 -26
- package/dist/sources/opencitations/citation-graph-provider.js.map +1 -1
- package/package.json +1 -1
- package/dist/sources/semantic-scholar/citation-graph-provider.d.ts +0 -19
- package/dist/sources/semantic-scholar/citation-graph-provider.d.ts.map +0 -1
- package/dist/sources/semantic-scholar/citation-graph-provider.js +0 -91
- package/dist/sources/semantic-scholar/citation-graph-provider.js.map +0 -1
|
@@ -14,9 +14,23 @@ export declare function normalizeScore(raw: number | null, sourceKind: DiscoverS
|
|
|
14
14
|
maxRawScore?: number;
|
|
15
15
|
}): number;
|
|
16
16
|
/**
|
|
17
|
-
* Merge candidates from multiple sources.
|
|
18
|
-
*
|
|
19
|
-
*
|
|
17
|
+
* Merge candidates from multiple sources into a deduplicated list.
|
|
18
|
+
*
|
|
19
|
+
* Dedup strategy:
|
|
20
|
+
* 1. DOI is the primary key: all candidates sharing the same normalized DOI
|
|
21
|
+
* are merged into one entry.
|
|
22
|
+
* 2. For DOI-less candidates, normalized title (≥10 chars) is the secondary key.
|
|
23
|
+
* Title-keyed entries that match a DOI-keyed entry are reconciled against it
|
|
24
|
+
* via a pre-built reverse index (normalizedTitle → doiKey), giving O(1)
|
|
25
|
+
* lookups instead of scanning byDoi for each title entry.
|
|
26
|
+
* 3. Candidates without a usable DOI or title fall into `unkeyed` and pass
|
|
27
|
+
* through unmerged.
|
|
28
|
+
*
|
|
29
|
+
* Invariants:
|
|
30
|
+
* - DOI dedup is always preferred over title dedup.
|
|
31
|
+
* - When multiple DOI-keyed entries share the same normalized title, the first
|
|
32
|
+
* encountered DOI candidate wins (Map insertion-order behavior).
|
|
33
|
+
* - Output order: [...byDoi.values(), ...unkeyed].
|
|
20
34
|
*/
|
|
21
35
|
export declare function mergeCandidates(candidates: DiscoverCandidateCore[]): DiscoverCandidateCore[];
|
|
22
36
|
export interface RankOpts {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranking.d.ts","sourceRoot":"","sources":["../../src/discovery/ranking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAkBzE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,UAAU,EAAE,kBAAkB,EAC9B,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,MAAM,CAuCR;AAiGD
|
|
1
|
+
{"version":3,"file":"ranking.d.ts","sourceRoot":"","sources":["../../src/discovery/ranking.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,MAAM,SAAS,CAAC;AAkBzE;;;;;;;;;GASG;AACH,wBAAgB,cAAc,CAC5B,GAAG,EAAE,MAAM,GAAG,IAAI,EAClB,UAAU,EAAE,kBAAkB,EAC9B,IAAI,CAAC,EAAE;IAAE,WAAW,CAAC,EAAE,MAAM,CAAC;IAAC,WAAW,CAAC,EAAE,MAAM,CAAA;CAAE,GACpD,MAAM,CAuCR;AAiGD;;;;;;;;;;;;;;;;;;GAkBG;AACH,wBAAgB,eAAe,CAC7B,UAAU,EAAE,qBAAqB,EAAE,GAClC,qBAAqB,EAAE,CAyDzB;AAID,MAAM,WAAW,QAAQ;IACvB,wCAAwC;IACxC,KAAK,CAAC,EAAE,MAAM,CAAC;CAChB;AAED;;;;;GAKG;AACH,wBAAgB,cAAc,CAC5B,UAAU,EAAE,qBAAqB,EAAE,EACnC,IAAI,CAAC,EAAE,QAAQ,GACd,qBAAqB,EAAE,CAoCzB"}
|
|
@@ -140,9 +140,23 @@ function bestRawScore(a, b) {
|
|
|
140
140
|
return Math.min(a, b);
|
|
141
141
|
}
|
|
142
142
|
/**
|
|
143
|
-
* Merge candidates from multiple sources.
|
|
144
|
-
*
|
|
145
|
-
*
|
|
143
|
+
* Merge candidates from multiple sources into a deduplicated list.
|
|
144
|
+
*
|
|
145
|
+
* Dedup strategy:
|
|
146
|
+
* 1. DOI is the primary key: all candidates sharing the same normalized DOI
|
|
147
|
+
* are merged into one entry.
|
|
148
|
+
* 2. For DOI-less candidates, normalized title (≥10 chars) is the secondary key.
|
|
149
|
+
* Title-keyed entries that match a DOI-keyed entry are reconciled against it
|
|
150
|
+
* via a pre-built reverse index (normalizedTitle → doiKey), giving O(1)
|
|
151
|
+
* lookups instead of scanning byDoi for each title entry.
|
|
152
|
+
* 3. Candidates without a usable DOI or title fall into `unkeyed` and pass
|
|
153
|
+
* through unmerged.
|
|
154
|
+
*
|
|
155
|
+
* Invariants:
|
|
156
|
+
* - DOI dedup is always preferred over title dedup.
|
|
157
|
+
* - When multiple DOI-keyed entries share the same normalized title, the first
|
|
158
|
+
* encountered DOI candidate wins (Map insertion-order behavior).
|
|
159
|
+
* - Output order: [...byDoi.values(), ...unkeyed].
|
|
146
160
|
*/
|
|
147
161
|
export function mergeCandidates(candidates) {
|
|
148
162
|
const byDoi = new Map();
|
|
@@ -175,17 +189,26 @@ export function mergeCandidates(candidates) {
|
|
|
175
189
|
}
|
|
176
190
|
unkeyed.push(c);
|
|
177
191
|
}
|
|
178
|
-
//
|
|
192
|
+
// Build a reverse index: normalizedTitle → doi key for O(1) cross-check lookups.
|
|
193
|
+
// Preserves first-insertion semantics (first DOI candidate wins for duplicate normalized titles).
|
|
194
|
+
const doiByNormalizedTitle = new Map();
|
|
195
|
+
for (const [doiKey, doiCandidate] of byDoi) {
|
|
196
|
+
if (!doiCandidate.title)
|
|
197
|
+
continue;
|
|
198
|
+
const nt = normalizeTitle(doiCandidate.title);
|
|
199
|
+
if (!doiByNormalizedTitle.has(nt)) {
|
|
200
|
+
doiByNormalizedTitle.set(nt, doiKey);
|
|
201
|
+
}
|
|
202
|
+
}
|
|
203
|
+
// Cross-check: title-keyed entries that also match a DOI-keyed entry.
|
|
204
|
+
// O(1) lookup via the pre-built normalized-title index.
|
|
179
205
|
for (const [titleKey, titleCandidate] of byTitle) {
|
|
180
|
-
|
|
181
|
-
|
|
182
|
-
|
|
183
|
-
|
|
184
|
-
merged = true;
|
|
185
|
-
break;
|
|
186
|
-
}
|
|
206
|
+
const doiKey = doiByNormalizedTitle.get(titleKey);
|
|
207
|
+
if (doiKey !== undefined) {
|
|
208
|
+
const doiCandidate = byDoi.get(doiKey);
|
|
209
|
+
byDoi.set(doiKey, mergeTwo(doiCandidate, titleCandidate));
|
|
187
210
|
}
|
|
188
|
-
|
|
211
|
+
else {
|
|
189
212
|
unkeyed.push(titleCandidate);
|
|
190
213
|
}
|
|
191
214
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/discovery/ranking.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ranking.js","sourceRoot":"","sources":["../../src/discovery/ranking.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAE3C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI1C,4DAA4D;IAC5D,YAAY,CAAC,MAAM,CAAC,EAAE;QACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;QAChC,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,gBAAgB,EAAE;IAetB;;;;;OAKG;IACG,SAAS,CACb,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,oBAAoB,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.d.ts","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,kBAAkB,EAClB,qBAAqB,EACrB,gBAAgB,EAChB,aAAa,EACb,kBAAkB,EAClB,oBAAoB,EACrB,MAAM,SAAS,CAAC;AAEjB;;;GAGG;AACH,qBAAa,gBAAgB;IAC3B,OAAO,CAAC,SAAS,CAA0B;IAE3C,QAAQ,CAAC,QAAQ,EAAE,gBAAgB,GAAG,IAAI;IAI1C,4DAA4D;IAC5D,YAAY,CAAC,MAAM,CAAC,EAAE;QACpB,UAAU,CAAC,EAAE,kBAAkB,CAAC;QAChC,KAAK,CAAC,EAAE,OAAO,CAAC;KACjB,GAAG,gBAAgB,EAAE;IAetB;;;;;OAKG;IACG,SAAS,CACb,KAAK,EAAE,MAAM,EACb,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,oBAAoB,CAAC;IA6ChC;;;;;OAKG;IACG,UAAU,CACd,UAAU,EAAE,qBAAqB,EAAE,GAClC,OAAO,CAAC;QAAE,UAAU,EAAE,qBAAqB,EAAE,CAAC;QAAC,MAAM,EAAE,aAAa,EAAE,CAAA;KAAE,CAAC;CAoB7E"}
|
|
@@ -28,9 +28,12 @@ export class ProviderRegistry {
|
|
|
28
28
|
*/
|
|
29
29
|
async searchAll(query, opts) {
|
|
30
30
|
const searchProviders = this.getProviders({ capability: "search" });
|
|
31
|
+
// localOnly and remoteOnly are mutually exclusive; localOnly takes precedence.
|
|
31
32
|
const active = opts?.localOnly
|
|
32
33
|
? searchProviders.filter((p) => p.isLocal)
|
|
33
|
-
:
|
|
34
|
+
: opts?.remoteOnly
|
|
35
|
+
? searchProviders.filter((p) => !p.isLocal)
|
|
36
|
+
: searchProviders;
|
|
34
37
|
const local = [];
|
|
35
38
|
const remote = [];
|
|
36
39
|
const errors = [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"AASA;;;GAGG;AACH,MAAM,OAAO,gBAAgB;IACnB,SAAS,GAAuB,EAAE,CAAC;IAE3C,QAAQ,CAAC,QAA0B;QACjC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAChC,CAAC;IAED,4DAA4D;IAC5D,YAAY,CAAC,MAGZ;QACC,IAAI,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC;QAE1B,IAAI,MAAM,EAAE,UAAU,EAAE,CAAC;YACvB,MAAM,GAAG,GAAG,MAAM,CAAC,UAAU,CAAC;YAC9B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC;QAC1D,CAAC;QACD,IAAI,MAAM,EAAE,KAAK,KAAK,SAAS,EAAE,CAAC;YAChC,MAAM,KAAK,GAAG,MAAM,CAAC,KAAK,CAAC;YAC3B,IAAI,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,KAAK,KAAK,CAAC,CAAC;QACjD,CAAC;QAED,OAAO,IAAI,CAAC;IACd,CAAC;IAED;;;;;OAKG;IACH,KAAK,CAAC,SAAS,CACb,KAAa,EACb,IAAyB;QAEzB,MAAM,eAAe,GAAG,IAAI,CAAC,YAAY,CAAC,EAAE,UAAU,EAAE,QAAQ,EAAE,CAAC,CAAC;QAEpE,MAAM,MAAM,GAAG,IAAI,EAAE,SAAS;YAC5B,CAAC,CAAC,eAAe,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC;YAC1C,CAAC,CAAC,eAAe,CAAC;
|
|
1
|
+
{"version":3,"file":"registry.js","sourceRoot":"","sources":["../../src/discovery/registry.ts"],"names":[],"mappings":"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"}
|
|
@@ -10,7 +10,7 @@ export type DiscoverCapability = "search" | "augment";
|
|
|
10
10
|
* Extensible source identifier.
|
|
11
11
|
* Built-in kinds are listed here; providers may add new ones.
|
|
12
12
|
*/
|
|
13
|
-
export type DiscoverSourceKind = "mantra" | "zotero" | "pdf-index" | "semantic-scholar" | "
|
|
13
|
+
export type DiscoverSourceKind = "mantra" | "zotero" | "pdf-index" | "semantic-scholar" | "crossref" | "opencitations-citation-graph" | (string & {});
|
|
14
14
|
/**
|
|
15
15
|
* Tracks which seed paper(s) led to a candidate during citation-graph expansion.
|
|
16
16
|
*/
|
|
@@ -88,7 +88,10 @@ export interface DiscoverProvider {
|
|
|
88
88
|
}
|
|
89
89
|
export interface RegistrySearchOpts {
|
|
90
90
|
limit?: number;
|
|
91
|
+
/** Only run local providers (Mantra, Zotero, PDF index). */
|
|
91
92
|
localOnly?: boolean;
|
|
93
|
+
/** Only run remote providers (Crossref, citation graph, etc.). */
|
|
94
|
+
remoteOnly?: boolean;
|
|
92
95
|
}
|
|
93
96
|
export interface RegistrySearchResult {
|
|
94
97
|
local: DiscoverCandidateCore[];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH,8BAA8B;AAC9B,MAAM,MAAM,kBAAkB,GAAG,QAAQ,GAAG,SAAS,CAAC;AAItD;;;GAGG;AACH,MAAM,MAAM,kBAAkB,GAC1B,QAAQ,GACR,QAAQ,GACR,WAAW,GACX,kBAAkB,GAClB,
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/discovery/types.ts"],"names":[],"mappings":"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"}
|
|
@@ -4,6 +4,16 @@
|
|
|
4
4
|
* Expands from a set of seed DOIs by fetching their references (bibliography)
|
|
5
5
|
* and citations (downstream work) via OpenCitations, then hydrates metadata
|
|
6
6
|
* from Crossref before returning deduplicated candidates.
|
|
7
|
+
*
|
|
8
|
+
* Fetch budget:
|
|
9
|
+
* - PER_SEED_LIMIT caps the per-direction result count per seed to guard
|
|
10
|
+
* against prolific seeds flooding the accumulator.
|
|
11
|
+
* - A global `budget = limit × BUDGET_MULTIPLIER` unique non-seed DOIs are
|
|
12
|
+
* accumulated before the outer seed loop is stopped, providing slack for
|
|
13
|
+
* seed exclusions and dedup losses while avoiding fetching far more data
|
|
14
|
+
* than the requested limit.
|
|
15
|
+
* - Only `limit` entries from the accumulated set are sent to Crossref
|
|
16
|
+
* hydration, so hydration cost is always proportional to requested output.
|
|
7
17
|
*/
|
|
8
18
|
import type { DiscoverCandidateCore, DiscoverProvider, DiscoverSearchOpts } from "../../discovery/types";
|
|
9
19
|
export declare class OpenCitationsCitationGraphProvider implements DiscoverProvider {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation-graph-provider.d.ts","sourceRoot":"","sources":["../../../src/sources/opencitations/citation-graph-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"citation-graph-provider.d.ts","sourceRoot":"","sources":["../../../src/sources/opencitations/citation-graph-provider.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;GAgBG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAwB/B,qBAAa,kCAAmC,YAAW,gBAAgB;IACzE,QAAQ,CAAC,IAAI,kCAAkC;IAC/C,QAAQ,CAAC,UAAU,EAAG,8BAA8B,CAAU;IAC9D,QAAQ,CAAC,YAAY,sBAAuB;IAC5C,QAAQ,CAAC,OAAO,SAAS;IAEzB,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,MAAM,EAAE;IAIxB,MAAM,CACV,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC;CAuFpC"}
|
|
@@ -4,13 +4,28 @@
|
|
|
4
4
|
* Expands from a set of seed DOIs by fetching their references (bibliography)
|
|
5
5
|
* and citations (downstream work) via OpenCitations, then hydrates metadata
|
|
6
6
|
* from Crossref before returning deduplicated candidates.
|
|
7
|
+
*
|
|
8
|
+
* Fetch budget:
|
|
9
|
+
* - PER_SEED_LIMIT caps the per-direction result count per seed to guard
|
|
10
|
+
* against prolific seeds flooding the accumulator.
|
|
11
|
+
* - A global `budget = limit × BUDGET_MULTIPLIER` unique non-seed DOIs are
|
|
12
|
+
* accumulated before the outer seed loop is stopped, providing slack for
|
|
13
|
+
* seed exclusions and dedup losses while avoiding fetching far more data
|
|
14
|
+
* than the requested limit.
|
|
15
|
+
* - Only `limit` entries from the accumulated set are sent to Crossref
|
|
16
|
+
* hydration, so hydration cost is always proportional to requested output.
|
|
7
17
|
*/
|
|
8
18
|
import { getReferences, getCitations } from "./client";
|
|
9
19
|
import { batchHydrateByDois, extractTitle, extractYear, formatAuthors, extractVenue, extractAbstract, } from "../crossref/client";
|
|
10
20
|
/** Max concurrent seed expansions to avoid burst traffic. */
|
|
11
21
|
const MAX_CONCURRENCY = 3;
|
|
12
|
-
/** Max results per direction per seed. */
|
|
22
|
+
/** Max results per direction per seed (guards against very prolific seeds). */
|
|
13
23
|
const PER_SEED_LIMIT = 50;
|
|
24
|
+
/**
|
|
25
|
+
* Multiplier applied to `opts.limit` to set the global unique-candidate budget.
|
|
26
|
+
* Provides slack for seed exclusions and dedup losses before the final slice.
|
|
27
|
+
*/
|
|
28
|
+
const BUDGET_MULTIPLIER = 3;
|
|
14
29
|
export class OpenCitationsCitationGraphProvider {
|
|
15
30
|
name = "OpenCitations Citation Graph";
|
|
16
31
|
sourceKind = "opencitations-citation-graph";
|
|
@@ -24,10 +39,17 @@ export class OpenCitationsCitationGraphProvider {
|
|
|
24
39
|
if (this.seedDois.length === 0)
|
|
25
40
|
return [];
|
|
26
41
|
const limit = opts?.limit ?? 20;
|
|
27
|
-
//
|
|
28
|
-
|
|
42
|
+
// Global budget: stop fanout once this many unique non-seed DOIs are
|
|
43
|
+
// accumulated — avoids fetching far more data than the final limit needs.
|
|
44
|
+
const budget = limit * BUDGET_MULTIPLIER;
|
|
29
45
|
const seedDoiSet = new Set(this.seedDois.map((d) => d.toLowerCase()));
|
|
46
|
+
// Accumulate deduplicated non-seed DOIs and their seed origins inline
|
|
47
|
+
// during fanout — no intermediate collection pass needed.
|
|
48
|
+
const doiMap = new Map();
|
|
30
49
|
for (let i = 0; i < this.seedDois.length; i += MAX_CONCURRENCY) {
|
|
50
|
+
// Early-stop: enough unique candidates collected; skip remaining seeds.
|
|
51
|
+
if (doiMap.size >= budget)
|
|
52
|
+
break;
|
|
31
53
|
const batch = this.seedDois.slice(i, i + MAX_CONCURRENCY);
|
|
32
54
|
const requests = [];
|
|
33
55
|
for (const doi of batch) {
|
|
@@ -49,33 +71,28 @@ export class OpenCitationsCitationGraphProvider {
|
|
|
49
71
|
if (result.status === "fulfilled" && result.value.ok) {
|
|
50
72
|
const dois = result.value.data;
|
|
51
73
|
for (const doi of dois.slice(0, PER_SEED_LIMIT)) {
|
|
52
|
-
|
|
74
|
+
const key = doi.toLowerCase();
|
|
75
|
+
// Exclude seed papers from results
|
|
76
|
+
if (seedDoiSet.has(key))
|
|
77
|
+
continue;
|
|
78
|
+
const existing = doiMap.get(key);
|
|
79
|
+
if (existing) {
|
|
80
|
+
const originKey = `${req.doi.toLowerCase()}:${req.relation}`;
|
|
81
|
+
if (!existing.origins.some((o) => `${o.doi.toLowerCase()}:${o.relation}` === originKey)) {
|
|
82
|
+
existing.origins.push({ doi: req.doi, relation: req.relation });
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
else {
|
|
86
|
+
doiMap.set(key, {
|
|
87
|
+
doi,
|
|
88
|
+
origins: [{ doi: req.doi, relation: req.relation }],
|
|
89
|
+
});
|
|
90
|
+
}
|
|
53
91
|
}
|
|
54
92
|
}
|
|
55
93
|
}
|
|
56
94
|
}
|
|
57
|
-
//
|
|
58
|
-
const doiMap = new Map();
|
|
59
|
-
for (const { doi, seedDoi, relation } of allTagged) {
|
|
60
|
-
const key = doi.toLowerCase();
|
|
61
|
-
// Exclude seed papers from results
|
|
62
|
-
if (seedDoiSet.has(key))
|
|
63
|
-
continue;
|
|
64
|
-
const existing = doiMap.get(key);
|
|
65
|
-
if (existing) {
|
|
66
|
-
const originKey = `${seedDoi.toLowerCase()}:${relation}`;
|
|
67
|
-
if (!existing.origins.some((o) => `${o.doi.toLowerCase()}:${o.relation}` === originKey)) {
|
|
68
|
-
existing.origins.push({ doi: seedDoi, relation });
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
else {
|
|
72
|
-
doiMap.set(key, {
|
|
73
|
-
doi,
|
|
74
|
-
origins: [{ doi: seedDoi, relation }],
|
|
75
|
-
});
|
|
76
|
-
}
|
|
77
|
-
}
|
|
78
|
-
// Limit before expensive hydration
|
|
95
|
+
// Slice to limit before hydration so only chosen entries incur Crossref cost.
|
|
79
96
|
const entries = [...doiMap.values()].slice(0, limit);
|
|
80
97
|
if (entries.length === 0)
|
|
81
98
|
return [];
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"citation-graph-provider.js","sourceRoot":"","sources":["../../../src/sources/opencitations/citation-graph-provider.ts"],"names":[],"mappings":"AAAA
|
|
1
|
+
{"version":3,"file":"citation-graph-provider.js","sourceRoot":"","sources":["../../../src/sources/opencitations/citation-graph-provider.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic Scholar citation-graph discovery provider.
|
|
3
|
-
*
|
|
4
|
-
* Expands from a set of seed DOIs by fetching their references (bibliography)
|
|
5
|
-
* and citations (downstream work), then returns deduplicated candidates.
|
|
6
|
-
*/
|
|
7
|
-
import type { DiscoverCandidateCore, DiscoverProvider, DiscoverSearchOpts } from "../../discovery/types";
|
|
8
|
-
import { type S2ClientOpts } from "./client";
|
|
9
|
-
export declare class SemanticScholarCitationGraphProvider implements DiscoverProvider {
|
|
10
|
-
readonly name = "Semantic Scholar Citation Graph";
|
|
11
|
-
readonly sourceKind: "semantic-scholar-citation-graph";
|
|
12
|
-
readonly capabilities: readonly ["search"];
|
|
13
|
-
readonly isLocal = false;
|
|
14
|
-
private clientOpts;
|
|
15
|
-
private seedDois;
|
|
16
|
-
constructor(seedDois: string[], clientOpts?: S2ClientOpts);
|
|
17
|
-
search(_query: string, opts?: DiscoverSearchOpts): Promise<DiscoverCandidateCore[]>;
|
|
18
|
-
}
|
|
19
|
-
//# sourceMappingURL=citation-graph-provider.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"citation-graph-provider.d.ts","sourceRoot":"","sources":["../../../src/sources/semantic-scholar/citation-graph-provider.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,KAAK,EACV,qBAAqB,EACrB,gBAAgB,EAChB,kBAAkB,EAEnB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAIL,KAAK,YAAY,EAClB,MAAM,UAAU,CAAC;AAgBlB,qBAAa,oCAAqC,YAAW,gBAAgB;IAC3E,QAAQ,CAAC,IAAI,qCAAqC;IAClD,QAAQ,CAAC,UAAU,EAAG,iCAAiC,CAAU;IACjE,QAAQ,CAAC,YAAY,sBAAuB;IAC5C,QAAQ,CAAC,OAAO,SAAS;IAEzB,OAAO,CAAC,UAAU,CAAe;IACjC,OAAO,CAAC,QAAQ,CAAW;gBAEf,QAAQ,EAAE,MAAM,EAAE,EAAE,UAAU,CAAC,EAAE,YAAY;IAKnD,MAAM,CACV,MAAM,EAAE,MAAM,EACd,IAAI,CAAC,EAAE,kBAAkB,GACxB,OAAO,CAAC,qBAAqB,EAAE,CAAC;CA0EpC"}
|
|
@@ -1,91 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Semantic Scholar citation-graph discovery provider.
|
|
3
|
-
*
|
|
4
|
-
* Expands from a set of seed DOIs by fetching their references (bibliography)
|
|
5
|
-
* and citations (downstream work), then returns deduplicated candidates.
|
|
6
|
-
*/
|
|
7
|
-
import { getPaperReferences, getPaperCitations, } from "./client";
|
|
8
|
-
import { s2PaperToCandidate } from "./provider";
|
|
9
|
-
/** Max concurrent seed expansions to avoid rate-limit bursts. */
|
|
10
|
-
const MAX_CONCURRENCY = 3;
|
|
11
|
-
/** Max results per direction per seed. */
|
|
12
|
-
const PER_SEED_LIMIT = 50;
|
|
13
|
-
export class SemanticScholarCitationGraphProvider {
|
|
14
|
-
name = "Semantic Scholar Citation Graph";
|
|
15
|
-
sourceKind = "semantic-scholar-citation-graph";
|
|
16
|
-
capabilities = ["search"];
|
|
17
|
-
isLocal = false;
|
|
18
|
-
clientOpts;
|
|
19
|
-
seedDois;
|
|
20
|
-
constructor(seedDois, clientOpts) {
|
|
21
|
-
this.seedDois = seedDois;
|
|
22
|
-
this.clientOpts = clientOpts ?? {};
|
|
23
|
-
}
|
|
24
|
-
async search(_query, opts) {
|
|
25
|
-
if (this.seedDois.length === 0)
|
|
26
|
-
return [];
|
|
27
|
-
const limit = opts?.limit ?? 20;
|
|
28
|
-
// Fan out across seeds with bounded concurrency, tagging each result
|
|
29
|
-
const allTagged = [];
|
|
30
|
-
const seedDoiSet = new Set(this.seedDois.map((d) => d.toLowerCase()));
|
|
31
|
-
for (let i = 0; i < this.seedDois.length; i += MAX_CONCURRENCY) {
|
|
32
|
-
const batch = this.seedDois.slice(i, i + MAX_CONCURRENCY);
|
|
33
|
-
// Build tagged request pairs: [refs-doi1, cites-doi1, refs-doi2, ...]
|
|
34
|
-
const requests = [];
|
|
35
|
-
for (const doi of batch) {
|
|
36
|
-
requests.push({
|
|
37
|
-
doi,
|
|
38
|
-
relation: "references",
|
|
39
|
-
promise: getPaperReferences(`DOI:${doi}`, { ...this.clientOpts, limit: PER_SEED_LIMIT }),
|
|
40
|
-
});
|
|
41
|
-
requests.push({
|
|
42
|
-
doi,
|
|
43
|
-
relation: "cited-by",
|
|
44
|
-
promise: getPaperCitations(`DOI:${doi}`, { ...this.clientOpts, limit: PER_SEED_LIMIT }),
|
|
45
|
-
});
|
|
46
|
-
}
|
|
47
|
-
const results = await Promise.allSettled(requests.map((r) => r.promise));
|
|
48
|
-
for (let j = 0; j < results.length; j++) {
|
|
49
|
-
const result = results[j];
|
|
50
|
-
const req = requests[j];
|
|
51
|
-
if (result.status === "fulfilled" && result.value.ok) {
|
|
52
|
-
for (const paper of result.value.data) {
|
|
53
|
-
allTagged.push({ paper, seedDoi: req.doi, relation: req.relation });
|
|
54
|
-
}
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
}
|
|
58
|
-
// Deduplicate by S2 paperId, collecting seed origins per paper
|
|
59
|
-
const paperMap = new Map();
|
|
60
|
-
for (const { paper, seedDoi, relation } of allTagged) {
|
|
61
|
-
// Exclude seed papers from results
|
|
62
|
-
const paperDoi = paper.externalIds?.DOI?.toLowerCase();
|
|
63
|
-
if (paperDoi && seedDoiSet.has(paperDoi))
|
|
64
|
-
continue;
|
|
65
|
-
const existing = paperMap.get(paper.paperId);
|
|
66
|
-
if (existing) {
|
|
67
|
-
// Add this origin if not already tracked
|
|
68
|
-
const originKey = `${seedDoi.toLowerCase()}:${relation}`;
|
|
69
|
-
if (!existing.origins.some((o) => `${o.doi.toLowerCase()}:${o.relation}` === originKey)) {
|
|
70
|
-
existing.origins.push({ doi: seedDoi, relation });
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
else {
|
|
74
|
-
paperMap.set(paper.paperId, {
|
|
75
|
-
paper,
|
|
76
|
-
origins: [{ doi: seedDoi, relation }],
|
|
77
|
-
});
|
|
78
|
-
}
|
|
79
|
-
}
|
|
80
|
-
// Map to candidates, scored by position (will be re-ranked by core)
|
|
81
|
-
const entries = [...paperMap.values()].slice(0, limit);
|
|
82
|
-
const candidates = entries.map(({ paper, origins }, i) => {
|
|
83
|
-
const c = s2PaperToCandidate(paper, i);
|
|
84
|
-
c.sources = ["semantic-scholar-citation-graph"];
|
|
85
|
-
c.seedOrigins = origins;
|
|
86
|
-
return c;
|
|
87
|
-
});
|
|
88
|
-
return candidates;
|
|
89
|
-
}
|
|
90
|
-
}
|
|
91
|
-
//# sourceMappingURL=citation-graph-provider.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"citation-graph-provider.js","sourceRoot":"","sources":["../../../src/sources/semantic-scholar/citation-graph-provider.ts"],"names":[],"mappings":"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"}
|