diff --git a/core/config/model_config_loader.go b/core/config/model_config_loader.go index 53f28f2cde18..b7bc02dac089 100644 --- a/core/config/model_config_loader.go +++ b/core/config/model_config_loader.go @@ -373,9 +373,9 @@ func (bcl *ModelConfigLoader) LoadModelConfigsFromPath(path string, opts ...Conf files = append(files, info) } for _, file := range files { - // Skip templates, YAML and .keep files - if !strings.Contains(file.Name(), ".yaml") && !strings.Contains(file.Name(), ".yml") || - strings.HasPrefix(file.Name(), ".") { + // Only load real YAML config files and ignore dotfiles or backup variants + ext := strings.ToLower(filepath.Ext(file.Name())) + if (ext != ".yaml" && ext != ".yml") || strings.HasPrefix(file.Name(), ".") { continue } diff --git a/core/config/model_test.go b/core/config/model_test.go index 4e4036185f57..ac510b53b404 100644 --- a/core/config/model_test.go +++ b/core/config/model_test.go @@ -2,6 +2,7 @@ package config import ( "os" + "path/filepath" . "github.com/onsi/ginkgo/v2" . "github.com/onsi/gomega" @@ -109,5 +110,50 @@ options: Expect(testModel.Options).To(ContainElements("foo", "bar", "baz")) }) + + It("Only loads files ending with yaml or yml", func() { + tmpdir, err := os.MkdirTemp("", "model-config-loader") + Expect(err).ToNot(HaveOccurred()) + defer os.RemoveAll(tmpdir) + + err = os.WriteFile(filepath.Join(tmpdir, "foo.yaml"), []byte( + `name: "foo-model" +description: "formal config" +backend: "llama-cpp" +parameters: + model: "foo.gguf" +`), 0644) + Expect(err).ToNot(HaveOccurred()) + + err = os.WriteFile(filepath.Join(tmpdir, "foo.yaml.bak"), []byte( + `name: "foo-model" +description: "backup config" +backend: "llama-cpp" +parameters: + model: "foo-backup.gguf" +`), 0644) + Expect(err).ToNot(HaveOccurred()) + + err = os.WriteFile(filepath.Join(tmpdir, "foo.yaml.bak.123"), []byte( + `name: "foo-backup-only" +description: "timestamped backup config" +backend: "llama-cpp" +parameters: + model: "foo-timestamped.gguf" +`), 0644) + Expect(err).ToNot(HaveOccurred()) + + bcl := NewModelConfigLoader(tmpdir) + err = bcl.LoadModelConfigsFromPath(tmpdir) + Expect(err).ToNot(HaveOccurred()) + + configs := bcl.GetAllModelsConfigs() + Expect(configs).To(HaveLen(1)) + Expect(configs[0].Name).To(Equal("foo-model")) + Expect(configs[0].Description).To(Equal("formal config")) + + _, exists := bcl.GetModelConfig("foo-backup-only") + Expect(exists).To(BeFalse()) + }) }) })