JSPM

  • ESM via JSPM
  • ES Module Entrypoint
  • Export Map
  • Keywords
  • License
  • Repository URL
  • TypeScript Types
  • README
  • Created
  • Published
  • Downloads 7
  • Score
    100M100P100Q68929F
  • License Apache-2.0

Local-first knowledge packs for small LLMs.

Package Exports

  • @knolo/core
  • @knolo/core/node

Readme

📦 @knolo/core

@knolo/core is the deterministic retrieval engine and pack runtime behind Knolo.

It lets you:

  • Build structured knowledge packs
  • Mount portable .knolo artifacts
  • Run deterministic lexical retrieval
  • Optionally apply hybrid semantic reranking
  • Enforce strict runtime contracts for advanced workflows

No vector database required. No cloud dependency required. Works fully offline.


🧠 What It Is

@knolo/core is not:

  • A vector database wrapper
  • A hosted RAG service
  • A probabilistic similarity engine

It is:

  • A versioned binary pack format
  • A deterministic lexical retrieval engine
  • An optional semantic rerank layer
  • A portable knowledge runtime

You build once. You mount anywhere — Node, browser, React Native, serverless, offline.


📊 Retrieval Characteristics

Lexical retrieval is:

  • Deterministic
  • Reproducible
  • Stable across runs
  • Independent of embeddings

Hybrid reranking is:

  • Optional
  • Deterministic for fixed vectors
  • Lexical-first (semantic never replaces grounding)

In benchmark testing (March 2026):

  • Recall@5: 1.000
  • MRR@5: 0.867
  • nDCG@5: 0.900

Strong ranking quality without requiring a vector database.


📦 Installation

npm install @knolo/core

🚀 Core Concepts

1️⃣ Build a Pack

import { buildPack } from "@knolo/core";

const bytes = await buildPack(docs, {
  semantic: {
    enabled: false
  }
});

buildPack produces a versioned .knolo binary artifact.

You can write it to disk or store it in object storage.


2️⃣ Mount a Pack

Node.js (local path convenience)

import { mountPack } from "@knolo/core/node";

const pack = await mountPack({
  src: "./dist/knowledge.knolo"
});

React Native / Expo (URL or bytes)

import { mountPack } from "@knolo/core";

const ab = await (await fetch(PACK_URL)).arrayBuffer();
const pack = await mountPack({ src: new Uint8Array(ab) });

You can mount from:

  • URL string (runtime-safe entry)
  • Buffer / Uint8Array
  • Local file path in Node via @knolo/core/node
  • Object storage download

Mount-time validation ensures:

  • Pack version compatibility
  • Metadata integrity
  • Optional agent registry validation

3️⃣ Query (Deterministic Lexical Retrieval)

import { query } from "@knolo/core";

const hits = query(pack, "debounce vs throttle", {
  topK: 5
});

for (const hit of hits) {
  console.log(hit.text);
  console.log(hit.metadata); // { score, source, namespace, id }
}

Properties:

  • Fully deterministic
  • No embedding dependency
  • Namespace-aware
  • Evaluation-friendly scoring

🔀 Optional: Hybrid Semantic Rerank

Semantic rerank runs after lexical retrieval.

It never replaces lexical grounding.

Build with embeddings

const bytes = await buildPack(docs, {
  semantic: {
    enabled: true,
    modelId: "text-embedding-3-small",
    embeddings,
    quantization: {
      type: "int8_l2norm",
      perVectorScale: true
    }
  }
});

Query with rerank

import { hasSemantic } from "@knolo/core";

const hits = query(pack, "react native throttling issue", {
  topK: 8,
  semantic: {
    enabled: hasSemantic(pack),
    mode: "rerank",
    topN: 50,
    minLexConfidence: 0.35,
    blend: { enabled: true, wLex: 0.75, wSem: 0.25 },
    queryEmbedding
  }
});

Design principles:

  • Lexical-first
  • Deterministic scoring
  • No external vector store
  • Quantized embedding storage inside pack

🤖 Optional: Agent Metadata & Routing

Knolo is a knowledge engine first.

However, packs may optionally embed structured metadata for:

  • System prompts
  • Namespace restrictions
  • Tool policies
  • Routing hints

Agent registries are validated once at mountPack().

These features are additive and do not affect retrieval.


🛠 Runtime Contracts (Advanced)

For strict deterministic workflows:

RouteDecisionV1

type RouteDecisionV1 = {
  type: "route_decision";
  intent?: string;
  entities?: Record<string, unknown>;
  candidates: { agentId: string; score: number }[];
  selected: string;
};

ToolCallV1

type ToolCallV1 = {
  type: "tool_call";
  callId: string;
  tool: string;
  args: Record<string, unknown>;
};

Helpers:

import {
  isRouteDecisionV1,
  validateRouteDecisionV1,
  isToolAllowed,
  assertToolCallAllowed
} from "@knolo/core";

Enables:

  • Deterministic routing validation
  • Policy enforcement
  • Tool permission checks
  • Structured AI pipelines

These are optional — not required for standard retrieval usage.


📁 .knolo Pack Format

Binary layout:

[metaLen][meta]
[lexLen][lexicon]
[postCount][postings]
[blocksLen][blocks]
[semantic?]

Properties:

  • Versioned
  • Compact
  • Immutable
  • Semantic section auto-detected
  • Designed for fast mount + query

⚙️ Design Guarantees

  • Deterministic lexical retrieval
  • Deterministic hybrid rerank (fixed vectors)
  • No vector database required
  • No cloud dependency required
  • Works offline
  • Works in React Native / Expo
  • Portable binary artifacts

🔐 Ideal For

  • Local-first AI systems
  • Offline assistants
  • On-device LLM retrieval
  • Secure / air-gapped environments
  • Deterministic RAG pipelines
  • Evaluation-heavy workflows

🗺 Roadmap

  • Incremental pack updates
  • Evaluation tooling
  • Performance introspection APIs
  • WASM builds
  • Continued local-first optimization

📄 License

Apache-2.0