hy-smi 2.24 KB
Newer Older
one's avatar
one committed
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
#!/usr/bin/env bash

_hy_smi_completion() {
    local cur prev subcmds
    COMPREPLY=()
    cur="${COMP_WORDS[COMP_CWORD]}"
    prev="${COMP_WORDS[COMP_CWORD-1]}"

    # Subcommands
    subcmds="virtual mig"

    # If cache variable _HY_SMI_OPTS is empty, parse options from help output.
    if [[ -z "$_HY_SMI_OPTS" ]]; then
        # Extract only valid short/long options (e.g. -h, --help),
        # avoiding punctuation-contaminated tokens like -h' or --foo.
        export _HY_SMI_OPTS=$(hy-smi -h 2>/dev/null | awk '{
            for(i=1;i<=NF;i++) {
                token=$i
                while (match(token, /--[A-Za-z0-9][A-Za-z0-9-]*|-[A-Za-z0-9]/)) {
                    print substr(token, RSTART, RLENGTH)
                    token=substr(token, RSTART + RLENGTH)
                }
            }
        }' | sort -u)
    fi

    # Provide intelligent suggestions for specific parameters (prev)
    case "${prev}" in
        --load|--save|--filename|-fdmon)
            COMPREPLY=( $(compgen -f -- "${cur}") )
            return 0
            ;;
        --loglevel)
            COMPREPLY=( $(compgen -W "debug info warning error critical" -- "${cur}") )
            return 0
            ;;
        --setperflevel)
            COMPREPLY=( $(compgen -W "auto low high manual" -- "${cur}") )
            return 0
            ;;
        --setecc)
            COMPREPLY=( $(compgen -W "on off stable" -- "${cur}") )
            return 0
            ;;
        --direction)
            COMPREPLY=( $(compgen -W "0 1" -- "${cur}") )
            return 0
            ;;
        --enablelowpower|--setautoloaddriver|--setautorunhyckptd|-mig|--multi-instance-gpu)
            COMPREPLY=( $(compgen -W "0 1" -- "${cur}") )
            return 0
            ;;
        --setboost)
            COMPREPLY=( $(compgen -W "0-AI(default), 1-HPC(default), 2-AI(typical), 3-HPC(typical)" -- "${cur}") )
            return 0
            ;;
    esac

    if [[ ${cur} == -* ]] ; then
        # Only complete the dynamically extracted flags
        COMPREPLY=( $(compgen -W "${_HY_SMI_OPTS}" -- "${cur}") )
        return 0
    fi

    # Default complete all flags and subcommands
    COMPREPLY=( $(compgen -W "${_HY_SMI_OPTS} ${subcmds}" -- "${cur}") )
}

complete -o default -F _hy_smi_completion hy-smi