Skip to content

Commit d4b7fdc

Browse files
authored
Merge pull request #61 from mutablelogic/v1
Updated api
2 parents a76d738 + 317ef01 commit d4b7fdc

File tree

8 files changed

+90
-20
lines changed

8 files changed

+90
-20
lines changed

cmd/api/delete.go

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package main
2+
3+
type DeleteCmd struct {
4+
Model string `arg:"" name:"model" help:"Model to delete"`
5+
}
6+
7+
func (cmd *DeleteCmd) Run(ctx *Globals) error {
8+
if err := ctx.client.DeleteModel(ctx.ctx, cmd.Model); err != nil {
9+
return err
10+
}
11+
return nil
12+
}

cmd/api/download.go

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
package main
2+
3+
import (
4+
"fmt"
5+
6+
"github.com/djthorpe/go-tablewriter"
7+
)
8+
9+
type DownloadCmd struct {
10+
Model string `arg:"" name:"model" help:"Model to download (must end in .bin)"`
11+
}
12+
13+
func (cmd *DownloadCmd) Run(ctx *Globals) error {
14+
model, err := ctx.client.DownloadModel(ctx.ctx, cmd.Model, func(status string, cur, total int64) {
15+
pct := fmt.Sprintf("%02d%%", int(100*float64(cur)/float64(total)))
16+
ctx.writer.Writeln(pct, status)
17+
})
18+
if err != nil {
19+
return err
20+
}
21+
return ctx.writer.Write(model, tablewriter.OptHeader())
22+
}

cmd/api/main.go

