feat: array-unnest groupBy for aggregates + batch-embed entity extraction
- groupBy now supports { field, unnest: true }: an entity contributes once per
distinct element of an array field (tag frequency / faceted counts). Duplicate
elements on one entity count once; an empty/missing array joins no group. The
incremental add/update/delete paths fan out across the unnested groups.
- extractEntities/extractConcepts batch-embed the unique candidate spans in one
embedBatch call instead of one embed() per candidate (N sequential model calls);
falls back to per-candidate embedding if the batch fails. No behavior change.
This commit is contained in:
parent
2591001bd0
commit
c2e21b7b3c
8 changed files with 214 additions and 100 deletions
|
|
@ -34,6 +34,7 @@
|
|||
|
||||
import type { Brainy } from '../brainy.js'
|
||||
import type { NounType } from '../types/graphTypes.js'
|
||||
import type { Vector } from '../coreTypes.js'
|
||||
import { ExactMatchSignal } from './signals/ExactMatchSignal.js'
|
||||
import { PatternSignal } from './signals/PatternSignal.js'
|
||||
import { EmbeddingSignal } from './signals/EmbeddingSignal.js'
|
||||
|
|
@ -211,6 +212,8 @@ export class SmartExtractor {
|
|||
formatContext?: FormatContext
|
||||
allTerms?: string[]
|
||||
metadata?: any
|
||||
/** Pre-computed candidate embedding (from a batch embed) — forwarded to EmbeddingSignal. */
|
||||
vector?: Vector
|
||||
},
|
||||
minConfidence?: number
|
||||
): Promise<ExtractionResult | null> {
|
||||
|
|
@ -243,7 +246,8 @@ export class SmartExtractor {
|
|||
const enrichedContext = {
|
||||
definition: context?.definition,
|
||||
allTerms: [...(context?.allTerms || []), ...formatHints],
|
||||
metadata: context?.metadata
|
||||
metadata: context?.metadata,
|
||||
vector: context?.vector
|
||||
}
|
||||
|
||||
// Execute all signals in parallel
|
||||
|
|
|
|||
Reference in a new issue