How saved_jev_answers.csv was made. Open 'Dishwasher warranty reliability.ana' with JEV_API_KEY set, and evaluate these two expressions in order, in the same session (for example in a scratch variable or through ADE). The first makes the 477 live calls (about $0.02, a minute or two) and saves the raw responses; the second writes the CSV that build_model.py reads. Edit the folder path if yours differs. WriteTextFile('C:\Src\ModelsAndLibrariesOnDocs\JevLibrary\Dishwasher example data\saved_jev_raw.json', MakeJSON(Jev_live_responses)); Sum(Jev_live_responses -> cost, Service_call) Local r := Jev_live_responses; Local cp := For k := Component Do `->`(r -> answers -> cause -> probabilities, k); Local pn := r -> answers -> part_needed -> noul; Local wd := r -> answers -> water_damage -> noul; Local ip := For k := Impact_level Do `->`(r -> answers -> impact -> probabilities, k & ''); Local cst := r -> cost; Local un := For c := Service_call Do JoinText(r[Service_call = c] -> unanswered, separator: ';'); Local head := 'call_id,' & JoinText('cause:' & Component, Component, ',') & ',part_needed,water_damage,' & JoinText('impact:' & Impact_level, Impact_level, ',') & ',cost,unanswered'; Local rows := Service_call & ',' & JoinText(NumberToText(If IsNull(cp) Then 0 Else cp, 'Exponential', digits: 8), Component, ',') & ',' & NumberToText(If IsNull(pn) Then 0 Else pn, 'Exponential', digits: 8) & ',' & NumberToText(If IsNull(wd) Then 0 Else wd, 'Exponential', digits: 8) & ',' & JoinText(NumberToText(If IsNull(ip) Then 0 Else ip, 'Exponential', digits: 8), Impact_level, ',') & ',' & NumberToText(If IsNull(cst) Then 0 Else cst, 'Exponential', digits: 8) & ',' & un; WriteTextFile('C:\Src\ModelsAndLibrariesOnDocs\JevLibrary\Dishwasher example data\saved_jev_answers.csv', head & Chr(10) & JoinText(rows, Service_call, Chr(10)) & Chr(10)); 'exported'