Spaces:
Configuration error
Configuration error
package main | |
import ( | |
"os" | |
"os/signal" | |
"path/filepath" | |
"syscall" | |
"github.com/alecthomas/kong" | |
"github.com/joho/godotenv" | |
"github.com/mudler/LocalAI/core/cli" | |
"github.com/mudler/LocalAI/internal" | |
"github.com/rs/zerolog" | |
"github.com/rs/zerolog/log" | |
_ "github.com/mudler/LocalAI/swagger" | |
) | |
func main() { | |
var err error | |
// Initialize zerolog at a level of INFO, we will set the desired level after we parse the CLI options | |
log.Logger = log.Output(zerolog.ConsoleWriter{Out: os.Stderr}) | |
zerolog.SetGlobalLevel(zerolog.InfoLevel) | |
// Catch signals from the OS requesting us to exit | |
go func() { | |
c := make(chan os.Signal, 1) // we need to reserve to buffer size 1, so the notifier are not blocked | |
signal.Notify(c, os.Interrupt, syscall.SIGTERM) | |
<-c | |
os.Exit(1) | |
}() | |
// handle loading environment variabled 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 { | |
log.Info().Str("envFile", envFile).Msg("env file found, loading environment variables from file") | |
err = godotenv.Load(envFile) | |
if err != nil { | |
log.Error().Err(err).Str("envFile", envFile).Msg("failed to load environment variables from file") | |
continue | |
} | |
} | |
} | |
// Actually parse the CLI options | |
ctx := kong.Parse(&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. | |
Some of the models compatible are: | |
- Vicuna | |
- Koala | |
- GPT4ALL | |
- GPT4ALL-J | |
- Cerebras | |
- Alpaca | |
- StableLM (ggml quantized) | |
For a list of compatible models, check out: https://localai.io/model-compatibility/index.html | |
Copyright: Ettore Di Giacinto | |
Version: ${version} | |
`, | |
), | |
kong.UsageOnError(), | |
kong.Vars{ | |
"basepath": kong.ExpandPath("."), | |
"remoteLibraryURL": "https://raw.githubusercontent.com/mudler/LocalAI/master/embedded/model_library.yaml", | |
"galleries": `[{"name":"localai", "url":"github:mudler/LocalAI/gallery/index.yaml@master"}]`, | |
"version": internal.PrintableVersion(), | |
}, | |
) | |
// 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" | |
zerolog.SetGlobalLevel(zerolog.DebugLevel) | |
cli.CLI.LogLevel = &logLevel | |
} | |
if cli.CLI.LogLevel == nil { | |
cli.CLI.LogLevel = &logLevel | |
} | |
switch *cli.CLI.LogLevel { | |
case "error": | |
zerolog.SetGlobalLevel(zerolog.ErrorLevel) | |
log.Info().Msg("Setting logging to error") | |
case "warn": | |
zerolog.SetGlobalLevel(zerolog.WarnLevel) | |
log.Info().Msg("Setting logging to warn") | |
case "info": | |
zerolog.SetGlobalLevel(zerolog.InfoLevel) | |
log.Info().Msg("Setting logging to info") | |
case "debug": | |
zerolog.SetGlobalLevel(zerolog.DebugLevel) | |
log.Debug().Msg("Setting logging to debug") | |
case "trace": | |
zerolog.SetGlobalLevel(zerolog.TraceLevel) | |
log.Trace().Msg("Setting logging to trace") | |
} | |
// Populate the application with the embedded backend assets | |
cli.CLI.Context.BackendAssets = backendAssets | |
// Run the thing! | |
err = ctx.Run(&cli.CLI.Context) | |
if err != nil { | |
log.Fatal().Err(err).Msg("Error running the application") | |
} | |
} | |