{"schema_version":"1","site":"https://decosa.ai","id":"patent-claim-support","num":"36","name":"Patent claim-support checker","tool_name":"Chart claim support in a patent spec","short":"Claim support","blurb":"Maps every element of every claim to the specification paragraphs that describe it, with a support strength and the model's reason, one receipted call per element. Code checks antecedent basis, claim references and claim terms the specification never uses. The output is a claim chart, an issue list and a signed record, for a registered practitioner to review before filing or in a response.","status":"live","labels":{"industry":["legal"],"job":["review"],"input":["text","files"],"deploy":["selfhost"],"status":"live","output":["data","record"],"data":["privileged","confidential"],"hardware":"gpu-96","licence":"permissive"},"industries":["legal"],"runs_in":["selfhost"],"part_of":[],"built_from":["signed-record"],"models":"Qwen3.8-27B","where":"Self-host for unfiled inventions; hosted for published patents only","hardware":"1× RTX PRO 6000 (96 GB) or 1× RTX 5090 (32 GB) for the model; parsing and the code checks run on CPU","final_artifact":"A claim chart (CSV or Markdown) mapping each element to its supporting paragraphs, an issue list, and a signed record and practitioner ledger.","self_host_first":true,"verification":{"receipt_coverage":"full","summary":"Receipt per element; signed record and practitioner ledger","manual_qa":{"hosted":{"date":"2026-09-25","result":"pass","p50_ms":7800,"p95_ms":null,"runs":null,"receipts_per_run":13,"cost_per_run_usd":0.0204},"selfhost":{"date":"2026-09-25","result":"pass","method":"Fresh clone of the branch into a clean directory, docker build of docker/api/Dockerfile, the api service with a named volume, pointed at the already-running local vLLM (Qwen3.8-27B NVFP4 on 127.0.0.1:8114) through host networking; then torn down.","notes":"Verified on 2026-09-25: the image builds, the service starts healthy, the planted sample runs end to end on the direct route (13 attested calls, 3.4 s): claims 2 and 5 have no support, the antecedent, reference and term issues are found, the signed record verifies and fails when one strength is changed, the CSV export works, and no claim text reaches the logs. The model server's own startup was not re-verified (no new GPU load)."},"known_limits":["Labels are Claude's (an AI agent), not a registered practitioner's; antecedent flags were judged by separate Claude agents with a written rubric.","The support map finds supporting paragraphs well but flags only 5 of the 13 held-out elements the labels call partly supported; most misses are judgment calls such as a feature described only in another embodiment.","About half of the antecedent-basis flags on randomly drawn granted claims are genuine slips (36 of 66 held out); the rest are implicit or inherent references a practitioner would accept.","Run-to-run variation on the hosted gateway: the same element can come back partly supported in one run and unsupported in the next; both are flagged.","Text only (no DOCX, PDF or figures); specifications over 48,000 characters are read as the best-matching paragraphs, which can miss support far from the element's words."],"nightly_covers":null},"nightly":"https://api.decosa.ai/verify/status"},"eval_summary":{"metrics":[{"name":"Supported-or-not call agrees with the labels","value":"93.4%","unit":null,"n":166,"split":"test","note":"100% on the 146 elements labelled as clear calls. Three runs: 93.6%, 91.0%, 93.4%. Dev: 97.8%."},{"name":"Supported elements where a cited paragraph is one the labels list","value":"100%","unit":null,"n":150,"split":"test","note":"Share of cited paragraphs the labels list: 93.8%"},{"name":"Partly supported elements flagged (recall) / flags that match a label (precision)","value":"5 of 13 / 5 of 8","unit":null,"n":166,"split":"test","note":"Partial support is what it misses; all misses and false flags are judgment calls."},{"name":"Planted support removal flagged","value":"5 of 6","unit":null,"n":6,"split":"test","note":"Over two runs 10 of 12; both misses cite a paragraph that still describes the element."},{"name":"Antecedent-basis flags that are genuine, random granted claims","value":"55% (36 of 66)","unit":null,"n":66,"split":"heldout","note":"Round 4: 55 patents, 891 claims, drawn after the last rule change. About 1.2 flags per patent."},{"name":"Cost per application (list price)","value":"$0.053","unit":null,"n":null,"split":"test","note":"166 calls over 6 patents, about 6,000 prompt tokens per element"}],"dataset":"Eight granted US patents (public domain): 2 dev, 6 test (212 claim elements; 166 test), labelled per element by two separate Claude agents. Antecedent set: 213 randomly drawn granted patents in four rounds (3,478 claims); rounds 1-3 used to improve the rules, round 4 held out.","held_out":true,"caveats":["Labels are by AI agents, not a registered practitioner; no examiner reasons for allowance to check against.","Granted claims were examined, so most elements are expected to be supported.","Partial support is often missed (5 of 13): treat \"supported\" as \"here is where to look\", not \"no 112(a) problem\".","Antecedent recall is measured only on planted errors; precision may differ in other art units.","Not measured: long specifications over 48,000 characters, the 32 GB card tier."],"date":"2026-09-25","doc_url":"https://decosa.ai/metrics/evals/patent-claim-support"},"stack":{"summary":"Paste a specification and its claims. Code splits the claims into elements, checks that every \"the\" or \"said\" has an antecedent, that every dependent claim points at an earlier claim that exists, and that the claims use no word the specification never uses. An open model then reads each element against the specification, one receipted call per element, and names the paragraphs that describe it ([0012] style) with a support strength: supported, partly supported, or no support found. The result is a claim chart, an issue list and a signed record with hashes, verdicts, paragraph numbers and receipt ids but no claim text, plus a signed ledger of the practitioner's agree or disagree per element. It is evidence for a registered practitioner, who decides.","tagline":"Every claim element mapped to the specification paragraphs that describe it, with antecedent-basis, claim-reference and claim-term checks, one receipt per element and a signed record.","deployment":"self-host-first","regulatory_note":"A review aid for registered patent practitioners, not legal advice or a patentability opinion. The written-description and enablement requirements are in 35 U.S.C. 112(a) and MPEP 2163-2164; lack of antecedent basis is an indefiniteness question under 112(b) (MPEP 2173.05(e)); dependent and multiple dependent claims follow 112(d)-(e) and 37 CFR 1.75(c); claim terms must find clear support or antecedent basis in the description (37 CFR 1.75(d)(1)). A supported element here means the model found paragraphs that describe it, not that the claim is allowable. The USPTO's guidance on AI-based tools in practice (89 FR 25609, 11 Apr 2024; still the current practitioner guidance in the Federal Register as of 25 Sep 2026) applies the duty of candor and the signature rule (37 CFR 11.18) to AI-assisted papers: the signer must review them and relying on an AI tool alone is not a reasonable inquiry; it reminds practitioners to prevent disclosure of client information through AI tools (37 CFR 11.106) and warns that releasing controlled technical data to a foreign person can be a deemed export (15 CFR 734.13(b)); it says there is no general duty to tell the Office an AI tool was used unless asked, but information on AI use that is material to patentability or inventorship must be disclosed (the inventorship guidance it cites was revised on 28 Nov 2025, 90 FR 54636). Run unfiled applications on your own machine; the hosted demo takes published patents and applications only (US patent text is public domain). Model licence: Apache-2.0 (Qwen3.8-27B). Checked 25 Sep 2026.","components":[{"id":"checker","role":"Checker: claim parser, antecedent basis, claim references, claim terms, the claim chart, signed record and ledger (no model; CPU)","name":"decosa-api patent module (decosa_api/verticals/patent)","hf_repo":null,"license":"AGPL-3.0-or-later","params":null,"quant":null,"vram_gb":0,"memory_gb_estimate":null,"engine":"Python 3.12; the grounding checker (vertical 17) for evidence selection and verdict parsing","receipt_coverage":"partial","in_hosted_demo":null,"tiers":["lite","standard","wanted"],"alternative_to":null},{"id":"judge","role":"Model: reads each claim element against the specification and names the supporting paragraphs","name":"Qwen3.8-27B (NVFP4)","hf_repo":"nvidia/Qwen3.8-27B-NVFP4","license":"Apache-2.0","params":"27.8B","quant":"NVFP4 (MLP NVFP4, GDN/attention FP8) + FP8 KV cache; MTP head, 3 draft tokens","vram_gb":20,"memory_gb_estimate":null,"engine":"vLLM 0.29.0, temperature 0, thinking off, prefix caching (the specification is the shared prefix of every element's prompt)","receipt_coverage":"strong","in_hosted_demo":true,"tiers":["standard"],"alternative_to":null},{"id":"glm-judge","role":"Stronger open model for the support map (wanted)","name":"GLM-5.3-Flash","hf_repo":null,"license":"MIT","params":null,"quant":null,"vram_gb":null,"memory_gb_estimate":170,"engine":"SGLang (vLLM does not run it on these Blackwell cards yet)","receipt_coverage":"none","in_hosted_demo":false,"tiers":["wanted"],"alternative_to":null},{"id":"super-judge","role":"One-card second judge from another model family","name":"Nemotron-3-Super-120B-A12B (NVFP4)","hf_repo":"nvidia/NVIDIA-Nemotron-3-Super-120B-A12B-NVFP4","license":"NVIDIA Nemotron Open Model License","params":"120B","quant":"NVFP4 (80.3 GB of weights)","vram_gb":null,"memory_gb_estimate":80,"engine":"vLLM (sm_120 support unconfirmed: smoke-test first)","receipt_coverage":"none","in_hosted_demo":false,"tiers":["alternates"],"alternative_to":null}],"tiers":[{"id":"lite","label":"Lite · code checks only, any CPU","summary":"Antecedent basis, claim references and claim terms, with no model and no GPU (support: false, or POST /patent/parse). No support map.","components":["checker"],"hardware":"Any CPU","quality_evidence":[{"metric":"Antecedent-basis flags that are genuine, on randomly drawn granted US claims (held out: rules frozen before the set was drawn)","value":"54.5% (36 of 66 flags; 55 patents, 891 claims)","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25; each flag judged by a separate Claude agent with a written rubric, not a practitioner"},{"metric":"Planted defects found by code in 6 test patents: antecedent errors / broken claim references / renamed terms","value":"11 of 11 / 12 of 12 / 6 of 6","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25"}],"latency_note":"measured: well under a second per application.","in_hosted_demo":true,"receipt_coverage":"partial","receipt_note":"No model calls, so no receipts; the record is signed by the instance.","hosting":null},{"id":"standard","label":"Standard · one 96 GB card (measured; hosted demo)","summary":"Qwen3.8-27B on an RTX PRO 6000 reads every element against the specification; the code checks run alongside. Also fits a 32 GB card (estimate).","components":["checker","judge"],"hardware":"1x RTX PRO 6000 96 GB","quality_evidence":[{"metric":"Elements where the model's supported-or-not call matches the labels, 6 held-out granted patents","value":"93.4% of 166 (100.0% of the 146 labelled as clear calls)","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25; labels written by Claude (an AI agent) reading each specification, not by a practitioner"},{"metric":"Supported elements where a cited paragraph is one the labels list / share of cited paragraphs that are","value":"100.0% / 93.8% (150 elements)","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25"},{"metric":"Elements the labels call only partly supported that the model also flags (recall) / flags that match a label (precision)","value":"5 of 13 / 5 of 8","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25; most misses are limitations the labels mark as judgment calls, such as a feature described only in a different embodiment"},{"metric":"Planted support removal: all paragraphs describing one element deleted, element flagged","value":"5 of 6 (the miss: a paragraph the removal left in still describes the element, checked by reading it; an earlier run missed a different patent the same way)","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25"},{"metric":"Dev patents (2, used to write the prompt): agreement / flag recall","value":"97.8% / 3 of 3","source":"decosa-api docs/evals/patent-claim-support.md, 2026-09-25"}],"latency_note":"measured on our server, shared gateway: seconds to over a minute per whole granted patent, rising with its elements (the specification is served from the prefix cache).","in_hosted_demo":true,"receipt_coverage":"strong","receipt_note":"Hosted: every element's call has its own gateway-signed receipt, listed in the signed record.","hosting":null},{"id":"wanted","label":"Wanted · a GLM-5.3-Flash judge on your own hardware","summary":"A stronger legal-reasoning model from another family for the partial-support calls the standard model misses (5 of 13 found). Specifications before filing stay on your hardware, never on community providers. Not served yet.","components":["checker","judge","glm-judge"],"hardware":"Your own hardware: 2x 96 GB cards (NVFP4, about 170-186 GB, unconfirmed) or a Mac with 192 GB or more (MLX 4-bit, 165 GB). Estimate; GLM's SGLang SM120 build hung on our server.","quality_evidence":[{"metric":"This eval, same protocol","value":"not measured yet","source":null}],"latency_note":"not measured yet","in_hosted_demo":false,"receipt_coverage":"none","receipt_note":"On your own hardware its calls are attested by the box's key only: not a hosted model there, so no gateway receipts. Never sent to community providers.","hosting":"own-hardware"}],"alternates":[{"id":"one-card-judge","label":"A second judge on one card","components":["super-judge"],"hardware":"1x RTX PRO 6000 96 GB (80 GB of weights)","use":"A cross-family second judge that fits beside the 27B, so we would host it ourselves. sm_120 support unconfirmed.","status":"not served"}],"services":[{"name":"decosa-api","port":8445,"image":"${DECOSA_REGISTRY}/decosa-api:<tag>","purpose":"GET /patent/info, /patent/samples; POST /patent/check (SSE or JSON), /patent/parse (code checks only); POST /patent/runs/{id}/decisions; GET /patent/runs/{id}/export?format=csv|md|record|ledger. Keeps the application in memory for the request and runs for one hour, never on disk; logs counts only."},{"name":"vLLM","port":8114,"image":"vllm/vllm-openai@sha256:c2914767605584b6d8f45686b82de173ecc99e781897aa3d0a66dacd72c51ae1","purpose":"Qwen3.8-27B NVFP4 behind our gateway (hosted) or called directly (self-host)."}],"tools":[{"name":"USPTO patent full text (via the Google Patents public page)","url":"https://patents.google.com/","license":"US patent text is a US government work in the public domain","purpose":"The demo samples and the eval: 8 granted patents with labelled claim elements, and 213 randomly drawn granted patents for the antecedent-basis check."},{"name":"scripts/patent_eval.py and docs/evals/patent-claim-support.md","url":null,"license":"Apache-2.0","purpose":"Runs the support-map eval against the labels, plants defects in six test patents, scores the antecedent check on four rounds of granted claims, and writes the metrics and cost."},{"name":"POST /record/verify","url":null,"license":"Apache-2.0","purpose":"Checks the signed record or ledger and names the first entry that was changed. The console also verifies it in your browser."}],"hardware":[{"tier":"Any CPU (code checks only)","fits":true,"notes":"Measured: the parser and all code checks for a 20-claim application take well under a second on one core; no GPU."},{"tier":"1x RTX 5090 32 GB","fits":true,"notes":"Qwen3.8-27B NVFP4 needs about 20 GB of weights plus KV cache for a 48,000-character specification (about 12k tokens). Estimate: same model and prompts as the measured card, not run here on a 5090."},{"tier":"1x RTX PRO 6000 Blackwell 96 GB","fits":true,"notes":"Measured on our server: the eval, the hosted demo and the self-host check ran on this card, shared with other services the whole time."}],"latency":[{"lane":"13 elements (the planted demo sample), hosted gateway route","typical_ms":7800,"source":"measured on our server 2026-09-25: 5.9-9.2 s over 6 runs of the planted sample with the gateway lightly loaded; 36 s once while other evaluation jobs loaded the shared gateway"},{"lane":"13 elements, self-hosted (clean clone, container build, direct route)","typical_ms":3400,"source":"measured on our server 2026-09-25, one run"},{"lane":"A whole granted patent (17-50 elements), hosted gateway route","typical_ms":18800,"source":"measured on our server 2026-09-25: 15-88 s over the 6 test patents, 6 element calls in flight, shared gateway"}],"benchmark":null,"notes":["The claims never count as their own support: the model reads only the description. Original claims are part of the disclosure as filed, so an element supported only by an original claim is shown as unsupported for the attorney to judge.","The antecedent check is deliberately lenient: shortened references (\"the beads\" after \"a plurality of polymer beads\"), verb forms (\"the comparison\" after \"comparing\"), inherent properties (\"the surface of\"), idioms, superlatives, spelling slips and defined acronyms become notes, not issues. It still misses nothing we planted, and about half of what it flags on granted claims is a genuine slip.","A line that only opens a list (\"the laser source further comprises:\") is shown but not judged; its sub-elements are.","Specifications up to 48,000 characters go to the model whole; longer ones are read as the best-matching paragraphs and their neighbours (BM25 from the grounding checker), which can miss support far from the element's words.","Not included yet: drafting a missing paragraph from an invention disclosure, reference numerals against the figures, and DOCX or PDF input (paste text)."]},"buyer_facts":[{"label":"Data retention","value":"The application is held in memory for the request; the run (chart, issues, no specification) for one hour, for the token or key that made it. Nothing is written to disk; logs carry counts only."},{"label":"What leaves the box","value":"Self-hosted: nothing. Hosted demo: the text goes to the model through our gateway, which is why the hosted demo is for published patents and applications only."},{"label":"Model cost per application","value":"A few cents per application on average at the gateway's list price (measured on granted patents); GPU time only when self-hosted."},{"label":"Input","value":"Specification and claims as text (or one pasted application cut at \"What is claimed is:\"). Paragraphs numbered like [0012] are cited by number. Hosted limits: 150,000 characters of specification, 60 claims, 120 elements per request; raise them on your own box."},{"label":"Output","value":"A claim chart (CSV or Markdown) with the supporting paragraphs and a strength per element, an issue list (support, antecedent basis, claim references, terms), a signed record and a signed ledger of the practitioner's decisions."}],"hosted_now":{"needs":["qwen3.8-27b"],"off":[],"live_by_default":true,"live_status":"https://api.decosa.ai/status"},"data_handling":{"page":"/data#patent-claim-support","self_host":{"level":"confidential","leaves":"nothing","summary":"Runs on your machine; nothing is sent to Decosa or a third party by default."},"hosted":{"level":"operator-processed","demo_only":true,"summary":"Hosted demo on sample or public data only; self-host for real data.","gpus":"operator-contracted","third_parties":[],"retention":"The application is held in memory for the request; the run (chart, issues, no specification) for one hour, for the token or key that made it. Nothing is written to disk; logs carry counts only.","used_for_training":false,"encrypted_while_processed":false},"sealed_tier":{"applies":false,"note":"The sealed tier (raw chat only, never use-case pipelines) is paused at launch (/docs/sealed-tier)."},"external_calls":[]},"console":{"href":"/legal/patent-claim-support","input":"patent","lanes":[{"id":"chart","title":"Claim chart","kind":"list"},{"id":"issues","title":"Issues","kind":"list"},{"id":"record","title":"Signed record","kind":"json"}],"samples":[{"n":1,"id":"ladar-planted","title":"Ladar planted","deep_link":"/legal/patent-claim-support?sample=1&autorun=0"},{"n":2,"id":"ladar","title":"Ladar","deep_link":"/legal/patent-claim-support?sample=2&autorun=0"},{"n":3,"id":"filter","title":"Filter","deep_link":"/legal/patent-claim-support?sample=3&autorun=0"}],"deep_link_params":{"sample":"1-based index into samples, or a sample id","autorun":"1 = start the run once the sample is loaded; 0 (default) = only preselect","reduce-motion":"1 = turn off animations"}},"api":{"base":"https://api.decosa.ai","contract":"/api/contract.json","contract_markdown":"/api/contract.md","reference":"/docs/api","keys":"/account/keys"},"prompts":{"hosted":"/prompts/patent-claim-support-hosted.md","selfhost":"/prompts/patent-claim-support-selfhost.md","assemble":"/prompts/patent-claim-support-assemble.md","mac":"/prompts/patent-claim-support-mac.md"},"rehearsal":{"bundle":"/samples/patent-claim-support.zip","bundle_url":"https://decosa.ai/samples/patent-claim-support.zip","folder":"/samples/patent-claim-support/","expected":"/samples/patent-claim-support/expected.json","files":["/samples/patent-claim-support/expected.json","/samples/patent-claim-support/inputs/filter-claims.txt","/samples/patent-claim-support/inputs/filter-spec.txt","/samples/patent-claim-support/inputs/ladar-planted-claims.txt","/samples/patent-claim-support/inputs/ladar-planted-spec.txt"],"bytes":15456,"checks":["planted: claim 3 depends on a later claim (12)","planted: claim 7 depends on a claim that does not exist (30)","planted: \"the clock signal\" in claim 5 has no antecedent","planted: \"data highway\" (claim 6) is a term the specification never uses","planted new matter: the Stirling cryocooler in claim 2 is not in the specification","claim 1 of the filter patent is split into four elements","no element's support check errors","element 1.3 is supported","element 1.4 is supported with a cited paragraph","\"opening\" is flagged as a claim term the specification never uses","the signed record verifies","a record with its warning count changed no longer verifies","every model call has a signed receipt"],"licence":"Public domain: US patent text from the USPTO (via the Google Patents public pages); the defects in the US 10,000,000 B2 copy were planted for Decosa. Part of decosa-api, which will be released under AGPL-3.0-or-later; until then the source is on request.","about":"Two public-domain US patents as plain text. First, code-only checks on claims 1 to 8 of US 10,000,000 B2 with planted defects: claim 3 depends on a later claim, claim 7 on a claim that does not exist, \"the clock signal\" has no antecedent and \"the data highway\" is a term the specification never uses; all must be found. Then claim 1 of US 11,043,724 B2 is checked element by element against its specification: every element gets a receipted verdict, at least two are supported with a cited paragraph, \"opening\" is flagged as a claim term the specification never uses, and the signed record verifies.","run":{"containers":"docker compose exec api python scripts/rehearse.py patent-claim-support","checkout":"python scripts/rehearse.py patent-claim-support --bundle patent-claim-support.zip --base-url http://127.0.0.1:8445","mac":".venv/bin/python scripts/rehearse.py patent-claim-support"},"guidance":"Set up with a coding agent (we recommend Claude Code with Claude Opus 5.5; any capable coding agent works) on mock data only, run the rehearsal until every check passes, then run your own data locally yourself. Never give the agent real data during setup."},"hardware_fit":{"check":"/self-host/hardware?use=patent-claim-support","data":"/api/hardware.json","tiers":[{"id":"lite","gpu_gb":0,"basis":null,"unknown":[]},{"id":"standard","gpu_gb":57.6,"basis":"stack","unknown":[]},{"id":"wanted","gpu_gb":249.6,"basis":"estimate","unknown":[]},{"id":"alternate-one-card-judge","gpu_gb":81.6,"basis":"estimate","unknown":[]}],"mac":{"fit":"full","memory_gb":32}},"links":{"page":"/legal/patent-claim-support","json":"/use-cases/patent-claim-support.json","metrics":"/metrics/patent-claim-support","console":"/legal/patent-claim-support","console_sample":"/legal/patent-claim-support?sample=1&autorun=0","stack":"/legal/patent-claim-support#stack","try_live":"/legal/patent-claim-support","watch":"/legal/patent-claim-support","build":"/legal/patent-claim-support#build","self_host":"/legal/patent-claim-support#self-host","prompts":{"hosted":"/prompts/patent-claim-support-hosted.md","selfhost":"/prompts/patent-claim-support-selfhost.md","assemble":"/prompts/patent-claim-support-assemble.md","mac":"/prompts/patent-claim-support-mac.md"}}}