File size: 3,219 Bytes
6165ba9 | 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 | import argparse
import sys
from .controllers.cli_controller import CLIController
def main():
parser = argparse.ArgumentParser(description="OWASP AIBOM Generator CLI")
parser.add_argument("model_id", nargs="?", help="Hugging Face Model ID (e.g. 'owner/model')")
parser.add_argument("--test", "-t", action="store_true", help="Run test mode for multiple predefined models to verify description generation")
parser.add_argument("--output", "-o", help="Output file path")
parser.add_argument("--inference", "-i", action="store_true", help="Use AI inference for enhanced metadata (requires configured valid endpoint)")
parser.add_argument("--summarize", "-s", action="store_true", help="Enable intelligent description summarization (requires model download)")
parser.add_argument("--verbose", action="store_true", help="Enable verbose logging")
parser.add_argument("--name", "-n", help="Component name in metadata")
parser.add_argument("--version", "-v", help="Component version in metadata")
parser.add_argument("--manufacturer", "-m", help="Component manufacturer/supplier in metadata")
args = parser.parse_args()
controller = CLIController()
if args.test:
test_models = [
"Qwen/Qwen3.5-397B-A17B",
"nvidia/personaplex-7b-v1",
"meta-llama/Llama-2-7b-chat-hf",
"unsloth/Qwen3.5-35B-A3B-GGUF",
"LocoreMind/LocoOperator-4B",
"Nanbeige/Nanbeige4.1-3B",
"zai-org/GLM-5",
"MiniMaxAI/MiniMax-M2.5",
"unsloth/Qwen3.5-397B-A17B-GGUF",
"FireRedTeam/FireRed-Image-Edit-1.0",
"nvidia/NVIDIA-Nemotron-Nano-9B-v2-Japanese",
"mistralai/Voxtral-Mini-4B-Realtime-2602",
"TeichAI/GLM-4.7-Flash-Claude-Opus-4.5-High-Reasoning-Distill-GGUF",
"CIRCL/vulnerability-severity-classification-roberta-base"
]
print(f"Running test mode against {len(test_models)} models...")
for model in test_models:
print(f"\n{'='*50}\nTesting model: {model}\n{'='*50}")
try:
controller.generate(
model_id=model,
output_file=args.output,
include_inference=args.inference,
enable_summarization=True, # Ensure summarization is on for testing description
verbose=args.verbose,
name=args.name,
version=args.version,
manufacturer=args.manufacturer
)
except Exception as e:
print(f"Error testing {model}: {e}")
sys.exit(0)
if not args.model_id:
parser.error("model_id is required unless --test is specified")
controller.generate(
model_id=args.model_id,
output_file=args.output,
include_inference=args.inference,
enable_summarization=args.summarize,
verbose=args.verbose,
name=args.name,
version=args.version,
manufacturer=args.manufacturer
)
if __name__ == "__main__":
main()
|