1
1
package main
2
2
3
3
import (
4
- "context"
5
4
"encoding/json"
6
5
"fmt"
7
6
"os"
@@ -10,7 +9,6 @@ import (
10
9
11
10
// Packages
12
11
tablewriter "github.com/djthorpe/go-tablewriter"
13
- llm "github.com/mutablelogic/go-llm"
14
12
agent "github.com/mutablelogic/go-llm/pkg/agent"
15
13
"github.com/mutablelogic/go-llm/pkg/ollama"
16
14
)
@@ -35,104 +33,71 @@ type DownloadModelCmd struct {
35
33
// PUBLIC METHODS
36
34
37
35
func (cmd * ListToolsCmd ) Run (globals * Globals ) error {
38
- return runagent (globals , func (ctx context.Context , client llm.Agent ) error {
39
- tools := globals .toolkit .Tools (client )
40
- fmt .Println (tools )
41
- return nil
42
- })
36
+ tools := globals .toolkit .Tools (globals .agent )
37
+ fmt .Println (tools )
38
+ return nil
43
39
}
44
40
45
41
func (cmd * ListModelsCmd ) Run (globals * Globals ) error {
46
- return runagent (globals , func (ctx context.Context , client llm.Agent ) error {
47
- agent_ , ok := client .(* agent.Agent )
48
- if ! ok {
49
- return fmt .Errorf ("No agents found" )
50
- }
51
- models , err := agent_ .ListModels (ctx , cmd .Agent ... )
52
- if err != nil {
53
- return err
54
- }
55
- result := make (ModelList , 0 , len (models ))
56
- for _ , model := range models {
57
- result = append (result , Model {
58
- Agent : model .(* agent.Model ).Agent ,
59
- Model : model .Name (),
60
- Description : model .Description (),
61
- Aliases : strings .Join (model .Aliases (), ", " ),
62
- })
63
- }
64
- // Sort models by name
65
- sort .Sort (result )
42
+ models , err := globals .agent .ListModels (globals .ctx , cmd .Agent ... )
43
+ if err != nil {
44
+ return err
45
+ }
46
+ result := make (ModelList , 0 , len (models ))
47
+ for _ , model := range models {
48
+ result = append (result , Model {
49
+ Agent : model .(* agent.Model ).Agent ,
50
+ Model : model .Name (),
51
+ Description : model .Description (),
52
+ Aliases : strings .Join (model .Aliases (), ", " ),
53
+ })
54
+ }
55
+
56
+ // Sort models by name
57
+ sort .Sort (result )
66
58
67
- // Write out the models
68
- return tablewriter .New (os .Stdout ).Write (result , tablewriter .OptOutputText (), tablewriter .OptHeader ())
69
- })
59
+ // Write out the models
60
+ return tablewriter .New (os .Stdout ).Write (result , tablewriter .OptOutputText (), tablewriter .OptHeader ())
70
61
}
71
62
72
63
func (* ListAgentsCmd ) Run (globals * Globals ) error {
73
- return runagent (globals , func (ctx context.Context , client llm.Agent ) error {
74
- agent , ok := client .(* agent.Agent )
75
- if ! ok {
76
- return fmt .Errorf ("No agents found" )
77
- }
78
-
79
- agents := make ([]string , 0 , len (agent .Agents ()))
80
- for _ , agent := range agent .Agents () {
81
- agents = append (agents , agent .Name ())
82
- }
83
-
84
- data , err := json .MarshalIndent (agents , "" , " " )
85
- if err != nil {
86
- return err
87
- }
88
- fmt .Println (string (data ))
89
-
90
- return nil
91
- })
64
+ agents := globals .agent .AgentNames ()
65
+ data , err := json .MarshalIndent (agents , "" , " " )
66
+ if err != nil {
67
+ return err
68
+ }
69
+ fmt .Println (string (data ))
70
+ return nil
92
71
}
93
72
94
73
func (cmd * DownloadModelCmd ) Run (globals * Globals ) error {
95
- return runagent (globals , func (ctx context.Context , client llm.Agent ) error {
96
- agent := getagent (client , cmd .Agent )
97
- if agent == nil {
98
- return fmt .Errorf ("No agents found with name %q" , cmd .Agent )
99
- }
100
- // Download the model
101
- switch agent .Name () {
102
- case "ollama" :
103
- model , err := agent .(* ollama.Client ).PullModel (ctx , cmd .Model )
104
- if err != nil {
105
- return err
106
- }
107
- fmt .Println (model )
108
- default :
109
- return fmt .Errorf ("Agent %q does not support model download" , agent .Name ())
110
- }
111
- return nil
112
- })
113
- }
114
-
115
- ////////////////////////////////////////////////////////////////////////////////
116
- // PRIVATE METHODS
117
-
118
- func runagent (globals * Globals , fn func (ctx context.Context , agent llm.Agent ) error ) error {
119
- return fn (globals .ctx , globals .agent )
120
- }
121
-
122
- func getagent (client llm.Agent , name string ) llm.Agent {
123
- agent , ok := client .(* agent.Agent )
124
- if ! ok {
125
- return nil
74
+ agents := globals .agent .AgentsWithName (cmd .Agent )
75
+ if len (agents ) == 0 {
76
+ return fmt .Errorf ("No agents found with name %q" , cmd .Agent )
126
77
}
127
- for _ , agent := range agent .Agents () {
128
- if agent .Name () == name {
129
- return agent
78
+ switch agents [0 ].Name () {
79
+ case "ollama" :
80
+ model , err := agents [0 ].(* ollama.Client ).PullModel (globals .ctx , cmd .Model , ollama .WithPullStatus (func (status * ollama.PullStatus ) {
81
+ var pct int64
82
+ if status .TotalBytes > 0 {
83
+ pct = status .CompletedBytes * 100 / status .TotalBytes
84
+ }
85
+ fmt .Print ("\r " , status .Status , " " , pct , "%" )
86
+ if status .Status == "success" {
87
+ fmt .Println ("" )
88
+ }
89
+ }))
90
+ if err != nil {
91
+ return err
130
92
}
93
+ fmt .Println (model )
94
+ default :
95
+ return fmt .Errorf ("Agent %q does not support model download" , agents [0 ].Name ())
131
96
}
132
97
return nil
133
98
}
134
99
135
- // //////////////////////////////////////////////////////////////////////////////
100
+ ////////////////////////////////////////////////////////////////////////////////
136
101
// MODEL LIST
137
102
138
103
type Model struct {
0 commit comments