mirror of
https://github.com/mudler/LocalAI.git
synced 2026-04-01 13:42:20 -04:00
feat: add shell completion support for bash, zsh, and fish - Add core/cli/completion.go with dynamic completion script generation - Add core/cli/completion_test.go with unit tests - Modify cmd/local-ai/main.go to support completion command - Modify core/cli/cli.go to add Completion subcommand - Add docs/content/features/shell-completion.md with installation instructions The completion scripts are generated dynamically from the Kong CLI model, so they automatically include all commands, subcommands, and flags. Co-authored-by: localai-bot <localai-bot@noreply.github.com>
90 lines
2.5 KiB
Go
90 lines
2.5 KiB
Go
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}
|
|
`,
|
|
),
|
|
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)
|
|
}
|
|
}
|