semver
This commit is contained in:
parent
632237139e
commit
3958d82908
1
go.mod
1
go.mod
@ -41,6 +41,7 @@ require (
|
|||||||
github.com/rivo/uniseg v0.2.0 // indirect
|
github.com/rivo/uniseg v0.2.0 // indirect
|
||||||
github.com/xtgo/set v1.0.0 // indirect
|
github.com/xtgo/set v1.0.0 // indirect
|
||||||
go4.org/unsafe/assume-no-moving-gc v0.0.0-20231121144256-b99613f794b6 // 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
|
golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1 // indirect
|
||||||
gonum.org/v1/gonum v0.15.0 // indirect
|
gonum.org/v1/gonum v0.15.0 // indirect
|
||||||
gorgonia.org/vecf32 v0.9.0 // indirect
|
gorgonia.org/vecf32 v0.9.0 // indirect
|
||||||
|
2
go.sum
2
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.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
|
||||||
golang.org/x/mod v0.3.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.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-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-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
|
||||||
|
@ -9,7 +9,7 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
"golang.org/x/mod/semver"
|
||||||
"golang.org/x/text/encoding/unicode"
|
"golang.org/x/text/encoding/unicode"
|
||||||
"golang.org/x/text/transform"
|
"golang.org/x/text/transform"
|
||||||
)
|
)
|
||||||
@ -141,11 +141,17 @@ func ParseFile(r io.Reader) (*File, error) {
|
|||||||
continue
|
continue
|
||||||
} else if isSpace(r) {
|
} else if isSpace(r) {
|
||||||
return nil, errInvalidVersion
|
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
|
return nil, errInvalidVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Args = s
|
cmd.Args = semver.Canonical(s)
|
||||||
f.Commands = append(f.Commands, cmd)
|
f.Commands = append(f.Commands, cmd)
|
||||||
|
|
||||||
case stateValue:
|
case stateValue:
|
||||||
@ -186,11 +192,17 @@ func ParseFile(r io.Reader) (*File, error) {
|
|||||||
s, ok := unquote(strings.TrimSpace(b.String()))
|
s, ok := unquote(strings.TrimSpace(b.String()))
|
||||||
if !ok {
|
if !ok {
|
||||||
return nil, io.ErrUnexpectedEOF
|
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
|
return nil, errInvalidVersion
|
||||||
}
|
}
|
||||||
|
|
||||||
cmd.Args = s
|
cmd.Args = semver.Canonical(s)
|
||||||
f.Commands = append(f.Commands, cmd)
|
f.Commands = append(f.Commands, cmd)
|
||||||
case stateValue:
|
case stateValue:
|
||||||
s, ok := unquote(strings.TrimSpace(b.String()))
|
s, ok := unquote(strings.TrimSpace(b.String()))
|
||||||
|
@ -22,7 +22,6 @@ import (
|
|||||||
"strconv"
|
"strconv"
|
||||||
"strings"
|
"strings"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/ollama/ollama/api"
|
"github.com/ollama/ollama/api"
|
||||||
"github.com/ollama/ollama/auth"
|
"github.com/ollama/ollama/auth"
|
||||||
"github.com/ollama/ollama/envconfig"
|
"github.com/ollama/ollama/envconfig"
|
||||||
@ -375,7 +374,7 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio
|
|||||||
}
|
}
|
||||||
|
|
||||||
var messages []*api.Message
|
var messages []*api.Message
|
||||||
var version *semver.Version
|
var version string
|
||||||
parameters := make(map[string]any)
|
parameters := make(map[string]any)
|
||||||
|
|
||||||
var layers []*Layer
|
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})
|
messages = append(messages, &api.Message{Role: role, Content: content})
|
||||||
case "ollama":
|
case "ollama":
|
||||||
if version == nil {
|
if version == "" {
|
||||||
version, err = semver.NewVersion(c.Args)
|
version = c.Args
|
||||||
if err != nil {
|
|
||||||
return err
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
default:
|
default:
|
||||||
ps, err := api.FormatParams(map[string][]string{c.Name: {c.Args}})
|
ps, err := api.FormatParams(map[string][]string{c.Name: {c.Args}})
|
||||||
|
@ -10,7 +10,6 @@ import (
|
|||||||
"os"
|
"os"
|
||||||
"path/filepath"
|
"path/filepath"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/ollama/ollama/types/model"
|
"github.com/ollama/ollama/types/model"
|
||||||
)
|
)
|
||||||
|
|
||||||
@ -19,7 +18,7 @@ type Manifest struct {
|
|||||||
MediaType string `json:"mediaType"`
|
MediaType string `json:"mediaType"`
|
||||||
Config *Layer `json:"config"`
|
Config *Layer `json:"config"`
|
||||||
Layers []*Layer `json:"layers"`
|
Layers []*Layer `json:"layers"`
|
||||||
Ollama *semver.Version `json:"ollama,omitempty"`
|
Ollama string `json:"string,omitempty"`
|
||||||
|
|
||||||
filepath string
|
filepath string
|
||||||
fi os.FileInfo
|
fi os.FileInfo
|
||||||
@ -95,7 +94,7 @@ func ParseNamedManifest(n model.Name) (*Manifest, error) {
|
|||||||
return &m, nil
|
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()
|
manifests, err := GetManifestPath()
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
|
@ -16,7 +16,6 @@ import (
|
|||||||
"strings"
|
"strings"
|
||||||
"text/template/parse"
|
"text/template/parse"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/ollama/ollama/api"
|
"github.com/ollama/ollama/api"
|
||||||
"github.com/ollama/ollama/convert"
|
"github.com/ollama/ollama/convert"
|
||||||
"github.com/ollama/ollama/llm"
|
"github.com/ollama/ollama/llm"
|
||||||
@ -31,7 +30,7 @@ type layerGGML struct {
|
|||||||
*llm.GGML
|
*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)
|
m, err := ParseNamedManifest(name)
|
||||||
switch {
|
switch {
|
||||||
case errors.Is(err, os.ErrNotExist):
|
case errors.Is(err, os.ErrNotExist):
|
||||||
|
@ -659,8 +659,8 @@ func TestCreateVersion(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Ollama.String() != "0.2.3" {
|
if m.Ollama != "v0.2.3" {
|
||||||
t.Errorf("got %s != want 0.2.3", m.Ollama)
|
t.Errorf("got %s != want v0.2.3", m.Ollama)
|
||||||
}
|
}
|
||||||
|
|
||||||
t.Run("no version", func(t *testing.T) {
|
t.Run("no version", func(t *testing.T) {
|
||||||
@ -690,8 +690,8 @@ func TestCreateVersion(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Ollama != nil {
|
if m.Ollama != "" {
|
||||||
t.Errorf("got %s != want nil", m.Ollama)
|
t.Errorf("got %s != want empty", m.Ollama)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
|
|
||||||
@ -734,8 +734,8 @@ func TestCreateVersion(t *testing.T) {
|
|||||||
t.Fatal(err)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
if m.Ollama.String() != "0.2.3" {
|
if m.Ollama != "v0.2.3" {
|
||||||
t.Errorf("got %s != want 0.2.3", m.Ollama)
|
t.Errorf("got %s != want v0.2.3", m.Ollama)
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
@ -8,7 +8,6 @@ import (
|
|||||||
"path/filepath"
|
"path/filepath"
|
||||||
"testing"
|
"testing"
|
||||||
|
|
||||||
"github.com/Masterminds/semver/v3"
|
|
||||||
"github.com/gin-gonic/gin"
|
"github.com/gin-gonic/gin"
|
||||||
"github.com/ollama/ollama/api"
|
"github.com/ollama/ollama/api"
|
||||||
"github.com/ollama/ollama/envconfig"
|
"github.com/ollama/ollama/envconfig"
|
||||||
@ -100,7 +99,7 @@ func TestDeleteDuplicateLayers(t *testing.T) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
// create a manifest with duplicate layers
|
// 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)
|
t.Fatal(err)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user