11package main
22
33import (
4- "context"
54 "encoding/json"
65 "fmt"
76 "os"
@@ -10,7 +9,6 @@ import (
109
1110 // Packages
1211 tablewriter "github.com/djthorpe/go-tablewriter"
13- llm "github.com/mutablelogic/go-llm"
1412 agent "github.com/mutablelogic/go-llm/pkg/agent"
1513 "github.com/mutablelogic/go-llm/pkg/ollama"
1614)
@@ -35,104 +33,71 @@ type DownloadModelCmd struct {
3533// PUBLIC METHODS
3634
3735func (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
4339}
4440
4541func (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 )
6658
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 ())
7061}
7162
7263func (* 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
9271}
9372
9473func (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 )
12677 }
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
13092 }
93+ fmt .Println (model )
94+ default :
95+ return fmt .Errorf ("Agent %q does not support model download" , agents [0 ].Name ())
13196 }
13297 return nil
13398}
13499
135- // //////////////////////////////////////////////////////////////////////////////
100+ ////////////////////////////////////////////////////////////////////////////////
136101// MODEL LIST
137102
138103type Model struct {
0 commit comments