mirror of
https://github.com/Youzini-afk/ST-Bionic-Memory-Ecology.git
synced 2026-06-13 18:31:16 +08:00
feat: update smart trigger and graph retrieval
This commit is contained in:
76
tests/graph-retrieval.mjs
Normal file
76
tests/graph-retrieval.mjs
Normal file
@@ -0,0 +1,76 @@
|
||||
import assert from "node:assert/strict";
|
||||
import { diffuseAndRank } from "../diffusion.js";
|
||||
import {
|
||||
addEdge,
|
||||
addNode,
|
||||
buildTemporalAdjacencyMap,
|
||||
createEdge,
|
||||
createEmptyGraph,
|
||||
createNode,
|
||||
invalidateEdge,
|
||||
} from "../graph.js";
|
||||
|
||||
const graph = createEmptyGraph();
|
||||
|
||||
const event1 = createNode({
|
||||
type: "event",
|
||||
seq: 1,
|
||||
fields: { summary: "初始事件" },
|
||||
importance: 5,
|
||||
});
|
||||
const event2 = createNode({
|
||||
type: "event",
|
||||
seq: 2,
|
||||
fields: { summary: "后续事件" },
|
||||
importance: 6,
|
||||
});
|
||||
const character = createNode({
|
||||
type: "character",
|
||||
seq: 2,
|
||||
fields: { name: "艾琳", state: "警觉" },
|
||||
importance: 7,
|
||||
});
|
||||
|
||||
addNode(graph, event1);
|
||||
addNode(graph, event2);
|
||||
addNode(graph, character);
|
||||
|
||||
const currentEdge = createEdge({
|
||||
fromId: event2.id,
|
||||
toId: character.id,
|
||||
relation: "involved_in",
|
||||
strength: 0.9,
|
||||
});
|
||||
assert.ok(addEdge(graph, currentEdge));
|
||||
|
||||
const historicalEdge = createEdge({
|
||||
fromId: event1.id,
|
||||
toId: character.id,
|
||||
relation: "involved_in",
|
||||
strength: 0.4,
|
||||
});
|
||||
assert.ok(addEdge(graph, historicalEdge));
|
||||
invalidateEdge(historicalEdge);
|
||||
|
||||
const replacementEdge = createEdge({
|
||||
fromId: event1.id,
|
||||
toId: character.id,
|
||||
relation: "involved_in",
|
||||
strength: 0.7,
|
||||
});
|
||||
assert.ok(addEdge(graph, replacementEdge));
|
||||
assert.notEqual(replacementEdge.id, historicalEdge.id);
|
||||
|
||||
const adjacencyMap = buildTemporalAdjacencyMap(graph);
|
||||
const event1Neighbors = adjacencyMap.get(event1.id) || [];
|
||||
assert.equal(event1Neighbors.length, 1);
|
||||
assert.equal(event1Neighbors[0].targetId, character.id);
|
||||
assert.equal(event1Neighbors[0].strength, 0.7);
|
||||
|
||||
const diffusion = diffuseAndRank(adjacencyMap, [
|
||||
{ id: event2.id, energy: 1 },
|
||||
{ id: event2.id, energy: 0.5 },
|
||||
]);
|
||||
assert.ok(diffusion.some((item) => item.nodeId === character.id));
|
||||
|
||||
console.log("graph-retrieval tests passed");
|
||||
Reference in New Issue
Block a user