ในบทความนี้
In this post
ตอนที่ 9 จากสิบตอน: คิด p50/p95 และต้นทุนต่องานสำเร็จพร้อม fallback, review และ rework แยกข้อมูลสมมติออกจากผลวัดและไม่แทน usage ที่หายด้วยศูนย์
ฉบับร่างสำหรับตรวจในเครื่อง • โค้ดเริ่มต้นใช้ offline fixtures เท่านั้น ตัวเลขเป็นสถานการณ์สมมติ ไม่ใช่ผลวัด Jev จริง และยังไม่มีการพิสูจน์ว่าระบบเร็วขึ้นหรือประหยัดลง
เป้าหมายและสิ่งที่ต้องพร้อม
แนะนำให้เริ่มจาก companion repo และคู่มือ README บน GitHub ด้านล่าง ส่วน ZIP ของเว็บไซต์เป็นสำเนาออฟไลน์อีกทางหนึ่ง คำสั่ง Node ใช้เหมือนกันเมื่อรันจากรากโครงการ GitHub repository · README / Quickstart
ใช้โครงการ Support Ticket Decision Lab เดิมตลอดสิบตอน เตรียม Node 22.18 ขึ้นไป terminal และโฟลเดอร์ที่เขียนไฟล์ได้ รันคำสั่งจากราก repo ai-core-jev-tutorial หรือจากไดเรกทอรี ai-core-jev-lab หากใช้ ZIP ของเว็บไซต์ ไม่ต้อง npm install สำหรับออฟไลน์ เผื่อเวลาลงมือและทดลองเปลี่ยนโค้ดประมาณ 20–40 นาที โดยเวลาที่แสดงบนหัวบทความเป็นเวลาอ่านเนื้อหา ไม่รวมเวลาลองทำ
ดาวน์โหลดโครงการพร้อมโค้ดและ tests (ZIP) · อ่านคู่มือโครงการ
ตอนนี้เน้นไฟล์ src/metrics.mjs และใช้ผลจาก fixture เพื่อทดสอบการประกอบระบบเท่านั้น ยังไม่ได้ติดตั้ง SDK หรือใช้ key ในการจัดทำบทเรียน เส้นทาง live ที่แยกไว้ในตอนท้ายยังไม่ได้ทดสอบผ่าน API จริง
ทำความเข้าใจขอบเขตนี้
บิล token ต่ำลงไม่ได้แปลว่าต้นทุนปฏิบัติการต่ำลงเสมอ ต้องนับทุก inference attempt, fallback, retry, งานโครงสร้างพื้นฐาน การตรวจของคน และความเสียหายหรือการทำใหม่ที่รู้ แล้วหารด้วยจำนวนงานสำเร็จตามนิยามชัด รายงานในโครงการใช้จำนวนงานส่งคิวอัตโนมัติที่ถูกต้อง ไม่นับ review ที่ยังไม่จบเป็นงานสำเร็จ จึงห้ามเรียกตัวหารนี้ว่าการแก้ ticket จบครบวงจร
เมื่อตรวจวันที่ 23 ตุลาคม 2026 หน้าโมเดลทางการระบุ input ของ Jev ที่ 0.042 ดอลลาร์สหรัฐต่อล้าน tokens และไม่คิด output tokens ต้องตรวจใหม่ก่อนใช้เงินจริง ส่วนอัตรา baseline ค่าโครงสร้างพื้นฐาน ค่าแรงผู้ตรวจ เวลาตรวจ และค่าทำงานใหม่ใน prices.example.json เป็นสมมติฐานที่แต่งเพื่อสอน แก้เพื่อทดลองสถานการณ์ได้ แต่ไม่ใช่ราคาตลาดปัจจุบันหรือผลวัด
latency ก็ต้องมีนิยามนาฬิกา รายงาน fixture รวมมิลลิวินาทีสมมติของแต่ละ attempt รวม fallback แบบตามลำดับ แล้วหา p50/p95 ด้วย nearest-rank ส่วน harnessWallMs วัดเวลาตัว evaluator ในเครื่อง ไม่ใช่เวลา inference หากวัด live ให้เก็บเวลา end-to-end, concurrency, warm-up, ขนาด input, นโยบาย cache, retry และจำนวนตัวอย่าง
ลงมือทีละเจ็ดขั้น
ขั้นที่ 1
เปิด prices.example.json ก่อนคำนวณ อ่าน status และ note เป็นส่วนหนึ่งของ data contract ตรวจหน่วยต่อล้านให้ดี เพราะการนำจำนวน token คูณราคาต่อล้านโดยไม่หารหนึ่งล้านทำให้ผิดถึงล้านเท่า
ขั้นที่ 2
รัน metrics tests ซึ่งตรวจ nearest-rank percentiles การแปลงหน่วยล้าน token usage ที่ไม่ทราบ และตัวหารเมื่อไม่มีงานสำเร็จ การหารด้วยศูนย์ควรเป็น null หรือระบุว่าไม่กำหนด ไม่ใช่ต้นทุนศูนย์ที่ชวนให้เข้าใจว่าระบบทำงานสำเร็จฟรี
ขั้นที่ 3
รัน validation เพื่อดูสถานการณ์ต้นทุนที่กำหนดข้อมูลครบ อ่าน knownInferenceUSD แยกจาก modeledOverheadUSD ในงานสมมตินี้ สมมติฐานต้นทุน review อาจมากกว่าค่า token มาก นี่คือบทเรียนเกี่ยวกับแบบจำลองบัญชี ไม่ใช่หลักฐานว่าองค์กร support จริงจ่ายเท่านี้
ขั้นที่ 4
รัน test split และดู T-036 ซึ่งตั้งใจให้ usage ของ Jev เป็น null harness ยังเก็บต้นทุน inference บางส่วนที่ทราบ แต่ระบุว่าต้นทุนรวมและต้นทุนต่องานสำเร็จยังไม่ทราบ การแทน null ด้วยศูนย์จะทำให้ hybrid ดูถูกลงตรงจุดที่ขาดหลักฐานพอดี
ขั้นที่ 5
เทียบ p50 กับ p95 และ fallback rate เส้นทางปกติที่เร็วอาจอยู่ร่วมกับ tail ที่ช้าเมื่อมีการเรียกโมเดลตัวที่สอง การวัดจริงต้องคุม concurrency และชุดงานให้ตรงกัน แล้วรายงานการแจกแจงหรือ quantiles พอที่จะไม่เล่าเรื่องสำเร็จจาก median อย่างเดียว
ขั้นที่ 6
ใช้ด่านคุณภาพที่เท่ากันก่อนจัดอันดับต้นทุน hybrid ของ fixture ตั้งใจไม่ชนะทุกตัวชี้วัด จึงใช้ยืนยันการประหยัดไม่ได้ หากจะอ้างผลจริง ต้องให้ accuracy, coverage และการจัดการคำขอใช้คนผ่านก่อน แล้วค่อยเทียบต้นทุนที่บันทึกครบ ณ จุดทำงานนั้น
ขั้นที่ 7
เขียนข้อสรุปให้ตรงหลักฐาน ระบุว่ารันแบบจำลองหรือ live ใช้สมมติฐานใด ต้นทุนส่วนไหนยังไม่ทราบ และผ่าน quality gate หรือไม่ ถ้ายังไม่ได้วัด Jev จริง ข้อสรุปคือ harness พร้อมทดสอบสมมติฐาน ไม่ใช่ Jev ประหยัดไปแล้วกี่เปอร์เซ็นต์
ไฟล์และคำสั่งที่ใช้
โค้ดประกอบบน GitHub: ai-core-jev-tutorial · README. ใช้ repo เป็นทางหลักในการทำแบบฝึก ไฟล์ต่อไปนี้ตรึงกับรุ่นที่ทดสอบแล้ว src/metrics.mjs · config/prices.example.json
เปิดไฟล์นี้เทียบกับ source ใน ZIP ก่อนแก้ ข้อความต่อไปนี้คือโค้ดที่ใช้ในโครงการจริง ไม่ใช่ pseudocode ผลโมเดลเป็น input ให้โค้ดตรวจและวางเส้นทางต่อ ไม่ใช่สิทธิ์ให้ข้ามด่านอนุมัติ
export function percentile(values,p) {if(!values.length)return null;const s=[...values].sort((a,b)=>a-b);return s[Math.max(0,Math.ceil(p*s.length)-1)];}
export function money(attempt,prices) {
if(!attempt.usage||!attempt.costComplete)return null;const p=attempt.provider==='jev'?'jev':'baseline';
return (attempt.usage.input*prices[p+'InputPerMillionUSD']+attempt.usage.output*prices[p+'OutputPerMillionUSD'])/1e6;
}
export function summarize(rows,prices) {
const n=rows.length,auto=rows.filter(r=>r.result.status==='proposed');
const correct=r=>r.result.decision?.route===r.ticket.goldRoute,success=r=>correct(r)&&!r.ticket.goldHuman;
const successful=auto.filter(success).length,valid=rows.filter(r=>r.result.decision),human=rows.filter(r=>r.ticket.goldHuman);
const costs=rows.flatMap(r=>r.result.attempts).map(a=>money(a,prices));
const reviews=n-auto.length,wrongAuto=auto.length-successful;
const knownInferenceUSD=costs.reduce((s,c)=>s+(c??0),0);
const modeledOverheadUSD=n*prices.infrastructurePerTaskUSD+reviews*prices.assumedReviewSeconds/3600*prices.reviewHourlyUSD+wrongAuto*prices.reworkPerWrongAutoTaskUSD;
const complete=costs.every(c=>c!==null);
const latencies=rows.map(r=>{const xs=r.result.attempts.map(a=>a.scenarioLatencyMs);return xs.every(Number.isFinite)?xs.reduce((a,b)=>a+b,0):null;});
const calibration=rows.filter(r=>r.result.decision?.probabilities),bins=[];
for(let k=0;k<5;k++) {
const members=calibration.filter(r=>Math.min(4,Math.floor(r.result.decision.probabilities[r.result.decision.route]*5))===k);
if(members.length)bins.push({n:members.length,meanTopProbability:members.reduce((s,r)=>s+r.result.decision.probabilities[r.result.decision.route],0)/members.length,accuracy:members.filter(correct).length/members.length});
}
const ece=calibration.length?bins.reduce((s,b)=>s+b.n/calibration.length*Math.abs(b.meanTopProbability-b.accuracy),0):null;
const ratio=(a,b)=>b?a/b:null;
return {evidence:'OFFLINE FIXTURE SIMULATION — NOT MEASURED JEV PERFORMANCE OR SAVINGS',n,
rawRouteAccuracy:ratio(valid.filter(correct).length,valid.length),coverage:ratio(auto.length,n),selectiveAccuracy:ratio(successful,auto.length),abstentionRate:ratio(reviews,n),
humanRequestMissRate:ratio(human.filter(r=>r.result.status==='proposed').length,human.length),fallbackRate:ratio(rows.filter(r=>r.result.attempts.some(a=>a.provider==='baseline')&&r.result.attempts.some(a=>a.provider==='jev')).length,n),
successfulAutomatedTasks:successful,unresolvedReviewTasks:reviews,
latency:{label:'fictional per-attempt scenario milliseconds, summed for sequential fallback',p50:percentile(latencies.filter(Number.isFinite),0.5),p95:percentile(latencies.filter(Number.isFinite),0.95)},
calibration:{metric:'5-bin ECE of selected-option probability; not Choice confidence',n:calibration.length,ece,bins,note:'Synthetic cases only; no production calibration claim.'},
cost:{currency:'USD',knownInferenceUSD,modeledOverheadUSD,allAttemptsKnown:complete,modeledTotalUSD:complete?knownInferenceUSD+modeledOverheadUSD:null,
costPerSuccessfulTaskUSD:complete&&successful?(knownInferenceUSD+modeledOverheadUSD)/successful:null,
denominator:'correct automatic routing tasks that did not ignore a human request; reviews unresolved',note:'All usage/latencies/review/rework inputs are scenario fixtures. Unknown usage or hidden retries makes total unknown.'}};
}
คำสั่งออฟไลน์ต่อไปนี้รันได้โดยไม่ใช้ SDK หรือ API key:
node --test --test-reporter=spec test/metrics.test.mjs
node src/cli.mjs evaluate --split validation --save
node src/cli.mjs evaluate --split test --save
node src/cli.mjs demo --mode jev --ticket T-036
ตรวจผลที่ควรได้
ฟิลด์ต้นทุน validation ควรเป็นตัวเลขจำกัดเมื่อใช้ fixture สมมติที่ครบ ส่วน test ของ Jev กับ hybrid มี attempt ที่ไม่ทราบ usage ทำให้ฟิลด์ต้นทุนรวมเป็น null ค่า p50 สมมติที่เล็กกว่าไม่ใช่การวัดความเร็ว live และไม่ควรรายงานเปอร์เซ็นต์ประหยัดจากผลเหล่านี้
ตรวจชื่อ test และเส้นทางปฏิเสธด้วย อย่าดูเพียง exit code หรือ label สุดท้าย ข้อมูลที่ไม่ทราบต้องยังระบุว่าไม่ทราบ และรายงานทุกชิ้นต้องแยกผลจำลองออกจากข้อมูลที่วัดจริง
แก้ปัญหาเมื่อผลไม่ตรง
ถ้ารายงานศูนย์ดอลลาร์เมื่อ usage หาย ให้ตรวจการจัดการ null ถ้า p95 ดีขึ้นหลังตัด errors ให้ใส่ request ที่ล้มกลับในประชากร ถ้ายังไม่วัดเวลาตรวจ ให้ติดป้ายเป็นสมมติฐานและดู sensitivity ไม่ยกคู่ค่าแรงกับเวลาที่แต่งไว้คู่เดียวมาเป็นต้นทุนจริง
หากเปิดบทเรียนผ่าน Python http.server ให้ใช้ลิงก์ .html ที่ท้ายตอนเมื่อจำเป็น ลิงก์ chip แบบไม่มีนามสกุลในแถบซีรีส์อาศัยการ resolve ของ GitHub Pages และเป็นข้อจำกัด preview ที่มีอยู่เดิม ไม่ใช่ปัญหาในโค้ด Node
เปลี่ยนหนึ่งอย่างแล้วทดสอบ
เปลี่ยน assumedReviewSeconds ในไฟล์ราคาสำเนาทดลองแล้วรัน validation ใหม่ อธิบายว่าทำไมค่า inference เปลี่ยนเล็กน้อยอาจสู้ภาระ review ไม่ได้ อย่าเติม usage ของ T-036 ด้วยเลขเดาเพื่อสร้างยอดครบ หลักฐานที่ไม่ทราบต้องยังไม่ทราบจนกว่าจะเก็บได้
ทำการแก้ไขในสำเนาทดลอง เก็บไฟล์ต้นฉบับไว้เทียบ แล้วคืนค่าก่อนเริ่มตอนถัดไป หากทดลองกับ provider จริงภายหลัง ให้สร้าง experiment record ใหม่แทนเขียนทับผลเดิม
จุดตรวจถัดไป
ก่อนขยับต่อ ให้บอกได้ว่าไฟล์ใดเป็น contract ไฟล์ใดเป็น policy หลักฐานใดได้จากการรัน และข้อใดยังไม่ได้ทดสอบกับโมเดลจริง การแยกสี่อย่างนี้เป็นงานวิศวกรรมที่สำคัญกว่าการได้เดโมที่ดูไหลลื่น
แหล่งอ้างอิงและหลักฐาน
เอกสารและ source ที่ใช้
ตรวจเอกสาร Jev วันที่ 23 ตุลาคม 2026 ข้อเท็จจริง API และราคาอาจเปลี่ยน ให้ตรวจใหม่ก่อนใช้ live ส่วนผลของ fixture เป็นข้อมูลสอนที่ระบุไว้ในโครงการ
สรุปที่นำไปใช้ต่อ
- contract จำกัดโครงสร้าง ส่วน evaluation ตรวจพฤติกรรม
- อ่าน coverage คุณภาพ เวลา และต้นทุนรวมควบคู่กัน
- ข้อเสนอไม่ใช่ผลที่อนุมัติแล้ว และหลักฐาน mock ไม่ใช่หลักฐานโมเดล live
Part 9 of ten: Calculate p50/p95 and task cost with fallback, review and rework; distinguish fictional scenarios from measured results.
Local review draft • Default code uses offline fixtures. Numbers are fictional scenarios, not measured Jev results. Faster performance and lower cost remain hypotheses.
Outcome and prerequisites
Start with the companion repository and its detailed README. The website ZIP remains an alternative offline snapshot; run the same Node commands from either project root. GitHub repository · README / Quickstart
Use the same Support Ticket Decision Lab throughout the series. Have Node 22.18+, a terminal and a writable directory. Run commands from the cloned ai-core-jev-tutorial root, or the extracted ai-core-jev-lab folder if using the website ZIP. Offline work needs no npm install. Allow roughly 20–40 minutes for experiments; the article reading-time label excludes hands-on work.
Download the complete code and tests (ZIP) · Project README
This chapter focuses on src/metrics.mjs. Fixture outputs test the integration mechanics only. The author did not install the SDK or use an API key while preparing the lab. The separately documented live path has not been tested against the API.
How this boundary works
A lower token bill is not automatically a lower operating cost. Count every inference attempt, fallback, retry, infrastructure operation, human review and known failure or rework. Divide by a declared successful-task denominator. Our downloadable report uses correct automatic routing tasks; unresolved reviews are not counted as successful completions, so do not label that denominator end-to-end ticket resolution.
As checked on 23 October 2026, the official model page lists Jev input at USD 0.042 per million tokens and output tokens free. Recheck before spending. The baseline rates, infrastructure amount, reviewer wage, review duration and rework charge in prices.example.json are fictional assumptions. They are editable scenario inputs, not current market quotes or measurements.
Latency also needs a clock definition. The fixture report sums fictional per-attempt milliseconds, including sequential fallback, and computes nearest-rank p50 and p95. harnessWallMs measures the local evaluator itself and is not inference latency. For live measurements record end-to-end wall time, concurrency, warm-up, input sizes, cache policy, retry behavior and sample counts.
Seven practical steps
Step 1 — Open prices.example.json before calculating
Open prices.example.json before calculating. Read its status and note fields as part of the data contract. Check the per-million unit: multiplying a token count by a per-million price without dividing by one million introduces a million-fold error.
Step 2 — Run the metrics tests
Run the metrics tests. They verify nearest-rank percentiles, the million-token conversion, unknown usage and the zero-success denominator. A division-by-zero result should be null or explicitly undefined, never a zero-cost claim suggesting the system completed work for free.
Step 3 — Run validation to see a fully specified cost scenario
Run validation to see a fully specified cost scenario. Read knownInferenceUSD separately from modeledOverheadUSD. In this artificial workload, review assumptions can dominate token prices. That is a lesson about the accounting model, not evidence that this is what a real support organization pays.
Step 4 — Run the test split and inspect T-036
Run the test split and inspect T-036. Its Jev usage is deliberately null. The harness retains known inference components but marks the full modeled total and cost per successful task unknown. Replacing null with zero would make the hybrid look cheaper precisely when evidence is missing.
Step 5 — Compare p50 with p95 and fallback rate
Compare p50 with p95 and fallback rate. A fast common path can coexist with a slow tail when a second model is called. Hold concurrency and workload fixed for real measurements, and report the full distribution or enough quantiles to prevent a median-only success story.
Step 6 — Apply the equal-quality gate before ranking costs
Apply the equal-quality gate before ranking costs. The fixture hybrid intentionally does not dominate every metric, so it cannot justify a savings claim. For a real claim, require acceptable accuracy, coverage and human-request handling first, then compare complete cost at that operating point.
Step 7 — Write an honest result statement
Write an honest result statement. Say whether the run was simulated or live, which assumptions were used, which costs remain unknown and whether the quality gate passed. If you have not measured live Jev, the conclusion is that the harness is ready to test the hypothesis, not that Jev saved a stated percentage.
Files and commands
Companion code on GitHub: ai-core-jev-tutorial · README. Use the companion repository as the default working copy. These file links pin the tested revision. src/metrics.mjs · config/prices.example.json
Compare this file with the source in the ZIP before editing. The listing is the implementation used by the lab, not pseudocode. Model output is input to validation and routing code; it grants no permission to bypass approval.
export function percentile(values,p) {if(!values.length)return null;const s=[...values].sort((a,b)=>a-b);return s[Math.max(0,Math.ceil(p*s.length)-1)];}
export function money(attempt,prices) {
if(!attempt.usage||!attempt.costComplete)return null;const p=attempt.provider==='jev'?'jev':'baseline';
return (attempt.usage.input*prices[p+'InputPerMillionUSD']+attempt.usage.output*prices[p+'OutputPerMillionUSD'])/1e6;
}
export function summarize(rows,prices) {
const n=rows.length,auto=rows.filter(r=>r.result.status==='proposed');
const correct=r=>r.result.decision?.route===r.ticket.goldRoute,success=r=>correct(r)&&!r.ticket.goldHuman;
const successful=auto.filter(success).length,valid=rows.filter(r=>r.result.decision),human=rows.filter(r=>r.ticket.goldHuman);
const costs=rows.flatMap(r=>r.result.attempts).map(a=>money(a,prices));
const reviews=n-auto.length,wrongAuto=auto.length-successful;
const knownInferenceUSD=costs.reduce((s,c)=>s+(c??0),0);
const modeledOverheadUSD=n*prices.infrastructurePerTaskUSD+reviews*prices.assumedReviewSeconds/3600*prices.reviewHourlyUSD+wrongAuto*prices.reworkPerWrongAutoTaskUSD;
const complete=costs.every(c=>c!==null);
const latencies=rows.map(r=>{const xs=r.result.attempts.map(a=>a.scenarioLatencyMs);return xs.every(Number.isFinite)?xs.reduce((a,b)=>a+b,0):null;});
const calibration=rows.filter(r=>r.result.decision?.probabilities),bins=[];
for(let k=0;k<5;k++) {
const members=calibration.filter(r=>Math.min(4,Math.floor(r.result.decision.probabilities[r.result.decision.route]*5))===k);
if(members.length)bins.push({n:members.length,meanTopProbability:members.reduce((s,r)=>s+r.result.decision.probabilities[r.result.decision.route],0)/members.length,accuracy:members.filter(correct).length/members.length});
}
const ece=calibration.length?bins.reduce((s,b)=>s+b.n/calibration.length*Math.abs(b.meanTopProbability-b.accuracy),0):null;
const ratio=(a,b)=>b?a/b:null;
return {evidence:'OFFLINE FIXTURE SIMULATION — NOT MEASURED JEV PERFORMANCE OR SAVINGS',n,
rawRouteAccuracy:ratio(valid.filter(correct).length,valid.length),coverage:ratio(auto.length,n),selectiveAccuracy:ratio(successful,auto.length),abstentionRate:ratio(reviews,n),
humanRequestMissRate:ratio(human.filter(r=>r.result.status==='proposed').length,human.length),fallbackRate:ratio(rows.filter(r=>r.result.attempts.some(a=>a.provider==='baseline')&&r.result.attempts.some(a=>a.provider==='jev')).length,n),
successfulAutomatedTasks:successful,unresolvedReviewTasks:reviews,
latency:{label:'fictional per-attempt scenario milliseconds, summed for sequential fallback',p50:percentile(latencies.filter(Number.isFinite),0.5),p95:percentile(latencies.filter(Number.isFinite),0.95)},
calibration:{metric:'5-bin ECE of selected-option probability; not Choice confidence',n:calibration.length,ece,bins,note:'Synthetic cases only; no production calibration claim.'},
cost:{currency:'USD',knownInferenceUSD,modeledOverheadUSD,allAttemptsKnown:complete,modeledTotalUSD:complete?knownInferenceUSD+modeledOverheadUSD:null,
costPerSuccessfulTaskUSD:complete&&successful?(knownInferenceUSD+modeledOverheadUSD)/successful:null,
denominator:'correct automatic routing tasks that did not ignore a human request; reviews unresolved',note:'All usage/latencies/review/rework inputs are scenario fixtures. Unknown usage or hidden retries makes total unknown.'}};
}
Run these offline commands without an SDK installation or API key:
node --test --test-reporter=spec test/metrics.test.mjs
node src/cli.mjs evaluate --split validation --save
node src/cli.mjs evaluate --split test --save
node src/cli.mjs demo --mode jev --ticket T-036
Verify the expected behavior
Validation cost fields should be finite under the complete fictional fixture inputs. On test, Jev and hybrid include an unknown-usage attempt, so full cost fields are null. A smaller simulated p50 is not a live speed measurement, and no savings percentage should be reported from these outputs.
Read the named tests and refusal paths, not just the exit code or final label. Unknown values must remain unknown, and every report must distinguish simulation inputs from real measurements.
Troubleshooting
If a report says zero dollars for missing usage, inspect null handling. If p95 improves after dropping errors, restore the failed requests to the population. If review time is not measured, keep it labeled as an assumption and show sensitivity rather than presenting one invented wage/time pair as operating truth.
When previewing with Python http.server, use the .html continuation links below when needed. Extensionless series chips rely on GitHub Pages resolution; that documented preview limitation is separate from the Node example.
Change one thing, then test
Change assumedReviewSeconds only in a disposable prices file and rerun the validation scenario. Explain why a small inference-price change can be outweighed by review effort. Do not fill T-036 usage with a guessed number to manufacture a complete total; unknown evidence remains unknown until it is collected.
Make changes in a disposable copy, retain the reference files for comparison, and restore them before the next chapter. If you later use a real provider, create a new experiment record rather than overwriting the fixture transcript.
Next checkpoint
Before moving on, identify the contract file, the policy file, what was observed in a run, and what remains untested against a real model. Keeping those four things separate matters more than making the demo look effortless.
← Previous chapter · Next chapter →
References and evidence
Documentation and implementation
Jev documentation checked on 23 October 2026. API and pricing details can change; recheck before live use. Fixture results are explicitly authored teaching data in the project.
Key takeaways
- Contracts bound structure; evaluation checks behavior.
- Coverage, quality, latency and total cost must be read together.
- A proposal is not an approved effect; mock evidence is not live model evidence.