Spaces:
Configuration error
Configuration error
| package config | |
| import ( | |
| "io" | |
| "net/http" | |
| "os" | |
| . "github.com/onsi/ginkgo/v2" | |
| . "github.com/onsi/gomega" | |
| ) | |
| var _ = Describe("Test cases for config related functions", func() { | |
| Context("Test Read configuration functions", func() { | |
| It("Test Validate", func() { | |
| tmp, err := os.CreateTemp("", "config.yaml") | |
| Expect(err).To(BeNil()) | |
| defer os.Remove(tmp.Name()) | |
| _, err = tmp.WriteString( | |
| `backend: "../foo-bar" | |
| name: "foo" | |
| parameters: | |
| model: "foo-bar" | |
| known_usecases: | |
| - chat | |
| - COMPLETION | |
| `) | |
| Expect(err).ToNot(HaveOccurred()) | |
| config, err := readBackendConfigFromFile(tmp.Name()) | |
| Expect(err).To(BeNil()) | |
| Expect(config).ToNot(BeNil()) | |
| Expect(config.Validate()).To(BeFalse()) | |
| Expect(config.KnownUsecases).ToNot(BeNil()) | |
| }) | |
| It("Test Validate", func() { | |
| tmp, err := os.CreateTemp("", "config.yaml") | |
| Expect(err).To(BeNil()) | |
| defer os.Remove(tmp.Name()) | |
| _, err = tmp.WriteString( | |
| `name: bar-baz | |
| backend: "foo-bar" | |
| parameters: | |
| model: "foo-bar"`) | |
| Expect(err).ToNot(HaveOccurred()) | |
| config, err := readBackendConfigFromFile(tmp.Name()) | |
| Expect(err).To(BeNil()) | |
| Expect(config).ToNot(BeNil()) | |
| // two configs in config.yaml | |
| Expect(config.Name).To(Equal("bar-baz")) | |
| Expect(config.Validate()).To(BeTrue()) | |
| // download https://raw.githubusercontent.com/mudler/LocalAI/master/embedded/models/hermes-2-pro-mistral.yaml | |
| httpClient := http.Client{} | |
| resp, err := httpClient.Get("https://raw.githubusercontent.com/mudler/LocalAI/master/embedded/models/hermes-2-pro-mistral.yaml") | |
| Expect(err).To(BeNil()) | |
| defer resp.Body.Close() | |
| tmp, err = os.CreateTemp("", "config.yaml") | |
| Expect(err).To(BeNil()) | |
| defer os.Remove(tmp.Name()) | |
| _, err = io.Copy(tmp, resp.Body) | |
| Expect(err).To(BeNil()) | |
| config, err = readBackendConfigFromFile(tmp.Name()) | |
| Expect(err).To(BeNil()) | |
| Expect(config).ToNot(BeNil()) | |
| // two configs in config.yaml | |
| Expect(config.Name).To(Equal("hermes-2-pro-mistral")) | |
| Expect(config.Validate()).To(BeTrue()) | |
| }) | |
| }) | |
| It("Properly handles backend usecase matching", func() { | |
| a := BackendConfig{ | |
| Name: "a", | |
| } | |
| Expect(a.HasUsecases(FLAG_ANY)).To(BeTrue()) // FLAG_ANY just means the config _exists_ essentially. | |
| b := BackendConfig{ | |
| Name: "b", | |
| Backend: "stablediffusion", | |
| } | |
| Expect(b.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(b.HasUsecases(FLAG_IMAGE)).To(BeTrue()) | |
| Expect(b.HasUsecases(FLAG_CHAT)).To(BeFalse()) | |
| c := BackendConfig{ | |
| Name: "c", | |
| Backend: "llama-cpp", | |
| TemplateConfig: TemplateConfig{ | |
| Chat: "chat", | |
| }, | |
| } | |
| Expect(c.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(c.HasUsecases(FLAG_IMAGE)).To(BeFalse()) | |
| Expect(c.HasUsecases(FLAG_COMPLETION)).To(BeFalse()) | |
| Expect(c.HasUsecases(FLAG_CHAT)).To(BeTrue()) | |
| d := BackendConfig{ | |
| Name: "d", | |
| Backend: "llama-cpp", | |
| TemplateConfig: TemplateConfig{ | |
| Chat: "chat", | |
| Completion: "completion", | |
| }, | |
| } | |
| Expect(d.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(d.HasUsecases(FLAG_IMAGE)).To(BeFalse()) | |
| Expect(d.HasUsecases(FLAG_COMPLETION)).To(BeTrue()) | |
| Expect(d.HasUsecases(FLAG_CHAT)).To(BeTrue()) | |
| trueValue := true | |
| e := BackendConfig{ | |
| Name: "e", | |
| Backend: "llama-cpp", | |
| TemplateConfig: TemplateConfig{ | |
| Completion: "completion", | |
| }, | |
| Embeddings: &trueValue, | |
| } | |
| Expect(e.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(e.HasUsecases(FLAG_IMAGE)).To(BeFalse()) | |
| Expect(e.HasUsecases(FLAG_COMPLETION)).To(BeTrue()) | |
| Expect(e.HasUsecases(FLAG_CHAT)).To(BeFalse()) | |
| Expect(e.HasUsecases(FLAG_EMBEDDINGS)).To(BeTrue()) | |
| f := BackendConfig{ | |
| Name: "f", | |
| Backend: "piper", | |
| } | |
| Expect(f.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(f.HasUsecases(FLAG_TTS)).To(BeTrue()) | |
| Expect(f.HasUsecases(FLAG_CHAT)).To(BeFalse()) | |
| g := BackendConfig{ | |
| Name: "g", | |
| Backend: "whisper", | |
| } | |
| Expect(g.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(g.HasUsecases(FLAG_TRANSCRIPT)).To(BeTrue()) | |
| Expect(g.HasUsecases(FLAG_TTS)).To(BeFalse()) | |
| h := BackendConfig{ | |
| Name: "h", | |
| Backend: "transformers-musicgen", | |
| } | |
| Expect(h.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(h.HasUsecases(FLAG_TRANSCRIPT)).To(BeFalse()) | |
| Expect(h.HasUsecases(FLAG_TTS)).To(BeTrue()) | |
| Expect(h.HasUsecases(FLAG_SOUND_GENERATION)).To(BeTrue()) | |
| knownUsecases := FLAG_CHAT | FLAG_COMPLETION | |
| i := BackendConfig{ | |
| Name: "i", | |
| Backend: "whisper", | |
| // Earlier test checks parsing, this just needs to set final values | |
| KnownUsecases: &knownUsecases, | |
| } | |
| Expect(i.HasUsecases(FLAG_ANY)).To(BeTrue()) | |
| Expect(i.HasUsecases(FLAG_TRANSCRIPT)).To(BeTrue()) | |
| Expect(i.HasUsecases(FLAG_TTS)).To(BeFalse()) | |
| Expect(i.HasUsecases(FLAG_COMPLETION)).To(BeTrue()) | |
| Expect(i.HasUsecases(FLAG_CHAT)).To(BeTrue()) | |
| }) | |
| }) | |