@contextgraph/retrieval

Context assembly with temporal and scope filtering.

Installation

pnpm add @contextgraph/retrieval

Overview

The retrieval package assembles context for entities by:

  • Gathering relevant claims
  • Filtering by temporal context
  • Filtering by jurisdiction and scope
  • Traversing relationships

Context Assembly

import { ContextAssembler } from '@contextgraph/retrieval';

const assembler = new ContextAssembler(ckg, provenance, storage);

const context = await assembler.assemble(entityId, {
  asOf: createTimestamp('2024-06-15'),
  jurisdiction: 'EU',
  scope: 'work',
  minConfidence: 0.8,
  depth: 2,
  includeProvenance: true,
});

Assembly Options

interface AssemblyOptions {
  // Temporal filter
  asOf?: Timestamp;

  // Jurisdictional filter
  jurisdiction?: string;

  // Scope filter
  scope?: string;

  // Confidence threshold
  minConfidence?: number;

  // Relationship traversal depth
  depth?: number;

  // Include provenance records
  includeProvenance?: boolean;

  // Include specific predicates only
  predicates?: string[];

  // Exclude specific predicates
  excludePredicates?: string[];

  // Maximum claims per entity
  maxClaims?: number;
}

Context Result

interface AssembledContext {
  // Primary entity
  entity: Entity;

  // Claims about the entity
  claims: Claim[];

  // Related entities (up to depth)
  relatedEntities: Map<EntityId, Entity>;

  // Claims about related entities
  relatedClaims: Map<EntityId, Claim[]>;

  // Provenance records (if requested)
  provenance?: ProvenanceEntry[];

  // Applied filters
  filters: {
    asOf?: Timestamp;
    jurisdiction?: string;
    scope?: string;
    minConfidence?: number;
  };

  // Assembly statistics
  stats: {
    claimCount: number;
    relatedEntityCount: number;
    maxDepthReached: number;
  };
}

Filtering Examples

Temporal

// Get context as of last quarter
const q3Context = await assembler.assemble(entityId, {
  asOf: createTimestamp('2024-09-30'),
});

Jurisdictional

// Get EU-compliant context
const euContext = await assembler.assemble(entityId, {
  jurisdiction: 'EU',
});

Confidence

// Get only high-confidence claims
const highConfidence = await assembler.assemble(entityId, {
  minConfidence: 0.9,
});

Relationship Traversal

// Traverse 3 levels of relationships
const deepContext = await assembler.assemble(entityId, {
  depth: 3,
});

// Access related entities
for (const [id, entity] of context.relatedEntities) {
  console.log(`Related: ${entity.name}`);
}