Explainability
Reasoning Traces
Every ranked item carries a faithful, queryable trace — the factors, the weights, the score breakdown. No prompt-spun stories. Only what the ranking math actually did.
Explainable recommendation infrastructure
GlassBox turns black-box ranking into a glass box. Align the reward function with live sliders, pre-warm cold starts with synthetic personas, and ship a faithful reasoning trace with every result.
You see what surfaced — never why. Drift is invisible, cold starts stall, and “trust me” is the only explanation.
Every score is decomposed, every policy is versioned, every trace is queryable. Transparency is the default, not an afterthought.
Four value pillars
Explainability
Every ranked item carries a faithful, queryable trace — the factors, the weights, the score breakdown. No prompt-spun stories. Only what the ranking math actually did.
Cold Start
Pre-warm the model before you have a single real event. Generate synthetic audiences, simulate their behaviour, and derive preference vectors that rank from day zero.
Logic Drift
Re-align the reward function in real time. Drag relevance, diversity, novelty and popularity — and watch the ranking and its trace move with you, deterministically.
Education
Commit a custom scoring function and a mentor reviews it like a senior engineer — Socratic questions on math, security and performance, before anything ships.
The pipeline
UI sliders compile to a versioned PolicySpec — a normalized reward function with author, constraints and a timestamp.
The Architect translates policy into a pgvector search and a deterministic weighted score across every candidate.
The Reasoner assembles a faithful explanation from the actual inputs and scores — queryable later by trace id.
For builders
A typed SDK over a tRPC core. Rank, fetch the reasoning behind any result, and stream feedback back to close the loop — without ever losing the audit trail.
import { GlassBox } from "@glassbox/sdk";
const gb = new GlassBox({ apiKey: "gb_live_…" });
// 1 · a ranked feed, aligned to business intent
const feed = await gb.getPersonalizedFeed("user-123", {
sliders: { relevance: 0.8, diversity: 0.6 },
});
// 2 · the faithful reasoning behind any result
const why = await gb.getReasoningChain("user-123", feed.items[0].itemId);
// 3 · close the loop
await gb.trackEvent({ endUserId: "user-123", eventType: "click" });Connect a catalog, drag a slider, read the trace. Free to start.