CreaRack-SL

retrieve: Búsqueda unificada con estimación de tokens

Firma

export async function retrieve(
  env: Env,
  queryVec: number[],
  topK: number,
  opts: RetrieveOpts,
  filters?: SearchFilters,
): Promise<RetrievalResult>

Propósito

Búsqueda vectorial + trimming opcional. Devuelve chunks (recortados si activo) + estimaciones de tokens antes/después, para que consumidores (harness A/B, endpoints) midan ahorro sin lógica duplicada.

Parámetros

  • queryVec: Embedding de la query.
  • topK: Chunks a recuperar (típicamente 5-10).
  • opts.trim: Si true, aplica trimChunksBySentence.
  • opts.trimThreshold: Umbral coseno (default 0.38).
  • opts.trimMinSentences: Mínimo por chunk (default 1).
  • opts.trimWindow: Contexto ±N frases (default 0).
  • filters: SearchFilters (sourceType, app).

Output

interface RetrievalResult {
  chunks: ChunkMatch[];
  tokensInContext: number;    // post-trim
  tokensBefore: number;       // raw chunks
}

Lógica

  1. Búsqueda base: searchChunks(env, queryVec, topK, filters) → raw chunks.
  2. Estimar tokens raw: estimateTokens(raw) → palabras × 1.3.
  3. Si opts.trim && env.AI: trimChunksBySentence(...) → chunks recortados.
  4. Estimar tokens trimmed: estimateTokens(chunks).
  5. Return con ambas estimaciones.

Fuentes de datos

  • Entrada: Query embeddeada, topK, filtros.
  • Salida: Chunks ± estimaciones.
  • DB: D1 (buscador vectorial preexistente).
  • API: Workers AI (trimming opcional).

Véase también

  • [[feature—biblioteca—arcrift-sentence-trimming]]
  • [[entity—functions—service—trim-chunks-by-sentence]]