@scotthuang/engram 0.9.3 → 0.9.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.
Files changed (61) hide show
  1. package/dist/{src/index.js → index.js} +38 -2
  2. package/dist/{src/index.js.map → index.js.map} +1 -1
  3. package/package.json +4 -4
  4. package/dist/src/__tests__/bm25.test.d.ts +0 -1
  5. package/dist/src/__tests__/bm25.test.js +0 -198
  6. package/dist/src/__tests__/bm25.test.js.map +0 -1
  7. package/dist/src/__tests__/config.test.d.ts +0 -1
  8. package/dist/src/__tests__/config.test.js +0 -30
  9. package/dist/src/__tests__/config.test.js.map +0 -1
  10. package/dist/src/__tests__/face-auto-dryrun.d.ts +0 -12
  11. package/dist/src/__tests__/face-auto-dryrun.js +0 -166
  12. package/dist/src/__tests__/face-auto-dryrun.js.map +0 -1
  13. package/dist/src/__tests__/profile.test.d.ts +0 -1
  14. package/dist/src/__tests__/profile.test.js +0 -174
  15. package/dist/src/__tests__/profile.test.js.map +0 -1
  16. package/dist/src/__tests__/promotion-dryrun.d.ts +0 -6
  17. package/dist/src/__tests__/promotion-dryrun.js +0 -105
  18. package/dist/src/__tests__/promotion-dryrun.js.map +0 -1
  19. package/dist/src/__tests__/recall.test.d.ts +0 -1
  20. package/dist/src/__tests__/recall.test.js +0 -162
  21. package/dist/src/__tests__/recall.test.js.map +0 -1
  22. /package/dist/{src/bm25.d.ts → bm25.d.ts} +0 -0
  23. /package/dist/{src/bm25.js → bm25.js} +0 -0
  24. /package/dist/{src/bm25.js.map → bm25.js.map} +0 -0
  25. /package/dist/{src/config.d.ts → config.d.ts} +0 -0
  26. /package/dist/{src/config.js → config.js} +0 -0
  27. /package/dist/{src/config.js.map → config.js.map} +0 -0
  28. /package/dist/{face/src/face-api.d.ts → face-api.d.ts} +0 -0
  29. /package/dist/{face/src/face-api.js → face-api.js} +0 -0
  30. /package/dist/{face/src/face-api.js.map → face-api.js.map} +0 -0
  31. /package/dist/{face/src/face-store.d.ts → face-store.d.ts} +0 -0
  32. /package/dist/{face/src/face-store.js → face-store.js} +0 -0
  33. /package/dist/{face/src/face-store.js.map → face-store.js.map} +0 -0
  34. /package/dist/{src/image-store.d.ts → image-store.d.ts} +0 -0
  35. /package/dist/{src/image-store.js → image-store.js} +0 -0
  36. /package/dist/{src/image-store.js.map → image-store.js.map} +0 -0
  37. /package/dist/{src/index.d.ts → index.d.ts} +0 -0
  38. /package/dist/{src/logger.d.ts → logger.d.ts} +0 -0
  39. /package/dist/{src/logger.js → logger.js} +0 -0
  40. /package/dist/{src/logger.js.map → logger.js.map} +0 -0
  41. /package/dist/{src/profile.d.ts → profile.d.ts} +0 -0
  42. /package/dist/{src/profile.js → profile.js} +0 -0
  43. /package/dist/{src/profile.js.map → profile.js.map} +0 -0
  44. /package/dist/{src/promotion.d.ts → promotion.d.ts} +0 -0
  45. /package/dist/{src/promotion.js → promotion.js} +0 -0
  46. /package/dist/{src/promotion.js.map → promotion.js.map} +0 -0
  47. /package/dist/{src/recall.d.ts → recall.d.ts} +0 -0
  48. /package/dist/{src/recall.js → recall.js} +0 -0
  49. /package/dist/{src/recall.js.map → recall.js.map} +0 -0
  50. /package/dist/{src/settle.d.ts → settle.d.ts} +0 -0
  51. /package/dist/{src/settle.js → settle.js} +0 -0
  52. /package/dist/{src/settle.js.map → settle.js.map} +0 -0
  53. /package/dist/{src/vector.d.ts → vector.d.ts} +0 -0
  54. /package/dist/{src/vector.js → vector.js} +0 -0
  55. /package/dist/{src/vector.js.map → vector.js.map} +0 -0
  56. /package/dist/{face/src/voice-identify.d.ts → voice-identify.d.ts} +0 -0
  57. /package/dist/{face/src/voice-identify.js → voice-identify.js} +0 -0
  58. /package/dist/{face/src/voice-identify.js.map → voice-identify.js.map} +0 -0
  59. /package/dist/{face/src/voice-store.d.ts → voice-store.d.ts} +0 -0
  60. /package/dist/{face/src/voice-store.js → voice-store.js} +0 -0
  61. /package/dist/{face/src/voice-store.js.map → voice-store.js.map} +0 -0
