{"schema_version":"1","site":"https://decosa.ai","id":"privileged-call-notes","num":"98","name":"Privileged call notes","tool_name":"Turn a client call into notes","short":"Call notes","blurb":"For solo and small-firm lawyers who take client calls all day. After the call you get an intake memo where every line cites the transcript and is checked against it, a conflicts-check list of every name heard, a time entry in 0.1-hour units with a billing narrative, follow-up tasks and an email draft in the client's language. No notetaker bot joins the call: open models run on the server or your own box, the audio is deleted once the transcript is made, and the session ends in a signed record.","status":"live","labels":{"industry":["legal"],"job":["transcribe","draft"],"input":["voice"],"deploy":["hosted","selfhost"],"status":"live","output":["text","record"],"data":["privileged","pii"],"hardware":"gpu-96","licence":"permissive"},"industries":["legal"],"runs_in":["hosted","selfhost"],"part_of":[],"built_from":["live-asr","diarize","grounding","signed-record"],"models":"Voxtral Mini 4B Realtime (live captions) · MOSS-Transcribe-Diarize 0.9B (who said what) · Qwen3.8-27B (memo, names, claim check, time entry)","where":"Self-host or the Confidential tier for real client calls; the hosted demo is for synthetic calls","hardware":"1x RTX PRO 6000 (96 GB) for the language model; Voxtral and the diarizer need about 27 GB more (a second card on our server)","final_artifact":"A cited intake memo with its claim check, a conflicts-check list, a 0.1-hour time entry, follow-up tasks, a client email draft and a signed session record.","self_host_first":false,"verification":{"receipt_coverage":"full","summary":"Receipt per model call and per transcript line; signed, hash-chained session record with the consent statement and the audio deletion","manual_qa":{"hosted":{"date":"2026-09-28","result":"pass","p50_ms":148000,"p95_ms":204000,"runs":26,"receipts_per_run":44,"cost_per_run_usd":0.017},"selfhost":{"date":"2026-09-28","result":"pass","method":"fresh clone of decosa-api into a clean directory on our server, api image built from docker/api/Dockerfile, compose api service with a named data volume on the host network, direct route, local signing, against the already-running Voxtral, MOSS diarizer and Qwen3.8; torn down after","notes":"Assembly prompt §6: TX/CA gives all-party; 400 without consent; custody call upload 39 s, 11 names incl. opposing counsel, 0.1 h, audio dropped, record verified (135 entries), 41 receipts attested. Live replay at 2x: 155 s, 52 captions, record verified (238 entries)."},"known_limits":["Not a certified transcript: speech recognition mishears names and numbers. Check anything that matters against the call.","The conflicts list is the names heard on the call; it does not search your conflicts database.","Deadlines are the ones said on the call. It recomputes the arithmetic, but it does not know court rules or limitation periods.","The time entry is the call audio's length rounded up to 0.1 hour; your firm's and the client's billing rules decide the entry.","The hosted demo is for synthetic calls. On the hosted API the server sees the audio and text in memory while it works; real client calls belong on your own box or the Confidential tier."],"nightly_covers":null},"nightly":"https://api.decosa.ai/verify/status"},"eval_summary":{"metrics":[{"name":"Memo fact recall (blind grader)","value":"89.3%","unit":null,"n":20,"split":"test","note":"Dev: 92.2%. Grader: Claude Code Opus 5.5, blind, saw only script, ground truth and memo."},{"name":"Memo lines invented / with a wrong detail","value":"0 / 12 of 796","unit":null,"n":796,"split":"test","note":"7 of the 12 in one call (a year the call never said); the no-model year check now flags them"},{"name":"Conflicts-name recall, strict / phonetic","value":"89.6% / 94.0%","unit":null,"n":20,"split":"test","note":"Strict misses are mostly speech-recognition spellings; no invented names"},{"name":"Dated deadlines found","value":"100%","unit":null,"n":20,"split":"test","note":"Dates overall: 92.0%"},{"name":"Recording notice heard, right","value":"26/26","unit":null,"n":26,"split":"synthetic","note":"All 26 calls (dev and test). 6 calls never mention recording and are flagged"},{"name":"Time entry = call length rounded up to 0.1 h","value":"26/26","unit":null,"n":26,"split":"synthetic","note":"All 26 calls (dev and test). Narrative acceptable 20/20, client email 14/20 (blind grader)"}],"dataset":"26 synthetic attorney-client calls (6 dev, 20 test) in 9 practice areas, 3 in Spanish, voiced with Decosa house voices (Kokoro-82M) with crosstalk and a telephone band on half; run through the diarizer and the full pipeline.","held_out":true,"caveats":["Synthetic calls voiced by TTS (cleaner than real phone audio); the same model family wrote the scripts and runs the pipeline.","Fixes after cold-user tests and after the first test runs were mechanisms (spelled names, the client on the list, a weekday and year check), not tuned to test values; the year check was applied post-hoc to the final outputs.","The claim check blocks invented lines but marked only 7 of 12 lines the grader called wrong (with the year check).","Time savings are estimates from two blind persona tests, not measured with real lawyers."],"date":"2026-09-28","doc_url":null},"stack":{"summary":"For solo and small-firm lawyers (family, personal injury, estate, criminal, employment) who take client calls all day and lose the recap and the 0.1-hour entry afterwards. Record the call live or upload the recording. When it ends, an open diarization model writes who said what, and the language model writes an intake memo where every line cites the transcript: facts, parties, dates, deadlines (recomputed when the call gives a start date and a number of days), issues, goals, documents to request, action items and open questions. A claim check marks lines the call does not support and leaves them out of the clean memo. You also get every name heard for your conflicts check, a time entry rounded up to 0.1 hour with a billing narrative, follow-up tasks and a client email in the client's language. A state-aware recording-consent step comes first; the audio is dropped once the transcript is made, and the session ends in a signed record. For real client calls, self-host it or run it on the Confidential tier.","tagline":"A client call becomes a cited intake memo, a conflicts list, a 0.1-hour time entry and follow-ups, with no notetaker bot and the audio deleted.","deployment":"hosted-or-self-host","regulatory_note":"Not legal advice (checked 28 Sep 2026). Recording consent: federal law and most states allow a party to record a call (one-party consent, 18 U.S.C. 2511(2)(d): https://www.law.cornell.edu/uscode/text/18/2511); California and eight other states require every party's consent (Cal. Penal Code 632: https://leginfo.legislature.ca.gov/faces/codes_displaySection.xhtml?lawCode=PEN&sectionNum=632), and five states are mixed. The tool asks where each side is, applies the strictest rule, and will not record until the consent step is done; it picks a prompt from a dated table and does not decide whether a recording is lawful. Confidentiality: ABA Model Rule 1.6(c) asks lawyers to make reasonable efforts to prevent unauthorized disclosure of client information, and ABA Formal Opinion 512 (29 Jul 2024) applies the duties of competence and confidentiality to generative AI tools. Sending client calls to a third-party notetaker raises privilege-waiver questions; this tool runs on open models on your own box or in an attested enclave, but you decide whether that meets your duties. Not a certified transcript: check names, dates and amounts against the call.","components":[{"id":"asr-live","role":"Live captions during the call (streaming, no speakers)","name":"Voxtral Mini 4B Realtime","hf_repo":"mistralai/Voxtral-Mini-4B-Realtime-2602","license":"Apache-2.0","params":"4.4B","quant":"BF16","vram_gb":24,"memory_gb_estimate":null,"engine":"vLLM realtime WebSocket (/v1/realtime)","receipt_coverage":"partial","in_hosted_demo":true,"tiers":["all"],"alternative_to":null},{"id":"asr-pass2","role":"After hang-up (or on an upload): who said what, one line per turn, each with its own receipt","name":"MOSS-Transcribe-Diarize 0.9B","hf_repo":"OpenMOSS-Team/MOSS-Transcribe-Diarize","license":"Apache-2.0","params":"0.9B","quant":"BF16","vram_gb":null,"memory_gb_estimate":null,"engine":"transformers (trust_remote_code) + moss_transcribe_diarize package; hosted: decosa-diarize service, 127.0.0.1:8092, GPU0","receipt_coverage":"partial","in_hosted_demo":true,"tiers":["standard","best"],"alternative_to":null},{"id":"llm","role":"Speaker roles, live intake checklist, cited memo, conflicts names, claim check, time-entry narrative and client email","name":"Qwen3.8-27B (NVIDIA NVFP4)","hf_repo":"nvidia/Qwen3.8-27B-NVFP4","license":"Apache-2.0","params":"27.8B","quant":"NVFP4 (MLP) + FP8 (attention/GDN), FP8 KV cache, MTP speculative decoding k=3","vram_gb":57,"memory_gb_estimate":null,"engine":"vLLM 0.29.0","receipt_coverage":"strong","in_hosted_demo":true,"tiers":["standard","best"],"alternative_to":null},{"id":"llm-lite","role":"Lite tier: the same text steps on the official FP8 checkpoint","name":"Qwen3.8-27B (official FP8)","hf_repo":"Qwen/Qwen3.8-27B-FP8","license":"Apache-2.0","params":"27.8B","quant":"FP8","vram_gb":null,"memory_gb_estimate":null,"engine":"vLLM 0.29.0 (same decosa-llm image)","receipt_coverage":"strong","in_hosted_demo":false,"tiers":["lite"],"alternative_to":null},{"id":"llm-best","role":"Best tier: memo writer and claim checker","name":"DeepSeek-V4-Flash (NVIDIA NVFP4)","hf_repo":"nvidia/DeepSeek-V4-Flash-NVFP4","license":"MIT","params":"284B","quant":"NVFP4 experts + FP8 (about 159–176 GB of weights)","vram_gb":192,"memory_gb_estimate":null,"engine":"vLLM B12X community build, TP2 on 2× RTX PRO 6000, MTP draft fixed by the kit's patches","receipt_coverage":"none","in_hosted_demo":false,"tiers":["best"],"alternative_to":null}],"tiers":[{"id":"lite","label":"Lite · one 48 GB card, uploaded calls","summary":"Diarized transcript and the full memo, conflicts, time entry and tasks on the FP8 checkpoint; no live captions.","components":["asr-pass2","llm-lite"],"hardware":"1x L40S or RTX 6000 Ada 48 GB (not measured)","quality_evidence":[{"metric":"call memo quality","value":"not measured yet","source":null}],"latency_note":"not measured yet","in_hosted_demo":false,"receipt_coverage":"partial","receipt_note":"Direct route: every model call and transcript line is attested by the box's key; no gateway receipts.","hosting":null},{"id":"standard","label":"Standard · the hosted demo","summary":"Live captions and checklist, then speakers, cited memo, claim check, conflicts, time entry, tasks and email, all in a signed record.","components":["asr-live","asr-pass2","llm"],"hardware":"1x RTX PRO 6000 Blackwell 96 GB (hosted demo uses two cards on our server)","quality_evidence":[{"metric":"memo fact recall, 20 synthetic test calls","value":"89.3%","source":"blind grader, 20 synthetic test calls; decosa-api docs/evals/privileged-call-notes.md (28 Sep 2026)"},{"metric":"conflicts-name recall, 20 synthetic test calls","value":"89.6% strict / 94.0% phonetic","source":"20 synthetic test calls; decosa-api docs/evals/privileged-call-notes.md (28 Sep 2026)"},{"metric":"invented memo items left after the claim check","value":"0 of 796","source":"blind grader on the full memo; 12 items (1.5%) had a wrong detail; decosa-api docs/evals/privileged-call-notes.md (28 Sep 2026)"}],"latency_note":"Measured on the busy shared gateway: a couple of minutes after a short call (calls in parallel); under a minute when idle. The claim check (dozens of short model calls) is the slowest stage.","in_hosted_demo":true,"receipt_coverage":"strong","receipt_note":"Language-model calls: gateway-signed receipts. Speech: attested receipts from decosa-api's key.","hosting":null},{"id":"best","label":"Best · DeepSeek-V4-Flash writes and checks","summary":"Standard plus a larger memo writer and checker on two more 96 GB cards.","components":["asr-live","asr-pass2","llm-best"],"hardware":"2x RTX PRO 6000 96 GB for the writer plus the standard card","quality_evidence":[{"metric":"call memo quality","value":"not measured yet","source":null}],"latency_note":"not measured yet","in_hosted_demo":false,"receipt_coverage":"partial","receipt_note":"Self-host only: model calls are attested by the box's own key.","hosting":null}],"alternates":[],"services":[{"name":"decosa-api","port":8445,"image":"${DECOSA_REGISTRY}/decosa-api:0.1.0","purpose":"Lane engine and HTTP/WS API (/ws/live, /demo/replay, /healthz). No GPU. Binds 127.0.0.1 by default."},{"name":"decosa-llm","port":8000,"image":"${DECOSA_REGISTRY}/decosa-llm:0.1.0","purpose":"vLLM OpenAI endpoint for Qwen3.8-27B, served as qwen3.8-27b. Internal to the compose network."},{"name":"decosa-asr","port":8000,"image":"${DECOSA_REGISTRY}/decosa-asr:0.1.0","purpose":"vLLM realtime endpoint for Voxtral Mini 4B Realtime (served as voxtral-realtime). Internal to the compose network."},{"name":"decosa-diarize","port":8092,"image":null,"purpose":"MOSS-Transcribe-Diarize 0.9B pass-2 service (decosa-api services/diarize, GPU0, loopback only). decosa-api runs pass 2 on stop: diarize, role map, cited note, verifier. No published image yet; self-host builds it (see the assemble prompt)."}],"tools":[{"name":"State recording-consent table (51 jurisdictions, checked 28 Sep 2026)","url":null,"license":"Decosa, links to official statute pages","purpose":"Picks the consent prompt: the strictest rule of the states involved. 28 of 51 entries re-read on the official page; the rest are marked not re-checked."},{"name":"Deadline arithmetic (calendar and business days, US federal holidays)","url":null,"license":"Decosa (decosa_api.verticals.claims.dates)","purpose":"Recomputes a deadline said on the call from its start date and number of days, and flags a mismatch."},{"name":"ABA UTBMS activity code A106","url":"https://www.americanbar.org/groups/law_practice/resources/uniform-task-based-management-system/","license":"public code set","purpose":"Activity code on the time entry: Communicate (with client)."}],"hardware":[{"tier":"1x RTX PRO 6000 Blackwell 96 GB","fits":true,"notes":"Hosted demo layout on our server: Voxtral and MOSS-TD on GPU0, Qwen3.8-27B on GPU1 (two cards). The one-card compose split is not measured."},{"tier":"1x L40S / RTX 6000 Ada 48 GB, lite tier","fits":null,"notes":"Not measured. FP8 language model plus the diarizer for uploaded calls; live captions need Voxtral as well."}],"latency":[{"lane":"memo, checks, time entry after a 2.5-3 min call ends (upload path)","typical_ms":148000,"source":"p50 148 s, p95 204 s for calls with 2.6 min median audio, 3 calls in parallel on the busy shared gateway; an idle single call took 38-46 s; decosa-api docs/evals/privileged-call-notes.md (28 Sep 2026)"}],"benchmark":null,"notes":[]},"buyer_facts":[{"label":"Who it's for","value":"Solo and small-firm lawyers who take client calls all day, and the assistants who write the intake recaps and time entries."},{"label":"Data retention","value":"The call audio is held in memory only and dropped as soon as the transcript is made; its hash and the time go into the signed record. Nothing is written to disk. The memo, transcript and signed record are returned to you; the server keeps receipts (hashes), not the text."},{"label":"No notetaker bot","value":"Nothing joins your call. Record in the browser or upload the recording afterwards; speech recognition, speaker labels and the memo run on open models: on Decosa's hosted service, on your own box, or in an attested enclave."},{"label":"Recording consent","value":"You say where you and the client are before recording. When any state involved requires every party's consent (or is mixed or unknown), recording stays off until you confirm everyone agreed."},{"label":"Typical run cost","value":"A few cents or less per call at list price (a few dozen receipted model calls for a short call), plus speech recognition on Decosa's hosted service. Measured on synthetic calls."},{"label":"What leaves the box (self-host)","value":"Nothing, with DECOSA_LLM_ROUTE=direct. Anyone can verify a record offline or with POST /record/verify."}],"data_handling":{"page":"/data#privileged-call-notes","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":false,"summary":"TLS to Decosa's server, then decrypted and processed by Decosa's API server, with the open models run by NEAR AI through OpenRouter, with Reka AI as the only fallback under Decosa's account.","gpus":"operator-contracted","third_parties":[],"retention":"The call audio is held in memory only and dropped as soon as the transcript is made; its hash and the time go into the signed record. Nothing is written to disk. The memo, transcript and signed record are returned to you; the server keeps receipts (hashes), not the text.","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/privileged-call-notes","input":"callnotes","lanes":[{"id":"live","title":"Intake checklist","kind":"markdown"},{"id":"final_transcript","title":"Transcript (speakers)","kind":"markdown"},{"id":"privacy","title":"Audio and privacy","kind":"markdown"},{"id":"memo","title":"Intake memo (cited)","kind":"markdown"},{"id":"verifier","title":"Claim check","kind":"markdown"},{"id":"conflicts","title":"Conflicts check names","kind":"markdown"},{"id":"time_entry","title":"Time entry","kind":"markdown"},{"id":"tasks","title":"Follow-up tasks","kind":"markdown"},{"id":"email","title":"Follow-up email draft","kind":"markdown"},{"id":"record","title":"Signed record","kind":"markdown"}],"samples":[{"n":1,"id":"cn-family-custody-ortiz","title":"Custody modification call, family law (synthetic)","deep_link":"/legal/privileged-call-notes?sample=1&autorun=0"},{"n":2,"id":"cn-criminal-dui-reyes","title":"DUI consult in Spanish, criminal defense (synthetic)","deep_link":"/legal/privileged-call-notes?sample=2&autorun=0"},{"n":3,"id":"cn-pi-slip-fall-thibodeaux","title":"Slip-and-fall intake, personal injury (synthetic)","deep_link":"/legal/privileged-call-notes?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/privileged-call-notes-hosted.md","selfhost":"/prompts/privileged-call-notes-selfhost.md","assemble":"/prompts/privileged-call-notes-assemble.md","mac":null},"rehearsal":{"bundle":"/samples/privileged-call-notes.zip","bundle_url":"https://decosa.ai/samples/privileged-call-notes.zip","folder":"/samples/privileged-call-notes/","expected":"/samples/privileged-call-notes/expected.json","files":["/samples/privileged-call-notes/expected.json","/samples/privileged-call-notes/inputs/consent.json","/samples/privileged-call-notes/inputs/transcript.txt"],"bytes":3199,"checks":["the memo has at least eight facts","opposing counsel is on the conflicts list","the 159-second call is a 0.1-hour entry","the entry uses the client-communication code","the recording notice was heard on the call","every memo line was checked against the call","a run without a consent statement is refused","the signed record verifies","a changed record fails","every model call has a signed receipt"],"licence":"Synthetic call written for Decosa: every person, firm and court is fictional. Part of decosa-api, AGPL-3.0-or-later.","about":"A synthetic call between a family lawyer and a father who wants to change a custody schedule (fictional people; the transcript is the diarizer output of a recording voiced by Decosa house voices). The memo must cite the call, the conflicts list must carry opposing counsel, the time entry must be 0.1 hour under UTBMS A106, a run without a consent statement must be refused, and the signed record must verify and fail when changed.","run":{"containers":"docker compose exec api python scripts/rehearse.py privileged-call-notes","checkout":"python scripts/rehearse.py privileged-call-notes --bundle privileged-call-notes.zip --base-url http://127.0.0.1:8445","mac":".venv/bin/python scripts/rehearse.py privileged-call-notes"},"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=privileged-call-notes","data":"/api/hardware.json","tiers":[{"id":"lite","gpu_gb":37.6,"basis":"estimate","unknown":[]},{"id":"standard","gpu_gb":85.6,"basis":"estimate","unknown":[]},{"id":"best","gpu_gb":220,"basis":"estimate","unknown":[]}],"mac":null},"links":{"page":"/legal/privileged-call-notes","json":"/use-cases/privileged-call-notes.json","metrics":"/metrics/privileged-call-notes","console":"/legal/privileged-call-notes","console_sample":"/legal/privileged-call-notes?sample=1&autorun=0","stack":"/legal/privileged-call-notes#stack","try_live":"/legal/privileged-call-notes","watch":"/legal/privileged-call-notes","build":"/legal/privileged-call-notes#build","self_host":"/legal/privileged-call-notes#self-host","prompts":{"hosted":"/prompts/privileged-call-notes-hosted.md","selfhost":"/prompts/privileged-call-notes-selfhost.md","assemble":"/prompts/privileged-call-notes-assemble.md","mac":null}}}