Spaces:
Running
Running
File size: 4,525 Bytes
7976155 c16aa6d 9c64352 c16aa6d f2c0071 c16aa6d 9c64352 c16aa6d 9c64352 f2c0071 c16aa6d 9c64352 f2c0071 c16aa6d c1f713e 9c64352 7976155 9c64352 c16aa6d 7976155 a6d7aa8 7976155 a6d7aa8 7976155 c16aa6d a6d7aa8 c16aa6d a6d7aa8 c16aa6d 9c64352 c16aa6d a6d7aa8 c16aa6d 9c64352 c1f713e c16aa6d 9c64352 c16aa6d 9c64352 c1f713e c16aa6d 7976155 c1f713e |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 |
from ast import Attribute
from dotenv import load_dotenv
load_dotenv(override=True)
import re
import os
import pandas as pd
import json
from typing import List, Dict, Any
import pandas as pd
import gradio as gr
import datetime
from pathlib import Path
import json
from risk_atlas_nexus.blocks.inference import WMLInferenceEngine
from risk_atlas_nexus.blocks.inference.params import WMLInferenceEngineParams
from risk_atlas_nexus.library import RiskAtlasNexus
from functools import lru_cache
# Load the taxonomies
ran = RiskAtlasNexus() # type: ignore
@lru_cache
def risk_identifier(usecase: str,
model_name_or_path: str = "ibm/granite-20b-code-instruct",
taxonomy: str = "ibm-risk-atlas"): # -> List[Dict[str, Any]]: #pd.DataFrame:
inference_engine = WMLInferenceEngine(
model_name_or_path= model_name_or_path,
credentials={
"api_key": os.environ["WML_API_KEY"],
"api_url": os.environ["WML_API_URL"],
"project_id": os.environ["WML_PROJECT_ID"],
},
parameters=WMLInferenceEngineParams(
max_new_tokens=150, decoding_method="greedy", repetition_penalty=1
), # type: ignore
)
risks = ran.identify_risks_from_usecases( # type: ignore
usecases=[usecase],
inference_engine=inference_engine,
taxonomy=taxonomy,
)[0]
sample_labels = [r.name if r else r.id for r in risks]
out_sec = gr.Markdown("""<h2> Potential Risks </h2> """)
# write out a JSON
data = {'time': str(datetime.datetime.now(datetime.timezone.utc)),
'intent': usecase,
'model': model_name_or_path,
'taxonomy': taxonomy,
'risks': [json.loads(r.json()) for r in risks]
}
file_path = Path("static/download.json")
file_path.write_text(json.dumps(data, indent=4), encoding='utf-8')
#return out_df
return out_sec, gr.State(risks), gr.Dataset(samples=[r.id for r in risks],
sample_labels=sample_labels,
samples_per_page=50, visible=True, label="Estimated by an LLM."), gr.DownloadButton("Download JSON", visible=True, value="static/download.json")
@lru_cache
def mitigations(riskid: str, taxonomy: str) -> tuple[gr.Markdown, gr.Dataset, gr.DataFrame, gr.Markdown]:
"""
For a specific risk (riskid), returns
(a) a risk description
(b) related risks - as a dataset
(c) mitigations
"""
try:
risk_desc = ran.get_risk(id=riskid).description # type: ignore
risk_sec = f"<h3>Description: </h3> {risk_desc}"
except AttributeError:
risk_sec = ""
related_risk_ids = [r.id for r in ran.get_related_risks(id=riskid)]
action_ids = []
if taxonomy == "ibm-risk-atlas":
# look for actions associated with related risks
if related_risk_ids:
for i in related_risk_ids:
rai = ran.get_related_actions(id=i)
if rai:
action_ids += rai
else:
action_ids = []
else:
# Use only actions related to primary risks
action_ids = ran.get_related_actions(id=riskid)
# Sanitize outputs
if not related_risk_ids:
label = "No related risks found."
samples = None
sample_labels = None
else:
label = f"Risks from other taxonomies related to {riskid}"
samples = related_risk_ids
sample_labels = [i.name for i in ran.get_related_risks(id=riskid)] #type: ignore
if not action_ids:
alabel = "No mitigations found."
asamples = None
asample_labels = None
mitdf = pd.DataFrame()
else:
alabel = f"Mitigation actions related to risk {riskid}."
asamples = action_ids
asample_labels = [ran.get_action_by_id(i).description for i in asamples] # type: ignore
asample_name = [ran.get_action_by_id(i).name for i in asamples] #type: ignore
mitdf = pd.DataFrame({"Mitigation": asample_name, "Description": asample_labels})
status = gr.Markdown(" ") if len(mitdf) > 0 else gr.Markdown("No mitigations found.")
return (gr.Markdown(risk_sec),
gr.Dataset(samples=samples, label=label, sample_labels=sample_labels, visible=True),
gr.DataFrame(mitdf, wrap=True, show_copy_button=True, show_search="search", label=alabel, visible=True),
status)
|