@danielzfliu/memory 1.0.2 → 2.0.0

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/server.js CHANGED
@@ -7,9 +7,22 @@ exports.createServer = createServer;
7
7
  const express_1 = __importDefault(require("express"));
8
8
  const store_1 = require("./store");
9
9
  const rag_1 = require("./rag");
10
- const types_1 = require("./types");
10
+ const config_1 = require("./config");
11
+ function isStringArray(value) {
12
+ return Array.isArray(value) && value.every((item) => typeof item === "string");
13
+ }
14
+ function isPositiveInteger(value) {
15
+ return Number.isInteger(value) && typeof value === "number" && value > 0;
16
+ }
17
+ function validateTitle(value, allowNull = false) {
18
+ if (value === undefined)
19
+ return undefined;
20
+ if (allowNull && value === null)
21
+ return null;
22
+ return typeof value === "string" ? value : undefined;
23
+ }
11
24
  function createServer(config = {}) {
12
- const resolvedConfig = { ...types_1.DEFAULT_MEMORY_CONFIG, ...config };
25
+ const resolvedConfig = (0, config_1.resolveConfig)(config);
13
26
  const app = (0, express_1.default)();
14
27
  app.use(express_1.default.json());
15
28
  const store = new store_1.PieceStore(resolvedConfig);
@@ -34,15 +47,48 @@ function createServer(config = {}) {
34
47
  }
35
48
  next();
36
49
  });
50
+ // GET /collections — List all collections
51
+ app.get("/collections", async (_req, res) => {
52
+ try {
53
+ const collections = await store.listCollections();
54
+ res.json({ collections });
55
+ }
56
+ catch (err) {
57
+ res.status(500).json({ error: String(err) });
58
+ }
59
+ });
60
+ // DELETE /collections/:name — Delete a collection
61
+ app.delete("/collections/:name", async (req, res) => {
62
+ try {
63
+ const { name } = req.params;
64
+ await store.deleteCollection(name);
65
+ res.status(204).send();
66
+ }
67
+ catch (err) {
68
+ res.status(500).json({ error: String(err) });
69
+ }
70
+ });
37
71
  // POST /pieces — Add a piece
