From 3958d829082b7004c2bb77b5fedf98bb04d69a80 Mon Sep 17 00:00:00 2001 From: Josh Yan Date: Tue, 30 Jul 2024 15:48:40 -0700 Subject: [PATCH] semver --- go.mod | 1 + go.sum | 2 ++ parser/parser.go | 22 +++++++++++++++++----- server/images.go | 10 +++------- server/manifest.go | 5 ++--- server/model.go | 3 +-- server/routes_create_test.go | 12 ++++++------ server/routes_delete_test.go | 3 +-- 8 files changed, 33 insertions(+), 25 deletions(-) diff --git a/go.mod b/go.mod index 79f9cf77e..abb88321d 100644 --- a/go.mod +++ b/go.mod @@ -41,6 +41,7 @@ require ( github.com/rivo/uniseg v0.2.0 // indirect github.com/xtgo/set v1.0.0 // indirect go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // indirect + golang.org/x/mod v0.19.0 // indirect golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect gonum.org/v1/gonum v0.15.0 // indirect gorgonia.org/vecf32 v0.9.0 // indirect diff --git a/go.sum b/go.sum index cc6625f30..f7a3b2af4 100644 --- a/go.sum +++ b/go.sum @@ -242,6 +242,8 @@ golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod h1:QqPTAvyqsEbceGzB golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= +golang.org/x/mod v0.19.0 h1:fEdghXQSo20giMthA7cd28ZC+jts4amQ3YMXiP5oMQ8= +golang.org/x/mod v0.19.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= diff --git a/parser/parser.go b/parser/parser.go index 61a56f2a0..40c7d9d02 100644 --- a/parser/parser.go +++ b/parser/parser.go @@ -9,7 +9,7 @@ import ( "strconv" "strings" - "github.com/Masterminds/semver/v3" + "golang.org/x/mod/semver" "golang.org/x/text/encoding/unicode" "golang.org/x/text/transform" ) @@ -141,11 +141,17 @@ func ParseFile(r io.Reader) (*File, error) { continue } else if isSpace(r) { return nil, errInvalidVersion - } else if _, err := semver.NewVersion(s); err != nil { + } + + if s[0] != 'v' { + s = "v" + s + } + + if !semver.IsValid(s) { return nil, errInvalidVersion } - cmd.Args = s + cmd.Args = semver.Canonical(s) f.Commands = append(f.Commands, cmd) case stateValue: @@ -186,11 +192,17 @@ func ParseFile(r io.Reader) (*File, error) { s, ok := unquote(strings.TrimSpace(b.String())) if !ok { return nil, io.ErrUnexpectedEOF - } else if _, err := semver.NewVersion(s); err != nil { + } + + if s[0] != 'v' { + s = "v" + s + } + + if !semver.IsValid(s) { return nil, errInvalidVersion } - cmd.Args = s + cmd.Args = semver.Canonical(s) f.Commands = append(f.Commands, cmd) case stateValue: s, ok := unquote(strings.TrimSpace(b.String())) diff --git a/server/images.go b/server/images.go index dc2a04258..53de2d774 100644 --- a/server/images.go +++ b/server/images.go @@ -22,7 +22,6 @@ import ( "strconv" "strings" - "github.com/Masterminds/semver/v3" "github.com/ollama/ollama/api" "github.com/ollama/ollama/auth" "github.com/ollama/ollama/envconfig" @@ -375,7 +374,7 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio } var messages []*api.Message - var version *semver.Version + var version string parameters := make(map[string]any) var layers []*Layer @@ -532,11 +531,8 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio messages = append(messages, &api.Message{Role: role, Content: content}) case "ollama": - if version == nil { - version, err = semver.NewVersion(c.Args) - if err != nil { - return err - } + if version == "" { + version = c.Args } default: ps, err := api.FormatParams(map[string][]string{c.Name: {c.Args}}) diff --git a/server/manifest.go b/server/manifest.go index c13a9c96f..f0fa82816 100644 --- a/server/manifest.go +++ b/server/manifest.go @@ -10,7 +10,6 @@ import ( "os" "path/filepath" - "github.com/Masterminds/semver/v3" "github.com/ollama/ollama/types/model" ) @@ -19,7 +18,7 @@ type Manifest struct { MediaType string `json:"mediaType"` Config *Layer `json:"config"` Layers []*Layer `json:"layers"` - Ollama *semver.Version `json:"ollama,omitempty"` + Ollama string `json:"string,omitempty"` filepath string fi os.FileInfo @@ -95,7 +94,7 @@ func ParseNamedManifest(n model.Name) (*Manifest, error) { return &m, nil } -func WriteManifest(name model.Name, ollama *semver.Version, config *Layer, layers []*Layer) error { +func WriteManifest(name model.Name, ollama string, config *Layer, layers []*Layer) error { manifests, err := GetManifestPath() if err != nil { return err diff --git a/server/model.go b/server/model.go index b7688dcfb..39922700d 100644 --- a/server/model.go +++ b/server/model.go @@ -16,7 +16,6 @@ import ( "strings" "text/template/parse" - "github.com/Masterminds/semver/v3" "github.com/ollama/ollama/api" "github.com/ollama/ollama/convert" "github.com/ollama/ollama/llm" @@ -31,7 +30,7 @@ type layerGGML struct { *llm.GGML } -func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressResponse)) (layers []*layerGGML, version *semver.Version, err error) { +func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressResponse)) (layers []*layerGGML, version string, err error) { m, err := ParseNamedManifest(name) switch { case errors.Is(err, os.ErrNotExist): diff --git a/server/routes_create_test.go b/server/routes_create_test.go index d9e0a58b1..1cd9ba771 100644 --- a/server/routes_create_test.go +++ b/server/routes_create_test.go @@ -659,8 +659,8 @@ func TestCreateVersion(t *testing.T) { t.Fatal(err) } - if m.Ollama.String() != "0.2.3" { - t.Errorf("got %s != want 0.2.3", m.Ollama) + if m.Ollama != "v0.2.3" { + t.Errorf("got %s != want v0.2.3", m.Ollama) } t.Run("no version", func(t *testing.T) { @@ -690,8 +690,8 @@ func TestCreateVersion(t *testing.T) { t.Fatal(err) } - if m.Ollama != nil { - t.Errorf("got %s != want nil", m.Ollama) + if m.Ollama != "" { + t.Errorf("got %s != want empty", m.Ollama) } }) @@ -734,8 +734,8 @@ func TestCreateVersion(t *testing.T) { t.Fatal(err) } - if m.Ollama.String() != "0.2.3" { - t.Errorf("got %s != want 0.2.3", m.Ollama) + if m.Ollama != "v0.2.3" { + t.Errorf("got %s != want v0.2.3", m.Ollama) } }) } diff --git a/server/routes_delete_test.go b/server/routes_delete_test.go index 56aa30199..837be0626 100644 --- a/server/routes_delete_test.go +++ b/server/routes_delete_test.go @@ -8,7 +8,6 @@ import ( "path/filepath" "testing" - "github.com/Masterminds/semver/v3" "github.com/gin-gonic/gin" "github.com/ollama/ollama/api" "github.com/ollama/ollama/envconfig" @@ -100,7 +99,7 @@ func TestDeleteDuplicateLayers(t *testing.T) { } // create a manifest with duplicate layers - if err := WriteManifest(n, &semver.Version{}, config, []*Layer{config}); err != nil { + if err := WriteManifest(n, "", config, []*Layer{config}); err != nil { t.Fatal(err) }