|
from typing import Dict, List, Optional |
|
|
|
import structlog |
|
|
|
from llm_guard import input_scanners, output_scanners |
|
from llm_guard.input_scanners.base import Scanner as InputScanner |
|
from llm_guard.output_scanners.base import Scanner as OutputScanner |
|
from llm_guard.vault import Vault |
|
|
|
from .config import ScannerConfig |
|
from .util import get_resource_utilization |
|
|
|
LOGGER = structlog.getLogger(__name__) |
|
|
|
|
|
def get_input_scanners(scanners: List[ScannerConfig], vault: Vault) -> List[InputScanner]: |
|
""" |
|
Load input scanners from the configuration file. |
|
""" |
|
|
|
input_scanners_loaded = [] |
|
for scanner in scanners: |
|
LOGGER.debug("Loading input scanner", scanner=scanner.type, **get_resource_utilization()) |
|
input_scanners_loaded.append( |
|
_get_input_scanner( |
|
scanner.type, |
|
scanner.params, |
|
vault=vault, |
|
) |
|
) |
|
|
|
return input_scanners_loaded |
|
|
|
|
|
def get_output_scanners(scanners: List[ScannerConfig], vault: Vault) -> List[OutputScanner]: |
|
""" |
|
Load output scanners from the configuration file. |
|
""" |
|
output_scanners_loaded = [] |
|
for scanner in scanners: |
|
LOGGER.debug("Loading output scanner", scanner=scanner.type, **get_resource_utilization()) |
|
output_scanners_loaded.append( |
|
_get_output_scanner( |
|
scanner.type, |
|
scanner.params, |
|
vault=vault, |
|
) |
|
) |
|
|
|
return output_scanners_loaded |
|
|
|
|
|
def _get_input_scanner( |
|
scanner_name: str, |
|
scanner_config: Optional[Dict], |
|
*, |
|
vault: Vault, |
|
): |
|
if scanner_config is None: |
|
scanner_config = {} |
|
|
|
if scanner_name == "Anonymize": |
|
scanner_config["vault"] = vault |
|
|
|
if scanner_name in [ |
|
"Anonymize", |
|
"BanTopics", |
|
"Code", |
|
"Gibberish", |
|
"Language", |
|
"PromptInjection", |
|
"Toxicity", |
|
]: |
|
scanner_config["use_onnx"] = True |
|
|
|
return input_scanners.get_scanner_by_name(scanner_name, scanner_config) |
|
|
|
|
|
def _get_output_scanner( |
|
scanner_name: str, |
|
scanner_config: Optional[Dict], |
|
*, |
|
vault: Vault, |
|
): |
|
if scanner_config is None: |
|
scanner_config = {} |
|
|
|
if scanner_name == "Deanonymize": |
|
scanner_config["vault"] = vault |
|
|
|
if scanner_name in [ |
|
"BanTopics", |
|
"Bias", |
|
"Code", |
|
"FactualConsistency", |
|
"Gibberish", |
|
"Language", |
|
"LanguageSame", |
|
"MaliciousURLs", |
|
"NoRefusal", |
|
"Relevance", |
|
"Sensitive", |
|
"Toxicity", |
|
]: |
|
scanner_config["use_onnx"] = True |
|
|
|
return output_scanners.get_scanner_by_name(scanner_name, scanner_config) |
|
|