-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.html
More file actions
31 lines (31 loc) · 82 KB
/
index.html
File metadata and controls
31 lines (31 loc) · 82 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
<!DOCTYPE html><html lang="en"><head><meta charSet="utf-8"/><meta name="viewport" content="width=device-width, initial-scale=1"/><link rel="preload" href="/_next/static/media/4cf2300e9c8272f7-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" href="/_next/static/media/93f479601ee12b01-s.p.woff2" as="font" crossorigin="" type="font/woff2"/><link rel="preload" as="image" href="/inputlayer_logo_long_dark.png"/><link rel="stylesheet" href="/_next/static/css/aadfc2e4f8b6a23e.css" data-precedence="next"/><link rel="preload" as="script" fetchPriority="low" href="/_next/static/chunks/webpack-6b4fdc854b138615.js"/><script src="/_next/static/chunks/4bd1b696-215e5051988c3dde.js" async=""></script><script src="/_next/static/chunks/794-a5a678e98a1dc00a.js" async=""></script><script src="/_next/static/chunks/main-app-1fa5b694e5d36a75.js" async=""></script><script src="/_next/static/chunks/app/layout-7e9963bf811be36b.js" async=""></script><script src="/_next/static/chunks/661-bf4fce185509def8.js" async=""></script><script src="/_next/static/chunks/app/page-0dc1a2efed801eb2.js" async=""></script><meta name="next-size-adjust" content=""/><title>InputLayer - Streaming reasoning layer for AI systems</title><meta name="description" content="Store facts, define rules, and derive everything that logically follows. Vector search, graph traversal, and incremental computation in one system."/><link rel="icon" href="/favicon.ico" sizes="any"/><link rel="icon" href="/favicon_32.png" sizes="32x32" type="image/png"/><link rel="apple-touch-icon" href="/favicon_180.png" sizes="180x180" type="image/png"/><script src="/_next/static/chunks/polyfills-42372ed130431b0a.js" noModule=""></script></head><body class="__variable_188709 __variable_9a8899 font-sans antialiased"><div hidden=""><!--$--><!--/$--></div><script>((a,b,c,d,e,f,g,h)=>{let i=document.documentElement,j=["light","dark"];function k(b){var c;(Array.isArray(a)?a:[a]).forEach(a=>{let c="class"===a,d=c&&f?e.map(a=>f[a]||a):e;c?(i.classList.remove(...d),i.classList.add(f&&f[b]?f[b]:b)):i.setAttribute(a,b)}),c=b,h&&j.includes(c)&&(i.style.colorScheme=c)}if(d)k(d);else try{let a=localStorage.getItem(b)||c,d=g&&"system"===a?window.matchMedia("(prefers-color-scheme: dark)").matches?"dark":"light":a;k(d)}catch(a){}})("class","theme","dark",null,["light","dark"],null,true,true)</script><div class="flex flex-col min-h-dvh"><header class="sticky top-0 z-50 w-full border-b border-border/50 bg-background/95 backdrop-blur supports-[backdrop-filter]:bg-background/60"><div class="flex h-14 items-center px-6"><a class="mr-8" href="/"><img alt="InputLayer" width="123" height="28" decoding="async" data-nimg="1" class="flex-shrink-0" style="color:transparent" src="/inputlayer_logo_long_dark.png"/></a><nav class="hidden md:flex items-center gap-6 text-sm"><a class="text-muted-foreground transition-colors hover:text-foreground" href="/docs/">Docs</a><a class="text-muted-foreground transition-colors hover:text-foreground" href="/blog/">Blog</a><a href="https://demo.inputlayer.ai" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-muted-foreground transition-colors hover:text-foreground">Demo<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></nav><div class="ml-auto flex items-center gap-3"><div class="inline-flex items-center gap-1.5"><a href="https://github.com/inputlayer/inputlayer" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1.5 rounded-md border border-border bg-secondary/50 px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground hover:bg-secondary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-star h-3.5 w-3.5"><path d="M11.525 2.295a.53.53 0 0 1 .95 0l2.31 4.679a2.123 2.123 0 0 0 1.595 1.16l5.166.756a.53.53 0 0 1 .294.904l-3.736 3.638a2.123 2.123 0 0 0-.611 1.878l.882 5.14a.53.53 0 0 1-.771.56l-4.618-2.428a2.122 2.122 0 0 0-1.973 0L6.396 21.01a.53.53 0 0 1-.77-.56l.881-5.139a2.122 2.122 0 0 0-.611-1.879L2.16 9.795a.53.53 0 0 1 .294-.906l5.165-.755a2.122 2.122 0 0 0 1.597-1.16z"></path></svg><span>Star</span></a><a href="https://github.com/inputlayer/inputlayer/fork" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1.5 rounded-md border border-border bg-secondary/50 px-2.5 py-1 text-xs font-medium text-muted-foreground transition-colors hover:text-foreground hover:bg-secondary"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-fork h-3.5 w-3.5"><circle cx="12" cy="18" r="3"></circle><circle cx="6" cy="6" r="3"></circle><circle cx="18" cy="6" r="3"></circle><path d="M18 9v2c0 .6-.4 1-1 1H7c-.6 0-1-.4-1-1V9"></path><path d="M12 12v3"></path></svg><span>Fork</span></a></div><button data-slot="button" class="inline-flex items-center justify-center gap-2 whitespace-nowrap rounded-md text-sm font-medium transition-all disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0 outline-none focus-visible:border-ring focus-visible:ring-ring/50 focus-visible:ring-[3px] aria-invalid:ring-destructive/20 dark:aria-invalid:ring-destructive/40 aria-invalid:border-destructive hover:bg-accent hover:text-accent-foreground dark:hover:bg-accent/50 size-9 h-9 w-9"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-sun h-4 w-4"><circle cx="12" cy="12" r="4"></circle><path d="M12 2v2"></path><path d="M12 20v2"></path><path d="m4.93 4.93 1.41 1.41"></path><path d="m17.66 17.66 1.41 1.41"></path><path d="M2 12h2"></path><path d="M20 12h2"></path><path d="m6.34 17.66-1.41 1.41"></path><path d="m19.07 4.93-1.41 1.41"></path></svg></button><div class="md:hidden"><button class="inline-flex items-center justify-center rounded-md p-2 text-muted-foreground hover:text-foreground hover:bg-secondary transition-colors" aria-label="Open menu"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-menu h-5 w-5"><line x1="4" x2="20" y1="12" y2="12"></line><line x1="4" x2="20" y1="6" y2="6"></line><line x1="4" x2="20" y1="18" y2="18"></line></svg></button></div></div></div></header><section class="relative overflow-hidden border-b border-border/50"><div class="absolute inset-0 bg-gradient-to-b from-primary/5 to-transparent"></div><div class="relative mx-auto max-w-6xl px-6 py-24 lg:py-32"><div class="grid gap-12 lg:grid-cols-2 lg:gap-16 items-center"><div class="space-y-8"><h1 class="text-4xl sm:text-5xl lg:text-6xl font-extrabold tracking-tight leading-[1.15] max-w-[640px]"><span class="text-foreground/80">Your AI guesses.</span><br/><span class="text-primary">InputLayer reasons.</span></h1><div class="flex flex-wrap gap-3 pt-2"><a href="https://demo.inputlayer.ai/demo/request-access?kg=flights" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 rounded-md bg-primary px-5 py-2.5 text-sm font-medium text-primary-foreground hover:bg-primary/90 transition-colors">Try the demo<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-4 w-4"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a><a class="inline-flex items-center gap-2 rounded-md border border-border bg-background px-5 py-2.5 text-sm font-medium hover:bg-secondary transition-colors" href="/docs/">Read the docs<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div><div class="space-y-4"><div class="space-y-5"><style>
@keyframes hero-pulse { 0%, 100% { opacity: 0.4; } 50% { opacity: 1; } }
@keyframes hero-flow { from { transform: translateX(-4px); opacity: 0; } to { transform: translateX(0); opacity: 1; } }
</style><div><div class="flex items-center gap-2 mb-2"><span class="w-2 h-2 rounded-full" style="background:oklch(0.6 0.18 160)"></span><span class="text-[10px] font-semibold uppercase tracking-wider" style="color:oklch(0.7 0.14 160)">Facts</span><div class="h-px flex-1" style="background:oklch(0.6 0.18 160 / 0.2)"></div></div><div class="grid grid-cols-2 gap-1.5"><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono truncate" style="background:oklch(0.55 0.12 160 / 0.08);border:1px solid oklch(0.6 0.15 160 / 0.15);color:oklch(0.75 0.12 160);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 0.3s, transform 0.4s 0.3s">direct_flight("New York", "London")</div><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono truncate" style="background:oklch(0.55 0.12 160 / 0.08);border:1px solid oklch(0.6 0.15 160 / 0.15);color:oklch(0.75 0.12 160);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 0.5s, transform 0.4s 0.5s">direct_flight("London", "Paris")</div><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono truncate" style="background:oklch(0.55 0.12 160 / 0.08);border:1px solid oklch(0.6 0.15 160 / 0.15);color:oklch(0.75 0.12 160);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 0.7s, transform 0.4s 0.7s">direct_flight("Paris", "Tokyo")</div><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono truncate" style="background:oklch(0.55 0.12 160 / 0.08);border:1px solid oklch(0.6 0.15 160 / 0.15);color:oklch(0.75 0.12 160);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 0.9s, transform 0.4s 0.9s">direct_flight("Tokyo", "Sydney")</div></div></div><div class="flex justify-center" style="opacity:0;transition:opacity 0.4s 1.1s"><svg width="24" height="20" viewBox="0 0 24 20"><path d="M12 0 L12 14 M6 10 L12 16 L18 10" stroke="var(--border)" stroke-width="1.5" fill="none"></path></svg></div><div><div class="flex items-center gap-2 mb-2"><span class="w-2 h-2 rounded-full" style="background:oklch(0.6 0.15 250)"></span><span class="text-[10px] font-semibold uppercase tracking-wider" style="color:oklch(0.7 0.12 250)">Rules</span><div class="h-px flex-1" style="background:oklch(0.6 0.15 250 / 0.2)"></div></div><div class="space-y-1.5"><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono" style="background:oklch(0.5 0.1 250 / 0.08);border:1px solid oklch(0.55 0.12 250 / 0.15);color:oklch(0.7 0.1 250);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 1.2s, transform 0.4s 1.2s">can_reach(A, B) <- direct_flight(A, B)</div><div class="rounded-md px-2.5 py-1.5 text-[10px] font-mono" style="background:oklch(0.5 0.1 250 / 0.08);border:1px solid oklch(0.55 0.12 250 / 0.15);color:oklch(0.7 0.1 250);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 1.4s, transform 0.4s 1.4s">can_reach(A, C) <- direct_flight(A, B), can_reach(B, C)</div></div></div><div class="flex justify-center" style="opacity:0;transition:opacity 0.4s 1.6s"><svg width="24" height="20" viewBox="0 0 24 20"><path d="M12 0 L12 14 M6 10 L12 16 L18 10" stroke="var(--border)" stroke-width="1.5" fill="none"></path></svg></div><div><div class="flex items-center gap-2 mb-2"><span class="w-2 h-2 rounded-full" style="background:var(--primary);box-shadow:0 0 8px var(--primary)"></span><span class="text-[10px] font-semibold uppercase tracking-wider text-primary">Derived conclusions</span><div class="h-px flex-1 bg-primary/20"></div></div><div class="space-y-1.5"><div class="rounded-md px-2.5 py-1.5 flex items-center justify-between" style="background:oklch(0.5 0.12 260 / 0.1);border:1px solid oklch(0.55 0.15 260 / 0.2);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 1.8s, transform 0.4s 1.8s"><span class="text-[10px] font-mono text-primary truncate">can_reach("New York", "Paris")</span><span class="text-[8px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-full shrink-0 ml-2" style="background:oklch(0.6 0.18 160 / 0.15);color:oklch(0.75 0.15 160);animation:none">live</span></div><div class="rounded-md px-2.5 py-1.5 flex items-center justify-between" style="background:oklch(0.5 0.12 260 / 0.1);border:1px solid oklch(0.55 0.15 260 / 0.2);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 2s, transform 0.4s 2s"><span class="text-[10px] font-mono text-primary truncate">can_reach("New York", "Tokyo")</span><span class="text-[8px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-full shrink-0 ml-2" style="background:oklch(0.6 0.18 160 / 0.15);color:oklch(0.75 0.15 160);animation:none">live</span></div><div class="rounded-md px-2.5 py-1.5 flex items-center justify-between" style="background:oklch(0.5 0.12 260 / 0.1);border:1px solid oklch(0.55 0.15 260 / 0.2);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 2.2s, transform 0.4s 2.2s"><span class="text-[10px] font-mono text-primary truncate">can_reach("New York", "Sydney")</span><span class="text-[8px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-full shrink-0 ml-2" style="background:oklch(0.6 0.18 160 / 0.15);color:oklch(0.75 0.15 160);animation:none">live</span></div><div class="rounded-md px-2.5 py-1.5 flex items-center justify-between" style="background:oklch(0.5 0.12 260 / 0.1);border:1px solid oklch(0.55 0.15 260 / 0.2);opacity:0;transform:translateX(-8px);transition:opacity 0.4s 2.4s, transform 0.4s 2.4s"><span class="text-[10px] font-mono text-primary truncate">can_reach("London", "Sydney")</span><span class="text-[8px] font-semibold uppercase tracking-wider px-1.5 py-0.5 rounded-full shrink-0 ml-2" style="background:oklch(0.6 0.18 160 / 0.15);color:oklch(0.75 0.15 160);animation:none">live</span></div></div></div><div class="flex justify-center pt-1" style="opacity:0;transition:opacity 0.5s 2.6s"><div class="inline-flex items-center gap-2 border border-primary/20 rounded-full px-3.5 py-1.5"><div class="w-[5px] h-[5px] rounded-full bg-primary animate-pulse flex-shrink-0"></div><span class="font-mono text-[11px] text-primary uppercase tracking-[0.09em]">Open Source · Streaming · Traceable · Verifiable</span></div></div><p class="text-sm text-muted-foreground leading-relaxed pt-1" style="opacity:0;transition:opacity 0.5s 2.8s">Store facts. Define rules. InputLayer makes conclusions, keeps them current as data changes, and explains every result with a proof tree.</p></div><div class="flex justify-center"><a href="https://demo.inputlayer.ai/demo/request-access?kg=flights" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-sm text-primary font-medium hover:underline"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play h-3.5 w-3.5"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg>Open in Studio</a></div></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="grid gap-12 lg:grid-cols-2 items-start"><div class="space-y-6"><p class="text-sm font-semibold text-primary uppercase tracking-wider">Rules + vector search</p><h2 class="text-3xl font-bold tracking-tight">Vector search was never built for logic.</h2><p class="text-muted-foreground">Example: A customer asks "what can I buy?" Simple filtering won't cut it - their eligibility depends on account status, which depends on payment history, which depends on dispute resolutions. That's three hops of reasoning before you even get to ranking products. A vector store can filter on metadata it already has. It can't derive new facts from chains of rules.</p><p class="text-sm font-semibold text-primary uppercase tracking-wider pt-2">Best of both worlds</p><p class="text-muted-foreground">InputLayer evaluates rules and ranks by vector similarity, all in a <strong>single query</strong>. Rules derive conclusions through multi-hop reasoning - like whether a customer is eligible based on a chain of conditions. Vector search ranks what's left by relevance. It's the best of both worlds, vector search powered with reasoning.</p><a href="https://demo.inputlayer.ai/demo/request-access?kg=rules_vectors" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-sm text-primary font-medium hover:underline pt-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play h-3.5 w-3.5"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg>Open in Studio</a></div><div class="space-y-3"><div class="flex gap-0 rounded-lg border border-border overflow-hidden w-fit"><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors border-r border-border bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye h-3 w-3"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>Visual</button><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors bg-card text-muted-foreground hover:text-foreground hover:bg-secondary/50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code h-3 w-3"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>Code</button></div><div><div class="w-full"><svg viewBox="0 0 520 260" class="w-full" style="max-height:340px"><defs><radialGradient id="emb-glow-ok" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="oklch(0.7 0.18 160)" stop-opacity="0.5"></stop><stop offset="100%" stop-color="oklch(0.7 0.18 160)" stop-opacity="0"></stop></radialGradient><radialGradient id="emb-glow-fail" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="oklch(0.65 0.15 25)" stop-opacity="0.4"></stop><stop offset="100%" stop-color="oklch(0.65 0.15 25)" stop-opacity="0"></stop></radialGradient><linearGradient id="emb-rule-line" x1="0" y1="0" x2="0" y2="1"><stop offset="0%" stop-color="var(--primary)" stop-opacity="0"></stop><stop offset="50%" stop-color="var(--primary)" stop-opacity="0.6"></stop><stop offset="100%" stop-color="var(--primary)" stop-opacity="0"></stop></linearGradient></defs><line x1="80" y1="10" x2="80" y2="250" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="160" y1="10" x2="160" y2="250" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="240" y1="10" x2="240" y2="250" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="320" y1="10" x2="320" y2="250" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="400" y1="10" x2="400" y2="250" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="40" y1="50" x2="500" y2="50" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="40" y1="100" x2="500" y2="100" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="40" y1="150" x2="500" y2="150" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><line x1="40" y1="200" x2="500" y2="200" style="stroke:var(--border);stroke-width:0.5;opacity:0.3"></line><text x="260" y="258" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;opacity:0.5">embedding dimension 1</text><text x="12" y="130" text-anchor="middle" transform="rotate(-90, 12, 130)" style="fill:var(--muted-foreground);font-size:9px;opacity:0.5">embedding dimension 2</text><text x="310" y="228" text-anchor="middle" style="fill:var(--muted-foreground);font-size:10px;opacity:0;transition:opacity 0.8s 0.3s">all semantically similar to "printer ink"</text><line x1="220" y1="10" x2="220" y2="230" style="stroke:url(#emb-rule-line);stroke-width:2;stroke-dasharray:6 4;opacity:0;transition:opacity 0.6s 1.5s"></line><text x="120" y="25" text-anchor="middle" style="fill:var(--primary);font-size:9px;font-weight:600;opacity:0;transition:opacity 0.5s 1.8s">COMPATIBLE</text><text x="400" y="25" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;font-weight:600;opacity:0;transition:opacity 0.5s 1.8s">INCOMPATIBLE</text><g style="opacity:0;transition:opacity 0.5s 0.3s;transform:scale(0);transform-origin:280px 95px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.3s"><circle cx="280" cy="95" r="28" fill="url(#emb-glow-ok)" style="opacity:0;transition:opacity 0.5s 1.6s"></circle><circle cx="280" cy="95" r="6" style="fill:oklch(0.7 0.18 160);stroke:oklch(0.8 0.18 160);stroke-width:1.5;opacity:1;transition:opacity 0.5s 1.6s"></circle><text x="280" y="83" text-anchor="middle" style="fill:oklch(0.85 0.12 160);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 1.6s">Canon PG-245</text><text x="280" y="113" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 0.6s">0.83</text></g><g style="opacity:0;transition:opacity 0.5s 0.42s;transform:scale(0);transform-origin:340px 155px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.42s"><circle cx="340" cy="155" r="28" fill="url(#emb-glow-ok)" style="opacity:0;transition:opacity 0.5s 1.6800000000000002s"></circle><circle cx="340" cy="155" r="6" style="fill:oklch(0.7 0.18 160);stroke:oklch(0.8 0.18 160);stroke-width:1.5;opacity:1;transition:opacity 0.5s 1.6800000000000002s"></circle><text x="340" y="143" text-anchor="middle" style="fill:oklch(0.85 0.12 160);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 1.6800000000000002s">Canon CL-246</text><text x="340" y="173" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 0.72s">0.79</text></g><g style="opacity:0;transition:opacity 0.5s 0.54s;transform:scale(0);transform-origin:240px 150px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.54s"><circle cx="240" cy="150" r="28" fill="url(#emb-glow-ok)" style="opacity:0;transition:opacity 0.5s 1.76s"></circle><circle cx="240" cy="150" r="6" style="fill:oklch(0.7 0.18 160);stroke:oklch(0.8 0.18 160);stroke-width:1.5;opacity:1;transition:opacity 0.5s 1.76s"></circle><text x="240" y="138" text-anchor="middle" style="fill:oklch(0.85 0.12 160);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 1.76s">PG-245XL</text><text x="240" y="168" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 0.8400000000000001s">0.81</text></g><g style="opacity:0;transition:opacity 0.5s 0.6599999999999999s;transform:scale(0);transform-origin:360px 85px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.6599999999999999s"><circle cx="360" cy="85" r="28" fill="url(#emb-glow-fail)" style="opacity:0;transition:opacity 0.5s 1.84s"></circle><circle cx="360" cy="85" r="6" style="fill:oklch(0.6 0.12 25);stroke:oklch(0.7 0.12 25);stroke-width:1.5;opacity:1;transition:opacity 0.5s 1.84s"></circle><text x="360" y="73" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 1.84s">Epson 202</text><text x="360" y="103" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 0.96s">0.83</text></g><g style="opacity:0;transition:opacity 0.5s 0.78s;transform:scale(0);transform-origin:310px 50px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.78s"><circle cx="310" cy="50" r="28" fill="url(#emb-glow-fail)" style="opacity:0;transition:opacity 0.5s 1.9200000000000002s"></circle><circle cx="310" cy="50" r="6" style="fill:oklch(0.6 0.12 25);stroke:oklch(0.7 0.12 25);stroke-width:1.5;opacity:1;transition:opacity 0.5s 1.9200000000000002s"></circle><text x="310" y="38" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 1.9200000000000002s">Brother LC3013</text><text x="310" y="68" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 1.08s">0.77</text></g><g style="opacity:0;transition:opacity 0.5s 0.8999999999999999s;transform:scale(0);transform-origin:390px 130px;transition-property:opacity, transform;transition-duration:0.5s;transition-delay:0.8999999999999999s"><circle cx="390" cy="130" r="28" fill="url(#emb-glow-fail)" style="opacity:0;transition:opacity 0.5s 2s"></circle><circle cx="390" cy="130" r="6" style="fill:oklch(0.6 0.12 25);stroke:oklch(0.7 0.12 25);stroke-width:1.5;opacity:1;transition:opacity 0.5s 2s"></circle><text x="390" y="118" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;font-weight:500;opacity:0.8;transition:opacity 0.5s 2s">HP 61</text><text x="390" y="148" text-anchor="middle" style="fill:var(--muted-foreground);font-size:8px;font-family:var(--font-mono, monospace);opacity:0;transition:opacity 0.4s 1.2s">0.75</text></g><g style="opacity:0;transition:opacity 0.5s 0.1s"><circle cx="100" cy="130" r="4" style="fill:var(--primary);stroke:var(--primary);stroke-width:1.5;opacity:0.8"></circle><text x="100" y="120" text-anchor="middle" style="fill:var(--primary);font-size:9px;font-weight:600">query</text><text x="100" y="145" text-anchor="middle" style="fill:var(--primary);font-size:8px;opacity:0.7">"ink for my printer"</text></g></svg></div></div></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="grid gap-12 lg:grid-cols-2 items-start"><div class="space-y-6"><p class="text-sm font-semibold text-primary uppercase tracking-wider">Correct retraction</p><h2 class="text-3xl font-bold tracking-tight">Multiple reasons, one conclusion. Remove one - does the conclusion hold?</h2><p class="text-muted-foreground">Your customer didn't pay a bill and gets temporarily blocked from buying anything. Once that bill is paid, they should be unblocked - an easy problem to solve. But what if there are multiple facts that concluded the ban? Imagine, they also failed to confirm their credit card information. Multiple retraction paths, a harder problem to solve.</p><p class="text-muted-foreground">With InputLayer, conclusions only retract when every path is cleared. The customer stays blocked until the bill is paid and the card is verified. No premature unblocking, no manual checks.</p><a href="https://demo.inputlayer.ai/demo/request-access?kg=retraction" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-sm text-primary font-medium hover:underline pt-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play h-3.5 w-3.5"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg>Open in Studio</a></div><div class="space-y-3"><div class="flex gap-0 rounded-lg border border-border overflow-hidden w-fit"><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors border-r border-border bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye h-3 w-3"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>Visual</button><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors bg-card text-muted-foreground hover:text-foreground hover:bg-secondary/50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code h-3 w-3"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>Code</button></div><div><div class="w-full"><svg viewBox="0 0 480 300" class="w-full" style="max-height:360px"><defs><marker id="dia-arrow" viewBox="0 0 10 8" refX="10" refY="4" markerWidth="8" markerHeight="6" orient="auto"><path d="M0,0 L10,4 L0,8z" style="fill:var(--border)"></path></marker><radialGradient id="dia-glow" cx="50%" cy="50%" r="50%"><stop offset="0%" stop-color="oklch(0.7 0.18 25)" stop-opacity="0.25"></stop><stop offset="100%" stop-color="oklch(0.7 0.18 25)" stop-opacity="0"></stop></radialGradient><filter id="dia-shadow"><feDropShadow dx="0" dy="1" stdDeviation="3" flood-color="black" flood-opacity="0.2"></feDropShadow></filter></defs><style>
@keyframes dia-phase {
0%, 25% { opacity: 1; }
30%, 55% { opacity: 0.12; }
60%, 100% { opacity: 0.12; }
}
@keyframes dia-phase2 {
0%, 55% { opacity: 1; }
60%, 85% { opacity: 0.12; }
90%, 100% { opacity: 0.12; }
}
@keyframes dia-blocked {
0%, 25% { opacity: 1; }
30%, 55% { opacity: 1; }
60%, 85% { opacity: 0; }
90%, 100% { opacity: 0; }
}
@keyframes dia-label1 {
0%, 25% { opacity: 0; }
30%, 55% { opacity: 1; }
60%, 100% { opacity: 0; }
}
@keyframes dia-unblocked {
0%, 55% { opacity: 0; }
65%, 85% { opacity: 1; }
90%, 100% { opacity: 0; }
}
</style><g style="animation:none"><line x1="205" y1="62" x2="140" y2="142" style="stroke:var(--border);stroke-width:1.5" marker-end="url(#dia-arrow)"></line><text x="150" y="100" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;opacity:0.5">blocks</text></g><g style="animation:none"><line x1="275" y1="62" x2="340" y2="142" style="stroke:var(--border);stroke-width:1.5" marker-end="url(#dia-arrow)"></line><text x="330" y="100" text-anchor="middle" style="fill:var(--muted-foreground);font-size:9px;opacity:0.5">blocks</text></g><g style="opacity:0;transition:opacity 0.5s 0.2s;transform:scale(0.8);transform-origin:240px 45px;transition-property:opacity, transform;transition-duration:0.5s, 0.5s;transition-delay:0.2s"><rect x="185" y="27" width="110" height="36" rx="8" filter="url(#dia-shadow)" style="fill:var(--card);stroke:var(--border);stroke-width:1"></rect><text x="240" y="50" text-anchor="middle" style="fill:var(--foreground);font-size:12px;font-weight:600;font-family:inherit">Customer</text></g><g style="opacity:0;transition:opacity 0.5s 0.35s;transform:scale(0.8);transform-origin:110px 165px;transition-property:opacity, transform;transition-duration:0.5s, 0.5s;transition-delay:0.35s"><rect x="55" y="147" width="110" height="36" rx="8" filter="url(#dia-shadow)" style="fill:var(--card);stroke:var(--border);stroke-width:1"></rect><text x="110" y="170" text-anchor="middle" style="fill:var(--foreground);font-size:12px;font-weight:600;font-family:inherit">Unpaid Bill</text></g><g style="opacity:0;transition:opacity 0.5s 0.5s;transform:scale(0.8);transform-origin:370px 165px;transition-property:opacity, transform;transition-duration:0.5s, 0.5s;transition-delay:0.5s"><rect x="315" y="147" width="110" height="36" rx="8" filter="url(#dia-shadow)" style="fill:var(--card);stroke:var(--border);stroke-width:1"></rect><text x="370" y="170" text-anchor="middle" style="fill:var(--foreground);font-size:12px;font-weight:600;font-family:inherit">Unverified Card</text></g><g style="animation:none"><circle cx="240" cy="45" r="55" fill="url(#dia-glow)"></circle><rect x="298" y="30" width="62" height="20" rx="10" style="fill:oklch(0.6 0.18 25 / 0.25);stroke:oklch(0.7 0.18 25 / 0.6);stroke-width:0.5"></rect><text x="329" y="43" text-anchor="middle" style="fill:oklch(0.85 0.15 25);font-size:8px;font-weight:700;letter-spacing:0.06em">BLOCKED</text></g><text x="240" y="225" text-anchor="middle" style="fill:oklch(0.7 0.15 25);font-size:10px;font-weight:500;animation:none">bill paid - still blocked (card unverified)</text><text x="240" y="225" text-anchor="middle" style="fill:oklch(0.7 0.18 160);font-size:10px;font-weight:500;animation:none">both resolved - customer unblocked</text></svg></div></div></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="grid gap-12 lg:grid-cols-2 items-start"><div class="space-y-6"><p class="text-sm font-semibold text-primary uppercase tracking-wider">Incremental updates</p><h2 class="text-3xl font-bold tracking-tight">Computing conclusions in record time and at any scale.</h2><p class="text-muted-foreground">Imagine a 2,000-node dependency graph, common for business applications. If one fact changes (a record expires, a supplier is suspended, ownership changes etc.) every conclusion built on that fact needs to be updated. Without InputLayer, recomputing everything takes 11.3 seconds. InputLayer traces the impact forward and updates only what's affected, making it record-fast at any scale.</p><div class="flex gap-8 pt-2"><div><span class="text-4xl font-extrabold text-primary">6.83ms</span><p class="text-xs text-muted-foreground mt-1">incremental update</p></div><div><span class="text-4xl font-extrabold text-muted-foreground/30">11.3s</span><p class="text-xs text-muted-foreground mt-1">full recompute</p></div><div><span class="text-4xl font-extrabold text-primary">1,652x</span><p class="text-xs text-muted-foreground mt-1">faster</p></div></div><a href="https://demo.inputlayer.ai/demo/request-access?kg=incremental" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-sm text-primary font-medium hover:underline pt-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play h-3.5 w-3.5"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg>Open in Studio</a></div><div class="space-y-3"><div class="flex gap-0 rounded-lg border border-border overflow-hidden w-fit"><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors border-r border-border bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye h-3 w-3"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>Visual</button><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors bg-card text-muted-foreground hover:text-foreground hover:bg-secondary/50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code h-3 w-3"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>Code</button></div><div><div class="w-full space-y-6"><div><div class="flex items-baseline justify-between mb-2"><span class="text-sm text-muted-foreground">Full recompute</span><span class="text-sm font-mono text-foreground" style="opacity:0;transition:opacity 0.5s 1.8s">11.3s</span></div><div class="h-12 rounded-lg relative overflow-hidden" style="background:oklch(0.2 0.01 260)"><div class="h-full rounded-lg" style="width:0%;transition:width 1.5s cubic-bezier(0.22, 1, 0.36, 1) 0.5s;background:linear-gradient(90deg, oklch(0.35 0.04 260 / 0.4), oklch(0.45 0.06 260 / 0.6));border-right:2px solid oklch(0.5 0.06 260 / 0.4)"></div><div class="absolute inset-0 flex items-center justify-center" style="opacity:0;transition:opacity 0.4s 2s"><span class="text-xs font-mono" style="color:white">recomputes all 400,000 derived relationships</span></div></div></div><div><div class="flex items-baseline justify-between mb-2"><span class="text-sm font-semibold" style="color:var(--primary)">Incremental update</span><span class="text-sm font-mono font-bold" style="color:var(--primary);opacity:0;transition:opacity 0.5s 2.2s">6.83 ms</span></div><div class="h-12 rounded-lg relative overflow-hidden" style="background:oklch(0.2 0.01 260)"><div class="h-full rounded-lg relative" style="width:0%;min-width:0px;transition:width 0.8s cubic-bezier(0.22, 1, 0.36, 1) 1.2s, min-width 0.8s cubic-bezier(0.22, 1, 0.36, 1) 1.2s;background:linear-gradient(90deg, oklch(0.55 0.18 160 / 0.6), oklch(0.65 0.22 160 / 0.9));box-shadow:none;transition-property:width, min-width, box-shadow"></div></div></div><div class="flex items-center gap-4" style="opacity:0;transition:opacity 0.6s 2.5s"><div class="h-px flex-1" style="background:linear-gradient(90deg, transparent, var(--border))"></div><span class="text-2xl font-extrabold tracking-tight" style="color:var(--primary)">1,652x faster</span><div class="h-px flex-1" style="background:linear-gradient(90deg, var(--border), transparent)"></div></div></div></div></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="grid gap-12 lg:grid-cols-2 items-start"><div class="space-y-6"><p class="text-sm font-semibold text-primary uppercase tracking-wider">Provenance</p><h2 class="text-3xl font-bold tracking-tight">Always know "why" a decision was made by AI</h2><p class="text-muted-foreground">Your AI agent decides to purchase supplies and makes a mistake. Understanding the "why" becomes crucial for fixing the issue. A simple "the model predicted this decision" is not auditable, actionable or trustworthy. With InputLayer you can simply run <code class="text-xs bg-muted/50 px-1.5 py-0.5 rounded">.why</code> and get a structured proof tree: facts, rules, and the chain of reasoning that produced the decision. Or run <code class="text-xs bg-muted/50 px-1.5 py-0.5 rounded">.why_not</code> to see exactly which condition blocked something.</p><div class="flex justify-center gap-8 pt-2"><div class="text-center"><span class="text-5xl font-extrabold text-primary">100%</span><p class="text-xs text-muted-foreground mt-1">of results fully traceable</p></div><div class="text-center"><span class="text-5xl font-extrabold text-primary">100%</span><p class="text-xs text-muted-foreground mt-1">of results fully verifiable</p></div></div><a href="https://demo.inputlayer.ai/demo/request-access?kg=provenance" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-2 text-sm text-primary font-medium hover:underline pt-2"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-play h-3.5 w-3.5"><polygon points="6 3 20 12 6 21 6 3"></polygon></svg>Open in Studio</a></div><div class="space-y-3"><div class="flex gap-0 rounded-lg border border-border overflow-hidden w-fit"><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors border-r border-border bg-primary text-primary-foreground"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-eye h-3 w-3"><path d="M2.062 12.348a1 1 0 0 1 0-.696 10.75 10.75 0 0 1 19.876 0 1 1 0 0 1 0 .696 10.75 10.75 0 0 1-19.876 0"></path><circle cx="12" cy="12" r="3"></circle></svg>Visual</button><button class="inline-flex items-center gap-1.5 px-3.5 py-1.5 text-xs font-medium transition-colors bg-card text-muted-foreground hover:text-foreground hover:bg-secondary/50"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-code h-3 w-3"><polyline points="16 18 22 12 16 6"></polyline><polyline points="8 6 2 12 8 18"></polyline></svg>Code</button></div><div><div class="w-full space-y-1"><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.3s, transform 0.5s 0.3s;background:oklch(0.55 0.15 260 / 0.12)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:var(--primary);box-shadow:0 0 8px var(--primary)"></span><span class="text-xs font-mono leading-tight" style="color:var(--primary)">purchase_ok("team_a", "acme_supplies", 3200)</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:var(--primary);background:oklch(0.55 0.15 260 / 0.12);border:1px solid var(--primary)33">conclusion</span></div><div class="ml-4 border-l-2 pl-4 space-y-1 py-1" style="border-color:var(--primary)30"><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.44999999999999996s, transform 0.5s 0.44999999999999996s;background:oklch(0.55 0.12 250 / 0.1)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:oklch(0.6 0.15 250);box-shadow:0 0 8px oklch(0.6 0.15 250)"></span><span class="text-xs font-mono leading-tight" style="color:oklch(0.7 0.12 250)">purchase_ok(T,V,Amt) <- order(T,V,Amt), approved_vendor(V), budget_remaining(T,B), Amt <= B</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:oklch(0.6 0.15 250);background:oklch(0.55 0.12 250 / 0.1);border:1px solid oklch(0.6 0.15 250)33">rule</span></div><div class="ml-4 border-l-2 pl-4 space-y-1 py-1" style="border-color:oklch(0.6 0.15 250)30"><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.6s, transform 0.5s 0.6s;background:oklch(0.55 0.15 160 / 0.1)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:oklch(0.6 0.18 160);box-shadow:0 0 8px oklch(0.6 0.18 160)"></span><span class="text-xs font-mono leading-tight" style="color:oklch(0.75 0.14 160)">base_fact: order("team_a", "acme_supplies", 3200)</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:oklch(0.6 0.18 160);background:oklch(0.55 0.15 160 / 0.1);border:1px solid oklch(0.6 0.18 160)33">fact</span></div></div><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.7s, transform 0.5s 0.7s;background:oklch(0.55 0.15 160 / 0.1)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:oklch(0.6 0.18 160);box-shadow:0 0 8px oklch(0.6 0.18 160)"></span><span class="text-xs font-mono leading-tight" style="color:oklch(0.75 0.14 160)">base_fact: approved_vendor("acme_supplies")</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:oklch(0.6 0.18 160);background:oklch(0.55 0.15 160 / 0.1);border:1px solid oklch(0.6 0.18 160)33">fact</span></div></div><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.8s, transform 0.5s 0.8s;background:oklch(0.55 0.15 160 / 0.1)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:oklch(0.6 0.18 160);box-shadow:0 0 8px oklch(0.6 0.18 160)"></span><span class="text-xs font-mono leading-tight" style="color:oklch(0.75 0.14 160)">base_fact: budget_remaining("team_a", 5000)</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:oklch(0.6 0.18 160);background:oklch(0.55 0.15 160 / 0.1);border:1px solid oklch(0.6 0.18 160)33">fact</span></div></div><div><div class="flex items-center gap-2.5 py-1.5 px-2 rounded-md" style="opacity:0;transform:translateX(-16px);transition:opacity 0.5s 0.9s, transform 0.5s 0.9s;background:oklch(0.6 0.12 80 / 0.1)"><span class="w-2.5 h-2.5 rounded-full shrink-0" style="background:oklch(0.65 0.15 80);box-shadow:0 0 8px oklch(0.65 0.15 80)"></span><span class="text-xs font-mono leading-tight" style="color:oklch(0.75 0.12 80)">eval: 3200 <= 5000 -> true</span><span class="text-[9px] px-2 py-0.5 rounded-full font-semibold uppercase tracking-wider shrink-0" style="color:oklch(0.65 0.15 80);background:oklch(0.6 0.12 80 / 0.1);border:1px solid oklch(0.65 0.15 80)33">derived</span></div></div></div></div></div></div></div></div></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="max-w-2xl mb-12"><p class="text-sm font-semibold text-primary uppercase tracking-wider mb-2">The reasoning layer for AI agents</p><h2 class="text-3xl font-bold tracking-tight">Derive what's true from what's stored, before the LLM ever sees it</h2><p class="text-muted-foreground mt-4">InputLayer is the reasoning layer for AI agents. It derives conclusions from facts and rules so your agent works with what's actually true - not what a model approximates.</p></div><div class="grid gap-6 md:grid-cols-2 lg:grid-cols-4"><div class="rounded-xl border border-border bg-card p-6 space-y-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-brain h-6 w-6 text-primary"><path d="M12 5a3 3 0 1 0-5.997.125 4 4 0 0 0-2.526 5.77 4 4 0 0 0 .556 6.588A4 4 0 1 0 12 18Z"></path><path d="M12 5a3 3 0 1 1 5.997.125 4 4 0 0 1 2.526 5.77 4 4 0 0 1-.556 6.588A4 4 0 1 1 12 18Z"></path><path d="M15 13a4.5 4.5 0 0 1-3-4 4.5 4.5 0 0 1-3 4"></path><path d="M17.599 6.5a3 3 0 0 0 .399-1.375"></path><path d="M6.003 5.125A3 3 0 0 0 6.401 6.5"></path><path d="M3.477 10.896a4 4 0 0 1 .585-.396"></path><path d="M19.938 10.5a4 4 0 0 1 .585.396"></path><path d="M6 18a4 4 0 0 1-1.967-.516"></path><path d="M19.967 17.484A4 4 0 0 1 18 18"></path></svg><h3 class="text-sm font-semibold">Agent memory that reasons</h3><p class="text-sm text-muted-foreground">Your agent stores facts. InputLayer derives what follows - before the LLM prompt is built.</p></div><div class="rounded-xl border border-border bg-card p-6 space-y-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-zap h-6 w-6 text-primary"><path d="M4 14a1 1 0 0 1-.78-1.63l9.9-10.2a.5.5 0 0 1 .86.46l-1.92 6.02A1 1 0 0 0 13 10h7a1 1 0 0 1 .78 1.63l-9.9 10.2a.5.5 0 0 1-.86-.46l1.92-6.02A1 1 0 0 0 11 14z"></path></svg><h3 class="text-sm font-semibold">Beyond vector retrieval</h3><p class="text-sm text-muted-foreground">Similarity search finds context. Rules filter to what's actually true. One query, both.</p></div><div class="rounded-xl border border-border bg-card p-6 space-y-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-shield h-6 w-6 text-primary"><path d="M20 13c0 5-3.5 7.5-7.66 8.95a1 1 0 0 1-.67-.01C7.5 20.5 4 18 4 13V6a1 1 0 0 1 1-1c2 0 4.5-1.2 6.24-2.72a1.17 1.17 0 0 1 1.52 0C14.51 3.81 17 5 19 5a1 1 0 0 1 1 1z"></path></svg><h3 class="text-sm font-semibold">Auditable decisions</h3><p class="text-sm text-muted-foreground">Every conclusion traces back to the facts and rules that produced it. Ask .why on any result.</p></div><div class="rounded-xl border border-border bg-card p-6 space-y-3"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-git-branch h-6 w-6 text-primary"><line x1="6" x2="6" y1="3" y2="15"></line><circle cx="18" cy="6" r="3"></circle><circle cx="6" cy="18" r="3"></circle><path d="M18 9a9 9 0 0 1-9 9"></path></svg><h3 class="text-sm font-semibold">Memory that stays current</h3><p class="text-sm text-muted-foreground">One fact changes, derived conclusions update in milliseconds. No stale context, no recomputation.</p></div></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="space-y-6 mb-12"><p class="text-sm font-semibold text-primary uppercase tracking-wider">Comparison</p><h2 class="text-3xl font-bold tracking-tight">The reasoning layer your stack is missing</h2><p class="text-muted-foreground max-w-2xl">InputLayer is not a replacement for your data stack or your AI platform. It is the streaming reasoning layer that sits between them - filling the gap that neither vector search nor graph traversal can cover alone.</p></div><div class="overflow-x-auto"><table class="w-full border-collapse text-sm"><thead><tr class="border-b border-border"><th class="text-left py-3 px-4 font-semibold">Capability</th><th class="text-center py-3 px-4 font-semibold text-muted-foreground">Vector DBs</th><th class="text-center py-3 px-4 font-semibold text-muted-foreground">Graph DBs</th><th class="text-center py-3 px-4 font-semibold text-muted-foreground">SQL</th><th class="text-center py-3 px-4 font-semibold text-primary">InputLayer</th></tr></thead><tbody><tr class="border-b border-border/50"><td class="py-3 px-4">Vector similarity</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-yellow-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Graph traversal</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus h-4 w-4 text-yellow-500"><path d="M5 12h14"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Rule-based inference</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Recursive reasoning</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus h-4 w-4 text-yellow-500"><path d="M5 12h14"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus h-4 w-4 text-yellow-500"><path d="M5 12h14"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Incremental updates</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus h-4 w-4 text-yellow-500"><path d="M5 12h14"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Correct retraction</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr><tr class="border-b border-border/50"><td class="py-3 px-4">Explainable retrieval</td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-minus h-4 w-4 text-yellow-500"><path d="M5 12h14"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-x h-4 w-4 text-muted-foreground/40"><circle cx="12" cy="12" r="10"></circle><path d="m15 9-6 6"></path><path d="m9 9 6 6"></path></svg></span></td><td class="py-3 px-4 text-center"><span class="inline-flex justify-center w-full"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-circle-check-big h-4 w-4 text-emerald-500"><path d="M21.801 10A10 10 0 1 1 17 3.335"></path><path d="m9 11 3 3L22 4"></path></svg></span></td></tr></tbody></table></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="flex items-center justify-between mb-12"><div><p class="text-sm font-semibold text-primary uppercase tracking-wider mb-2">Go deeper</p><h2 class="text-3xl font-bold tracking-tight">The problems behind the features</h2></div><a class="hidden sm:inline-flex items-center gap-1 text-sm text-primary font-medium hover:underline" href="/blog/">All posts <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><div class="grid gap-6 md:grid-cols-2"><a class="group rounded-xl border border-border bg-card p-8 space-y-3 transition-colors hover:border-primary/30 hover:bg-card/80" href="/blog/why-vector-search-alone-fails/"><span class="text-[10px] font-semibold text-primary uppercase tracking-wider">Extends: Rules + vector search</span><h3 class="text-xl font-semibold group-hover:text-primary transition-colors">Why Vector Search Alone Fails Your AI Agent</h3><p class="text-sm text-muted-foreground leading-relaxed">Similarity scores can't encode business rules. This post walks through the ink cartridge problem and shows how rules and vectors work together in a single query.</p><span class="inline-flex items-center gap-1 text-sm text-primary font-medium pt-1">Read the deep dive <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a><a class="group rounded-xl border border-border bg-card p-8 space-y-3 transition-colors hover:border-primary/30 hover:bg-card/80" href="/blog/correct-retraction-why-delete-should-actually-delete/"><span class="text-[10px] font-semibold text-primary uppercase tracking-wider">Extends: Correct conclusion retraction</span><h3 class="text-xl font-semibold group-hover:text-primary transition-colors">Correct Retraction: Why Delete Should Actually Delete</h3><p class="text-sm text-muted-foreground leading-relaxed">When an entity is cleared from a sanctions list, which flags should retract? The diamond problem is subtle, and most systems get it wrong.</p><span class="inline-flex items-center gap-1 text-sm text-primary font-medium pt-1">Read the deep dive <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></span></a></div><div class="mt-8 text-center sm:hidden"><a class="inline-flex items-center gap-1 text-sm text-primary font-medium hover:underline" href="/blog/">All posts <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3.5 w-3.5"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div></section><section class="border-b border-border/50"><div class="mx-auto max-w-6xl px-6 py-20"><div class="relative rounded-2xl border border-border bg-gradient-to-br from-primary/10 via-transparent to-primary/5 p-12 space-y-10"><div class="text-center space-y-3"><h2 class="text-3xl font-bold tracking-tight">Open source. Run it yourself.</h2><p class="text-muted-foreground text-lg max-w-xl mx-auto">No account, no API key, no vendor lock-in. From first query to production in four steps.</p></div><div class="grid gap-4 sm:grid-cols-2 lg:grid-cols-4"><div class="relative rounded-xl border border-border bg-background/50 p-5 space-y-3"><div class="flex items-center gap-3"><span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-xs font-bold text-primary">1</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-terminal h-5 w-5 text-primary"><polyline points="4 17 10 11 4 5"></polyline><line x1="12" x2="20" y1="19" y2="19"></line></svg></div><h3 class="text-sm font-semibold">Try it in 30 seconds</h3><p class="text-xs text-muted-foreground leading-relaxed">One Docker command, instant local instance.</p><a href="https://demo.inputlayer.ai" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-xs text-primary font-medium hover:underline">Launch demo<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></div><div class="relative rounded-xl border border-border bg-background/50 p-5 space-y-3"><div class="flex items-center gap-3"><span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-xs font-bold text-primary">2</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-book-open h-5 w-5 text-primary"><path d="M12 7v14"></path><path d="M3 18a1 1 0 0 1-1-1V4a1 1 0 0 1 1-1h5a4 4 0 0 1 4 4 4 4 0 0 1 4-4h5a1 1 0 0 1 1 1v13a1 1 0 0 1-1 1h-6a3 3 0 0 0-3 3 3 3 0 0 0-3-3z"></path></svg></div><h3 class="text-sm font-semibold">Learn the syntax</h3><p class="text-xs text-muted-foreground leading-relaxed">Datalog rules, facts, queries - the full language reference.</p><a class="inline-flex items-center gap-1 text-xs text-primary font-medium hover:underline" href="/docs/">Read the docs<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3 w-3"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><div class="relative rounded-xl border border-border bg-background/50 p-5 space-y-3"><div class="flex items-center gap-3"><span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-xs font-bold text-primary">3</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-server h-5 w-5 text-primary"><rect width="20" height="8" x="2" y="2" rx="2" ry="2"></rect><rect width="20" height="8" x="2" y="14" rx="2" ry="2"></rect><line x1="6" x2="6.01" y1="6" y2="6"></line><line x1="6" x2="6.01" y1="18" y2="18"></line></svg></div><h3 class="text-sm font-semibold">Deploy with your stack</h3><p class="text-xs text-muted-foreground leading-relaxed">Self-hosted Docker or Kubernetes. Your infra, your data.</p><a class="inline-flex items-center gap-1 text-xs text-primary font-medium hover:underline" href="/docs/guides/configuration/">Deployment guide<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3 w-3"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div><div class="relative rounded-xl border border-border bg-background/50 p-5 space-y-3"><div class="flex items-center gap-3"><span class="flex items-center justify-center w-6 h-6 rounded-full bg-primary/10 text-xs font-bold text-primary">4</span><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-file-text h-5 w-5 text-primary"><path d="M15 2H6a2 2 0 0 0-2 2v16a2 2 0 0 0 2 2h12a2 2 0 0 0 2-2V7Z"></path><path d="M14 2v4a2 2 0 0 0 2 2h4"></path><path d="M10 9H8"></path><path d="M16 13H8"></path><path d="M16 17H8"></path></svg></div><h3 class="text-sm font-semibold">Go to production</h3><p class="text-xs text-muted-foreground leading-relaxed">Apache 2.0 + Commons Clause. Commercial license when you need it.</p><a class="inline-flex items-center gap-1 text-xs text-primary font-medium hover:underline" href="/commercial/">View license<!-- --> <svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-arrow-right h-3 w-3"><path d="M5 12h14"></path><path d="m12 5 7 7-7 7"></path></svg></a></div></div><div class="mx-auto max-w-lg"><div class="relative"><pre class="rounded-lg bg-[var(--code-bg)] py-4 px-12 overflow-x-auto text-sm font-mono text-center"><code><span class="syn-builtin">docker</span> run -p 8080:8080 ghcr.io/inputlayer/inputlayer</code></pre><button class="absolute top-3 right-3 inline-flex items-center gap-1.5 rounded-md border border-border bg-background/80 px-2.5 py-1.5 text-xs text-muted-foreground backdrop-blur transition-colors hover:text-foreground hover:bg-background"><svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-copy h-3.5 w-3.5"><rect width="14" height="14" x="8" y="8" rx="2" ry="2"></rect><path d="M4 16c-1.1 0-2-.9-2-2V4c0-1.1.9-2 2-2h10c1.1 0 2 .9 2 2"></path></svg>Copy</button></div></div></div></div></section><footer class="border-t border-border/50 bg-card/50"><div class="mx-auto max-w-6xl px-6 py-12"><div class="grid grid-cols-2 gap-8 md:grid-cols-4 lg:gap-12"><div><h3 class="text-sm font-semibold text-foreground mb-3">Product</h3><ul class="space-y-2"><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/#features">Features</a></li><li><a href="https://demo.inputlayer.ai" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors">Demo<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></li></ul></div><div><h3 class="text-sm font-semibold text-foreground mb-3">Resources</h3><ul class="space-y-2"><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/docs/">Documentation</a></li><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/blog/">Blog</a></li><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/docs/guides/quickstart/">Quickstart</a></li><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/docs/guides/python-sdk/">Python SDK</a></li><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/docs/guides/js-sdk/">TypeScript SDK</a></li></ul></div><div><h3 class="text-sm font-semibold text-foreground mb-3">Company</h3><ul class="space-y-2"><li><a href="https://github.com/inputlayer/inputlayer" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors">GitHub<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></li><li><a href="https://github.com/inputlayer/inputlayer/blob/main/LICENSE" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors">License<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></li><li><a class="text-sm text-muted-foreground hover:text-foreground transition-colors" href="/commercial/">Commercial Use</a></li></ul></div><div><h3 class="text-sm font-semibold text-foreground mb-3">Community</h3><ul class="space-y-2"><li><a href="https://github.com/inputlayer/inputlayer" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors">Star on GitHub<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></li><li><a href="https://github.com/inputlayer/inputlayer/blob/main/CONTRIBUTING.md" target="_blank" rel="noopener noreferrer" class="inline-flex items-center gap-1 text-sm text-muted-foreground hover:text-foreground transition-colors">Contributing<svg xmlns="http://www.w3.org/2000/svg" width="24" height="24" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" class="lucide lucide-external-link h-3 w-3"><path d="M15 3h6v6"></path><path d="M10 14 21 3"></path><path d="M18 13v6a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2V8a2 2 0 0 1 2-2h6"></path></svg></a></li></ul></div></div><div class="mt-10 flex flex-col sm:flex-row items-center justify-between gap-4 border-t border-border/50 pt-8"><div class="flex items-center gap-4"><img alt="InputLayer" width="96" height="22" decoding="async" data-nimg="1" class="flex-shrink-0" style="color:transparent" src="/inputlayer_logo_long_dark.png"/><span class="text-sm text-muted-foreground">Apache 2.0 + Commons Clause</span></div><p class="text-xs text-muted-foreground">Streaming reasoning layer for AI systems.</p></div></div></footer></div><!--$--><!--/$--><script src="/_next/static/chunks/webpack-6b4fdc854b138615.js" id="_R_" async=""></script><script>(self.__next_f=self.__next_f||[]).push([0])</script><script>self.__next_f.push([1,"1:\"$Sreact.fragment\"\n2:I[1942,[\"177\",\"static/chunks/app/layout-7e9963bf811be36b.js\"],\"ThemeProvider\"]\n3:I[7121,[],\"\"]\n4:I[4581,[],\"\"]\n5:I[1304,[],\"ClientPageRoot\"]\n6:I[6020,[\"661\",\"static/chunks/661-bf4fce185509def8.js\",\"974\",\"static/chunks/app/page-0dc1a2efed801eb2.js\"],\"default\"]\n9:I[484,[],\"OutletBoundary\"]\na:\"$Sreact.suspense\"\nc:I[484,[],\"ViewportBoundary\"]\ne:I[484,[],\"MetadataBoundary\"]\n10:I[7123,[],\"default\",1]\n:HL[\"/_next/static/media/4cf2300e9c8272f7-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/media/93f479601ee12b01-s.p.woff2\",\"font\",{\"crossOrigin\":\"\",\"type\":\"font/woff2\"}]\n:HL[\"/_next/static/css/aadfc2e4f8b6a23e.css\",\"style\"]\n"])</script><script>self.__next_f.push([1,"0:{\"P\":null,\"c\":[\"\",\"\"],\"q\":\"\",\"i\":false,\"f\":[[[\"\",{\"children\":[\"__PAGE__\",{}]},\"$undefined\",\"$undefined\",16],[[\"$\",\"$1\",\"c\",{\"children\":[[[\"$\",\"link\",\"0\",{\"rel\":\"stylesheet\",\"href\":\"/_next/static/css/aadfc2e4f8b6a23e.css\",\"precedence\":\"next\",\"crossOrigin\":\"$undefined\",\"nonce\":\"$undefined\"}]],[\"$\",\"html\",null,{\"lang\":\"en\",\"suppressHydrationWarning\":true,\"children\":[\"$\",\"body\",null,{\"className\":\"__variable_188709 __variable_9a8899 font-sans antialiased\",\"children\":[\"$\",\"$L2\",null,{\"attribute\":\"class\",\"defaultTheme\":\"dark\",\"enableSystem\":true,\"disableTransitionOnChange\":true,\"children\":[\"$\",\"$L3\",null,{\"parallelRouterKey\":\"children\",\"error\":\"$undefined\",\"errorStyles\":\"$undefined\",\"errorScripts\":\"$undefined\",\"template\":[\"$\",\"$L4\",null,{}],\"templateStyles\":\"$undefined\",\"templateScripts\":\"$undefined\",\"notFound\":[[[\"$\",\"title\",null,{\"children\":\"404: This page could not be found.\"}],[\"$\",\"div\",null,{\"style\":{\"fontFamily\":\"system-ui,\\\"Segoe UI\\\",Roboto,Helvetica,Arial,sans-serif,\\\"Apple Color Emoji\\\",\\\"Segoe UI Emoji\\\"\",\"height\":\"100vh\",\"textAlign\":\"center\",\"display\":\"flex\",\"flexDirection\":\"column\",\"alignItems\":\"center\",\"justifyContent\":\"center\"},\"children\":[\"$\",\"div\",null,{\"children\":[[\"$\",\"style\",null,{\"dangerouslySetInnerHTML\":{\"__html\":\"body{color:#000;background:#fff;margin:0}.next-error-h1{border-right:1px solid rgba(0,0,0,.3)}@media (prefers-color-scheme:dark){body{color:#fff;background:#000}.next-error-h1{border-right:1px solid rgba(255,255,255,.3)}}\"}}],[\"$\",\"h1\",null,{\"className\":\"next-error-h1\",\"style\":{\"display\":\"inline-block\",\"margin\":\"0 20px 0 0\",\"padding\":\"0 23px 0 0\",\"fontSize\":24,\"fontWeight\":500,\"verticalAlign\":\"top\",\"lineHeight\":\"49px\"},\"children\":404}],[\"$\",\"div\",null,{\"style\":{\"display\":\"inline-block\"},\"children\":[\"$\",\"h2\",null,{\"style\":{\"fontSize\":14,\"fontWeight\":400,\"lineHeight\":\"49px\",\"margin\":0},\"children\":\"This page could not be found.\"}]}]]}]}]],[]],\"forbidden\":\"$undefined\",\"unauthorized\":\"$undefined\"}]}]}]}]]}],{\"children\":[[\"$\",\"$1\",\"c\",{\"children\":[[\"$\",\"$L5\",null,{\"Component\":\"$6\",\"serverProvidedParams\":{\"searchParams\":{},\"params\":{},\"promises\":[\"$@7\",\"$@8\"]}}],null,[\"$\",\"$L9\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.MetadataOutlet\",\"children\":\"$@b\"}]}]]}],{},null,false,null]},null,false,null],[\"$\",\"$1\",\"h\",{\"children\":[null,[\"$\",\"$Lc\",null,{\"children\":\"$Ld\"}],[\"$\",\"div\",null,{\"hidden\":true,\"children\":[\"$\",\"$Le\",null,{\"children\":[\"$\",\"$a\",null,{\"name\":\"Next.Metadata\",\"children\":\"$Lf\"}]}]}],[\"$\",\"meta\",null,{\"name\":\"next-size-adjust\",\"content\":\"\"}]]}],false]],\"m\":\"$undefined\",\"G\":[\"$10\",[]],\"S\":true,\"h\":null,\"s\":\"$undefined\",\"l\":\"$undefined\",\"p\":\"$undefined\",\"d\":\"$undefined\",\"b\":\"Gi2yXAGMIyUQrmCKG4GkD\"}\n"])</script><script>self.__next_f.push([1,"7:{}\n8:\"$0:f:0:1:1:children:0:props:children:0:props:serverProvidedParams:params\"\n"])</script><script>self.__next_f.push([1,"d:[[\"$\",\"meta\",\"0\",{\"charSet\":\"utf-8\"}],[\"$\",\"meta\",\"1\",{\"name\":\"viewport\",\"content\":\"width=device-width, initial-scale=1\"}]]\n"])</script><script>self.__next_f.push([1,"11:I[6869,[],\"IconMark\"]\nb:null\nf:[[\"$\",\"title\",\"0\",{\"children\":\"InputLayer - Streaming reasoning layer for AI systems\"}],[\"$\",\"meta\",\"1\",{\"name\":\"description\",\"content\":\"Store facts, define rules, and derive everything that logically follows. Vector search, graph traversal, and incremental computation in one system.\"}],[\"$\",\"link\",\"2\",{\"rel\":\"icon\",\"href\":\"/favicon.ico\",\"sizes\":\"any\"}],[\"$\",\"link\",\"3\",{\"rel\":\"icon\",\"href\":\"/favicon_32.png\",\"sizes\":\"32x32\",\"type\":\"image/png\"}],[\"$\",\"link\",\"4\",{\"rel\":\"apple-touch-icon\",\"href\":\"/favicon_180.png\",\"sizes\":\"180x180\",\"type\":\"image/png\"}],[\"$\",\"$L11\",\"5\",{}]]\n"])</script></body></html>