mirror of
https://github.com/mudler/LocalAI.git
synced 2026-01-01 15:10:30 -06:00
* feat(importer): support ollama and OCI, unify code Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * feat: support importing from local file Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * support also yaml config files Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Correctly handle local files Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Extract importing errors Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Add importer tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Add integration tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * chore(UX): improve and specify supported URI formats Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fail if backend does not have a runfile Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Adapt tests Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * feat(gallery): add cache for galleries Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(ui): remove handler duplicate File input handlers are now handled by Alpine.js @change handlers in chat.html. Removed duplicate listeners to prevent files from being processed twice Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix(ui): be consistent in attachments in the chat Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Fail if no importer matches Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * fix: propagate ops correctly Signed-off-by: Ettore Di Giacinto <mudler@localai.io> * Fixups Signed-off-by: Ettore Di Giacinto <mudler@localai.io> --------- Signed-off-by: Ettore Di Giacinto <mudler@localai.io>
84 lines
2.6 KiB
Go
84 lines
2.6 KiB
Go
package startup_test
|
|
|
|
import (
|
|
"context"
|
|
"fmt"
|
|
"os"
|
|
"path/filepath"
|
|
|
|
"github.com/mudler/LocalAI/core/config"
|
|
"github.com/mudler/LocalAI/core/services"
|
|
. "github.com/mudler/LocalAI/core/startup"
|
|
"github.com/mudler/LocalAI/pkg/model"
|
|
"github.com/mudler/LocalAI/pkg/system"
|
|
|
|
. "github.com/onsi/ginkgo/v2"
|
|
. "github.com/onsi/gomega"
|
|
)
|
|
|
|
var _ = Describe("Preload test", func() {
|
|
var tmpdir string
|
|
var systemState *system.SystemState
|
|
var ml *model.ModelLoader
|
|
var ctx context.Context
|
|
var cancel context.CancelFunc
|
|
|
|
BeforeEach(func() {
|
|
ctx, cancel = context.WithCancel(context.Background())
|
|
var err error
|
|
tmpdir, err = os.MkdirTemp("", "")
|
|
Expect(err).ToNot(HaveOccurred())
|
|
systemState, err = system.GetSystemState(system.WithModelPath(tmpdir))
|
|
Expect(err).ToNot(HaveOccurred())
|
|
ml = model.NewModelLoader(systemState, true)
|
|
})
|
|
|
|
AfterEach(func() {
|
|
cancel()
|
|
})
|
|
|
|
Context("Preloading from strings", func() {
|
|
It("loads from embedded full-urls", func() {
|
|
url := "https://raw.githubusercontent.com/mudler/LocalAI-examples/main/configurations/phi-2.yaml"
|
|
fileName := fmt.Sprintf("%s.yaml", "phi-2")
|
|
|
|
galleryService := services.NewGalleryService(&config.ApplicationConfig{
|
|
SystemState: systemState,
|
|
}, ml)
|
|
galleryService.Start(ctx, config.NewModelConfigLoader(tmpdir), systemState)
|
|
|
|
err := InstallModels(ctx, galleryService, []config.Gallery{}, []config.Gallery{}, systemState, ml, true, true, func(s1, s2, s3 string, f float64) {
|
|
fmt.Println(s1, s2, s3, f)
|
|
}, url)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
resultFile := filepath.Join(tmpdir, fileName)
|
|
|
|
content, err := os.ReadFile(resultFile)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
Expect(string(content)).To(ContainSubstring("name: phi-2"))
|
|
})
|
|
It("downloads from urls", func() {
|
|
url := "huggingface://TheBloke/TinyLlama-1.1B-Chat-v0.3-GGUF/tinyllama-1.1b-chat-v0.3.Q2_K.gguf"
|
|
fileName := fmt.Sprintf("%s.gguf", "tinyllama-1.1b-chat-v0.3.Q2_K")
|
|
|
|
galleryService := services.NewGalleryService(&config.ApplicationConfig{
|
|
SystemState: systemState,
|
|
}, ml)
|
|
galleryService.Start(ctx, config.NewModelConfigLoader(tmpdir), systemState)
|
|
|
|
err := InstallModels(ctx, galleryService, []config.Gallery{}, []config.Gallery{}, systemState, ml, true, true, func(s1, s2, s3 string, f float64) {
|
|
fmt.Println(s1, s2, s3, f)
|
|
}, url)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
resultFile := filepath.Join(tmpdir, fileName)
|
|
dirs, err := os.ReadDir(tmpdir)
|
|
Expect(err).ToNot(HaveOccurred())
|
|
|
|
_, err = os.Stat(resultFile)
|
|
Expect(err).ToNot(HaveOccurred(), fmt.Sprintf("%+v", dirs))
|
|
})
|
|
})
|
|
})
|