Spaces:
Running
Running
import argparse | |
from giskard_cicd.loaders import GithubLoader, HuggingFaceLoader | |
from giskard_cicd.pipeline.runner import PipelineRunner | |
from automation import create_discussion | |
if __name__ == "__main__": | |
parser = argparse.ArgumentParser( | |
prog="Giskard Scanner", description="Scans a model for vulnerabilities and produces a report." | |
) | |
parser.add_argument( | |
"--loader", | |
help="Which loader to use to set up the model. Currently only `github` and `huggingface` are supported.", | |
required=True, | |
) | |
parser.add_argument("--model", help="The model to scan.", required=True) | |
parser.add_argument("--dataset", help="The validation or test dataset that will be used.") | |
parser.add_argument( | |
"--dataset_split", help="The split of the dataset to use. If not provided, the best split will be selected." | |
) | |
parser.add_argument("--dataset_config", help="The name of the dataset config subset to use.") | |
parser.add_argument("--scan_config", help="Path to YAML file containing the configuration of the scan.") | |
parser.add_argument("--output", help="Optional name of the output file.") | |
parser.add_argument("--output_format", help="Format of the report (either HTML or markdown). Default is HTML.") | |
parser.add_argument("--output_portal", help="The output portal of the report (either huggingface or local directory). Default is local.") | |
parser.add_argument("--discussion_repo", help="The repo to push the report to.") | |
parser.add_argument("--hf_token", help="The token to push the report to the repo.") | |
args = parser.parse_args() | |
supported_loaders = { | |
"huggingface": HuggingFaceLoader(), | |
"github": GithubLoader(), | |
} | |
runner = PipelineRunner(loaders=supported_loaders) | |
runner_kwargs = {"loader_id": args.loader, | |
"model": args.model, | |
"dataset": args.dataset, | |
"scan_config": args.scan_config} | |
if args.loader == "huggingface": | |
runner_kwargs.update({"dataset_split": args.dataset_split, | |
"dataset_config": args.dataset_config}) | |
report = runner.run(**runner_kwargs) | |
# In the future, write markdown report or directly push to discussion. | |
if args.output_format == "markdown": | |
rendered_report = report.to_markdown(template="github") | |
else: | |
rendered_report = report.to_html() | |
if args.output_portal == "huggingface": | |
# Push to discussion | |
create_discussion(args.discussion_repo, args.model, args.hf_token, rendered_report) | |
if args.output: | |
with open(args.output, "w") as f: | |
f.write(rendered_report) | |
else: | |
# To stdout | |
# print(rendered_report) | |
model_name = args.model.split("/")[-1] | |
with open(f"{model_name}_report.html", "w") as f: | |
f.write(rendered_report) | |