-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathcli_models.v
More file actions
111 lines (107 loc) · 3.17 KB
/
Copy pathcli_models.v
File metadata and controls
111 lines (107 loc) · 3.17 KB
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
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
module main
import agent
// handle_models implements the `vaiv models` CLI group (Phase 16). It manages
// `.vaiv/models.yaml` and exits (no LLM). Sub-commands:
// list show numbered table with active marker
// add <p> <m> [url] [key] add a model (persisted to .vaiv/models.yaml)
// remove <n> delete model #n
// use <n> set active model (persisted)
// enable|disable <n> toggle enabled flag
fn handle_models(sub string, args []string, mut config agent.Config) {
mut reg := agent.load_models() or {
eprintln('vaiv-models: ${err}')
exit(1)
}
match sub {
'list' {
print_models(reg, config)
}
'add' {
if args.len < 2 {
eprintln('usage: vaiv models add <provider> <model> [base_url] [api_key]')
exit(1)
}
provider := args[0]
model := args[1]
base_url := if args.len > 2 { args[2] } else { '' }
api_key := if args.len > 3 { args[3] } else { '' }
reg.add(provider, model, base_url, api_key) or {
eprintln('vaiv-models: ${err}')
exit(1)
}
println('[vaiv] added ${provider}/${model}' + if reg.models.len == 1 {
' (now active)'
} else {
''
})
}
'remove' {
if args.len < 1 {
eprintln('usage: vaiv models remove <n>')
exit(1)
}
n := args[0].int()
reg.remove(n) or {
eprintln('vaiv-models: ${err}')
exit(1)
}
println('[vaiv] removed model #${n}')
}
'use' {
if args.len < 1 {
eprintln('usage: vaiv models use <n>')
exit(1)
}
n := args[0].int()
reg.use(n) or {
eprintln('vaiv-models: ${err}')
exit(1)
}
active := reg.models[n - 1]
println('[vaiv] active model -> #${n} ${active.provider}/${active.model}')
}
'enable' {
set_enabled_cmd(mut reg, args, true)
}
'disable' {
set_enabled_cmd(mut reg, args, false)
}
else {
eprintln('vaiv-models: unknown subcommand "${sub}"')
eprintln('usage: vaiv models [list|add|remove|use|enable|disable]')
exit(1)
}
}
}
// set_enabled_cmd flips enabled for an index (used by enable/disable).
fn set_enabled_cmd(mut reg agent.ModelsRegistry, args []string, on bool) {
if args.len < 1 {
eprintln('usage: vaiv models ${if on { 'enable' } else { 'disable' }} <n>')
exit(1)
}
n := args[0].int()
reg.set_enabled(n, on) or {
eprintln('vaiv-models: ${err}')
exit(1)
}
verb := if on { 'enabled' } else { 'disabled' }
println('[vaiv] model #${n} ${verb}')
}
// print_models shows the registry as a numbered table with the active marker.
fn print_models(reg agent.ModelsRegistry, config agent.Config) {
if reg.models.len == 0 {
println('[vaiv] no models configured (${reg.path})')
println(' add one: vaiv models add <provider> <model> [base_url] [api_key]')
println(' current legacy provider from config.yaml: ${config.provider}/${config.model}')
return
}
println('[vaiv] models (${reg.path}):')
for i, e in reg.models {
idx := i + 1
star := if i == reg.active_index { '*' } else { ' ' }
en := if e.enabled or { true } { '' } else { ' [disabled]' }
key := if e.api_key != '' { 'key=set' } else { 'key=env' }
println(' ${star} ${idx}. ${e.provider}/${e.model} ${key}${en}')
}
println(' * = active (used first; falls back across enabled models)')
}