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)