Spaces:
Running
Running
Update to the graph view
#13
by
ingelise
- opened
- app.py +1 -1
- 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 |
-
'
|
| 33 |
-
'
|
| 34 |
-
'
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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 |
-
|
| 46 |
for rr in rrs:
|
| 47 |
-
|
| 48 |
-
|
|
|
|
| 49 |
# add related evals
|
| 50 |
revals = ran.get_related_evaluations(risk_id=risk.id)
|
| 51 |
if len(revals) > 0:
|
| 52 |
-
|
| 53 |
for reval in revals:
|
| 54 |
-
|
|
|
|
| 55 |
|
| 56 |
# add related mitigations
|
| 57 |
rmits = get_controls_and_actions(risk.id, risk.isDefinedByTaxonomy)
|
| 58 |
if len(rmits) > 0:
|
| 59 |
-
|
| 60 |
-
|
| 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),
|