Update to the graph view

#13
by ingelise - opened
Files changed (2) hide show
  1. app.py +1 -1
  2. executor.py +22 -20
app.py CHANGED
@@ -142,7 +142,7 @@ class UI:
142
  outputs=[self.assessed_risk_definition, self.relatedrisks, self.mitigations, self.benchmarks, self.mitigations_text, self.networks]
143
  ).then(
144
  fn=mitigations,
145
- inputs=[self.assessed_risks, self.taxonomy],
146
  # NOTETOSELF: Intent based risk is stored in self.risk (if needed)
147
  outputs=[self.assessed_risk_definition, self.relatedrisks, self.mitigations, self.benchmarks, self.mitigations_text, self.networks]
148
  )
 
142
  outputs=[self.assessed_risk_definition, self.relatedrisks, self.mitigations, self.benchmarks, self.mitigations_text, self.networks]
143
  ).then(
144
  fn=mitigations,
145
+ inputs=[self.usecase, self.assessed_risks, self.taxonomy],
146
  # NOTETOSELF: Intent based risk is stored in self.risk (if needed)
147
  outputs=[self.assessed_risk_definition, self.relatedrisks, self.mitigations, self.benchmarks, self.mitigations_text, self.networks]
148
  )
executor.py CHANGED
@@ -26,39 +26,41 @@ def clear_previous_risks():
26
  def clear_previous_mitigations():
27
  return "", gr.Dataset(samples=[], sample_labels=[], visible=False), gr.DataFrame([], wrap=True, show_copy_button=True, show_search="search", visible=False), gr.DataFrame([], wrap=True, show_copy_button=True, show_search="search", visible=False), gr.Markdown(" "), gr.Markdown(" ")
28
 
29
- def generate_subgraph(risk):
30
  lines =[f'```mermaid\n', '---\n'
31
  'config:\n'
32
- ' layout: "tidy-tree"\n'
33
- '---\n',
34
- 'mindmap\n']
 
 
 
 
 
 
 
35
 
36
- lines.append(f' root(("{risk.name}"))\n')
37
- # origin info
38
- lines.append(f' Origins\n')
39
- lines.append(f' Riskgroup: {risk.isPartOf}\n')
40
- lines.append(f' Taxonomy: {risk.isDefinedByTaxonomy}\n')
41
-
42
  # add related risks
43
  rrs = ran.get_related_risks(id=risk.id)
44
  if len(rrs) > 0:
45
- lines.append(f' Related Risks\n')
46
  for rr in rrs:
47
- lines.append(f' {rr.name}\n')
48
-
 
49
  # add related evals
50
  revals = ran.get_related_evaluations(risk_id=risk.id)
51
  if len(revals) > 0:
52
- lines.append(f' Related AI evaluations\n')
53
  for reval in revals:
54
- lines.append(f' {reval.name}\n')
 
55
 
56
  # add related mitigations
57
  rmits = get_controls_and_actions(risk.id, risk.isDefinedByTaxonomy)
58
  if len(rmits) > 0:
59
- lines.append(f' Related mitigations\n')
60
- for rmit in rmits:
61
- lines.append(f' {rmit}\n')
62
 
63
  lines.append(f"```")
64
  diagram_string = "".join(lines)
@@ -172,7 +174,7 @@ def get_controls_and_actions(riskid, taxonomy):
172
 
173
 
174
  @lru_cache
175
- def mitigations(riskid: str, taxonomy: str) -> tuple[gr.Markdown, gr.Dataset, gr.DataFrame, gr.DataFrame, gr.Markdown, gr.Markdown]:
176
  """
177
  For a specific risk (riskid), returns
178
  (a) a risk description
@@ -264,7 +266,7 @@ def mitigations(riskid: str, taxonomy: str) -> tuple[gr.Markdown, gr.Dataset, gr
264
 
265
  status = gr.Markdown(" ") if len(mitdf) > 0 else gr.Markdown("No mitigations found.")
266
 
267
- fig = gr.Markdown(" ") if not selected_risk else generate_subgraph(selected_risk)
268
 
269
  return (gr.Markdown(risk_sec),
270
  gr.Dataset(samples=samples, label=label, sample_labels=sample_labels, visible=True),
 
26
  def clear_previous_mitigations():
27
  return "", gr.Dataset(samples=[], sample_labels=[], visible=False), gr.DataFrame([], wrap=True, show_copy_button=True, show_search="search", visible=False), gr.DataFrame([], wrap=True, show_copy_button=True, show_search="search", visible=False), gr.Markdown(" "), gr.Markdown(" ")
28
 
29
+ def generate_subgraph(usecase, risk):
30
  lines =[f'```mermaid\n', '---\n'
31
  'config:\n'
32
+ ' theme: mc\n'
33
+ ' layout: dagre\n'
34
+ ' look: classic\n'
35
+ '---\n'
36
+ 'flowchart TB\n']
37
+
38
+ lines.append(f'uc_173@{{ label: "{usecase}" }} -- subClassOf --> AISystem["AISystem"]\n')
39
+ lines.append(f'uc_173 -- hasRisk --> Risk2["{risk.name}"]\n')
40
+ lines.append(f'Risk2 -- isPartOf --> {risk.isPartOf}\n')
41
+ lines.append(f'Risk2 -- isDefinedByTaxonomy --> {risk.isDefinedByTaxonomy}\n')
42
 
 
 
 
 
 
 
43
  # add related risks
44
  rrs = ran.get_related_risks(id=risk.id)
45
  if len(rrs) > 0:
46
+ r_risks = ''
47
  for rr in rrs:
48
+ r_risks = r_risks + f'{rr.name}, '
49
+ lines.append(f'Risk2 -- hasRelatedRisks --> Risk3["{r_risks}"]\n')
50
+
51
  # add related evals
52
  revals = ran.get_related_evaluations(risk_id=risk.id)
53
  if len(revals) > 0:
54
+ r_evals =''
55
  for reval in revals:
56
+ r_evals = r_evals + f'{reval.name}, '
57
+ lines.append(f'Risk2 -- hasAiEvaluations --> Risk4["{r_evals[:100]}"] \n')
58
 
59
  # add related mitigations
60
  rmits = get_controls_and_actions(risk.id, risk.isDefinedByTaxonomy)
61
  if len(rmits) > 0:
62
+ r_mits = ', '.join(rmits)
63
+ lines.append(f'Risk2 -- hasMitigations --> Risk5["{r_mits[:100]}"] \n')
 
64
 
65
  lines.append(f"```")
66
  diagram_string = "".join(lines)
 
174
 
175
 
176
  @lru_cache
177
+ def mitigations(usecase: str, riskid: str, taxonomy: str) -> tuple[gr.Markdown, gr.Dataset, gr.DataFrame, gr.DataFrame, gr.Markdown, gr.Markdown]:
178
  """
179
  For a specific risk (riskid), returns
180
  (a) a risk description
 
266
 
267
  status = gr.Markdown(" ") if len(mitdf) > 0 else gr.Markdown("No mitigations found.")
268
 
269
+ fig = gr.Markdown(" ") if not selected_risk else generate_subgraph(usecase, selected_risk)
270
 
271
  return (gr.Markdown(risk_sec),
272
  gr.Dataset(samples=samples, label=label, sample_labels=sample_labels, visible=True),