38
72
  app.post("/pieces", async (req, res) => {
39
73
  try {
40
- const { content, tags } = req.body;
74
+ const { content, title, tags, collection } = req.body;
41
75
  if (!content || typeof content !== "string") {
42
76
  res.status(400).json({ error: "content (string) is required" });
43
77
  return;
44
78
  }
45
- const piece = await store.addPiece(content, tags ?? []);
79
+ if (title !== undefined && typeof title !== "string") {
80
+ res.status(400).json({ error: "title must be a string when provided" });
81
+ return;
82
+ }
83
+ if (tags !== undefined && !isStringArray(tags)) {
84
+ res.status(400).json({ error: "tags must be an array of strings when provided" });
85
+ return;
86
+ }
87
+ if (collection !== undefined && typeof collection !== "string") {
88
+ res.status(400).json({ error: "collection must be a string when provided" });
89
+ return;
90
+ }
91
+ const piece = await store.addPiece(content, tags ?? [], title, collection);
46
92
  res.status(201).json(piece);
47
93
  }
48
94
  catch (err) {
@@ -53,7 +99,8 @@ function createServer(config = {}) {
53
99
  app.get("/pieces/:id", async (req, res) => {
54
100
  try {
55
101
  const { id } = req.params;
56
- const piece = await store.getPiece(id);
102
+ const collection = typeof req.query.collection === "string" ? req.query.collection : undefined;
103
+ const piece = await store.getPiece(id, collection);
57
104
  if (!piece) {
58
105
  res.status(404).json({ error: "Piece not found" });
59
106
  return;
@@ -68,8 +115,25 @@ function createServer(config = {}) {
68
115
  app.put("/pieces/:id", async (req, res) => {
69
116
  try {
70
117
  const { id } = req.params;
71
- const { content, tags } = req.body;
72
- const piece = await store.updatePiece(id, content, tags);
118
+ const { content, title, tags, collection } = req.body;
119
+ if (content !== undefined && typeof content !== "string") {
120
+ res.status(400).json({ error: "content must be a string when provided" });
121
+ return;
122
+ }
123
+ const validatedTitle = validateTitle(title, true);
124
+ if (title !== undefined && validatedTitle === undefined) {
125
+ res.status(400).json({ error: "title must be a string or null when provided" });
126
+ return;
127
+ }
128
+ if (tags !== undefined && !isStringArray(tags)) {
129
+ res.status(400).json({ error: "tags must be an array of strings when provided" });
130
+ return;
131
+ }
132
+ if (collection !== undefined && typeof collection !== "string") {
133
+ res.status(400).json({ error: "collection must be a string when provided" });
134
+ return;
135
+ }
136
+ const piece = await store.updatePiece(id, content, tags, validatedTitle, collection);
73
137
  if (!piece) {
74
138
  res.status(404).json({ error: "Piece not found" });
75
139
  return;
@@ -84,7 +148,8 @@ function createServer(config = {}) {
84
148
  app.delete("/pieces/:id", async (req, res) => {
85
149
  try {
86
150
  const { id } = req.params;
87
- await store.deletePiece(id);
151
+ const collection = typeof req.query.collection === "string" ? req.query.collection : undefined;
152
+ await store.deletePiece(id, collection);
88
153
  res.status(204).send();
89
154
  }
90
155
  catch (err) {
@@ -94,12 +159,28 @@ function createServer(config = {}) {
94
159
  // POST /query — Semantic search
95
160
  app.post("/query", async (req, res) => {
96
161
  try {
97
- const { query, tags, topK } = req.body;
162
+ const { query, tags, topK, useHybridSearch, collection } = req.body;
98
163
  if (!query || typeof query !== "string") {
99
164
  res.status(400).json({ error: "query (string) is required" });
100
165
  return;
101
166
  }
102
- const results = await store.queryPieces(query, { tags, topK });
167
+ if (tags !== undefined && !isStringArray(tags)) {
168
+ res.status(400).json({ error: "tags must be an array of strings when provided" });
169
+ return;
170
+ }
171
+ if (topK !== undefined && !isPositiveInteger(topK)) {
172
+ res.status(400).json({ error: "topK must be a positive integer when provided" });
173
+ return;
174
+ }
175
+ if (useHybridSearch !== undefined && typeof useHybridSearch !== "boolean") {
176
+ res.status(400).json({ error: "useHybridSearch must be a boolean when provided" });
177
+ return;
178
+ }
179
+ if (collection !== undefined && typeof collection !== "string") {
180
+ res.status(400).json({ error: "collection must be a string when provided" });
181
+ return;
182
+ }
183
+ const results = await store.queryPieces(query, { tags, topK, useHybridSearch }, collection);
103
184
  res.json(results);
104
185
  }
105
186
  catch (err) {
@@ -109,12 +190,28 @@ function createServer(config = {}) {
109
190
  // POST /rag — Full RAG query
110
191
  app.post("/rag", async (req, res) => {
111
192
  try {
112
- const { query, tags, topK } = req.body;
193
+ const { query, tags, topK, useHybridSearch, collection } = req.body;
113
194
  if (!query || typeof query !== "string") {
114
195
  res.status(400).json({ error: "query (string) is required" });
115
196
  return;
116
197
  }
117
- const result = await rag.query(query, { tags, topK });
198
+ if (tags !== undefined && !isStringArray(tags)) {
199
+ res.status(400).json({ error: "tags must be an array of strings when provided" });
200
+ return;
201
+ }
202
+ if (topK !== undefined && !isPositiveInteger(topK)) {
203
+ res.status(400).json({ error: "topK must be a positive integer when provided" });
204
+ return;
205
+ }
206
+ if (useHybridSearch !== undefined && typeof useHybridSearch !== "boolean") {
207
+ res.status(400).json({ error: "useHybridSearch must be a boolean when provided" });
208
+ return;
209
+ }
210
+ if (collection !== undefined && typeof collection !== "string") {
211
+ res.status(400).json({ error: "collection must be a string when provided" });
212
+ return;
213
+ }
214
+ const result = await rag.query(query, { tags, topK, useHybridSearch }, collection);
118
215
  res.json(result);
119
216
  }
120
217
  catch (err) {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/dist/store.d.ts CHANGED
@@ -2,15 +2,18 @@ import { Piece, MemoryConfig, QueryOptions, QueryResult } from "./types";
2
2
  export declare class PieceStore {
3
3
  private readonly chromaClient;
4
4
  private readonly embeddingClient;
5
- private collection;
5
+ private readonly collectionCache;
6
+ private initialized;
6
7
  private readonly config;
7
8
  constructor(config?: MemoryConfig);
8
9
  init(): Promise<void>;
9
- private getCollection;
10
- addPiece(content: string, tags: string[]): Promise<Piece>;
11
- getPiece(id: string): Promise<Piece | null>;
12
- deletePiece(id: string): Promise<void>;
13
- updatePiece(id: string, content?: string, tags?: string[]): Promise<Piece | null>;
14
- queryPieces(query: string, options?: QueryOptions): Promise<QueryResult[]>;
10
+ private resolveCollection;
11
+ listCollections(): Promise<string[]>;
12
+ deleteCollection(name: string): Promise<void>;
13
+ addPiece(content: string, tags: string[], title?: string, collection?: string): Promise<Piece>;
14
+ getPiece(id: string, collection?: string): Promise<Piece | null>;
15
+ deletePiece(id: string, collection?: string): Promise<void>;
16
+ updatePiece(id: string, content?: string, tags?: string[], title?: string | null, collection?: string): Promise<Piece | null>;
17
+ queryPieces(query: string, options?: QueryOptions, collection?: string): Promise<QueryResult[]>;
15
18
  }
16
19
  //# sourceMappingURL=store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAGA,OAAO,EACH,KAAK,EACL,YAAY,EAEZ,YAAY,EACZ,WAAW,EACd,MAAM,SAAS,CAAC;AAYjB,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,UAAU,CAA2B;IAC7C,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,MAAM,GAAE,YAAiB;IAS/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAO3B,OAAO,CAAC,aAAa;IAOf,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,OAAO,CAAC,KAAK,CAAC;IAezD,QAAQ,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAgB3C,WAAW,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAKtC,WAAW,CACb,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EAAE,GAChB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IA8BlB,WAAW,CACb,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,YAAiB,GAC3B,OAAO,CAAC,WAAW,EAAE,CAAC;CAiD5B"}
1
+ {"version":3,"file":"store.d.ts","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"AAIA,OAAO,EACH,KAAK,EACL,YAAY,EACZ,YAAY,EACZ,WAAW,EACd,MAAM,SAAS,CAAC;AAwEjB,qBAAa,UAAU;IACnB,OAAO,CAAC,QAAQ,CAAC,YAAY,CAAe;IAC5C,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAkB;IAClD,OAAO,CAAC,QAAQ,CAAC,eAAe,CAAsC;IACtE,OAAO,CAAC,WAAW,CAAS;IAC5B,OAAO,CAAC,QAAQ,CAAC,MAAM,CAAyB;gBAEpC,MAAM,GAAE,YAAiB;IAS/B,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YASb,iBAAiB;IAgBzB,eAAe,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;IAOpC,gBAAgB,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,QAAQ,CAAC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,EAAE,KAAK,CAAC,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,CAAC;IAsB9F,QAAQ,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAmBhE,WAAW,CAAC,EAAE,EAAE,MAAM,EAAE,UAAU,CAAC,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAK3D,WAAW,CACb,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE,MAAM,EAChB,IAAI,CAAC,EAAE,MAAM,EAAE,EACf,KAAK,CAAC,EAAE,MAAM,GAAG,IAAI,EACrB,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,KAAK,GAAG,IAAI,CAAC;IAyClB,WAAW,CACb,KAAK,EAAE,MAAM,EACb,OAAO,GAAE,YAAiB,EAC1B,UAAU,CAAC,EAAE,MAAM,GACpB,OAAO,CAAC,WAAW,EAAE,CAAC;CAyE5B"}
package/dist/store.js CHANGED
@@ -4,105 +4,183 @@ exports.PieceStore = void 0;
4
4
  const chromadb_1 = require("chromadb");
5
5
  const uuid_1 = require("uuid");
6
6
  const embeddings_1 = require("./embeddings");
7
- const types_1 = require("./types");
8
- function toChromaMetadata(tags) {
9
- return { tags };
7
+ const hybrid_1 = require("./hybrid");
8
+ const config_1 = require("./config");
9
+ function toTagMetadataKey(tag) {
10
+ return `tag_${Buffer.from(tag, "utf8").toString("base64url")}`;
11
+ }
12
+ function toChromaMetadata(tags, title) {
13
+ const normalizedTags = normalizeTags(tags);
14
+ const normalizedTitle = normalizeTitle(title);
15
+ return {
16
+ tags: JSON.stringify(normalizedTags),
17
+ ...Object.fromEntries(normalizedTags.map((tag) => [toTagMetadataKey(tag), true])),
18
+ ...(normalizedTitle !== undefined ? { title: normalizedTitle } : {}),
19
+ };
20
+ }
21
+ function normalizeTags(value) {
22
+ if (Array.isArray(value)) {
23
+ return value.filter((tag) => typeof tag === "string");
24
+ }
25
+ if (typeof value === "string") {
26
+ try {
27
+ const parsed = JSON.parse(value);
28
+ return Array.isArray(parsed)
29
+ ? parsed.filter((tag) => typeof tag === "string")
30
+ : [];
31
+ }
32
+ catch {
33
+ return [];
34
+ }
35
+ }
36
+ return [];
37
+ }
38
+ function normalizeTitle(value) {
39
+ return typeof value === "string" ? value : undefined;
10
40
  }
11
41
  function parseTags(metadata) {
12
- return metadata?.tags ?? [];
42
+ return normalizeTags(metadata?.tags);
43
+ }
44
+ function parseTitle(metadata) {
45
+ return normalizeTitle(metadata?.title);
46
+ }
47
+ function toEmbeddingText(content, title) {
48
+ return title ? `${title}\n\n${content}` : content;
49
+ }
50
+ function buildTagWhereClause(tags) {
51
+ if (tags.length === 0) {
52
+ return undefined;
53
+ }
54
+ if (tags.length === 1) {
55
+ return { [toTagMetadataKey(tags[0])]: true };
56
+ }
57
+ return {
58
+ $and: tags.map((tag) => ({
59
+ [toTagMetadataKey(tag)]: true,
60
+ })),
61
+ };
13
62
  }
14
63
  class PieceStore {
15
64
  chromaClient;
16
65
  embeddingClient;
17
- collection = null;
66
+ collectionCache = new Map();
67
+ initialized = false;
18
68
  config;
19
69
  constructor(config = {}) {
20
- this.config = { ...types_1.DEFAULT_MEMORY_CONFIG, ...config };
70
+ this.config = (0, config_1.resolveConfig)(config);
21
71
  this.chromaClient = new chromadb_1.ChromaClient({ path: this.config.chromaUrl });
22
72
  this.embeddingClient = new embeddings_1.EmbeddingClient(this.config.ollamaUrl, this.config.embeddingModel);
23
73
  }
24
74
  async init() {
25
- this.collection = await this.chromaClient.getOrCreateCollection({
75
+ const collection = await this.chromaClient.getOrCreateCollection({
26
76
  name: this.config.collectionName,
27
77
  metadata: { "hnsw:space": "cosine" },
28
78
  });
79
+ this.collectionCache.set(this.config.collectionName, collection);
80
+ this.initialized = true;
29
81
  }
30
- getCollection() {
31
- if (!this.collection) {
82
+ async resolveCollection(name) {
83
+ if (!this.initialized) {
32
84
  throw new Error("PieceStore not initialized. Call init() first.");
33
85
  }
34
- return this.collection;
86
+ const collectionName = name ?? this.config.collectionName;
87
+ let collection = this.collectionCache.get(collectionName);
88
+ if (!collection) {
89
+ collection = await this.chromaClient.getOrCreateCollection({
90
+ name: collectionName,
91
+ metadata: { "hnsw:space": "cosine" },
92
+ });
93
+ this.collectionCache.set(collectionName, collection);
94
+ }
95
+ return collection;
35
96
  }
36
- async addPiece(content, tags) {
37
- const collection = this.getCollection();
97
+ async listCollections() {
98
+ if (!this.initialized) {
99
+ throw new Error("PieceStore not initialized. Call init() first.");
100
+ }
101
+ return this.chromaClient.listCollections();
102
+ }
103
+ async deleteCollection(name) {
104
+ if (!this.initialized) {
105
+ throw new Error("PieceStore not initialized. Call init() first.");
106
+ }
107
+ await this.chromaClient.deleteCollection({ name });
108
+ this.collectionCache.delete(name);
109
+ }
110
+ async addPiece(content, tags, title, collection) {
111
+ const col = await this.resolveCollection(collection);
38
112
  const id = (0, uuid_1.v4)();
39
- const embedding = await this.embeddingClient.embed(content);
40
- await collection.add({
113
+ const embedding = await this.embeddingClient.embed(toEmbeddingText(content, title));
114
+ await col.add({
41
115
  ids: [id],
42
116
  embeddings: [embedding],
43
117
  documents: [content],
44
- metadatas: [toChromaMetadata(tags)],
118
+ metadatas: [toChromaMetadata(tags, title)],
45
119
  });
46
- return { id, content, tags };
120
+ return {
121
+ id,
122
+ content,
123
+ ...(title !== undefined ? { title } : {}),
124
+ tags,
125
+ };
47
126
  }
48
- async getPiece(id) {
49
- const collection = this.getCollection();
50
- const result = await collection.get({
127
+ async getPiece(id, collection) {
128
+ const col = await this.resolveCollection(collection);
129
+ const result = await col.get({
51
130
  ids: [id],
52
131
  include: [chromadb_1.IncludeEnum.Documents, chromadb_1.IncludeEnum.Metadatas],
53
132
  });
54
133
  if (!result.ids.length)
55
134
  return null;
135
+ const title = parseTitle(result.metadatas[0]);
56
136
  return {
57
137
  id: result.ids[0],
58
138
  content: result.documents[0] ?? "",
139
+ ...(title !== undefined ? { title } : {}),
59
140
  tags: parseTags(result.metadatas[0]),
60
141
  };
61
142
  }
62
- async deletePiece(id) {
63
- const collection = this.getCollection();
64
- await collection.delete({ ids: [id] });
143
+ async deletePiece(id, collection) {
144
+ const col = await this.resolveCollection(collection);
145
+ await col.delete({ ids: [id] });
65
146
  }
66
- async updatePiece(id, content, tags) {
67
- const collection = this.getCollection();
68
- const existing = await this.getPiece(id);
147
+ async updatePiece(id, content, tags, title, collection) {
148
+ const col = await this.resolveCollection(collection);
149
+ const existing = await this.getPiece(id, collection);
69
150
  if (!existing)
70
151
  return null;
71
152
  const newContent = content ?? existing.content;
72
153
  const newTags = tags ?? existing.tags;
154
+ const newTitle = title === undefined ? existing.title : title ?? undefined;
73
155
  const updateData = {
74
156
  ids: [id],
75
- metadatas: [toChromaMetadata(newTags)],
157
+ metadatas: [toChromaMetadata(newTags, newTitle)],
76
158
  };
77
159
  if (content !== undefined) {
78
160
  updateData.documents = [newContent];
161
+ }
162
+ if (content !== undefined || title !== undefined) {
79
163
  updateData.embeddings = [
80
- await this.embeddingClient.embed(newContent),
164
+ await this.embeddingClient.embed(toEmbeddingText(newContent, newTitle)),
81
165
  ];
82
166
  }
83
- await collection.update(updateData);
84
- return { id, content: newContent, tags: newTags };
167
+ await col.update(updateData);
168
+ return {
169
+ id,
170
+ content: newContent,
171
+ ...(newTitle !== undefined ? { title: newTitle } : {}),
172
+ tags: newTags,
173
+ };
85
174
  }
86
- async queryPieces(query, options = {}) {
87
- const collection = this.getCollection();
88
- const { tags, topK = 10 } = options;
175
+ async queryPieces(query, options = {}, collection) {
176
+ const col = await this.resolveCollection(collection);
177
+ const { tags, topK = 10, useHybridSearch = false } = options;
89
178
  const queryEmbedding = await this.embeddingClient.embed(query);
90
- let whereClause;
91
- if (tags && tags.length > 0) {
92
- if (tags.length === 1) {
93
- whereClause = { tags: { $contains: tags[0] } };
94
- }
95
- else {
96
- whereClause = {
97
- $and: tags.map((tag) => ({
98
- tags: { $contains: tag },
99
- })),
100
- };
101
- }
102
- }
103
- const results = await collection.query({
179
+ const whereClause = buildTagWhereClause(tags ?? []);
180
+ const fetchK = useHybridSearch ? topK * 3 : topK;
181
+ const results = await col.query({
104
182
  queryEmbeddings: [queryEmbedding],
105
- nResults: topK,
183
+ nResults: fetchK,
106
184
  where: whereClause,
107
185
  include: [
108
186
  chromadb_1.IncludeEnum.Documents,
@@ -110,22 +188,44 @@ class PieceStore {
110
188
  chromadb_1.IncludeEnum.Distances,
111
189
  ],
112
190
  });
113
- const queryResults = [];
114
191
  const ids = results.ids[0] ?? [];
115
192
  const documents = results.documents[0] ?? [];
116
193
  const metadatas = results.metadatas[0] ?? [];
117
194
  const distances = results.distances?.[0] ?? [];
195
+ const queryResults = [];
118
196
  for (let i = 0; i < ids.length; i++) {
197
+ const title = parseTitle(metadatas[i]);
119
198
  queryResults.push({
120
199
  piece: {
121
200
  id: ids[i],
122
201
  content: documents[i] ?? "",
202
+ ...(title !== undefined ? { title } : {}),
123
203
  tags: parseTags(metadatas[i]),
124
204
  },
125
205
  score: 1 - (distances[i] ?? 0), // cosine distance → similarity
126
206
  });
127
207
  }
128
- return queryResults;
208
+ if (!useHybridSearch) {
209
+ return queryResults;
210
+ }
211
+ // ── Hybrid: RRF merge of vector ranking + keyword ranking ────────
212
+ const queryTokens = (0, hybrid_1.tokenize)(query);
213
+ const vectorRanking = queryResults.map((r) => ({
214
+ item: r,
215
+ score: r.score,
216
+ }));
217
+ const keywordRanking = queryResults
218
+ .map((r) => ({
219
+ item: r,
220
+ score: (0, hybrid_1.keywordScore)(queryTokens, toEmbeddingText(r.piece.content, r.piece.title)),
221
+ }))
222
+ .filter((r) => r.score > 0)
223
+ .sort((a, b) => b.score - a.score);
224
+ const fused = (0, hybrid_1.reciprocalRankFusion)([vectorRanking, keywordRanking], (r) => r.piece.id);
225
+ return fused.slice(0, topK).map((f) => ({
226
+ ...f.item,
227
+ score: f.score,
228
+ }));
129
229
  }
130
230
  }
131
231
  exports.PieceStore = PieceStore;
package/dist/store.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"store.js","sourceRoot":"","sources":["../src/store.ts"],"names":[],"mappings":"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"}
package/dist/types.d.ts CHANGED
@@ -1,6 +1,7 @@
1
1
  export interface Piece {
2
2
  id: string;
3
3
  content: string;
4
+ title?: string;
4
5
  tags: string[];
5
6
  }
6
7
  export interface MemoryConfig {
@@ -10,10 +11,10 @@ export interface MemoryConfig {
10
11
  generationModel?: string;
11
12
  collectionName?: string;
12
13
  }
13
- export declare const DEFAULT_MEMORY_CONFIG: Required<MemoryConfig>;
14
14
  export interface QueryOptions {
15
15
  tags?: string[];
16
16
  topK?: number;
17
+ useHybridSearch?: boolean;
17
18
  }
18
19
  export interface QueryResult {
19
20
  piece: Piece;
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,eAAO,MAAM,qBAAqB,EAAE,QAAQ,CAAC,YAAY,CAMxD,CAAC;AAEF,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;CAC1B"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"AAAA,MAAM,WAAW,KAAK;IAClB,EAAE,EAAE,MAAM,CAAC;IACX,OAAO,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,IAAI,EAAE,MAAM,EAAE,CAAC;CAClB;AAED,MAAM,WAAW,YAAY;IACzB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,cAAc,CAAC,EAAE,MAAM,CAAC;IACxB,eAAe,CAAC,EAAE,MAAM,CAAC;IACzB,cAAc,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,YAAY;IACzB,IAAI,CAAC,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,CAAC,EAAE,MAAM,CAAC;IACd,eAAe,CAAC,EAAE,OAAO,CAAC;CAC7B;AAED,MAAM,WAAW,WAAW;IACxB,KAAK,EAAE,KAAK,CAAC;IACb,KAAK,EAAE,MAAM,CAAC;CACjB;AAED,MAAM,WAAW,SAAS;IACtB,MAAM,EAAE,MAAM,CAAC;IACf,OAAO,EAAE,WAAW,EAAE,CAAC;CAC1B"}
package/dist/types.js CHANGED
@@ -1,11 +1,3 @@
1
1
  "use strict";
2
2
  Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.DEFAULT_MEMORY_CONFIG = void 0;
4
- exports.DEFAULT_MEMORY_CONFIG = {
5
- chromaUrl: "http://localhost:8000",
6
- ollamaUrl: "http://localhost:11434",
7
- embeddingModel: "nomic-embed-text-v2-moe",
8
- generationModel: "llama3.2",
9
- collectionName: "pieces",
10
- };
11
3
  //# sourceMappingURL=types.js.map
package/dist/types.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":";;;AAca,QAAA,qBAAqB,GAA2B;IACzD,SAAS,EAAE,uBAAuB;IAClC,SAAS,EAAE,wBAAwB;IACnC,cAAc,EAAE,yBAAyB;IACzC,eAAe,EAAE,UAAU;IAC3B,cAAc,EAAE,QAAQ;CAC3B,CAAC"}
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":""}