Commit 84d8c20
Changed files (3)
internal/del/provider.go
@@ -1,33 +1,46 @@
package del
import (
- "context"
- "fmt"
- "os/exec"
+ "context"
+ "fmt"
+
+ "github.com/ollama/ollama/api"
)
type AIProvider interface {
- Generate(ctx context.Context, prompt string) (string, error)
- Name() string
+ Generate(ctx context.Context, prompt string) (string, error)
+ Name() string
}
type OllamaProvider struct {
- model string
+ model string
+ client *api.Client
}
-func NewOllamaProvider(model string) AIProvider {
- return &OllamaProvider{model: model}
+func NewOllamaProvider(model string) *OllamaProvider {
+ client, _ := api.ClientFromEnvironment()
+ return &OllamaProvider{
+ model: model,
+ client: client,
+ }
}
func (o *OllamaProvider) Generate(ctx context.Context, prompt string) (string, error) {
- cmd := exec.CommandContext(ctx, "ollama", "run", o.model, prompt)
- output, err := cmd.CombinedOutput()
- if err != nil {
- return "", fmt.Errorf("ollama error: %w\n%s", err, string(output))
- }
- return string(output), nil
+ var full string
+ err := o.client.Generate(ctx, &api.GenerateRequest{
+ Model: o.model,
+ Prompt: prompt,
+ }, api.GenerateResponseFunc(func(resp api.GenerateResponse) error {
+ full += resp.Response
+ return nil
+ }))
+
+ if err != nil {
+ return "", fmt.Errorf("ollama API error: %w", err)
+ }
+ return full, nil
}
func (o *OllamaProvider) Name() string {
- return fmt.Sprintf("Ollama (%s)", o.model)
+ return fmt.Sprintf("Ollama (%s)", o.model)
}
go.mod
@@ -2,9 +2,14 @@ module github.com/xlgmokha/deltron
go 1.24.0
-require github.com/spf13/cobra v1.9.1
+require (
+ github.com/ollama/ollama v0.9.2
+ github.com/spf13/cobra v1.9.1
+)
require (
github.com/inconshreveable/mousetrap v1.1.0 // indirect
github.com/spf13/pflag v1.0.6 // indirect
+ golang.org/x/crypto v0.36.0 // indirect
+ golang.org/x/sys v0.31.0 // indirect
)
go.sum
@@ -1,10 +1,27 @@
github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
+github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c=
+github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
+github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
+github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
+github.com/ollama/ollama v0.9.2 h1:NEzeLb0gwz1XRyQUCPb30zqDyO/bze+Hiq9NUuYEUy4=
+github.com/ollama/ollama v0.9.2/go.mod h1:+5wt6UPgPmzYhnpLJ/rObxJJyEXURZ/SKKCMQsff8bA=
+github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
+github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
github.com/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
github.com/spf13/cobra v1.9.1/go.mod h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg=
+github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY=
+golang.org/x/crypto v0.36.0 h1:AnAEvhDddvBdpY+uR+MyHmuZzzNqXSe/GvuDeob5L34=
+golang.org/x/crypto v0.36.0/go.mod h1:Y4J0ReaxCR1IMaabaSMugxJES1EpwhBHhv2bDHklZvc=
+golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik=
+golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/term v0.30.0 h1:PQ39fJZ+mfadBm0y5WlL4vlM7Sx1Hgf13sMIY2+QS9Y=
+golang.org/x/term v0.30.0/go.mod h1:NYYFdzHoI5wRh/h5tDMdMqCqPJZEuNqVR5xJLd/n67g=
gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
+gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=