use semver

This commit is contained in:
Josh Yan 2024-07-30 11:21:56 -07:00
parent b0a947cf1f
commit 2f5497301f
6 changed files with 19 additions and 12 deletions

View File

@ -43,7 +43,7 @@ func (c Command) String() string {
role, message, _ := strings.Cut(c.Args, ": ") role, message, _ := strings.Cut(c.Args, ": ")
fmt.Fprintf(&sb, "MESSAGE %s %s", role, quote(message)) fmt.Fprintf(&sb, "MESSAGE %s %s", role, quote(message))
case "ollama": case "ollama":
fmt.Fprintf(&sb, "OLLAMA %s", quote(c.Args)) fmt.Fprintf(&sb, "OLLAMA %s", c.Args)
default: default:
fmt.Fprintf(&sb, "PARAMETER %s %s", c.Name, quote(c.Args)) fmt.Fprintf(&sb, "PARAMETER %s %s", c.Name, quote(c.Args))
} }

View File

@ -22,6 +22,7 @@ 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"
@ -374,7 +375,7 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio
} }
var messages []*api.Message var messages []*api.Message
var version string var version *semver.Version
parameters := make(map[string]any) parameters := make(map[string]any)
var layers []*Layer var layers []*Layer
@ -531,8 +532,11 @@ 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 == "" { if version == nil {
version = c.Args version, err = semver.NewVersion(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}})
@ -647,7 +651,7 @@ func CreateModel(ctx context.Context, name model.Name, modelFileDir, quantizatio
old, _ := ParseNamedManifest(name) old, _ := ParseNamedManifest(name)
fn(api.ProgressResponse{Status: "writing manifest"}) fn(api.ProgressResponse{Status: "writing manifest"})
if err := WriteManifest(name, layer, layers, version); err != nil { if err := WriteManifest(name, version, layer, layers); err != nil {
return err return err
} }

View File

@ -10,6 +10,7 @@ import (
"os" "os"
"path/filepath" "path/filepath"
"github.com/Masterminds/semver/v3"
"github.com/ollama/ollama/types/model" "github.com/ollama/ollama/types/model"
) )
@ -18,7 +19,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 string `json:"ollama"` Ollama *semver.Version `json:"ollama,omitempty"`
filepath string filepath string
fi os.FileInfo fi os.FileInfo
@ -94,7 +95,7 @@ func ParseNamedManifest(n model.Name) (*Manifest, error) {
return &m, nil return &m, nil
} }
func WriteManifest(name model.Name, config *Layer, layers []*Layer, ollama string) error { func WriteManifest(name model.Name, ollama *semver.Version, config *Layer, layers []*Layer) error {
manifests, err := GetManifestPath() manifests, err := GetManifestPath()
if err != nil { if err != nil {
return err return err

View File

@ -16,6 +16,7 @@ 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"
@ -30,7 +31,7 @@ type layerGGML struct {
*llm.GGML *llm.GGML
} }
func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressResponse)) (layers []*layerGGML, version string, err error) { func parseFromModel(ctx context.Context, name model.Name, fn func(api.ProgressResponse)) (layers []*layerGGML, version *semver.Version, err error) {
m, err := ParseNamedManifest(name) m, err := ParseNamedManifest(name)
switch { switch {
case errors.Is(err, os.ErrNotExist): case errors.Is(err, os.ErrNotExist):

View File

@ -659,7 +659,7 @@ func TestCreateVersion(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if m.Ollama != "0.2.3" { if m.Ollama.String() != "0.2.3" {
t.Errorf("got %s != want 0.2.3", m.Ollama) t.Errorf("got %s != want 0.2.3", m.Ollama)
} }
@ -690,7 +690,7 @@ func TestCreateVersion(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if m.Ollama != "" { if m.Ollama.String() != "" {
t.Errorf("got %s != want \"\"", m.Ollama) t.Errorf("got %s != want \"\"", m.Ollama)
} }
}) })
@ -734,7 +734,7 @@ func TestCreateVersion(t *testing.T) {
t.Fatal(err) t.Fatal(err)
} }
if m.Ollama != "0.2.3" { if m.Ollama.String() != "0.2.3" {
t.Errorf("got %s != want 0.2.3", m.Ollama) t.Errorf("got %s != want 0.2.3", m.Ollama)
} }
}) })

View File

@ -8,6 +8,7 @@ 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"
@ -99,7 +100,7 @@ func TestDeleteDuplicateLayers(t *testing.T) {
} }
// create a manifest with duplicate layers // create a manifest with duplicate layers
if err := WriteManifest(n, config, []*Layer{config}, ""); err != nil { if err := WriteManifest(n, &semver.Version{}, config, []*Layer{config}); err != nil {
t.Fatal(err) t.Fatal(err)
} }