CookbookRAG
Compliance corpus with Connected Knowledge
Build a multi-document policy corpus with typed metadata, views, relations, assertions, and global themes.
This recipe models a small compliance-style corpus for insurance applications. It indexes multiple documents, validates typed metadata, creates per-application views, extracts requirements, relates conflicts, expands retrieval through policy references, and searches global themes.
Full code
lib/compliance/schema.ts
import { z } from "zod";
export const metadataSchema = z.object({
application: z.enum(["auto", "home"]),
jurisdiction: z.enum(["CA", "NY"]),
status: z.enum(["draft", "published", "archived"]),
effectiveDate: z.string(),
});lib/compliance/knowledge.ts
import { indexingPipeline } from "@use-crux/core/indexing";
import { embedding } from "@use-crux/core/embedding";
import { assertions, communities, knowledgeBase, knowledgeModel, relate, relateReferences } from "@use-crux/core/knowledge";
import { expandRelations, globalSearch, retrieve } from "@use-crux/core/retrieval";
import { inMemoryStorage } from "@use-crux/core/storage";
import { z } from "zod";
import { metadataSchema } from "./schema";
export const dense = embedding({
kind: "dense",
name: "compliance-example-embedding",
dimensions: 2,
maxInputTokens: 8191,
batch: { maxSize: 8 },
embed: async (inputs) => inputs.map(() => [1, 0]),
});
export const knowledgeReporter = knowledgeModel({
name: "compliance-reporter",
version: "example-v1",
generateText: async () => ({ text: "" }),
generateObject: async ({ schema, system }) => {
const object = system?.includes("entity mentions")
? { mentions: [], related: [] }
: system?.includes("community report")
? { title: "Compliance policies", summary: "No generated summary configured.", findings: [] }
: { findings: [] };
return { object: schema.parse(object) };
},
});
export const policyRelations = relate({
id: "policy-relations",
version: 1,
types: {
affectsApplication: {
from: ["chunk"],
to: ["entity"],
direction: "directed",
description: "A chunk names an insurance application affected by a policy.",
},
},
run: ({ chunks }, api) => {
for (const chunk of chunks) {
const evidence = {
kind: "chunk",
sourceId: chunk.sourceId,
chunkId: chunk.chunkId,
} as const;
if (chunk.content.includes("auto")) {
api.emit(
"affectsApplication",
evidence,
{ kind: "entity", entityId: "application:auto" },
{ evidence, provenance: "exact" },
);
}
if (chunk.content.includes("home")) {
api.emit(
"affectsApplication",
evidence,
{ kind: "entity", entityId: "application:home" },
{ evidence, provenance: "exact" },
);
}
}
},
});
export const requirements = assertions({
id: "requirements",
version: 1,
types: {
requirement: z.object({
application: z.enum(["auto", "home"]),
jurisdiction: z.enum(["CA", "NY"]),
rule: z.string(),
effectiveDate: z.string(),
}),
},
run: ({ document, chunks }, api) => {
const metadata = metadataSchema.parse(document.metadata);
for (const chunk of chunks) {
if (!chunk.content.includes("must")) continue;
const evidence = {
kind: "chunk",
sourceId: chunk.sourceId,
chunkId: chunk.chunkId,
} as const;
const current = api.emit(
"requirement",
{
application: metadata.application,
jurisdiction: metadata.jurisdiction,
rule: chunk.content,
effectiveDate: metadata.effectiveDate,
},
{ evidence, provenance: "exact" },
);
if (chunk.content.includes("supersedes 2025 rule")) {
const previous = api.emit(
"requirement",
{
application: metadata.application,
jurisdiction: metadata.jurisdiction,
rule: "Applicant may provide proof after approval.",
effectiveDate: "2025-01-01",
},
{ evidence, provenance: "exact" },
);
api.relate(
"supersedes",
current,
previous,
{ evidence, provenance: "exact" },
);
}
}
},
});
export const compliance = knowledgeBase({
id: "compliance",
storage: inMemoryStorage(),
embeddings: dense,
metadataSchema,
pipeline: indexingPipeline({
derive: [relateReferences(), policyRelations, requirements],
}),
communities: communities({ model: knowledgeReporter }),
});
export const autoPolicies = compliance.view({
id: "auto-policies",
where: { application: "auto", status: "published" },
});
export const autoEvidence = autoPolicies.recipe({
id: "auto-policy-evidence",
steps: [
retrieve({ limit: 8 }),
expandRelations({
types: ["references", "affectsApplication", "sequence"],
direction: "both",
depth: 2,
limit: 6,
}),
],
});
export const autoThemes = autoPolicies.recipe({
id: "auto-policy-themes",
steps: [
globalSearch({
model: knowledgeReporter,
detail: "overview",
scan: "all",
limit: 8,
}),
],
});lib/compliance/index.ts
import { compliance } from "./knowledge";
export async function indexCompliancePolicies() {
await compliance.reindex([
{
namespace: "compliance",
sourceId: "auto-ca-2026.md",
title: "California Auto 2026",
content: [
"Auto applicants must provide proof of coverage before approval.",
"This supersedes 2025 rule.",
"See [General Notices](https://example.test/notices).",
].join("\n\n"),
metadata: { application: "auto", jurisdiction: "CA", status: "published", effectiveDate: "2026-01-01" },
},
{
namespace: "compliance",
sourceId: "auto-ny-2026.md",
title: "New York Auto 2026",
content: "Auto applicants must acknowledge renewal notices within 10 days.",
metadata: { application: "auto", jurisdiction: "NY", status: "published", effectiveDate: "2026-02-01" },
},
{
namespace: "compliance",
sourceId: "home-ca-draft.md",
title: "California Home Draft",
content: "Home applicants must provide inspection records.",
metadata: { application: "home", jurisdiction: "CA", status: "draft", effectiveDate: "2026-03-01" },
},
]);
await compliance.communities?.prepare();
}lib/compliance/query.ts
import { inspectRequest, prompt, summarizable } from "@use-crux/core";
import {
autoEvidence,
autoPolicies,
autoThemes,
requirements,
} from "./knowledge";
export async function readAutoRequirements() {
const resolved = await autoPolicies
.assertions(requirements, { types: ["requirement"] })
.resolve()
.result();
return {
selected: resolved.selected.map((item) => item.data),
superseded: resolved.superseded.map((item) => item.data),
contested: resolved.contested.map((item) => item.data),
unresolved: resolved.unresolved.map((item) => item.data),
};
}
export const answerAutoPolicy = prompt({
id: "answer-auto-policy",
use: [
summarizable(autoEvidence),
autoPolicies
.assertions(requirements, { types: ["requirement"] })
.resolve(),
autoThemes,
],
system: "Answer from visible auto policy evidence and resolved requirements.",
prompt: ({ input }) => input.question as string,
});
export async function inspectAnswerReceipt(result: {
steps: Array<{ request?: { id: string } }>;
}) {
const request = result.steps[0]?.request;
if (!request) return undefined;
return inspectRequest(request);
}