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