1"use strict";(self.webpackChunksemantic_router_docs=self.webpackChunksemantic_router_docs||[]).push([[11111],{11633(e,n,i){i.r(n),i.d(n,{assets:()=>l,contentTitle:()=>r,default:()=>h,frontMatter:()=>c,metadata:()=>t,toc:()=>o});const t=JSON.parse('{"id":"tutorials/signal/learned/fact-check","title":"Fact Check Signal","description":"Overview","source":"@site/versioned_docs/version-v0.3/tutorials/signal/learned/fact-check.md","sourceDirName":"tutorials/signal/learned","slug":"/tutorials/signal/learned/fact-check","permalink":"/docs/v0.3/tutorials/signal/learned/fact-check","draft":false,"unlisted":false,"editUrl":"https://github.com/vllm-project/semantic-router/edit/main/website/docs/tutorials/signal/learned/fact-check.md","tags":[],"version":"v0.3","frontMatter":{},"sidebar":"tutorialSidebar","previous":{"title":"Modality Signal","permalink":"/docs/v0.3/tutorials/signal/learned/modality"},"next":{"title":"Jailbreak Signal","permalink":"/docs/v0.3/tutorials/signal/learned/jailbreak"}}');var a=i(74848),s=i(28453);const c={},r="Fact Check Signal",l={},o=[{value:"Overview",id:"overview",level:2},{value:"Key Advantages",id:"key-advantages",level:2},{value:"What Problem Does It Solve?",id:"what-problem-does-it-solve",level:2},{value:"When to Use",id:"when-to-use",level:2},{value:"Configuration",id:"configuration",level:2}];function d(e){const n={code:"code",h1:"h1",h2:"h2",header:"header",li:"li",p:"p",pre:"pre",ul:"ul",...(0,s.R)(),...e.components};return(0,a.jsxs)(a.Fragment,{children:[(0,a.jsx)(n.header,{children:(0,a.jsx)(n.h1,{id:"fact-check-signal",children:"Fact Check Signal"})}),"\n",(0,a.jsx)(n.h2,{id:"overview",children:"Overview"}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"fact-check"})," decides whether a prompt should be treated as evidence-sensitive traffic. It maps to ",(0,a.jsx)(n.code,{children:"config/fragments/signal/fact-check/"})," and is declared under ",(0,a.jsx)(n.code,{children:"routing.signals.fact_check"}),"."]}),"\n",(0,a.jsxs)(n.p,{children:["This family is learned: it relies on the fact-check classification path under ",(0,a.jsx)(n.code,{children:"global.model_catalog.modules.hallucination_mitigation.fact_check"}),"."]}),"\n",(0,a.jsx)(n.h2,{id:"key-advantages",children:"Key Advantages"}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"Separates factual verification from general domain routing."}),"\n",(0,a.jsx)(n.li,{children:"Helps decisions choose safer plugins or stronger models for evidence-sensitive traffic."}),"\n",(0,a.jsx)(n.li,{children:"Keeps verification policy visible instead of burying it inside later plugins."}),"\n",(0,a.jsxs)(n.li,{children:["Exposes both positive and negative labels such as ",(0,a.jsx)(n.code,{children:"needs_fact_check"})," and ",(0,a.jsx)(n.code,{children:"no_fact_check_needed"}),"."]}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"what-problem-does-it-solve",children:"What Problem Does It Solve?"}),"\n",(0,a.jsx)(n.p,{children:"Not every prompt needs the same level of factual grounding. If the router treats all traffic the same, creative prompts can be over-constrained while factual prompts can be under-protected."}),"\n",(0,a.jsxs)(n.p,{children:[(0,a.jsx)(n.code,{children:"fact-check"})," solves that by detecting which prompts should trigger evidence-aware routing behavior."]}),"\n",(0,a.jsx)(n.h2,{id:"when-to-use",children:"When to Use"}),"\n",(0,a.jsxs)(n.p,{children:["Use ",(0,a.jsx)(n.code,{children:"fact-check"})," when:"]}),"\n",(0,a.jsxs)(n.ul,{children:["\n",(0,a.jsx)(n.li,{children:"factual claims need stricter routing or plugins"}),"\n",(0,a.jsx)(n.li,{children:"creative prompts should bypass expensive verification paths"}),"\n",(0,a.jsx)(n.li,{children:"hallucination mitigation depends on an early routing signal"}),"\n",(0,a.jsx)(n.li,{children:"you want factuality handled as routing policy instead of post-hoc repair"}),"\n"]}),"\n",(0,a.jsx)(n.h2,{id:"configuration",children:"Configuration"}),"\n",(0,a.jsxs)(n.p,{children:["Source fragment family: ",(0,a.jsx)(n.code,{children:"config/fragments/signal/fact-check/"})]}),"\n",(0,a.jsx)(n.pre,{children:(0,a.jsx)(n.code,{className:"language-yaml",children:"routing:\n signals:\n fact_check:\n - name: needs_fact_check\n description: Queries with factual claims that should be verified against evidence.\n - name: no_fact_check_needed\n description: Creative or opinion-heavy prompts that do not need factual verification.\n"})}),"\n",(0,a.jsx)(n.p,{children:"Define only the labels your decisions will reference. The learned classifier decides which one fires."})]})}function h(e={}){const{wrapper:n}={...(0,s.R)(),...e.components};return n?(0,a.jsx)(n,{...e,children:(0,a.jsx)(d,{...e})}):d(e)}},28453(e,n,i){i.d(n,{R:()=>c,x:()=>r});var t=i(96540);const a={},s=t.createContext(a);function c(e){const n=t.useContext(s);return t.useMemo(function(){return"function"==typeof e?e(n):{...n,...e}},[n,e])}function r(e){let n;return n=e.disableParentContext?"function"==typeof e.components?e.components(a):e.components||a:c(e.components),t.createElement(s.Provider,{value:n},e.children)}}}]);
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.