| 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) | |