mirror of
https://github.com/mudler/LocalAI.git
synced 2025-05-20 10:35:01 +00:00
fix(gallery): do not return overrides and additional config (#4768)
When hitting /models/available we are intersted in the model description, name and small metadatas. Configuration and overrides are part of internals which are required only for installation. This also solves a current bug when hitting /models/available fails if one of the gallery items have overrides with parameters defined Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
This commit is contained in:
parent
7bc80c17f8
commit
7daf5ac3e3
5 changed files with 39 additions and 19 deletions
|
@ -48,8 +48,10 @@ var _ = Describe("Model test", func() {
|
||||||
defer os.RemoveAll(tempdir)
|
defer os.RemoveAll(tempdir)
|
||||||
|
|
||||||
gallery := []GalleryModel{{
|
gallery := []GalleryModel{{
|
||||||
Name: "bert",
|
Metadata: Metadata{
|
||||||
URL: bertEmbeddingsURL,
|
Name: "bert",
|
||||||
|
URL: bertEmbeddingsURL,
|
||||||
|
},
|
||||||
}}
|
}}
|
||||||
out, err := yaml.Marshal(gallery)
|
out, err := yaml.Marshal(gallery)
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
|
|
|
@ -11,6 +11,14 @@ import (
|
||||||
// It is used to install the model by resolving the URL and downloading the files.
|
// It is used to install the model by resolving the URL and downloading the files.
|
||||||
// The other fields are used to override the configuration of the model.
|
// The other fields are used to override the configuration of the model.
|
||||||
type GalleryModel struct {
|
type GalleryModel struct {
|
||||||
|
Metadata `json:",inline" yaml:",inline"`
|
||||||
|
// config_file is read in the situation where URL is blank - and therefore this is a base config.
|
||||||
|
ConfigFile map[string]interface{} `json:"config_file,omitempty" yaml:"config_file,omitempty"`
|
||||||
|
// Overrides are used to override the configuration of the model located at URL
|
||||||
|
Overrides map[string]interface{} `json:"overrides,omitempty" yaml:"overrides,omitempty"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type Metadata struct {
|
||||||
URL string `json:"url,omitempty" yaml:"url,omitempty"`
|
URL string `json:"url,omitempty" yaml:"url,omitempty"`
|
||||||
Name string `json:"name,omitempty" yaml:"name,omitempty"`
|
Name string `json:"name,omitempty" yaml:"name,omitempty"`
|
||||||
Description string `json:"description,omitempty" yaml:"description,omitempty"`
|
Description string `json:"description,omitempty" yaml:"description,omitempty"`
|
||||||
|
@ -18,10 +26,6 @@ type GalleryModel struct {
|
||||||
URLs []string `json:"urls,omitempty" yaml:"urls,omitempty"`
|
URLs []string `json:"urls,omitempty" yaml:"urls,omitempty"`
|
||||||
Icon string `json:"icon,omitempty" yaml:"icon,omitempty"`
|
Icon string `json:"icon,omitempty" yaml:"icon,omitempty"`
|
||||||
Tags []string `json:"tags,omitempty" yaml:"tags,omitempty"`
|
Tags []string `json:"tags,omitempty" yaml:"tags,omitempty"`
|
||||||
// config_file is read in the situation where URL is blank - and therefore this is a base config.
|
|
||||||
ConfigFile map[string]interface{} `json:"config_file,omitempty" yaml:"config_file,omitempty"`
|
|
||||||
// Overrides are used to override the configuration of the model located at URL
|
|
||||||
Overrides map[string]interface{} `json:"overrides,omitempty" yaml:"overrides,omitempty"`
|
|
||||||
// AdditionalFiles are used to add additional files to the model
|
// AdditionalFiles are used to add additional files to the model
|
||||||
AdditionalFiles []File `json:"files,omitempty" yaml:"files,omitempty"`
|
AdditionalFiles []File `json:"files,omitempty" yaml:"files,omitempty"`
|
||||||
// Gallery is a reference to the gallery which contains the model
|
// Gallery is a reference to the gallery which contains the model
|
||||||
|
|
|
@ -9,7 +9,11 @@ import (
|
||||||
var _ = Describe("Gallery API tests", func() {
|
var _ = Describe("Gallery API tests", func() {
|
||||||
Context("requests", func() {
|
Context("requests", func() {
|
||||||
It("parses github with a branch", func() {
|
It("parses github with a branch", func() {
|
||||||
req := GalleryModel{URL: "github:go-skynet/model-gallery/gpt4all-j.yaml@main"}
|
req := GalleryModel{
|
||||||
|
Metadata: Metadata{
|
||||||
|
URL: "github:go-skynet/model-gallery/gpt4all-j.yaml@main",
|
||||||
|
},
|
||||||
|
}
|
||||||
e, err := GetGalleryConfigFromURL(req.URL, "")
|
e, err := GetGalleryConfigFromURL(req.URL, "")
|
||||||
Expect(err).ToNot(HaveOccurred())
|
Expect(err).ToNot(HaveOccurred())
|
||||||
Expect(e.Name).To(Equal("gpt4all-j"))
|
Expect(e.Name).To(Equal("gpt4all-j"))
|
||||||
|
|
|
@ -299,14 +299,18 @@ var _ = Describe("API test", func() {
|
||||||
|
|
||||||
g := []gallery.GalleryModel{
|
g := []gallery.GalleryModel{
|
||||||
{
|
{
|
||||||
Name: "bert",
|
Metadata: gallery.Metadata{
|
||||||
URL: bertEmbeddingsURL,
|
Name: "bert",
|
||||||
|
URL: bertEmbeddingsURL,
|
||||||
|
},
|
||||||
},
|
},
|
||||||
{
|
{
|
||||||
Name: "bert2",
|
Metadata: gallery.Metadata{
|
||||||
URL: bertEmbeddingsURL,
|
Name: "bert2",
|
||||||
Overrides: map[string]interface{}{"foo": "bar"},
|
URL: bertEmbeddingsURL,
|
||||||
AdditionalFiles: []gallery.File{{Filename: "foo.yaml", URI: bertEmbeddingsURL}},
|
AdditionalFiles: []gallery.File{{Filename: "foo.yaml", URI: bertEmbeddingsURL}},
|
||||||
|
},
|
||||||
|
Overrides: map[string]interface{}{"foo": "bar"},
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
out, err := yaml.Marshal(g)
|
out, err := yaml.Marshal(g)
|
||||||
|
|
|
@ -117,19 +117,25 @@ func (mgs *ModelGalleryEndpointService) DeleteModelGalleryEndpoint() func(c *fib
|
||||||
// @Router /models/available [get]
|
// @Router /models/available [get]
|
||||||
func (mgs *ModelGalleryEndpointService) ListModelFromGalleryEndpoint() func(c *fiber.Ctx) error {
|
func (mgs *ModelGalleryEndpointService) ListModelFromGalleryEndpoint() func(c *fiber.Ctx) error {
|
||||||
return func(c *fiber.Ctx) error {
|
return func(c *fiber.Ctx) error {
|
||||||
log.Debug().Msgf("Listing models from galleries: %+v", mgs.galleries)
|
|
||||||
|
|
||||||
models, err := gallery.AvailableGalleryModels(mgs.galleries, mgs.modelPath)
|
models, err := gallery.AvailableGalleryModels(mgs.galleries, mgs.modelPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
log.Debug().Msgf("Models found from galleries: %+v", models)
|
|
||||||
for _, m := range models {
|
log.Debug().Msgf("Available %d models from %d galleries\n", len(models), len(mgs.galleries))
|
||||||
log.Debug().Msgf("Model found from galleries: %+v", m)
|
|
||||||
|
m := []gallery.Metadata{}
|
||||||
|
|
||||||
|
for _, mm := range models {
|
||||||
|
m = append(m, mm.Metadata)
|
||||||
}
|
}
|
||||||
dat, err := json.Marshal(models)
|
|
||||||
|
log.Debug().Msgf("Models %#v", m)
|
||||||
|
|
||||||
|
dat, err := json.Marshal(m)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return err
|
return fmt.Errorf("could not marshal models: %w", err)
|
||||||
}
|
}
|
||||||
return c.Send(dat)
|
return c.Send(dat)
|
||||||
}
|
}
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue