@apart-tech/intelligence-core 1.16.0 → 1.17.1

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.
@@ -83,11 +83,11 @@ describe("SearchService", () => {
83
83
  db = createMockDb();
84
84
  embeddings = createMockEmbeddings();
85
85
  });
86
- it("runs chunk semantic search in parallel with node-level search", async () => {
86
+ it("embeds query once and runs both semantic branches with the result", async () => {
87
87
  const service = new SearchService(db, embeddings, testConfig, tenantCtx);
88
88
  await service.search({ query: "test query" });
89
- // embed() should be called twice: once for chunk search, once for node fallback
90
- expect(embeddings.embed).toHaveBeenCalledTimes(2);
89
+ // embed() should be called once result shared by chunk and node semantic branches
90
+ expect(embeddings.embed).toHaveBeenCalledTimes(1);
91
91
  });
92
92
  it("returns snippet from chunk semantic results", async () => {
93
93
  // Mock chunk search to return results with snippets
@@ -1 +1 @@
1
- {"version":3,"file":"search-service.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/search-service.test.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-service.test.js","sourceRoot":"","sources":["../../../src/services/__tests__/search-service.test.ts"],"names":[],"mappings":"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"}
@@ -3,6 +3,11 @@ import type { SearchOptions, SearchResult, EmbeddingProvider, ApartConfig } from
3
3
  import { type TenantContext } from "../db/tenant.js";
4
4
  import type { PiiEncryptionService } from "./pii-encryption-service.js";
5
5
  import type { PiiEncryptionOptions } from "./pii-encryption-service.js";
6
+ interface TimedResult<T> {
7
+ result: T;
8
+ ms: number;
9
+ }
10
+ export declare function timeBranch<T>(promise: Promise<T>): Promise<TimedResult<T>>;
6
11
  export declare class SearchService {
7
12
  private db;
8
13
  private embeddings;
@@ -28,11 +33,13 @@ export declare class SearchService {
28
33
  private substringSearch;
29
34
  /**
30
35
  * Trigram similarity search using pg_trgm word_similarity().
31
- * Catches misspellings and fuzzy partial matches.
36
+ * Catches misspellings and fuzzy partial matches on title only.
37
+ * Uses the <<% operator so the GIN trigram index on title is used.
32
38
  */
33
39
  private trigramSearch;
34
40
  private stripQueryPii;
35
41
  private logPiiQuery;
42
+ private logSearchMetrics;
36
43
  /**
37
44
  * Generalized reciprocal rank fusion over N ranked lists.
38
45
  * Each list carries its own weight. Results appearing in multiple
@@ -41,4 +48,5 @@ export declare class SearchService {
41
48
  */
42
49
  private reciprocalRankFusion;
43
50
  }
51
+ export {};
44
52
  //# sourceMappingURL=search-service.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"search-service.d.ts","sourceRoot":"","sources":["../../src/services/search-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAoBxE,qBAAa,aAAa;IAItB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,UAAU,CAAC;IARrB,OAAO,CAAC,SAAS,CAAgB;gBAGvB,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,WAAW,EAC3B,SAAS,CAAC,EAAE,aAAa,EACjB,aAAa,CAAC,EAAE,oBAAoB,YAAA,EACpC,UAAU,CAAC,EAAE,oBAAoB,YAAA;IAKrC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA0C7D,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;YACW,mBAAmB;YA2DnB,cAAc;YA6Cd,aAAa;IAwC3B;;;;OAIG;YACW,eAAe;IA4D7B;;;OAGG;YACW,aAAa;IAmD3B,OAAO,CAAC,aAAa;YAWP,WAAW;IAoBzB;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CA2C7B"}
1
+ {"version":3,"file":"search-service.d.ts","sourceRoot":"","sources":["../../src/services/search-service.ts"],"names":[],"mappings":"AACA,OAAO,EAAU,KAAK,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAC3D,OAAO,KAAK,EACV,aAAa,EACb,YAAY,EACZ,iBAAiB,EACjB,WAAW,EAIZ,MAAM,mBAAmB,CAAC;AAC3B,OAAO,EAAqC,KAAK,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAExF,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AACxE,OAAO,KAAK,EAAE,oBAAoB,EAAE,MAAM,6BAA6B,CAAC;AAoBxE,UAAU,WAAW,CAAC,CAAC;IACrB,MAAM,EAAE,CAAC,CAAC;IACV,EAAE,EAAE,MAAM,CAAC;CACZ;AAED,wBAAsB,UAAU,CAAC,CAAC,EAAE,OAAO,EAAE,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,WAAW,CAAC,CAAC,CAAC,CAAC,CAIhF;AAED,qBAAa,aAAa;IAItB,OAAO,CAAC,EAAE;IACV,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;IAEd,OAAO,CAAC,aAAa,CAAC;IACtB,OAAO,CAAC,UAAU,CAAC;IARrB,OAAO,CAAC,SAAS,CAAgB;gBAGvB,EAAE,EAAE,YAAY,EAChB,UAAU,EAAE,iBAAiB,EAC7B,MAAM,EAAE,WAAW,EAC3B,SAAS,CAAC,EAAE,aAAa,EACjB,aAAa,CAAC,EAAE,oBAAoB,YAAA,EACpC,UAAU,CAAC,EAAE,oBAAoB,YAAA;IAKrC,MAAM,CAAC,OAAO,EAAE,aAAa,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;IA6D7D,OAAO,CAAC,iBAAiB;IAMzB;;;OAGG;YACW,mBAAmB;YA0DnB,cAAc;YA4Cd,aAAa;IAwC3B;;;;OAIG;YACW,eAAe;IAqE7B;;;;OAIG;YACW,aAAa;IAiD3B,OAAO,CAAC,aAAa;YAWP,WAAW;YAoBX,gBAAgB;IA4B9B;;;;;OAKG;IACH,OAAO,CAAC,oBAAoB;CA2C7B"}
@@ -11,6 +11,11 @@ const NODE_COLUMNS_PREFIXED = Prisma.sql `n.id, n.type, n.title, n.content, n.me
11
11
  const MIN_FUZZY_QUERY_LENGTH = 3;
12
12
  // Maximum number of terms in a split-term ILIKE query to prevent query explosion.
13
13
  const MAX_ILIKE_TERMS = 10;
14
+ export async function timeBranch(promise) {
15
+ const start = performance.now();
16
+ const result = await promise;
17
+ return { result, ms: performance.now() - start };
18
+ }
14
19
  export class SearchService {
15
20
  db;
16
21
  embeddings;
@@ -38,26 +43,41 @@ export class SearchService {
38
43
  if (piiTypes.length > 0) {
39
44
  this.logPiiQuery(options.query, piiTypes, "search").catch(() => { });
40
45
  }
41
- // Run all search branches in parallel using stripped query
42
- // Chunk semantic search + fallback node semantic search run together
43
- const [chunkSemanticResults, nodeFallbackResults, keywordResults, substringResults, trigramResults] = await Promise.all([
44
- this.chunkSemanticSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters),
45
- this.semanticSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters),
46
- this.keywordSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters),
47
- this.substringSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters),
48
- this.trigramSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters),
46
+ // Embed query once for both semantic branches
47
+ const queryEmbedding = await this.embeddings.embed(strippedQuery, { inputType: "query" });
48
+ // Run all search branches in parallel using stripped query, with timing
49
+ const searchStart = performance.now();
50
+ const [chunkSemantic, nodeFallback, keyword, substring, trigram] = await Promise.all([
51
+ timeBranch(this.chunkSemanticSearch(queryEmbedding, limit, statuses, options.types, options.domainIds, options.tagFilters)),
52
+ timeBranch(this.semanticSearch(queryEmbedding, limit, statuses, options.types, options.domainIds, options.tagFilters)),
53
+ timeBranch(this.keywordSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters)),
54
+ timeBranch(this.substringSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters)),
55
+ timeBranch(this.trigramSearch(strippedQuery, limit, statuses, options.types, options.domainIds, options.tagFilters)),
49
56
  ]);
50
57
  // Merge chunk results with node-level fallback (for unchunked nodes)
51
- const chunkNodeIds = new Set(chunkSemanticResults.map((r) => r.node.id));
52
- const fallbackOnly = nodeFallbackResults.filter((r) => !chunkNodeIds.has(r.node.id));
53
- const semanticResults = [...chunkSemanticResults, ...fallbackOnly];
58
+ const chunkNodeIds = new Set(chunkSemantic.result.map((r) => r.node.id));
59
+ const fallbackOnly = nodeFallback.result.filter((r) => !chunkNodeIds.has(r.node.id));
60
+ const semanticResults = [...chunkSemantic.result, ...fallbackOnly];
54
61
  // N-branch reciprocal rank fusion
55
- return this.reciprocalRankFusion([
62
+ const merged = this.reciprocalRankFusion([
56
63
  { results: semanticResults, weight: this.config.search.semanticWeight },
57
- { results: keywordResults, weight: this.config.search.keywordWeight },
58
- { results: substringResults, weight: this.config.search.substringWeight },
59
- { results: trigramResults, weight: this.config.search.trigramWeight },
64
+ { results: keyword.result, weight: this.config.search.keywordWeight },
65
+ { results: substring.result, weight: this.config.search.substringWeight },
66
+ { results: trigram.result, weight: this.config.search.trigramWeight },
60
67
  ], limit);
68
+ const totalMs = performance.now() - searchStart;
69
+ // Fire-and-forget metrics log
70
+ this.logSearchMetrics({
71
+ query: strippedQuery,
72
+ chunkSemanticMs: chunkSemantic.ms,
73
+ nodeSemanticMs: nodeFallback.ms,
74
+ keywordMs: keyword.ms,
75
+ substringMs: substring.ms,
76
+ trigramMs: trigram.ms,
77
+ totalMs,
78
+ resultCount: merged.length,
79
+ }).catch(() => { });
80
+ return merged;
61
81
  }
62
82
  buildTagCondition(tagFilters) {
63
83
  if (!tagFilters || tagFilters.length === 0)
@@ -69,8 +89,7 @@ export class SearchService {
69
89
  * Chunk-level semantic search: finds the best-matching chunk per node,
70
90
  * returns the parent node with snippet from the best chunk.
71
91
  */
72
- async chunkSemanticSearch(query, limit, statuses, types, domainIds, tagFilters) {
73
- const queryEmbedding = await this.embeddings.embed(query, { inputType: "query" });
92
+ async chunkSemanticSearch(queryEmbedding, limit, statuses, types, domainIds, tagFilters) {
74
93
  const embeddingStr = `[${queryEmbedding.join(",")}]`;
75
94
  const typeCondition = types?.length
76
95
  ? Prisma.sql `n.type = ANY(${types}::text[])`
@@ -111,8 +130,7 @@ export class SearchService {
111
130
  snippetChunkIndex: row.chunk_index,
112
131
  }));
113
132
  }
114
- async semanticSearch(query, limit, statuses, types, domainIds, tagFilters) {
115
- const queryEmbedding = await this.embeddings.embed(query, { inputType: "query" });
133
+ async semanticSearch(queryEmbedding, limit, statuses, types, domainIds, tagFilters) {
116
134
  const embeddingStr = `[${queryEmbedding.join(",")}]`;
117
135
  const typeCondition = types?.length
118
136
  ? Prisma.sql `type = ANY(${types}::text[])`
@@ -189,15 +207,24 @@ export class SearchService {
189
207
  : Prisma.sql `TRUE`;
190
208
  const orgCondition = tenantWhere(this.tenantCtx);
191
209
  const tagCondition = this.buildTagCondition(tagFilters);
192
- // Build per-term conditions: each term must appear in title or content
193
- // (also checking with dots removed for punctuation-agnostic matching)
210
+ // Build per-term conditions: each term must appear in title or content.
211
+ // Normalize the search term (strip dots) instead of applying functions to columns,
212
+ // so that GIN trigram indexes on bare columns can be used.
194
213
  const termConditions = terms.map((term) => {
195
214
  const pattern = `%${term}%`;
215
+ const stripped = term.replace(/\./g, "");
216
+ if (stripped !== term && stripped.length > 0) {
217
+ const strippedPattern = `%${stripped}%`;
218
+ return Prisma.sql `(
219
+ title ILIKE ${pattern}
220
+ OR content ILIKE ${pattern}
221
+ OR title ILIKE ${strippedPattern}
222
+ OR content ILIKE ${strippedPattern}
223
+ )`;
224
+ }
196
225
  return Prisma.sql `(
197
226
  title ILIKE ${pattern}
198
227
  OR content ILIKE ${pattern}
199
- OR replace(title, '.', '') ILIKE ${pattern}
200
- OR replace(content, '.', '') ILIKE ${pattern}
201
228
  )`;
202
229
  });
203
230
  // Join all term conditions with AND
@@ -223,7 +250,8 @@ export class SearchService {
223
250
  }
224
251
  /**
225
252
  * Trigram similarity search using pg_trgm word_similarity().
226
- * Catches misspellings and fuzzy partial matches.
253
+ * Catches misspellings and fuzzy partial matches on title only.
254
+ * Uses the <<% operator so the GIN trigram index on title is used.
227
255
  */
228
256
  async trigramSearch(query, limit, statuses, types, domainIds, tagFilters) {
229
257
  if (query.length < MIN_FUZZY_QUERY_LENGTH) {
@@ -237,19 +265,16 @@ export class SearchService {
237
265
  : Prisma.sql `TRUE`;
238
266
  const orgCondition = tenantWhere(this.tenantCtx);
239
267
  const tagCondition = this.buildTagCondition(tagFilters);
268
+ // Use <<% operator (index-friendly form of word_similarity >= threshold).
269
+ // The threshold is controlled by pg_trgm.word_similarity_threshold GUC,
270
+ // so we SET it per-query to match our config.
240
271
  const threshold = this.config.search.trigramThreshold;
241
272
  const results = await this.db.$queryRaw `
242
273
  SELECT ${NODE_COLUMNS},
243
- GREATEST(
244
- word_similarity(${query}, title),
245
- word_similarity(${query}, content)
246
- ) as trgm_score
274
+ word_similarity(${query}, title) as trgm_score
247
275
  FROM nodes
248
276
  WHERE status = ANY(${statuses}::text[])
249
- AND (
250
- word_similarity(${query}, title) >= ${threshold}
251
- OR word_similarity(${query}, content) >= ${threshold}
252
- )
277
+ AND ${query} <<% title
253
278
  AND ${typeCondition}
254
279
  AND ${domainCondition}
255
280
  AND ${orgCondition}
@@ -288,6 +313,24 @@ export class SearchService {
288
313
  )
289
314
  `;
290
315
  }
316
+ async logSearchMetrics(params) {
317
+ const queryHash = createHash("sha256").update(params.query).digest("hex");
318
+ await this.db.$executeRaw `
319
+ INSERT INTO search_metrics (id, organization_id, query_hash, chunk_semantic_ms, node_semantic_ms, keyword_ms, substring_ms, trigram_ms, total_ms, result_count)
320
+ VALUES (
321
+ gen_random_uuid(),
322
+ ${this.tenantCtx.organizationId}::uuid,
323
+ ${queryHash},
324
+ ${params.chunkSemanticMs},
325
+ ${params.nodeSemanticMs},
326
+ ${params.keywordMs},
327
+ ${params.substringMs},
328
+ ${params.trigramMs},
329
+ ${params.totalMs},
330
+ ${params.resultCount}
331
+ )
332
+ `;
333
+ }
291
334
  /**
292
335
  * Generalized reciprocal rank fusion over N ranked lists.
293
336
  * Each list carries its own weight. Results appearing in multiple
@@ -1 +1 @@
1
- {"version":3,"file":"search-service.js","sourceRoot":"","sources":["../../src/services/search-service.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"search-service.js","sourceRoot":"","sources":["../../src/services/search-service.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=search-service.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.test.d.ts","sourceRoot":"","sources":["../../src/services/search-service.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,65 @@
1
+ import { describe, expect, it, vi } from "vitest";
2
+ import { timeBranch } from "./search-service.js";
3
+ describe("timeBranch", () => {
4
+ it("returns the result and positive ms", async () => {
5
+ const { result, ms } = await timeBranch(Promise.resolve(42));
6
+ expect(result).toBe(42);
7
+ expect(ms).toBeGreaterThanOrEqual(0);
8
+ });
9
+ it("propagates errors from the wrapped promise", async () => {
10
+ await expect(timeBranch(Promise.reject(new Error("boom")))).rejects.toThrow("boom");
11
+ });
12
+ it("measures elapsed time", async () => {
13
+ const delay = (ms) => new Promise((r) => setTimeout(r, ms));
14
+ const { ms } = await timeBranch(delay(50));
15
+ // Allow for timer imprecision; should be at least 30ms
16
+ expect(ms).toBeGreaterThanOrEqual(30);
17
+ });
18
+ });
19
+ describe("SearchService.logSearchMetrics", () => {
20
+ it("calls $executeRaw with correct column shape", async () => {
21
+ // We test logSearchMetrics indirectly by constructing a SearchService
22
+ // and calling search() with a mock db. The fire-and-forget INSERT
23
+ // is the only raw query that writes to search_metrics.
24
+ const executeRaw = vi.fn().mockResolvedValue(1);
25
+ // Minimal mock to verify the INSERT statement shape
26
+ const mockDb = {
27
+ $executeRaw: executeRaw,
28
+ $queryRaw: vi.fn().mockResolvedValue([]),
29
+ };
30
+ // Import SearchService and construct with mocks
31
+ const { SearchService } = await import("./search-service.js");
32
+ const mockEmbeddings = {
33
+ embed: vi.fn().mockResolvedValue([0.1, 0.2, 0.3]),
34
+ };
35
+ const mockConfig = {
36
+ search: {
37
+ defaultLimit: 10,
38
+ includeDrafts: false,
39
+ semanticWeight: 1,
40
+ keywordWeight: 0.7,
41
+ substringWeight: 0.5,
42
+ trigramWeight: 0.3,
43
+ trigramThreshold: 0.3,
44
+ },
45
+ };
46
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
47
+ const service = new SearchService(mockDb, mockEmbeddings, mockConfig, { organizationId: "org-123" });
48
+ await service.search({ query: "test query" });
49
+ // Wait for the fire-and-forget logSearchMetrics to settle
50
+ await new Promise((r) => setTimeout(r, 50));
51
+ // The INSERT into search_metrics should have been called via $executeRaw
52
+ // (logPiiQuery also uses $executeRaw but only when PII is detected)
53
+ const searchMetricsCalls = executeRaw.mock.calls.filter((call) => {
54
+ // Tagged template calls have the first arg as TemplateStringsArray
55
+ const tmpl = call[0];
56
+ if (tmpl && typeof tmpl === "object" && "raw" in tmpl) {
57
+ const raw = tmpl.raw.join("");
58
+ return raw.includes("search_metrics");
59
+ }
60
+ return false;
61
+ });
62
+ expect(searchMetricsCalls.length).toBe(1);
63
+ });
64
+ });
65
+ //# sourceMappingURL=search-service.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"search-service.test.js","sourceRoot":"","sources":["../../src/services/search-service.test.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@apart-tech/intelligence-core",
3
- "version": "1.16.0",
3
+ "version": "1.17.1",
4
4
  "description": "Core library: database, services, and providers for Apart Intelligence",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -38,6 +38,7 @@ model Organization {
38
38
  quotaOverrides QuotaOverride[]
39
39
  onboardingPackages OnboardingPackage[]
40
40
  billingEvents BillingEvent[]
41
+ searchMetrics SearchMetric[]
41
42
  tagDefinitions TagDefinition[]
42
43
  nodeTags NodeTag[]
43
44
  nodeChunks NodeChunk[]
@@ -704,3 +705,26 @@ model BillingEvent {
704
705
  @@index([eventType], map: "idx_billing_events_type")
705
706
  @@map("billing_events")
706
707
  }
708
+
709
+ // ── Search Performance Metrics ──────────────────────────────────────────────
710
+
711
+ model SearchMetric {
712
+ id String @id @default(dbgenerated("gen_random_uuid()")) @db.Uuid
713
+ organizationId String @map("organization_id") @db.Uuid
714
+ queryHash String @map("query_hash") @db.VarChar(64)
715
+ chunkSemanticMs Float @map("chunk_semantic_ms")
716
+ nodeSemanticMs Float @map("node_semantic_ms")
717
+ keywordMs Float @map("keyword_ms")
718
+ substringMs Float @map("substring_ms")
719
+ trigramMs Float @map("trigram_ms")
720
+ totalMs Float @map("total_ms")
721
+ resultCount Int @map("result_count")
722
+ createdAt DateTime @default(now()) @map("created_at") @db.Timestamptz
723
+
724
+ organization Organization @relation(fields: [organizationId], references: [id], onDelete: Cascade)
725
+
726
+ @@index([organizationId], map: "idx_search_metrics_org")
727
+ @@index([createdAt], map: "idx_search_metrics_created_at")
728
+ @@index([organizationId, createdAt], map: "idx_search_metrics_org_time")
729
+ @@map("search_metrics")
730
+ }