SamanthaStorm commited on
Commit
b40c9cf
Β·
verified Β·
1 Parent(s): 968e390

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +52 -29
app.py CHANGED
@@ -206,41 +206,64 @@ def analyze_single_message(text):
206
  }
207
 
208
  # β€”β€”β€” Composite Analysis & UI β€”β€”β€”
209
- def analyze_composite(m1,d1,m2,d2,m3,d3,*answers):
210
- none_sel=(answers[-1] and not any(answers[:-1]))
 
211
  if none_sel:
212
- esc_score=None; risk_level='unknown'
 
213
  else:
214
- esc_score=sum(w for (_,w),a in zip(ESCALATION_QUESTIONS,answers[:-1]) if a)
215
- risk_level='High' if esc_score>=16 else 'Moderate' if esc_score>=8 else 'Low'
216
- msgs=[m1,m2,m3]; dates=[d1,d2,d3]
217
- active=[(m,d) for m,d in zip(msgs,dates) if m.strip()]
 
 
 
218
  if not active:
219
  return "Please enter at least one message."
220
- results=[(analyze_single_message(m),d) for m,d in active]
221
- abuse_scores = [r['abuse_score'] for r,_ in results]
222
- top_labels=[res['top_patterns'][0][0] if res['top_patterns'] else 'None'
223
- for res,_ in results]
224
- dates_used=[d or 'Undated' for _,d in results]
225
- # common stage & composite abuse
226
- stages = [r['stage'] for r,_ in results]
227
- most_common_stage=max(set(stages), key=stages.count)
228
- composite_abuse=int(round(sum(abuse_scores)/len(abuse_scores)))
229
- # DARVO summary
230
- darvos = [r['darvo_score'] for r,_ in results]
231
- avg_darvo=round(sum(darvos)/len(darvos),3)
232
- darvo_blurb=f"\n🎭 DARVO Score: {avg_darvo} ({'high' if avg_darvo>=0.65 else 'moderate'})" if avg_darvo>0.25 else ''
233
- # build output
234
- out=f"Abuse Intensity: {composite_abuse}%\n"
 
235
  if esc_score is None:
236
- out+="Escalation Potential: Unknown (Checklist not completed)\n"
237
  else:
238
- out+=f"Escalation Potential: {risk_level} ({esc_score}/{sum(w for _,w in ESCALATION_QUESTIONS)})\n"
239
- # risk snippet
240
- pattern_score=f"{top_labels[0]} – {int(results[0][0]['top_patterns'][0][1]*100)}%" if results[0][0]['top_patterns'] else top_labels[0]
241
- out+=generate_risk_snippet(composite_abuse, pattern_score, esc_score or 0, most_common_stage)
242
- out+=darvo_blurb
243
- img=generate_abuse_score_chart(dates_used,abuse_scores,top_labels)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
244
  return out, img
245
 
246
  # β€”β€”β€” Gradio Interface β€”β€”β€”
 
206
  }
207
 
208
  # β€”β€”β€” Composite Analysis & UI β€”β€”β€”
209
+ def analyze_composite(m1, d1, m2, d2, m3, d3, *answers):
210
+ # determine if β€œNone of the above” was the only checked box
211
+ none_sel = answers[-1] and not any(answers[:-1])
212
  if none_sel:
213
+ esc_score = None
214
+ risk_level = "unknown"
215
  else:
216
+ esc_score = sum(w for (_, w), a in zip(ESCALATION_QUESTIONS, answers[:-1]) if a)
217
+ risk_level = "High" if esc_score >= 16 else "Moderate" if esc_score >= 8 else "Low"
218
+
219
+ # collect only non-empty messages
220
+ msgs = [m1, m2, m3]
221
+ dates = [d1, d2, d3]
222
+ active = [(m, d) for m, d in zip(msgs, dates) if m.strip()]
223
  if not active:
224
  return "Please enter at least one message."
225
+
226
+ # analyze each message
227
+ results = [(analyze_single_message(m), d) for m, d in active]
228
+
229
+ # pull out scores and labels
230
+ abuse_scores = [res["abuse_score"] for res, _ in results]
231
+ top_labels = [res["top_patterns"][0][0] if res["top_patterns"] else "None" for res, _ in results]
232
+ dates_used = [d or "Undated" for _, d in results]
233
+ stages = [res["stage"] for res, _ in results]
234
+
235
+ # overall risk stage & composite abuse
236
+ most_common_stage = max(set(stages), key=stages.count)
237
+ composite_abuse = int(round(sum(abuse_scores) / len(abuse_scores)))
238
+
239
+ # build the basic output text
240
+ out = f"Abuse Intensity: {composite_abuse}%\n"
241
  if esc_score is None:
242
+ out += "Escalation Potential: Unknown (Checklist not completed)\n"
243
  else:
244
+ total_possible = sum(w for _, w in ESCALATION_QUESTIONS)
245
+ out += f"Escalation Potential: {risk_level} ({esc_score}/{total_possible})\n"
246
+
247
+ # if zero abuse, skip risk snippet & DARVO
248
+ img = generate_abuse_score_chart(dates_used, abuse_scores, top_labels)
249
+ if composite_abuse == 0:
250
+ return out, img
251
+
252
+ # compute DARVO summary
253
+ darvos = [res["darvo_score"] for res, _ in results]
254
+ avg_darvo = round(sum(darvos) / len(darvos), 3)
255
+ darvo_blurb = (
256
+ f"\n🎭 DARVO Score: {avg_darvo} ({'high' if avg_darvo >= 0.65 else 'moderate'})"
257
+ if avg_darvo > 0.25 else ""
258
+ )
259
+
260
+ # risk snippet (uses your generate_risk_snippet helper)
261
+ first_pattern = top_labels[0]
262
+ first_score = int(results[0][0]["top_patterns"][0][1] * 100) if results[0][0]["top_patterns"] else 0
263
+ pattern_score = f"{first_pattern} – {first_score}%"
264
+ out += generate_risk_snippet(composite_abuse, pattern_score, esc_score or 0, most_common_stage)
265
+ out += darvo_blurb
266
+
267
  return out, img
268
 
269
  # β€”β€”β€” Gradio Interface β€”β€”β€”