@vue-skuilder/db 0.2.4 → 0.2.7
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/core/index.d.cts +37 -1
- package/dist/core/index.d.ts +37 -1
- package/dist/core/index.js +217 -8
- package/dist/core/index.js.map +1 -1
- package/dist/core/index.mjs +214 -8
- package/dist/core/index.mjs.map +1 -1
- package/dist/impl/couch/index.js +211 -8
- package/dist/impl/couch/index.js.map +1 -1
- package/dist/impl/couch/index.mjs +211 -8
- package/dist/impl/couch/index.mjs.map +1 -1
- package/dist/impl/static/index.js +211 -8
- package/dist/impl/static/index.js.map +1 -1
- package/dist/impl/static/index.mjs +211 -8
- package/dist/impl/static/index.mjs.map +1 -1
- package/dist/index.d.cts +59 -1
- package/dist/index.d.ts +59 -1
- package/dist/index.js +444 -25
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +441 -25
- package/dist/index.mjs.map +1 -1
- package/docs/navigators-architecture.md +42 -2
- package/package.json +3 -3
- package/src/core/navigators/Pipeline.ts +10 -1
- package/src/core/navigators/diversityRerank.ts +185 -0
- package/src/core/navigators/generators/elo.ts +32 -11
- package/src/core/navigators/generators/prescribed.ts +173 -1
- package/src/core/navigators/index.ts +8 -0
- package/src/study/ItemQueue.test.ts +71 -0
- package/src/study/ItemQueue.ts +19 -1
- package/src/study/SessionController.ts +123 -7
- package/src/study/SessionOverlay.ts +245 -21
package/dist/core/index.mjs
CHANGED
|
@@ -696,6 +696,95 @@ var init_courseLookupDB = __esm({
|
|
|
696
696
|
}
|
|
697
697
|
});
|
|
698
698
|
|
|
699
|
+
// src/core/navigators/diversityRerank.ts
|
|
700
|
+
var diversityRerank_exports = {};
|
|
701
|
+
__export(diversityRerank_exports, {
|
|
702
|
+
DIVERSITY_FLOOR: () => DIVERSITY_FLOOR,
|
|
703
|
+
DIVERSITY_STRENGTH: () => DIVERSITY_STRENGTH,
|
|
704
|
+
diversityRerank: () => diversityRerank
|
|
705
|
+
});
|
|
706
|
+
function diversityRerank(cards, opts = {}) {
|
|
707
|
+
const strength = opts.strength ?? DIVERSITY_STRENGTH;
|
|
708
|
+
const floor = opts.floor ?? DIVERSITY_FLOOR;
|
|
709
|
+
const n = cards.length;
|
|
710
|
+
if (n <= 1) return cards;
|
|
711
|
+
const df = /* @__PURE__ */ new Map();
|
|
712
|
+
for (const card of cards) {
|
|
713
|
+
for (const tag of card.tags ?? []) {
|
|
714
|
+
df.set(tag, (df.get(tag) ?? 0) + 1);
|
|
715
|
+
}
|
|
716
|
+
}
|
|
717
|
+
const idf = /* @__PURE__ */ new Map();
|
|
718
|
+
for (const [tag, freq] of df) {
|
|
719
|
+
idf.set(tag, Math.log(n / freq));
|
|
720
|
+
}
|
|
721
|
+
const remaining = [...cards];
|
|
722
|
+
const emittedCount = /* @__PURE__ */ new Map();
|
|
723
|
+
const out = [];
|
|
724
|
+
const repetitionLoad = (card) => {
|
|
725
|
+
let load = 0;
|
|
726
|
+
for (const tag of card.tags ?? []) {
|
|
727
|
+
const seen = emittedCount.get(tag);
|
|
728
|
+
if (seen) load += (idf.get(tag) ?? 0) * seen;
|
|
729
|
+
}
|
|
730
|
+
return load;
|
|
731
|
+
};
|
|
732
|
+
while (remaining.length > 0) {
|
|
733
|
+
let bestIdx = 0;
|
|
734
|
+
let bestValue = -Infinity;
|
|
735
|
+
let bestPenalty = 1;
|
|
736
|
+
let bestLoad = 0;
|
|
737
|
+
for (let i = 0; i < remaining.length; i++) {
|
|
738
|
+
const card = remaining[i];
|
|
739
|
+
const load = repetitionLoad(card);
|
|
740
|
+
const penalty = load > 0 ? Math.max(floor, 1 / (1 + strength * load)) : 1;
|
|
741
|
+
const value = card.score * penalty;
|
|
742
|
+
if (value > bestValue) {
|
|
743
|
+
bestValue = value;
|
|
744
|
+
bestIdx = i;
|
|
745
|
+
bestPenalty = penalty;
|
|
746
|
+
bestLoad = load;
|
|
747
|
+
}
|
|
748
|
+
}
|
|
749
|
+
const [picked] = remaining.splice(bestIdx, 1);
|
|
750
|
+
if (Number.isFinite(picked.score) && bestPenalty < 1) {
|
|
751
|
+
const newScore = picked.score * bestPenalty;
|
|
752
|
+
out.push({
|
|
753
|
+
...picked,
|
|
754
|
+
score: newScore,
|
|
755
|
+
provenance: [
|
|
756
|
+
...picked.provenance,
|
|
757
|
+
{
|
|
758
|
+
strategy: STRATEGY,
|
|
759
|
+
strategyId: STRATEGY_ID,
|
|
760
|
+
strategyName: STRATEGY_NAME,
|
|
761
|
+
action: "penalized",
|
|
762
|
+
score: newScore,
|
|
763
|
+
reason: `repeated tags (load ${bestLoad.toFixed(2)}) \u2192 \xD7${bestPenalty.toFixed(2)}`
|
|
764
|
+
}
|
|
765
|
+
]
|
|
766
|
+
});
|
|
767
|
+
} else {
|
|
768
|
+
out.push(picked);
|
|
769
|
+
}
|
|
770
|
+
for (const tag of picked.tags ?? []) {
|
|
771
|
+
emittedCount.set(tag, (emittedCount.get(tag) ?? 0) + 1);
|
|
772
|
+
}
|
|
773
|
+
}
|
|
774
|
+
return out;
|
|
775
|
+
}
|
|
776
|
+
var DIVERSITY_STRENGTH, DIVERSITY_FLOOR, STRATEGY, STRATEGY_ID, STRATEGY_NAME;
|
|
777
|
+
var init_diversityRerank = __esm({
|
|
778
|
+
"src/core/navigators/diversityRerank.ts"() {
|
|
779
|
+
"use strict";
|
|
780
|
+
DIVERSITY_STRENGTH = 0.6;
|
|
781
|
+
DIVERSITY_FLOOR = 0.3;
|
|
782
|
+
STRATEGY = "diversityRerank";
|
|
783
|
+
STRATEGY_ID = "DIVERSITY_RERANK";
|
|
784
|
+
STRATEGY_NAME = "Diversity Re-rank";
|
|
785
|
+
}
|
|
786
|
+
});
|
|
787
|
+
|
|
699
788
|
// src/core/navigators/PipelineDebugger.ts
|
|
700
789
|
var PipelineDebugger_exports = {};
|
|
701
790
|
__export(PipelineDebugger_exports, {
|
|
@@ -1764,12 +1853,13 @@ __export(elo_exports, {
|
|
|
1764
1853
|
default: () => ELONavigator
|
|
1765
1854
|
});
|
|
1766
1855
|
import { toCourseElo as toCourseElo2 } from "@vue-skuilder/common";
|
|
1767
|
-
var ELONavigator;
|
|
1856
|
+
var ELO_RELEVANCE_SIGMA, ELONavigator;
|
|
1768
1857
|
var init_elo = __esm({
|
|
1769
1858
|
"src/core/navigators/generators/elo.ts"() {
|
|
1770
1859
|
"use strict";
|
|
1771
1860
|
init_navigators();
|
|
1772
1861
|
init_logger();
|
|
1862
|
+
ELO_RELEVANCE_SIGMA = 300;
|
|
1773
1863
|
ELONavigator = class extends ContentNavigator {
|
|
1774
1864
|
/** Human-readable name for CardGenerator interface */
|
|
1775
1865
|
name;
|
|
@@ -1809,8 +1899,8 @@ var init_elo = __esm({
|
|
|
1809
1899
|
const scored = newCards.map((c) => {
|
|
1810
1900
|
const cardElo = c.elo ?? 1e3;
|
|
1811
1901
|
const distance = Math.abs(cardElo - userGlobalElo);
|
|
1812
|
-
const
|
|
1813
|
-
const samplingKey =
|
|
1902
|
+
const relevance = Math.exp(-((distance / ELO_RELEVANCE_SIGMA) ** 2));
|
|
1903
|
+
const samplingKey = relevance * (0.5 + 0.5 * Math.random());
|
|
1814
1904
|
return {
|
|
1815
1905
|
cardId: c.cardID,
|
|
1816
1906
|
courseId: c.courseID,
|
|
@@ -1822,7 +1912,7 @@ var init_elo = __esm({
|
|
|
1822
1912
|
strategyId: this.strategyId || "NAVIGATION_STRATEGY-ELO-default",
|
|
1823
1913
|
action: "generated",
|
|
1824
1914
|
score: samplingKey,
|
|
1825
|
-
reason: `ELO distance ${Math.round(distance)} (card: ${Math.round(cardElo)}, user: ${Math.round(userGlobalElo)}),
|
|
1915
|
+
reason: `ELO distance ${Math.round(distance)} (card: ${Math.round(cardElo)}, user: ${Math.round(userGlobalElo)}), relevance ${relevance.toFixed(3)}, key ${samplingKey.toFixed(3)}`
|
|
1826
1916
|
}
|
|
1827
1917
|
]
|
|
1828
1918
|
};
|
|
@@ -1890,7 +1980,7 @@ function shuffleInPlace(arr) {
|
|
|
1890
1980
|
function pickTopByScore(cards, limit) {
|
|
1891
1981
|
return [...cards].sort((a, b) => b.score - a.score || a.cardId.localeCompare(b.cardId)).slice(0, limit);
|
|
1892
1982
|
}
|
|
1893
|
-
var DEFAULT_FRESHNESS_WINDOW, DEFAULT_MAX_DIRECT_PER_RUN, DEFAULT_MAX_SUPPORT_PER_RUN, DEFAULT_HIERARCHY_DEPTH, DEFAULT_MIN_COUNT, BASE_TARGET_SCORE, BASE_SUPPORT_SCORE, DISCOVERED_SUPPORT_SCORE, MAX_TARGET_MULTIPLIER, MAX_SUPPORT_MULTIPLIER, PRESCRIBED_DEBUG_VERSION, PrescribedCardsGenerator;
|
|
1983
|
+
var DEFAULT_FRESHNESS_WINDOW, DEFAULT_MAX_DIRECT_PER_RUN, DEFAULT_MAX_SUPPORT_PER_RUN, DEFAULT_HIERARCHY_DEPTH, DEFAULT_MIN_COUNT, DEFAULT_PRACTICE_MIN_COUNT, DEFAULT_MAX_PRACTICE_PER_RUN, BASE_TARGET_SCORE, BASE_SUPPORT_SCORE, DISCOVERED_SUPPORT_SCORE, BASE_PRACTICE_SCORE, MAX_TARGET_MULTIPLIER, MAX_SUPPORT_MULTIPLIER, PRESCRIBED_DEBUG_VERSION, PrescribedCardsGenerator;
|
|
1894
1984
|
var init_prescribed = __esm({
|
|
1895
1985
|
"src/core/navigators/generators/prescribed.ts"() {
|
|
1896
1986
|
"use strict";
|
|
@@ -1901,9 +1991,12 @@ var init_prescribed = __esm({
|
|
|
1901
1991
|
DEFAULT_MAX_SUPPORT_PER_RUN = 3;
|
|
1902
1992
|
DEFAULT_HIERARCHY_DEPTH = 2;
|
|
1903
1993
|
DEFAULT_MIN_COUNT = 3;
|
|
1994
|
+
DEFAULT_PRACTICE_MIN_COUNT = 3;
|
|
1995
|
+
DEFAULT_MAX_PRACTICE_PER_RUN = 4;
|
|
1904
1996
|
BASE_TARGET_SCORE = 1;
|
|
1905
1997
|
BASE_SUPPORT_SCORE = 0.8;
|
|
1906
1998
|
DISCOVERED_SUPPORT_SCORE = 12;
|
|
1999
|
+
BASE_PRACTICE_SCORE = 1;
|
|
1907
2000
|
MAX_TARGET_MULTIPLIER = 8;
|
|
1908
2001
|
MAX_SUPPORT_MULTIPLIER = 4;
|
|
1909
2002
|
PRESCRIBED_DEBUG_VERSION = "testversion-prescribed-v3";
|
|
@@ -2011,7 +2104,18 @@ var init_prescribed = __esm({
|
|
|
2011
2104
|
courseId,
|
|
2012
2105
|
emittedIds
|
|
2013
2106
|
);
|
|
2014
|
-
|
|
2107
|
+
const practiceCards = this.buildPracticeCards({
|
|
2108
|
+
group,
|
|
2109
|
+
courseId,
|
|
2110
|
+
emittedIds,
|
|
2111
|
+
cardsByTag,
|
|
2112
|
+
hierarchyConfigs,
|
|
2113
|
+
userTagElo,
|
|
2114
|
+
userGlobalElo,
|
|
2115
|
+
activeIds,
|
|
2116
|
+
seenIds
|
|
2117
|
+
});
|
|
2118
|
+
emitted.push(...directCards, ...supportCards, ...discoveredSupportCards, ...practiceCards);
|
|
2015
2119
|
}
|
|
2016
2120
|
const hintSummary = this.buildSupportHintSummary(groupRuntimes);
|
|
2017
2121
|
const hints = Object.keys(hintSummary.boostTags).length > 0 ? {
|
|
@@ -2039,6 +2143,7 @@ var init_prescribed = __esm({
|
|
|
2039
2143
|
const surfacedByGroup = /* @__PURE__ */ new Map();
|
|
2040
2144
|
for (const card of finalCards) {
|
|
2041
2145
|
const prov = card.provenance[0];
|
|
2146
|
+
if (prov?.reason.includes("mode=practice")) continue;
|
|
2042
2147
|
const groupId = prov?.reason.match(/group=([^;]+)/)?.[1];
|
|
2043
2148
|
const mode = prov?.reason.includes("mode=support") ? "supportIds" : "targetIds";
|
|
2044
2149
|
if (!groupId) continue;
|
|
@@ -2108,7 +2213,12 @@ var init_prescribed = __esm({
|
|
|
2108
2213
|
enabled: raw.hierarchyWalk?.enabled !== false,
|
|
2109
2214
|
maxDepth: typeof raw.hierarchyWalk?.maxDepth === "number" ? raw.hierarchyWalk.maxDepth : DEFAULT_HIERARCHY_DEPTH
|
|
2110
2215
|
},
|
|
2111
|
-
retireOnEncounter: raw.retireOnEncounter !== false
|
|
2216
|
+
retireOnEncounter: raw.retireOnEncounter !== false,
|
|
2217
|
+
practiceTagPatterns: dedupe(
|
|
2218
|
+
Array.isArray(raw.practiceTagPatterns) ? raw.practiceTagPatterns.filter((v) => typeof v === "string") : []
|
|
2219
|
+
),
|
|
2220
|
+
practiceMinCount: typeof raw.practiceMinCount === "number" ? raw.practiceMinCount : DEFAULT_PRACTICE_MIN_COUNT,
|
|
2221
|
+
maxPracticeCardsPerRun: typeof raw.maxPracticeCardsPerRun === "number" ? raw.maxPracticeCardsPerRun : DEFAULT_MAX_PRACTICE_PER_RUN
|
|
2112
2222
|
})).filter((g) => g.targetCardIds.length > 0);
|
|
2113
2223
|
return { groups };
|
|
2114
2224
|
} catch {
|
|
@@ -2331,6 +2441,92 @@ var init_prescribed = __esm({
|
|
|
2331
2441
|
}
|
|
2332
2442
|
return cards;
|
|
2333
2443
|
}
|
|
2444
|
+
/**
|
|
2445
|
+
* Emit drill cards for *unlocked-but-under-practiced* skills.
|
|
2446
|
+
*
|
|
2447
|
+
* For each course tag matching the group's `practiceTagPatterns` that is both
|
|
2448
|
+
* unlocked (all hierarchy prerequisites met — i.e. the learner has been
|
|
2449
|
+
* introduced to it) and under-practiced (per-tag attempt count below
|
|
2450
|
+
* `practiceMinCount`), this resolves cards carrying that tag and emits them
|
|
2451
|
+
* into the candidate pool. It exists because global-ELO retrieval
|
|
2452
|
+
* systematically fails to fetch the (low-ELO) drill cards for a
|
|
2453
|
+
* freshly-introduced skill — putting them in the pool here lets the pipeline's
|
|
2454
|
+
* scoring + the durable per-skill boost order them. Ordering/emphasis is NOT
|
|
2455
|
+
* this method's job; it only guarantees presence.
|
|
2456
|
+
*
|
|
2457
|
+
* Fully data-driven: the unlock relation comes from the hierarchy config and
|
|
2458
|
+
* practice-status from per-tag ELO. No card-id or tag-namespace hard-coding.
|
|
2459
|
+
*/
|
|
2460
|
+
buildPracticeCards(args) {
|
|
2461
|
+
const {
|
|
2462
|
+
group,
|
|
2463
|
+
courseId,
|
|
2464
|
+
emittedIds,
|
|
2465
|
+
cardsByTag,
|
|
2466
|
+
hierarchyConfigs,
|
|
2467
|
+
userTagElo,
|
|
2468
|
+
userGlobalElo,
|
|
2469
|
+
activeIds,
|
|
2470
|
+
seenIds
|
|
2471
|
+
} = args;
|
|
2472
|
+
const patterns = group.practiceTagPatterns ?? [];
|
|
2473
|
+
if (patterns.length === 0) return [];
|
|
2474
|
+
const practiceMinCount = group.practiceMinCount ?? DEFAULT_PRACTICE_MIN_COUNT;
|
|
2475
|
+
const maxPractice = group.maxPracticeCardsPerRun ?? DEFAULT_MAX_PRACTICE_PER_RUN;
|
|
2476
|
+
const practiceTags = [...cardsByTag.keys()].filter(
|
|
2477
|
+
(tag) => patterns.some((p) => matchesTagPattern(tag, p)) && this.isUnlockedGatedSkill(tag, hierarchyConfigs, userTagElo, userGlobalElo) && (userTagElo[tag]?.count ?? 0) < practiceMinCount
|
|
2478
|
+
);
|
|
2479
|
+
if (practiceTags.length === 0) return [];
|
|
2480
|
+
const practiceCardIds = this.findDiscoveredSupportCards({
|
|
2481
|
+
supportTags: practiceTags,
|
|
2482
|
+
cardsByTag,
|
|
2483
|
+
activeIds,
|
|
2484
|
+
seenIds,
|
|
2485
|
+
excludedIds: emittedIds,
|
|
2486
|
+
limit: maxPractice
|
|
2487
|
+
});
|
|
2488
|
+
if (practiceCardIds.length === 0) return [];
|
|
2489
|
+
logger.info(
|
|
2490
|
+
`[Prescribed] Group '${group.id}' practice: ${practiceTags.length} unlocked under-practiced skill(s), emitting ${practiceCardIds.length} drill card(s)`
|
|
2491
|
+
);
|
|
2492
|
+
const cards = [];
|
|
2493
|
+
for (const cardId of practiceCardIds) {
|
|
2494
|
+
emittedIds.add(cardId);
|
|
2495
|
+
cards.push({
|
|
2496
|
+
cardId,
|
|
2497
|
+
courseId,
|
|
2498
|
+
score: BASE_PRACTICE_SCORE,
|
|
2499
|
+
provenance: [
|
|
2500
|
+
{
|
|
2501
|
+
strategy: "prescribed",
|
|
2502
|
+
strategyName: this.strategyName || this.name,
|
|
2503
|
+
strategyId: this.strategyId || "NAVIGATION_STRATEGY-prescribed",
|
|
2504
|
+
action: "generated",
|
|
2505
|
+
score: BASE_PRACTICE_SCORE,
|
|
2506
|
+
reason: `mode=practice;group=${group.id};underPracticedSkills=${practiceTags.length};practiceTags=${practiceTags.slice(0, 8).join("|")}${practiceTags.length > 8 ? "|\u2026" : ""};testversion=${PRESCRIBED_DEBUG_VERSION}`
|
|
2507
|
+
}
|
|
2508
|
+
]
|
|
2509
|
+
});
|
|
2510
|
+
}
|
|
2511
|
+
return cards;
|
|
2512
|
+
}
|
|
2513
|
+
/**
|
|
2514
|
+
* True for a skill that was *gated and is now reached*: it has at least one
|
|
2515
|
+
* declared hierarchy prerequisite set, and every set is fully satisfied by the
|
|
2516
|
+
* learner's per-tag ELO. This deliberately EXCLUDES tags with no prerequisites
|
|
2517
|
+
* — an ungated tag was never "introduced" in the curricular sense, so it isn't
|
|
2518
|
+
* a post-intro drill target (e.g. whole-word spelling tags that share the
|
|
2519
|
+
* `gpc:exercise:*` prefix but have no intro gate). Those are left to normal
|
|
2520
|
+
* ELO retrieval. This is the precise population the retrieval gap strands:
|
|
2521
|
+
* just-unlocked, low-ELO skills.
|
|
2522
|
+
*/
|
|
2523
|
+
isUnlockedGatedSkill(tag, hierarchyConfigs, userTagElo, userGlobalElo) {
|
|
2524
|
+
const prereqSets = hierarchyConfigs.map((hierarchy) => hierarchy.prerequisites[tag]).filter((prereqs) => Array.isArray(prereqs) && prereqs.length > 0);
|
|
2525
|
+
if (prereqSets.length === 0) return false;
|
|
2526
|
+
return prereqSets.every(
|
|
2527
|
+
(prereqs) => prereqs.every((pr) => this.isPrerequisiteMet(pr, userTagElo[pr.tag], userGlobalElo))
|
|
2528
|
+
);
|
|
2529
|
+
}
|
|
2334
2530
|
findSupportCardsByTags(group, tagsByCard, supportTags) {
|
|
2335
2531
|
if (supportTags.length === 0) {
|
|
2336
2532
|
return [];
|
|
@@ -4125,7 +4321,7 @@ function logResultCards(cards) {
|
|
|
4125
4321
|
for (let i = 0; i < cards.length; i++) {
|
|
4126
4322
|
const c = cards[i];
|
|
4127
4323
|
const tags = c.tags?.slice(0, 3).join(", ") || "";
|
|
4128
|
-
const filters = c.provenance.filter((p) => p.strategy === "hierarchyDefinition" || p.strategy === "priorityDefinition" || p.strategy === "interferenceFilter" || p.strategy === "letterGating" || p.strategy === "ephemeralHint").map((p) => {
|
|
4324
|
+
const filters = c.provenance.filter((p) => p.strategy === "hierarchyDefinition" || p.strategy === "priorityDefinition" || p.strategy === "interferenceFilter" || p.strategy === "letterGating" || p.strategy === "ephemeralHint" || p.strategy === "diversityRerank").map((p) => {
|
|
4129
4325
|
const arrow = p.action === "boosted" ? "\u2191" : p.action === "penalized" ? "\u2193" : "=";
|
|
4130
4326
|
return `${p.strategyName}${arrow}${p.score.toFixed(2)}`;
|
|
4131
4327
|
}).join(" | ");
|
|
@@ -4156,6 +4352,7 @@ var init_Pipeline = __esm({
|
|
|
4156
4352
|
init_logger();
|
|
4157
4353
|
init_orchestration();
|
|
4158
4354
|
init_PipelineDebugger();
|
|
4355
|
+
init_diversityRerank();
|
|
4159
4356
|
VERBOSE_RESULTS = true;
|
|
4160
4357
|
Pipeline = class extends ContentNavigator {
|
|
4161
4358
|
generator;
|
|
@@ -4329,6 +4526,7 @@ var init_Pipeline = __esm({
|
|
|
4329
4526
|
this._ephemeralHints = null;
|
|
4330
4527
|
cards = this.applyHints(cards, hints, allCardsBeforeFiltering);
|
|
4331
4528
|
}
|
|
4529
|
+
cards = diversityRerank(cards);
|
|
4332
4530
|
cards.sort((a, b) => b.score - a.score);
|
|
4333
4531
|
const tFilter = performance.now();
|
|
4334
4532
|
const result = cards.slice(0, limit);
|
|
@@ -4897,6 +5095,7 @@ var init_3 = __esm({
|
|
|
4897
5095
|
"./PipelineAssembler.ts": () => Promise.resolve().then(() => (init_PipelineAssembler(), PipelineAssembler_exports)),
|
|
4898
5096
|
"./PipelineDebugger.ts": () => Promise.resolve().then(() => (init_PipelineDebugger(), PipelineDebugger_exports)),
|
|
4899
5097
|
"./defaults.ts": () => Promise.resolve().then(() => (init_defaults(), defaults_exports)),
|
|
5098
|
+
"./diversityRerank.ts": () => Promise.resolve().then(() => (init_diversityRerank(), diversityRerank_exports)),
|
|
4900
5099
|
"./filters/WeightedFilter.ts": () => Promise.resolve().then(() => (init_WeightedFilter(), WeightedFilter_exports)),
|
|
4901
5100
|
"./filters/eloDistance.ts": () => Promise.resolve().then(() => (init_eloDistance(), eloDistance_exports)),
|
|
4902
5101
|
"./filters/hierarchyDefinition.ts": () => Promise.resolve().then(() => (init_hierarchyDefinition(), hierarchyDefinition_exports)),
|
|
@@ -4922,9 +5121,12 @@ var init_3 = __esm({
|
|
|
4922
5121
|
var navigators_exports = {};
|
|
4923
5122
|
__export(navigators_exports, {
|
|
4924
5123
|
ContentNavigator: () => ContentNavigator,
|
|
5124
|
+
DIVERSITY_FLOOR: () => DIVERSITY_FLOOR,
|
|
5125
|
+
DIVERSITY_STRENGTH: () => DIVERSITY_STRENGTH,
|
|
4925
5126
|
NavigatorRole: () => NavigatorRole,
|
|
4926
5127
|
NavigatorRoles: () => NavigatorRoles,
|
|
4927
5128
|
Navigators: () => Navigators,
|
|
5129
|
+
diversityRerank: () => diversityRerank,
|
|
4928
5130
|
getCardOrigin: () => getCardOrigin,
|
|
4929
5131
|
getRegisteredNavigator: () => getRegisteredNavigator,
|
|
4930
5132
|
getRegisteredNavigatorNames: () => getRegisteredNavigatorNames,
|
|
@@ -5008,6 +5210,7 @@ var navigatorRegistry, Navigators, NavigatorRole, NavigatorRoles, ContentNavigat
|
|
|
5008
5210
|
var init_navigators = __esm({
|
|
5009
5211
|
"src/core/navigators/index.ts"() {
|
|
5010
5212
|
"use strict";
|
|
5213
|
+
init_diversityRerank();
|
|
5011
5214
|
init_PipelineDebugger();
|
|
5012
5215
|
init_logger();
|
|
5013
5216
|
init_();
|
|
@@ -8031,6 +8234,8 @@ var init_core = __esm({
|
|
|
8031
8234
|
init_core();
|
|
8032
8235
|
export {
|
|
8033
8236
|
ContentNavigator,
|
|
8237
|
+
DIVERSITY_FLOOR,
|
|
8238
|
+
DIVERSITY_STRENGTH,
|
|
8034
8239
|
DocType,
|
|
8035
8240
|
DocTypePrefixes,
|
|
8036
8241
|
GuestUsername,
|
|
@@ -8047,6 +8252,7 @@ export {
|
|
|
8047
8252
|
computeSpread,
|
|
8048
8253
|
computeStrategyGradient,
|
|
8049
8254
|
createOrchestrationContext,
|
|
8255
|
+
diversityRerank,
|
|
8050
8256
|
docIsDeleted,
|
|
8051
8257
|
getCardHistoryID,
|
|
8052
8258
|
getCardOrigin,
|