+4-1
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,10 @@ type Globals struct {
3030
type CLI struct {
3131
Globals
3232

33-
Ping PingCmd `cmd help:"Ping the whisper service"`
33+
Ping PingCmd `cmd:"ping" help:"Ping the whisper service"`
34+
Models ModelsCmd `cmd:"models" help:"List models"`
35+
Download DownloadCmd `cmd:"download" help:"Download a model"`
36+
Delete DeleteCmd `cmd:"delete" help:"Delete a model"`
3437
}
3538

3639
////////////////////////////////////////////////////////////////////////////////

cmd/api/models.go

+13
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package main
2+
3+
import "github.com/djthorpe/go-tablewriter"
4+
5+
type ModelsCmd struct{}
6+
7+
func (cmd *ModelsCmd) Run(ctx *Globals) error {
8+
if models, err := ctx.client.ListModels(ctx.ctx); err != nil {
9+
return err
10+
} else {
11+
return ctx.writer.Write(models, tablewriter.OptHeader())
12+
}
13+
}

cmd/api/ping.go

+1-1
Original file line numberDiff line numberDiff line change
@@ -6,5 +6,5 @@ func (cmd *PingCmd) Run(ctx *Globals) error {
66
if err := ctx.client.Ping(ctx.ctx); err != nil {
77
return err
88
}
9-
return ctx.writer.Write("OK")
9+
return ctx.writer.Writeln("OK")
1010
}

go.mod

+5-5
Original file line numberDiff line numberDiff line change
@@ -5,10 +5,10 @@ go 1.22
55
require (
66
github.com/alecthomas/kong v0.9.0
77
github.com/djthorpe/go-errors v1.0.3
8-
github.com/djthorpe/go-tablewriter v0.0.8
8+
github.com/djthorpe/go-tablewriter v0.0.10
99
github.com/go-audio/wav v1.1.0
1010
github.com/mutablelogic/go-client v1.0.9
11-
github.com/mutablelogic/go-media v1.6.11
11+
github.com/mutablelogic/go-media v1.6.12
1212
github.com/mutablelogic/go-server v1.4.15
1313
github.com/stretchr/testify v1.9.0
1414
)
@@ -20,8 +20,8 @@ require (
2020
github.com/mattn/go-runewidth v0.0.16 // indirect
2121
github.com/pmezard/go-difflib v1.0.0 // indirect
2222
github.com/rivo/uniseg v0.4.7 // indirect
23-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 // indirect
24-
golang.org/x/sys v0.22.0 // indirect
25-
golang.org/x/term v0.22.0 // indirect
23+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa // indirect
24+
golang.org/x/sys v0.24.0 // indirect
25+
golang.org/x/term v0.23.0 // indirect
2626
gopkg.in/yaml.v3 v3.0.1 // indirect
2727
)

go.sum

+10-10
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,8 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c
88
github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
99
github.com/djthorpe/go-errors v1.0.3 h1:GZeMPkC1mx2vteXLI/gvxZS0Ee9zxzwD1mcYyKU5jD0=
1010
github.com/djthorpe/go-errors v1.0.3/go.mod h1:HtfrZnMd6HsX75Mtbv9Qcnn0BqOrrFArvCaj3RMnZhY=
11-
github.com/djthorpe/go-tablewriter v0.0.8 h1:uRhB9XVgK1n9tvVS7KMyxhxxGGtDvqC80toDTpW4DB4=
12-
github.com/djthorpe/go-tablewriter v0.0.8/go.mod h1:NVBvytpL+6fHfCKn0+3lSi15/G3A1HWf2cLNeHg6YBg=
11+
github.com/djthorpe/go-tablewriter v0.0.10 h1:/nL5NWJba4zrQoleIEyw4NwBYY9b3XTGM9EV+c+VWhU=
12+
github.com/djthorpe/go-tablewriter v0.0.10/go.mod h1:NVBvytpL+6fHfCKn0+3lSi15/G3A1HWf2cLNeHg6YBg=
1313
github.com/go-audio/audio v1.0.0 h1:zS9vebldgbQqktK4H0lUqWrG8P0NxCJVqcj7ZpNnwd4=
1414
github.com/go-audio/audio v1.0.0/go.mod h1:6uAu0+H2lHkwdGsAY+j2wHPNPpPoeg5AaEFh9FlA+Zs=
1515
github.com/go-audio/riff v1.0.0 h1:d8iCGbDvox9BfLagY94fBynxSPHO80LmZCaOsmKxokA=
@@ -26,8 +26,8 @@ github.com/mattn/go-runewidth v0.0.16 h1:E5ScNMtiwvlvB5paMFdw9p4kSQzbXFikJ5SQO6T
2626
github.com/mattn/go-runewidth v0.0.16/go.mod h1:Jdepj2loyihRzMpdS35Xk/zdY8IAYHsh153qUoGf23w=
2727
github.com/mutablelogic/go-client v1.0.9 h1:Eh4sjQOFDldP/L3IizqkcOD3WigZR+u1VaHTUM4ujYw=
2828
github.com/mutablelogic/go-client v1.0.9/go.mod h1:VLyB8j8IBJSK/FXvvqhmq93PRWDKkyLu8R7V2Vudb6A=
29-
github.com/mutablelogic/go-media v1.6.11 h1:czwRvuWIaqDArZrHv0e7nEIjXJkCbnNWkrQzkTOs96w=
30-
github.com/mutablelogic/go-media v1.6.11/go.mod h1:HulNT0yyH63a3FRlbuzNDakhOypYrmtFVkHEXZjDgAY=
29+
github.com/mutablelogic/go-media v1.6.12 h1:+FaqSz6GpQduF4KEDdYMxTCdtkJFOOaMJ/4wd3L59wI=
30+
github.com/mutablelogic/go-media v1.6.12/go.mod h1:HulNT0yyH63a3FRlbuzNDakhOypYrmtFVkHEXZjDgAY=
3131
github.com/mutablelogic/go-server v1.4.15 h1:jOvVdDmVK+PGCMBAk5atKHVonnccwy/b4dWwWFAOTso=
3232
github.com/mutablelogic/go-server v1.4.15/go.mod h1:9nenPAohKu8bFoRgwHJh+3s8h0kLFjUAb8KZvT1TQNU=
3333
github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
@@ -37,14 +37,14 @@ github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
3737
github.com/rivo/uniseg v0.4.7/go.mod h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
3838
github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
3939
github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
40-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56 h1:2dVuKD2vS7b0QIHQbpyTISPd0LeHDbnYEryqj5Q1ug8=
41-
golang.org/x/exp v0.0.0-20240719175910-8a7402abbf56/go.mod h1:M4RDyNAINzryxdtnbRXRL/OHtkFuWGRjvuhBJpk2IlY=
40+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa h1:ELnwvuAXPNtPk1TJRuGkI9fDTwym6AYBu0qzT8AcHdI=
41+
golang.org/x/exp v0.0.0-20240808152545-0cdaa3abc0fa/go.mod h1:akd2r19cwCdwSwWeIdzYQGa/EZZyqcOdwWiwj5L5eKQ=
4242
golang.org/x/image v0.18.0 h1:jGzIakQa/ZXI1I0Fxvaa9W7yP25TqT6cHIHn+6CqvSQ=
4343
golang.org/x/image v0.18.0/go.mod h1:4yyo5vMFQjVjUcVk4jEQcU9MGy/rulF5WvUILseCM2E=
44-
golang.org/x/sys v0.22.0 h1:RI27ohtqKCnwULzJLqkv897zojh5/DwS/ENaMzUOaWI=
45-
golang.org/x/sys v0.22.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
46-
golang.org/x/term v0.22.0 h1:BbsgPEJULsl2fV/AT3v15Mjva5yXKQDyKf+TbDz7QJk=
47-
golang.org/x/term v0.22.0/go.mod h1:F3qCibpT5AMpCRfhfT53vVJwhLtIVHhB9XDjfFvnMI4=
44+
golang.org/x/sys v0.24.0 h1:Twjiwq9dn6R1fQcyiK+wQyHWfaz/BJB+YIpzU/Cv3Xg=
45+
golang.org/x/sys v0.24.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
46+
golang.org/x/term v0.23.0 h1:F6D4vR+EHoL9/sWAWgAR1H2DcHr4PareCbAaCo1RpuU=
47+
golang.org/x/term v0.23.0/go.mod h1:DgV24QBUrK6jhZXl+20l6UWznPlwAHm1Q1mGHtydmSk=
4848
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM=
4949
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
5050
gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=

pkg/client/client.go

+23-3
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ package client
22

33
import (
44
"context"
5+
"errors"
56
"io"
67
"net/url"
78
"os"
@@ -86,9 +87,28 @@ func (c *Client) DownloadModel(ctx context.Context, path string, fn func(status
8687
client.OptPath("models"),
8788
client.OptQuery(query),
8889
client.OptNoTimeout(),
89-
client.OptJsonStreamCallback(func(v any) error {
90-
if v, ok := v.(*resp); ok && fn != nil {
91-
fn(v.Status, v.Completed, v.Total)
90+
client.OptTextStreamCallback(func(evt client.TextStreamEvent) error {
91+
switch evt.Event {
92+
case "progress":
93+
var r resp
94+
if err := evt.Json(&r); err != nil {
95+
return err
96+
} else {
97+
fn(r.Status, r.Completed, r.Total)
98+
}
99+
case "error":
100+
var errstr string
101+
if evt.Event == "error" {
102+
if err := evt.Json(&errstr); err != nil {
103+
return err
104+
} else {
105+
return errors.New(errstr)
106+
}
107+
}
108+
case "ok":
109+
if err := evt.Json(&r); err != nil {
110+
return err
111+
}
92112
}
93113
return nil
94114
}),

0 commit comments

Comments
 (0)