@@ -1,162 +0,0 @@
1
- import { describe, it, expect } from "vitest";
2
- // 纯函数测试,不依赖外部模块
3
- describe("Recall helpers", () => {
4
- describe("temporalDecay", () => {
5
- function temporalDecay(score, ageInDays, halfLifeDays) {
6
- if (ageInDays <= 0)
7
- return score;
8
- const lambda = Math.log(2) / halfLifeDays;
9
- return score * Math.exp(-lambda * ageInDays);
10
- }
11
- it("returns original score for 0 days", () => {
12
- expect(temporalDecay(1.0, 0, 30)).toBeCloseTo(1.0);
13
- });
14
- it("returns ~50% at half-life", () => {
15
- expect(temporalDecay(1.0, 30, 30)).toBeCloseTo(0.5, 1);
16
- });
17
- it("returns ~84% at 7 days with 30-day half-life", () => {
18
- expect(temporalDecay(1.0, 7, 30)).toBeCloseTo(0.846, 2);
19
- });
20
- it("returns ~12.5% at 90 days with 30-day half-life", () => {
21
- expect(temporalDecay(1.0, 90, 30)).toBeCloseTo(0.125, 2);
22
- });
23
- it("shorter half-life decays faster", () => {
24
- const short = temporalDecay(1.0, 7, 7);
25
- const long = temporalDecay(1.0, 7, 30);
26
- expect(short).toBeLessThan(long);
27
- });
28
- });
29
- describe("jaccard", () => {
30
- function jaccard(a, b) {
31
- const setA = new Set(a.split(""));
32
- const setB = new Set(b.split(""));
33
- const intersection = new Set([...setA].filter(x => setB.has(x)));
34
- const union = new Set([...setA, ...setB]);
35
- return union.size === 0 ? 0 : intersection.size / union.size;
36
- }
37
- it("returns 1.0 for identical strings", () => {
38
- expect(jaccard("abc", "abc")).toBeCloseTo(1.0);
39
- });
40
- it("returns 0.0 for completely different strings", () => {
41
- expect(jaccard("abc", "xyz")).toBeCloseTo(0.0);
42
- });
43
- it("returns partial similarity for overlapping strings", () => {
44
- const sim = jaccard("abc", "abd");
45
- expect(sim).toBeGreaterThan(0);
46
- expect(sim).toBeLessThan(1);
47
- });
48
- it("handles empty strings", () => {
49
- expect(jaccard("", "")).toBe(0);
50
- expect(jaccard("abc", "")).toBe(0);
51
- });
52
- });
53
- describe("MMR rerank", () => {
54
- function mmrRerank(candidates, lambda = 0.7) {
55
- if (candidates.length <= 1)
56
- return candidates;
57
- const jaccard = (a, b) => {
58
- const setA = new Set(a.split(""));
59
- const setB = new Set(b.split(""));
60
- const intersection = new Set([...setA].filter(x => setB.has(x)));
61
- const union = new Set([...setA, ...setB]);
62
- return union.size === 0 ? 0 : intersection.size / union.size;
63
- };
64
- const selected = [];
65
- const remaining = [...candidates];
66
- remaining.sort((a, b) => b.finalScore - a.finalScore);
67
- selected.push(remaining.shift());
68
- while (remaining.length > 0) {
69
- let bestIdx = -1;
70
- let bestMmr = -Infinity;
71
- for (let i = 0; i < remaining.length; i++) {
72
- const relevance = remaining[i].finalScore;
73
- const maxSim = Math.max(...selected.map(s => jaccard(remaining[i].text, s.text)));
74
- const mmrScore = lambda * relevance - (1 - lambda) * maxSim;
75
- if (mmrScore > bestMmr) {
76
- bestMmr = mmrScore;
77
- bestIdx = i;
78
- }
79
- }
80
- if (bestIdx >= 0) {
81
- selected.push(remaining.splice(bestIdx, 1)[0]);
82
- }
83
- else
84
- break;
85
- }
86
- return selected;
87
- }
88
- it("returns single item as-is", () => {
89
- const candidates = [{ text: "hello", finalScore: 0.9 }];
90
- expect(mmrRerank(candidates)).toHaveLength(1);
91
- });
92
- it("returns empty for empty input", () => {
93
- expect(mmrRerank([])).toHaveLength(0);
94
- });
95
- it("promotes diverse results over duplicates", () => {
96
- const candidates = [
97
- { text: "在体育西吃了潮汕牛肉火锅", finalScore: 0.92 },
98
- { text: "在天河吃了潮汕牛肉火锅", finalScore: 0.89 },
99
- { text: "在越秀吃了日本料理", finalScore: 0.70 },
100
- ];
101
- const reranked = mmrRerank(candidates, 0.7);
102
- expect(reranked).toHaveLength(3);
103
- // 第一条应该还是分数最高的
104
- expect(reranked[0].finalScore).toBe(0.92);
105
- });
106
- it("lambda=1.0 is pure relevance (no diversity)", () => {
107
- const candidates = [
108
- { text: "aaa", finalScore: 0.9 },
109
- { text: "aaa", finalScore: 0.8 },
110
- { text: "bbb", finalScore: 0.5 },
111
- ];
112
- const reranked = mmrRerank(candidates, 1.0);
113
- expect(reranked.map(r => r.finalScore)).toEqual([0.9, 0.8, 0.5]);
114
- });
115
- });
116
- describe("dedup", () => {
117
- function jaccard(a, b) {
118
- const setA = new Set(a.split(""));
119
- const setB = new Set(b.split(""));
120
- const intersection = new Set([...setA].filter(x => setB.has(x)));
121
- const union = new Set([...setA, ...setB]);
122
- return union.size === 0 ? 0 : intersection.size / union.size;
123
- }
124
- function dedup(results) {
125
- const sorted = [...results].sort((a, b) => b.score - a.score);
126
- const unique = [];
127
- for (const item of sorted) {
128
- const isDup = unique.some(u => jaccard(item.text, u.text) > 0.7);
129
- if (!isDup)
130
- unique.push(item);
131
- }
132
- return unique;
133
- }
134
- it("removes near-duplicates", () => {
135
- const results = [
136
- { text: "在体育西吃了潮汕牛肉火锅", score: 0.92 },
137
- { text: "在体育西吃潮汕牛肉火锅", score: 0.85 },
138
- { text: "在天河城看到特斯拉展厅", score: 0.70 },
139
- ];
140
- const deduped = dedup(results);
141
- expect(deduped.length).toBeLessThan(3);
142
- });
143
- it("keeps distinct results", () => {
144
- const results = [
145
- { text: "今天天气很好", score: 0.9 },
146
- { text: "股票涨了", score: 0.8 },
147
- { text: "新开了家餐厅", score: 0.7 },
148
- ];
149
- expect(dedup(results)).toHaveLength(3);
150
- });
151
- it("keeps higher-scored duplicate", () => {
152
- const results = [
153
- { text: "abcde fghij", score: 0.9 },
154
- { text: "abcde fghij", score: 0.7 },
155
- ];
156
- const deduped = dedup(results);
157
- expect(deduped).toHaveLength(1);
158
- expect(deduped[0].score).toBe(0.9);
159
- });
160
- });
161
- });
162
- //# sourceMappingURL=recall.test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"recall.test.js","sourceRoot":"","sources":["../../../src/__tests__/recall.test.ts"],"names":[],"mappings":"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"}
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes
File without changes