{"id":"01-decisions-not-essays","number":1,"slug":"software-needs-decisions","title":"Software needs decisions, not essays","short":"Decisions, not essays","module":"The idea","summary":"Language models write beautifully, but most software needs a decision it can branch on. Here is the prompt-and-parse problem, the new shape of a decision model (state and typed questions in, typed answers and probabilities out), and how a whole category of these models appeared in three weeks.","voice":"Jessica","scenes":[{"template":"title","chapter":"Intro","narration":"Language models can write an essay about anything. But most software doesn't need an essay. It needs a decision it can act on. This course is about a new kind of model built for exactly that.","params":{"kicker":"Lesson 1","module":"Module 1 · The idea","title":"Software needs *decisions*, not essays","subtitle":"Why a new kind of model appeared in September 2026.","cast":["snap",{"who":"mull","mood":"think"}],"bubble":"Yes. 0.99.","bubble_at":"decision"},"start":0.5,"dur":13.399,"words":[{"text":"Language","s":0.8,"e":1.2},{"text":"models","s":1.28,"e":1.6},{"text":"can","s":1.68,"e":1.76},{"text":"write","s":1.84,"e":2},{"text":"an","s":2.08,"e":2.16},{"text":"essay","s":2.36,"e":2.56},{"text":"about","s":2.8,"e":3.04},{"text":"anything.","s":3.36,"e":4.08},{"text":"But","s":4.2,"e":4.32},{"text":"most","s":4.4,"e":4.64},{"text":"software","s":4.88,"e":5.12},{"text":"doesn't","s":5.24,"e":5.52},{"text":"need","s":5.6,"e":5.76},{"text":"an","s":5.84,"e":5.92},{"text":"essay.","s":6.16,"e":6.72},{"text":"It","s":6.8,"e":6.88},{"text":"needs","s":6.96,"e":7.04},{"text":"a","s":7.12,"e":7.16},{"text":"decision","s":7.2,"e":7.68},{"text":"it","s":7.76,"e":7.84},{"text":"can","s":7.92,"e":8.08},{"text":"act","s":8.2,"e":8.32},{"text":"on.","s":8.4,"e":9.12},{"text":"This","s":9.24,"e":9.36},{"text":"course","s":9.44,"e":9.76},{"text":"is","s":9.84,"e":9.92},{"text":"about","s":10.04,"e":10.16},{"text":"a","s":10.24,"e":10.32},{"text":"new","s":10.4,"e":10.56},{"text":"kind","s":10.68,"e":10.8},{"text":"of","s":10.88,"e":10.96},{"text":"model","s":11.16,"e":11.36},{"text":"built","s":11.44,"e":11.68},{"text":"for","s":11.76,"e":11.84},{"text":"exactly","s":12,"e":12.48},{"text":"that.","s":12.64,"e":13.04}]},{"template":"statement","chapter":"The gap","narration":"Diogo Almeida helped build the methods behind ChatGPT at OpenAI. When he launched his company, TypeSafe, he opened with one question. Models have been superhuman at chat for years, so where is all the automation?","params":{"eyebrow":"Diogo Almeida · TypeSafe AI, September 2026","text":"Models have been superhuman at chat for years. *So where is all the automation?*","art":"mull","mood":"tired","punch":"where is all the automation"},"start":13.899,"dur":15.056,"words":[{"text":"Diogo","s":14.199,"e":14.599},{"text":"Almeida","s":14.679,"e":15.079},{"text":"helped","s":15.239,"e":15.479},{"text":"build","s":15.559,"e":15.719},{"text":"the","s":15.759,"e":15.799},{"text":"methods","s":15.879,"e":16.279},{"text":"behind","s":16.359,"e":16.599},{"text":"ChatGPT","s":16.679,"e":17.559},{"text":"at","s":17.639,"e":17.799},{"text":"OpenAI.","s":17.959,"e":18.759},{"text":"When","s":18.999,"e":19.079},{"text":"he","s":19.159,"e":19.239},{"text":"launched","s":19.279,"e":19.559},{"text":"his","s":19.639,"e":19.719},{"text":"company,","s":19.919,"e":20.279},{"text":"TypeSafe,","s":20.399,"e":21.159},{"text":"he","s":21.239,"e":21.319},{"text":"opened","s":21.399,"e":21.639},{"text":"with","s":21.719,"e":21.879},{"text":"one","s":21.959,"e":22.119},{"text":"question.","s":22.279,"e":23.039},{"text":"Models","s":23.319,"e":23.639},{"text":"have","s":23.719,"e":23.799},{"text":"been","s":23.879,"e":24.039},{"text":"superhuman","s":24.199,"e":24.839},{"text":"at","s":24.879,"e":24.919},{"text":"chat","s":24.999,"e":25.239},{"text":"for","s":25.319,"e":25.399},{"text":"years,","s":25.559,"e":26.279},{"text":"so","s":26.359,"e":26.599},{"text":"where","s":26.839,"e":26.999},{"text":"is","s":27.079,"e":27.159},{"text":"all","s":27.199,"e":27.239},{"text":"the","s":27.319,"e":27.359},{"text":"automation?","s":27.399,"e":28.359}]},{"template":"code","chapter":"Prompt and parse","narration":"Here's how most apps ask a language model for a decision today. Ask for JSON in the prompt. Parse the reply. Then wrap everything in retries, because sometimes the answer gets cut off, or invents a field, or a team you never offered. And the confidence it writes is just more text.","params":{"file":"triage.py","lang":"py","lines":["reply = llm(f\"Classify this ticket. Answer as JSON:\"","            f\" team, refund_requested, confidence.\\n{ticket}\")","try:","    data = json.loads(reply)","except json.JSONDecodeError:","    data = retry()","if data[\"team\"] not in TEAMS:","    data = retry()","confidence = float(data[\"confidence\"])"],"hl":[{"from":3,"to":6,"label":"parse, then retry","tone":"bad","at":"Parse the reply"},{"from":7,"to":8,"label":"values you never offered","tone":"bad","at":"invents a field"},{"from":9,"to":9,"label":"confidence is text","tone":"agent","at":"more text"}]},"start":28.955,"dur":18.739,"words":[{"text":"Here's","s":29.255,"e":29.535},{"text":"how","s":29.575,"e":29.735},{"text":"most","s":29.815,"e":30.135},{"text":"apps","s":30.295,"e":30.455},{"text":"ask","s":30.535,"e":30.695},{"text":"a","s":30.775,"e":30.815},{"text":"language","s":30.855,"e":31.175},{"text":"model","s":31.255,"e":31.495},{"text":"for","s":31.535,"e":31.575},{"text":"a","s":31.655,"e":31.695},{"text":"decision","s":31.735,"e":32.135},{"text":"today.","s":32.375,"e":32.855},{"text":"Ask","s":33.095,"e":33.335},{"text":"for","s":33.415,"e":33.495},{"text":"JSON","s":33.575,"e":33.975},{"text":"in","s":34.015,"e":34.055},{"text":"the","s":34.135,"e":34.175},{"text":"prompt.","s":34.215,"e":34.895},{"text":"Parse","s":35.095,"e":35.335},{"text":"the","s":35.375,"e":35.415},{"text":"reply.","s":35.495,"e":36.175},{"text":"Then","s":36.375,"e":36.615},{"text":"wrap","s":36.775,"e":37.015},{"text":"everything","s":37.095,"e":37.575},{"text":"in","s":37.615,"e":37.655},{"text":"retries,","s":37.735,"e":38.335},{"text":"because","s":38.375,"e":38.695},{"text":"sometimes","s":38.775,"e":39.175},{"text":"the","s":39.215,"e":39.255},{"text":"answer","s":39.335,"e":39.575},{"text":"gets","s":39.695,"e":39.815},{"text":"cut","s":39.895,"e":40.055},{"text":"off,","s":40.255,"e":40.535},{"text":"or","s":40.655,"e":40.775},{"text":"invents","s":40.855,"e":41.175},{"text":"a","s":41.255,"e":41.335},{"text":"field,","s":41.415,"e":41.975},{"text":"or","s":42.095,"e":42.215},{"text":"a","s":42.295,"e":42.335},{"text":"team","s":42.375,"e":42.695},{"text":"you","s":42.735,"e":42.775},{"text":"never","s":42.855,"e":43.015},{"text":"offered.","s":43.095,"e":44.055},{"text":"And","s":44.095,"e":44.135},{"text":"the","s":44.215,"e":44.295},{"text":"confidence","s":44.535,"e":44.775},{"text":"it","s":44.855,"e":44.935},{"text":"writes","s":45.135,"e":45.335},{"text":"is","s":45.415,"e":45.655},{"text":"just","s":45.815,"e":45.975},{"text":"more","s":46.095,"e":46.215},{"text":"text.","s":46.495,"e":47.095}]},{"template":"quote","chapter":"Prompt and parse","narration":"Developer Daniel Sam put the mismatch in two sentences. Software doesn't want sentences. It wants values it can branch on.","params":{"text":"Software doesn't want sentences. It wants *values it can branch on*.","who":"Daniel Sam","role":"developer","src":"The Model That Doesn't Talk"},"start":47.694,"dur":9.466,"words":[{"text":"Developer","s":47.994,"e":48.474},{"text":"Daniel","s":48.634,"e":48.954},{"text":"Sam","s":49.034,"e":49.434},{"text":"put","s":49.514,"e":49.594},{"text":"the","s":49.674,"e":49.754},{"text":"mismatch","s":49.794,"e":50.234},{"text":"in","s":50.314,"e":50.474},{"text":"two","s":50.554,"e":50.714},{"text":"sentences.","s":50.794,"e":51.794},{"text":"Software","s":52.074,"e":52.474},{"text":"doesn't","s":52.594,"e":52.874},{"text":"want","s":52.954,"e":53.194},{"text":"sentences.","s":53.274,"e":54.074},{"text":"It","s":54.314,"e":54.394},{"text":"wants","s":54.474,"e":54.714},{"text":"values","s":54.794,"e":55.274},{"text":"it","s":55.354,"e":55.434},{"text":"can","s":55.514,"e":55.594},{"text":"branch","s":55.674,"e":55.994},{"text":"on.","s":56.074,"e":56.554}]},{"template":"request","chapter":"The new shape","narration":"A decision model flips the interface. You send state, which is just your data, and a few typed questions: a yes or no, a choice from your options, a score on your scale. Back comes one typed answer per question, each with probabilities. All of them together, in a quarter of a second. Nothing to parse.","params":{"model":"jev-1.13.0","latency":0.25,"state":{"ticket":"Hi, I was charged twice for order A-104 last Thursday. Please refund the duplicate.","order":{"id":"A-104","charges_usd":[49,49]}},"questions":[{"id":"refund","type":"noul","text":"Does `ticket` explicitly ask for a refund?","ans":{"v":0.99},"at":"yes or no"},{"id":"dup","type":"noul","text":"Do `ticket` and `order` show a duplicate charge?","ans":{"v":0.98}},{"id":"team","type":"choice","text":"Which team should handle `ticket`?","ans":{"choice":"billing","p":1},"at":"a choice"},{"id":"urgency","type":"score","text":"How time-sensitive is `ticket`?","ans":{"score":0.75,"max":2,"label":"between no rush and soon"},"at":"a score"}],"send_at":"Back comes","ans_at":"All of them together","footer":"Real answers from jev-1.13.0, measured for this course."},"start":57.16,"dur":20.751,"words":[{"text":"A","s":57.46,"e":57.54},{"text":"decision","s":57.78,"e":58.02},{"text":"model","s":58.1,"e":58.34},{"text":"flips","s":58.58,"e":58.9},{"text":"the","s":58.94,"e":58.98},{"text":"interface.","s":59.06,"e":59.9},{"text":"You","s":60.1,"e":60.18},{"text":"send","s":60.26,"e":60.5},{"text":"state,","s":60.58,"e":61.14},{"text":"which","s":61.22,"e":61.38},{"text":"is","s":61.46,"e":61.62},{"text":"just","s":61.7,"e":61.86},{"text":"your","s":61.9,"e":61.94},{"text":"data,","s":62.02,"e":62.66},{"text":"and","s":62.74,"e":62.82},{"text":"a","s":62.86,"e":62.9},{"text":"few","s":62.98,"e":63.14},{"text":"typed","s":63.22,"e":63.46},{"text":"questions:","s":63.54,"e":64.5},{"text":"a","s":64.54,"e":64.58},{"text":"yes","s":64.7,"e":64.82},{"text":"or","s":64.9,"e":64.98},{"text":"no,","s":65.18,"e":65.46},{"text":"a","s":65.54,"e":65.58},{"text":"choice","s":65.62,"e":65.86},{"text":"from","s":65.94,"e":66.02},{"text":"your","s":66.06,"e":66.1},{"text":"options,","s":66.26,"e":66.94},{"text":"a","s":66.98,"e":67.06},{"text":"score","s":67.14,"e":67.46},{"text":"on","s":67.54,"e":67.62},{"text":"your","s":67.66,"e":67.7},{"text":"scale.","s":67.86,"e":68.54},{"text":"Back","s":68.82,"e":68.98},{"text":"comes","s":69.06,"e":69.38},{"text":"one","s":69.46,"e":69.62},{"text":"typed","s":69.7,"e":69.94},{"text":"answer","s":70.02,"e":70.26},{"text":"per","s":70.34,"e":70.5},{"text":"question,","s":70.58,"e":71.3},{"text":"each","s":71.38,"e":71.62},{"text":"with","s":71.7,"e":71.78},{"text":"probabilities.","s":71.9,"e":72.66},{"text":"All","s":73.06,"e":73.14},{"text":"of","s":73.22,"e":73.3},{"text":"them","s":73.38,"e":73.46},{"text":"together,","s":73.54,"e":74.1},{"text":"in","s":74.18,"e":74.26},{"text":"a","s":74.34,"e":74.42},{"text":"quarter","s":74.5,"e":74.82},{"text":"of","s":74.9,"e":74.98},{"text":"a","s":75.02,"e":75.06},{"text":"second.","s":75.22,"e":75.7},{"text":"Nothing","s":76.1,"e":76.42},{"text":"to","s":76.46,"e":76.5},{"text":"parse.","s":76.58,"e":77.3}]},{"template":"race","chapter":"The new shape","narration":"Why so fast? A language model writes its answer one token at a time. A decision model reads your data once and scores every allowed answer in parallel. On the same support messages, a small, fast LLM took about one point two seconds per answer. Jev took about a quarter of a second.","params":{"left":{"label":"LLM, prompt and parse","sub":"Claude Haiku 5.5 writes JSON","who":"mull","text":"{\n  \"intent\": \"atm_support\",\n  \"confidence\": 92\n}","secs":1.13},"right":{"label":"Decision model","sub":"Jev 1.13 scores 77 options at once","who":"snap","items":[{"k":"intent","v":"atm_support"},{"k":"probability","v":"0.98"}],"secs":0.26},"at":"one token at a time","scale":1},"start":77.911,"dur":19.784,"words":[{"text":"Why","s":78.211,"e":78.451},{"text":"so","s":78.531,"e":78.771},{"text":"fast?","s":79.091,"e":79.611},{"text":"A","s":79.811,"e":79.891},{"text":"language","s":79.971,"e":80.291},{"text":"model","s":80.371,"e":80.611},{"text":"writes","s":80.691,"e":80.931},{"text":"its","s":81.011,"e":81.091},{"text":"answer","s":81.171,"e":81.571},{"text":"one","s":81.651,"e":81.811},{"text":"token","s":81.891,"e":82.291},{"text":"at","s":82.331,"e":82.371},{"text":"a","s":82.451,"e":82.531},{"text":"time.","s":82.731,"e":83.411},{"text":"A","s":83.451,"e":83.491},{"text":"decision","s":83.691,"e":83.891},{"text":"model","s":83.971,"e":84.291},{"text":"reads","s":84.371,"e":84.611},{"text":"your","s":84.651,"e":84.691},{"text":"data","s":84.771,"e":85.011},{"text":"once","s":85.091,"e":85.411},{"text":"and","s":85.491,"e":85.571},{"text":"scores","s":85.651,"e":86.131},{"text":"every","s":86.211,"e":86.451},{"text":"allowed","s":86.651,"e":86.851},{"text":"answer","s":87.051,"e":87.251},{"text":"in","s":87.331,"e":87.411},{"text":"parallel.","s":87.491,"e":88.451},{"text":"On","s":88.531,"e":88.611},{"text":"the","s":88.691,"e":88.771},{"text":"same","s":88.891,"e":89.011},{"text":"support","s":89.171,"e":89.331},{"text":"messages,","s":89.411,"e":90.131},{"text":"a","s":90.211,"e":90.291},{"text":"small,","s":90.491,"e":90.851},{"text":"fast","s":91.051,"e":91.251},{"text":"LLM","s":91.331,"e":91.811},{"text":"took","s":91.891,"e":91.971},{"text":"about","s":92.051,"e":92.371},{"text":"one","s":92.411,"e":92.451},{"text":"point","s":92.611,"e":92.931},{"text":"two","s":93.011,"e":93.091},{"text":"seconds","s":93.251,"e":93.571},{"text":"per","s":93.651,"e":93.731},{"text":"answer.","s":93.811,"e":94.771},{"text":"Jev","s":94.851,"e":95.171},{"text":"took","s":95.251,"e":95.411},{"text":"about","s":95.531,"e":95.651},{"text":"a","s":95.731,"e":95.811},{"text":"quarter","s":95.891,"e":96.131},{"text":"of","s":96.211,"e":96.291},{"text":"a","s":96.318,"e":96.344},{"text":"second.","s":96.371,"e":97.091}]},{"template":"stat","chapter":"Cheap enough to ask a lot","narration":"It's also cheap enough to ask a lot. For this course, we sent all 3,080 messages from a public banking support dataset through Jev. It took about a hundred seconds, and the whole run cost twenty two cents.","params":{"items":[{"value":3080,"label":"real support messages classified","tone":"agent","at":"3,080"},{"value":100,"suffix":" s","label":"wall clock, 8 requests at a time","tone":"s2","at":"hundred seconds"},{"value":0.22,"prefix":"$","decimals":2,"label":"for the whole run","tone":"agent","at":"twenty two cents","hero":true}],"src":"BANKING77 test set, jev-1.13.0, measured 2026-10-15"},"start":97.695,"dur":14.429,"words":[{"text":"It's","s":97.995,"e":98.195},{"text":"also","s":98.235,"e":98.475},{"text":"cheap","s":98.635,"e":98.875},{"text":"enough","s":98.955,"e":99.195},{"text":"to","s":99.275,"e":99.355},{"text":"ask","s":99.435,"e":99.675},{"text":"a","s":99.755,"e":99.835},{"text":"lot.","s":99.915,"e":100.555},{"text":"For","s":100.795,"e":100.875},{"text":"this","s":100.995,"e":101.115},{"text":"course,","s":101.195,"e":101.595},{"text":"we","s":101.675,"e":101.835},{"text":"sent","s":101.995,"e":102.155},{"text":"all","s":102.275,"e":102.395},{"text":"3,080","s":102.475,"e":103.475},{"text":"messages","s":103.515,"e":104.075},{"text":"from","s":104.155,"e":104.235},{"text":"a","s":104.315,"e":104.395},{"text":"public","s":104.555,"e":104.715},{"text":"banking","s":104.795,"e":105.115},{"text":"support","s":105.195,"e":105.515},{"text":"dataset","s":105.595,"e":105.995},{"text":"through","s":106.075,"e":106.235},{"text":"Jev.","s":106.315,"e":107.195},{"text":"It","s":107.235,"e":107.275},{"text":"took","s":107.355,"e":107.435},{"text":"about","s":107.555,"e":107.675},{"text":"a","s":107.715,"e":107.755},{"text":"hundred","s":107.835,"e":108.075},{"text":"seconds,","s":108.155,"e":108.795},{"text":"and","s":108.875,"e":108.955},{"text":"the","s":109.035,"e":109.115},{"text":"whole","s":109.235,"e":109.355},{"text":"run","s":109.435,"e":109.675},{"text":"cost","s":109.835,"e":110.155},{"text":"twenty","s":110.235,"e":110.475},{"text":"two","s":110.555,"e":110.715},{"text":"cents.","s":110.795,"e":111.515}]},{"template":"timeline","chapter":"A category in three weeks","narration":"TypeSafe launched Jev on September fifteenth and called it the first System One model. Two weeks later, OpenAI previewed a Decisions API. Cloudflare released Clef with open weights, and AWS released Strands Decider, small enough to run on a laptop. By the time Jev 1.14 shipped on October fourteenth, decision models were a category.","params":{"title":"Three weeks, four decision models","events":[{"when":"Sep 15","label":"Jev","sub":"TypeSafe AI","at":"September fifteenth"},{"when":"Sep 29","label":"Decisions API","sub":"OpenAI, preview","at":"OpenAI"},{"when":"Oct 1","label":"Clef","sub":"Cloudflare, open weights","at":"Cloudflare"},{"when":"Oct 1","label":"Strands Decider","sub":"AWS, runs locally","at":"AWS"},{"when":"Oct 14","label":"Jev 1.14","sub":"plus images, in preview","now":true,"at":"Jev 1.14"}]},"start":112.124,"dur":24.277,"words":[{"text":"TypeSafe","s":112.424,"e":112.984},{"text":"launched","s":113.064,"e":113.384},{"text":"Jev","s":113.464,"e":113.784},{"text":"on","s":113.864,"e":113.944},{"text":"September","s":114.024,"e":114.424},{"text":"fifteenth","s":114.504,"e":115.064},{"text":"and","s":115.144,"e":115.304},{"text":"called","s":115.424,"e":115.544},{"text":"it","s":115.624,"e":115.704},{"text":"the","s":115.744,"e":115.784},{"text":"first","s":115.944,"e":116.344},{"text":"System","s":116.504,"e":116.904},{"text":"One","s":116.984,"e":117.144},{"text":"model.","s":117.224,"e":117.624},{"text":"Two","s":118.104,"e":118.184},{"text":"weeks","s":118.304,"e":118.424},{"text":"later,","s":118.504,"e":119.144},{"text":"OpenAI","s":119.224,"e":119.784},{"text":"previewed","s":119.864,"e":120.264},{"text":"a","s":120.304,"e":120.344},{"text":"Decisions","s":120.424,"e":120.984},{"text":"API.","s":121.064,"e":121.864},{"text":"Cloudflare","s":122.104,"e":122.664},{"text":"released","s":122.864,"e":123.064},{"text":"Clef","s":123.144,"e":123.544},{"text":"with","s":123.624,"e":123.704},{"text":"open","s":123.784,"e":124.024},{"text":"weights,","s":124.104,"e":124.744},{"text":"and","s":124.824,"e":124.904},{"text":"AWS","s":124.984,"e":125.624},{"text":"released","s":125.704,"e":126.104},{"text":"Strands","s":126.264,"e":126.664},{"text":"Decider,","s":126.744,"e":127.624},{"text":"small","s":127.704,"e":127.944},{"text":"enough","s":127.984,"e":128.184},{"text":"to","s":128.264,"e":128.344},{"text":"run","s":128.424,"e":128.504},{"text":"on","s":128.544,"e":128.584},{"text":"a","s":128.664,"e":128.704},{"text":"laptop.","s":128.744,"e":129.544},{"text":"By","s":129.784,"e":129.864},{"text":"the","s":129.904,"e":129.944},{"text":"time","s":130.024,"e":130.264},{"text":"Jev","s":130.344,"e":130.584},{"text":"1.14","s":130.664,"e":131.544},{"text":"shipped","s":131.704,"e":131.944},{"text":"on","s":132.024,"e":132.064},{"text":"October","s":132.104,"e":132.424},{"text":"fourteenth,","s":132.504,"e":133.464},{"text":"decision","s":133.704,"e":133.944},{"text":"models","s":134.024,"e":134.424},{"text":"were","s":134.504,"e":134.664},{"text":"a","s":134.704,"e":134.744},{"text":"category.","s":134.824,"e":135.784}]},{"template":"systems","chapter":"Who does what","narration":"This isn't about replacing language models. Your code keeps control of the workflow: the rules, the math, the side effects. The decision model answers narrow questions fast. And when a case is genuinely hard, a reasoning model or a person takes it.","params":{"cols":[{"who":"curly","title":"Your code","sub":"owns the workflow","items":["Rules, math, dates","Thresholds and routing","Side effects"]},{"who":"snap","title":"System One","sub":"decision model","items":["Narrow, fast judgments","Typed answers + probabilities","About 0.25 s per request"],"react":{"at":"narrow questions fast","mood":"sure"}},{"who":"mull","title":"System Two","sub":"reasoning model or a person","items":["Hard, open-ended cases","Writing and planning","Seconds, and more cost"],"react":{"at":"genuinely hard","mood":"think"}}]},"start":136.401,"dur":16.676,"words":[{"text":"This","s":136.701,"e":136.941},{"text":"isn't","s":137.021,"e":137.261},{"text":"about","s":137.381,"e":137.501},{"text":"replacing","s":137.621,"e":138.221},{"text":"language","s":138.301,"e":138.621},{"text":"models.","s":138.701,"e":139.381},{"text":"Your","s":139.581,"e":139.741},{"text":"code","s":139.821,"e":140.061},{"text":"keeps","s":140.141,"e":140.301},{"text":"control","s":140.381,"e":140.781},{"text":"of","s":140.821,"e":140.861},{"text":"the","s":140.901,"e":140.941},{"text":"workflow:","s":141.021,"e":141.821},{"text":"the","s":141.861,"e":141.901},{"text":"rules,","s":141.981,"e":142.621},{"text":"the","s":142.661,"e":142.701},{"text":"math,","s":142.781,"e":143.341},{"text":"the","s":143.421,"e":143.461},{"text":"side","s":143.501,"e":143.661},{"text":"effects.","s":143.741,"e":144.461},{"text":"The","s":144.701,"e":144.861},{"text":"decision","s":145.021,"e":145.181},{"text":"model","s":145.261,"e":145.581},{"text":"answers","s":145.781,"e":145.981},{"text":"narrow","s":146.141,"e":146.381},{"text":"questions","s":146.461,"e":147.021},{"text":"fast.","s":147.261,"e":148.061},{"text":"And","s":148.101,"e":148.141},{"text":"when","s":148.221,"e":148.301},{"text":"a","s":148.341,"e":148.381},{"text":"case","s":148.501,"e":148.621},{"text":"is","s":148.701,"e":148.861},{"text":"genuinely","s":148.941,"e":149.421},{"text":"hard,","s":149.501,"e":150.061},{"text":"a","s":150.141,"e":150.221},{"text":"reasoning","s":150.381,"e":150.621},{"text":"model","s":150.701,"e":151.021},{"text":"or","s":151.101,"e":151.181},{"text":"a","s":151.261,"e":151.301},{"text":"person","s":151.341,"e":151.741},{"text":"takes","s":151.861,"e":151.981},{"text":"it.","s":152.061,"e":152.461}]},{"template":"compare","chapter":"Who does what","narration":"A simple test. If the output is one of a known set of answers that code will act on, it's a decision: route this, is it urgent, does this break a rule, which of these candidates matches. If the output is new text, like a reply, a summary or code, you still want a language model.","params":{"left":{"title":"A decision model","who":"snap","tone":"good","items":[{"text":"Route a ticket to a team","at":"route this"},{"text":"Is this urgent?"},{"text":"Does this break a policy?"},{"text":"Which candidate matches?"}],"at":"it's a decision"},"right":{"title":"A language model","who":"mull","tone":"s2","items":[{"text":"Write the reply","at":"a reply"},{"text":"Summarize the thread"},{"text":"Generate code"},{"text":"Plan an open-ended task"}],"at":"new text"},"vs":"or"},"start":153.077,"dur":19.549,"words":[{"text":"A","s":153.377,"e":153.537},{"text":"simple","s":153.697,"e":153.857},{"text":"test.","s":153.937,"e":154.657},{"text":"If","s":154.897,"e":154.977},{"text":"the","s":155.057,"e":155.137},{"text":"output","s":155.337,"e":155.537},{"text":"is","s":155.617,"e":155.697},{"text":"one","s":155.777,"e":155.937},{"text":"of","s":155.977,"e":156.017},{"text":"a","s":156.097,"e":156.177},{"text":"known","s":156.257,"e":156.497},{"text":"set","s":156.577,"e":156.657},{"text":"of","s":156.737,"e":156.817},{"text":"answers","s":157.057,"e":157.297},{"text":"that","s":157.377,"e":157.457},{"text":"code","s":157.537,"e":157.697},{"text":"will","s":157.777,"e":157.937},{"text":"act","s":158.057,"e":158.177},{"text":"on,","s":158.257,"e":158.737},{"text":"it's","s":158.777,"e":158.897},{"text":"a","s":158.937,"e":158.977},{"text":"decision:","s":159.257,"e":160.017},{"text":"route","s":160.097,"e":160.337},{"text":"this,","s":160.417,"e":160.897},{"text":"is","s":160.977,"e":161.057},{"text":"it","s":161.137,"e":161.217},{"text":"urgent,","s":161.497,"e":161.857},{"text":"does","s":161.937,"e":162.097},{"text":"this","s":162.177,"e":162.257},{"text":"break","s":162.337,"e":162.417},{"text":"a","s":162.497,"e":162.577},{"text":"rule,","s":162.657,"e":163.297},{"text":"which","s":163.377,"e":163.537},{"text":"of","s":163.577,"e":163.617},{"text":"these","s":163.697,"e":163.857},{"text":"candidates","s":164.097,"e":164.337},{"text":"matches.","s":164.417,"e":165.537},{"text":"If","s":165.617,"e":165.697},{"text":"the","s":165.777,"e":165.857},{"text":"output","s":166.017,"e":166.177},{"text":"is","s":166.257,"e":166.417},{"text":"new","s":166.577,"e":166.657},{"text":"text,","s":166.817,"e":167.377},{"text":"like","s":167.497,"e":167.617},{"text":"a","s":167.697,"e":167.737},{"text":"reply,","s":167.777,"e":168.417},{"text":"a","s":168.497,"e":168.577},{"text":"summary","s":168.657,"e":169.137},{"text":"or","s":169.177,"e":169.217},{"text":"code,","s":169.377,"e":170.097},{"text":"you","s":170.177,"e":170.337},{"text":"still","s":170.417,"e":170.657},{"text":"want","s":170.737,"e":170.817},{"text":"a","s":170.897,"e":170.937},{"text":"language","s":170.977,"e":171.297},{"text":"model.","s":171.377,"e":172.017}]},{"template":"quiz","chapter":"Quick check","narration":"Quick check. Which of these jobs is the best fit for a decision model?","params":{"q":"Which job is the best fit for a **decision model**?","options":["Draft a polite reply to an angry customer","Decide which team should handle a ticket","Summarize a 40-page contract","Write a SQL query from a question"],"answer":1,"explain":"Routing has a known set of answers that code acts on. The others produce new text, which is a language model's job."},"start":172.626,"dur":9.941,"words":[{"text":"Quick","s":172.926,"e":173.166},{"text":"check.","s":173.246,"e":173.766},{"text":"Which","s":173.966,"e":174.126},{"text":"of","s":174.166,"e":174.206},{"text":"these","s":174.286,"e":174.526},{"text":"jobs","s":174.606,"e":174.926},{"text":"is","s":175.006,"e":175.166},{"text":"the","s":175.246,"e":175.326},{"text":"best","s":175.406,"e":175.646},{"text":"fit","s":175.806,"e":175.966},{"text":"for","s":176.046,"e":176.126},{"text":"a","s":176.166,"e":176.206},{"text":"decision","s":176.286,"e":176.686},{"text":"model?","s":176.766,"e":177.406}]},{"template":"exercise","chapter":"Try it","narration":"Try this with your coding agent. Have it find every place your code asks a language model for a decision and parses the answer. That list is your shortlist for the rest of this course.","params":{"title":"Find the hidden decisions","intro":"Paste this into your coding agent in a project that calls an LLM:","prompt":"Find every place in this codebase where we call an LLM and then parse its\noutput into a decision: a label, a yes/no, a score, or one item from a list.\nFor each one, give file:line, the decision it makes, the allowed answers,\nand whether it could be a typed question (yes/no, choice or score) to a\ndecision model. Don't change any code yet."},"start":182.567,"dur":12.026,"words":[{"text":"Try","s":182.867,"e":183.107},{"text":"this","s":183.187,"e":183.427},{"text":"with","s":183.507,"e":183.587},{"text":"your","s":183.627,"e":183.667},{"text":"coding","s":183.747,"e":183.987},{"text":"agent.","s":184.067,"e":184.547},{"text":"Have","s":184.947,"e":185.027},{"text":"it","s":185.107,"e":185.187},{"text":"find","s":185.267,"e":185.507},{"text":"every","s":185.667,"e":185.907},{"text":"place","s":186.067,"e":186.307},{"text":"your","s":186.387,"e":186.467},{"text":"code","s":186.547,"e":186.787},{"text":"asks","s":186.867,"e":187.187},{"text":"a","s":187.267,"e":187.307},{"text":"language","s":187.347,"e":187.667},{"text":"model","s":187.747,"e":187.987},{"text":"for","s":188.067,"e":188.147},{"text":"a","s":188.187,"e":188.227},{"text":"decision","s":188.307,"e":188.867},{"text":"and","s":188.947,"e":189.107},{"text":"parses","s":189.267,"e":189.587},{"text":"the","s":189.627,"e":189.667},{"text":"answer.","s":189.747,"e":190.227},{"text":"That","s":190.787,"e":190.947},{"text":"list","s":191.027,"e":191.347},{"text":"is","s":191.427,"e":191.507},{"text":"your","s":191.587,"e":191.667},{"text":"shortlist","s":191.827,"e":192.307},{"text":"for","s":192.387,"e":192.467},{"text":"the","s":192.507,"e":192.547},{"text":"rest","s":192.707,"e":192.867},{"text":"of","s":192.947,"e":193.027},{"text":"this","s":193.107,"e":193.187},{"text":"course.","s":193.267,"e":193.987}]},{"template":"recap","chapter":"Recap","narration":"So: software needs decisions, not essays. Prompt and parse is slow and fragile. Decision models take state and typed questions and return typed answers with probabilities. Next, where that idea comes from: System One and System Two.","params":{"items":["Most AI calls in software are decisions code will branch on.","Prompt-and-parse is slow, fragile, and its confidence is just text.","Decision models: state + typed questions in, typed answers + probabilities out.","Code owns the workflow; hard cases go to a reasoning model or a person."],"next":"System One and System Two","next_at":"Next"},"start":194.593,"dur":19.219,"words":[{"text":"So:","s":194.893,"e":195.613},{"text":"software","s":195.693,"e":196.173},{"text":"needs","s":196.253,"e":196.493},{"text":"decisions,","s":196.573,"e":197.453},{"text":"not","s":197.533,"e":197.773},{"text":"essays.","s":197.853,"e":198.893},{"text":"Prompt","s":199.053,"e":199.213},{"text":"and","s":199.293,"e":199.373},{"text":"parse","s":199.573,"e":199.773},{"text":"is","s":199.853,"e":200.013},{"text":"slow","s":200.093,"e":200.573},{"text":"and","s":200.693,"e":200.813},{"text":"fragile.","s":200.973,"e":201.773},{"text":"Decision","s":201.973,"e":202.173},{"text":"models","s":202.253,"e":202.653},{"text":"take","s":202.773,"e":202.893},{"text":"state","s":202.973,"e":203.373},{"text":"and","s":203.453,"e":203.533},{"text":"typed","s":203.693,"e":203.853},{"text":"questions","s":203.933,"e":204.493},{"text":"and","s":204.573,"e":204.653},{"text":"return","s":204.853,"e":205.053},{"text":"typed","s":205.213,"e":205.373},{"text":"answers","s":205.613,"e":205.853},{"text":"with","s":205.933,"e":206.013},{"text":"probabilities.","s":206.133,"e":207.533},{"text":"Next,","s":207.613,"e":208.333},{"text":"where","s":208.453,"e":208.573},{"text":"that","s":208.653,"e":208.733},{"text":"idea","s":208.893,"e":209.053},{"text":"comes","s":209.133,"e":209.373},{"text":"from:","s":209.453,"e":210.173},{"text":"System","s":210.253,"e":210.573},{"text":"One","s":210.653,"e":211.053},{"text":"and","s":211.093,"e":211.133},{"text":"System","s":211.293,"e":211.533},{"text":"Two.","s":211.693,"e":212.253}]}],"total":214.212,"audio":"/audio/01-decisions-not-essays.mp3"}