package main import ( "os" "path/filepath" "github.com/alecthomas/kong" "github.com/joho/godotenv" "github.com/mudler/LocalAI/core/cli" "github.com/mudler/LocalAI/internal" "github.com/mudler/xlog" _ "github.com/mudler/LocalAI/swagger" ) func main() { var err error // Initialize xlog at a level of INFO, we will set the desired level after we parse the CLI options xlog.SetLogger(xlog.NewLogger(xlog.LogLevel("info"), "text")) // handle loading environment variables from .env files envFiles := []string{".env", "localai.env"} homeDir, err := os.UserHomeDir() if err == nil { envFiles = append(envFiles, filepath.Join(homeDir, "localai.env"), filepath.Join(homeDir, ".config/localai.env")) } envFiles = append(envFiles, "/etc/localai.env") for _, envFile := range envFiles { if _, err := os.Stat(envFile); err == nil { xlog.Debug("env file found, loading environment variables from file", "envFile", envFile) err = godotenv.Load(envFile) if err != nil { xlog.Error("failed to load environment variables from file", "error", err, "envFile", envFile) continue } } } // Actually parse the CLI options k := kong.Must(&cli.CLI, kong.Description( ` LocalAI is a drop-in replacement OpenAI API for running LLM, GPT and genAI models locally on CPU, GPUs with consumer grade hardware. For a list of all available models run local-ai models list Copyright: Ettore Di Giacinto Version: ${version} For documentation and support: Documentation: https://localai.io/ Getting Started: https://localai.io/basics/getting_started/ GitHub Issues: https://github.com/mudler/LocalAI/issues `, ), kong.UsageOnError(), kong.Vars{ "basepath": kong.ExpandPath("."), "galleries": `[{"name":"localai", "url":"github:mudler/LocalAI/gallery/index.yaml@master"}]`, "backends": `[{"name":"localai", "url":"github:mudler/LocalAI/backend/index.yaml@master"}]`, "version": internal.PrintableVersion(), }, ) ctx, err := k.Parse(os.Args[1:]) if err != nil { k.FatalIfErrorf(err) } // Pass Kong model to the completion command for dynamic script generation cli.CLI.Completion.SetApplication(k.Model) // Configure the logging level before we run the application // This is here to preserve the existing --debug flag functionality logLevel := "info" if cli.CLI.Debug && cli.CLI.LogLevel == nil { logLevel = "debug" cli.CLI.LogLevel = &logLevel } if cli.CLI.LogLevel == nil { cli.CLI.LogLevel = &logLevel } // Set xlog logger with the desired level and text format xlog.SetLogger(xlog.NewLogger(xlog.LogLevel(*cli.CLI.LogLevel), *cli.CLI.LogFormat)) // Run the thing! err = ctx.Run(&cli.CLI.Context) if err != nil { xlog.Fatal("Error running the application", "error", err) } }