diff --git a/.goreleaser.yaml b/.goreleaser.yaml
index 71a99192b7..42e0e22d7d 100644
--- a/.goreleaser.yaml
+++ b/.goreleaser.yaml
@@ -13,6 +13,8 @@ builds:
- linux
- windows
- darwin
+ ldflags:
+ - -s -w -X main.version={{.Version}}
archives:
- format: tar.gz
diff --git a/README.md b/README.md
index 2fccf352e8..2ada0cc4f8 100644
--- a/README.md
+++ b/README.md
@@ -20,7 +20,7 @@ brew install k8sgpt
* Run `k8sgpt analyze` to run a scan.
* And use `k8sgpt analyze --explain` to get a more detailed explanation of the issues.
-
+
## Analyzers
@@ -37,8 +37,6 @@ K8sGPT uses analyzers to triage and diagnose issues in your cluster. It has a se
## Usage
```
-Kubernetes debugging powered by AI
-
Usage:
k8sgpt [command]
@@ -48,6 +46,7 @@ Available Commands:
completion Generate the autocompletion script for the specified shell
generate Generate Key for your chosen backend (opens browser)
help Help about any command
+ version Print the version number of k8sgpt
Flags:
--config string config file (default is $HOME/.k8sgpt.git.yaml)
diff --git a/cmd/analyze/analyze.go b/cmd/analyze/analyze.go
index 43570cd225..d86694b743 100644
--- a/cmd/analyze/analyze.go
+++ b/cmd/analyze/analyze.go
@@ -17,10 +17,11 @@ import (
)
var (
- explain bool
- backend string
- output string
- filters []string
+ explain bool
+ backend string
+ output string
+ filters []string
+ language string
)
// AnalyzeCmd represents the problems command
@@ -53,7 +54,7 @@ var AnalyzeCmd = &cobra.Command{
switch backendType {
case "openai":
aiClient = &ai.OpenAIClient{}
- if err := aiClient.Configure(token); err != nil {
+ if err := aiClient.Configure(token, language); err != nil {
color.Red("Error: %v", err)
os.Exit(1)
}
@@ -141,5 +142,6 @@ func init() {
AnalyzeCmd.Flags().StringVarP(&backend, "backend", "b", "openai", "Backend AI provider")
// output as json
AnalyzeCmd.Flags().StringVarP(&output, "output", "o", "text", "Output format (text, json)")
-
+ // add language options for output
+ AnalyzeCmd.Flags().StringVarP(&language, "language", "l", "english", "Languages to use for AI (e.g. 'English', 'Spanish', 'French', 'German', 'Italian', 'Portuguese', 'Dutch', 'Russian', 'Chinese', 'Japanese', 'Korean')")
}
diff --git a/cmd/root.go b/cmd/root.go
index eae1a03f0d..bf917c00d8 100644
--- a/cmd/root.go
+++ b/cmd/root.go
@@ -16,6 +16,7 @@ var (
cfgFile string
masterURL string
kubeconfig string
+ version string
)
// rootCmd represents the base command when called without any subcommands
@@ -30,7 +31,8 @@ var rootCmd = &cobra.Command{
// Execute adds all child commands to the root command and sets flags appropriately.
// This is called by main.main(). It only needs to happen once to the rootCmd.
-func Execute() {
+func Execute(v string) {
+ version = v
err := rootCmd.Execute()
if err != nil {
os.Exit(1)
diff --git a/cmd/version.go b/cmd/version.go
new file mode 100644
index 0000000000..2ad6faf239
--- /dev/null
+++ b/cmd/version.go
@@ -0,0 +1,19 @@
+package cmd
+
+import (
+ "github.com/spf13/cobra"
+)
+
+// versionCmd represents the version command
+var versionCmd = &cobra.Command{
+ Use: "version",
+ Short: "Print the version number of k8sgpt",
+ Long: `All software has versions. This is k8sgpt's`,
+ Run: func(cmd *cobra.Command, args []string) {
+ cmd.Printf("k8sgpt version %s", version)
+ },
+}
+
+func init() {
+ rootCmd.AddCommand(versionCmd)
+}
diff --git a/go.mod b/go.mod
index 326ae62d68..1553fd7572 100644
--- a/go.mod
+++ b/go.mod
@@ -3,9 +3,9 @@ module github.com/k8sgpt-ai/k8sgpt
go 1.20
require (
- github.com/briandowns/spinner v1.23.0
github.com/fatih/color v1.15.0
github.com/sashabaranov/go-openai v1.5.7
+ github.com/schollz/progressbar/v3 v3.13.1
github.com/spf13/cobra v1.6.1
github.com/spf13/viper v1.15.0
golang.org/x/term v0.6.0
@@ -44,7 +44,6 @@ require (
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/pelletier/go-toml/v2 v2.0.6 // indirect
github.com/rivo/uniseg v0.4.4 // indirect
- github.com/schollz/progressbar/v3 v3.13.1 // indirect
github.com/spf13/afero v1.9.3 // indirect
github.com/spf13/cast v1.5.0 // indirect
github.com/spf13/jwalterweatherman v1.1.0 // indirect
diff --git a/go.sum b/go.sum
index 8ba179cfbf..11ab542d24 100644
--- a/go.sum
+++ b/go.sum
@@ -38,8 +38,6 @@ cloud.google.com/go/storage v1.14.0/go.mod h1:GrKmX003DSIwi9o29oFT7YDnHYwZoctc3f
dmitri.shuralyov.com/gpu/mtl v0.0.0-20190408044501-666a987793e9/go.mod h1:H6x//7gZCb22OMCxBHrMx7a5I7Hp++hsVxbQ4BYO7hU=
github.com/BurntSushi/toml v0.3.1/go.mod h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
github.com/BurntSushi/xgb v0.0.0-20160522181843-27f122750802/go.mod h1:IVnqGOEym/WlBOVXweHU+Q+/VP0lqqI8lqeDx9IjBqo=
-github.com/briandowns/spinner v1.23.0 h1:alDF2guRWqa/FOZZYWjlMIx2L6H0wyewPxo/CH4Pt2A=
-github.com/briandowns/spinner v1.23.0/go.mod h1:rPG4gmXeN3wQV/TsAY4w8lPdIM6RX3yqeBQJSrbXjuE=
github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
github.com/chzyer/logex v1.1.10/go.mod h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
diff --git a/images/demo4.gif b/images/demo4.gif
new file mode 100644
index 0000000000..da7aa0b12d
Binary files /dev/null and b/images/demo4.gif differ
diff --git a/main.go b/main.go
index 2f2a708233..84563a9007 100644
--- a/main.go
+++ b/main.go
@@ -5,6 +5,8 @@ package main
import "github.com/k8sgpt-ai/k8sgpt/cmd"
+var version = "dev"
+
func main() {
- cmd.Execute()
+ cmd.Execute(version)
}
diff --git a/pkg/ai/ai.go b/pkg/ai/ai.go
index ca140501ba..5d54e2c2fb 100644
--- a/pkg/ai/ai.go
+++ b/pkg/ai/ai.go
@@ -3,19 +3,29 @@ package ai
import (
"context"
"errors"
+ "fmt"
"github.com/sashabaranov/go-openai"
)
+const (
+ default_prompt = "Simplify the following Kubernetes error message and provide a solution in %s: %s"
+ prompt_a = "Read the following input %s and provide possible scenarios for remediation in %s"
+ prompt_b = "Considering the following input from the Kubernetes resource %s and the error message %s, provide possible scenarios for remediation in %s"
+ prompt_c = "Reading the following %s error message and it's accompanying log message %s, how would you simplify this message?"
+)
+
type OpenAIClient struct {
- client *openai.Client
+ client *openai.Client
+ language string
}
-func (c *OpenAIClient) Configure(token string) error {
+func (c *OpenAIClient) Configure(token string, language string) error {
client := openai.NewClient(token)
if client == nil {
return errors.New("error creating OpenAI client")
}
+ c.language = language
c.client = client
return nil
}
@@ -27,7 +37,7 @@ func (c *OpenAIClient) GetCompletion(ctx context.Context, prompt string) (string
Messages: []openai.ChatCompletionMessage{
{
Role: "user",
- Content: "Simplify the following Kubernetes error message and provide a solution: " + prompt,
+ Content: fmt.Sprintf(default_prompt, c.language, prompt),
},
},
})
diff --git a/pkg/ai/iai.go b/pkg/ai/iai.go
index 8a3a91ed12..6c61d0a215 100644
--- a/pkg/ai/iai.go
+++ b/pkg/ai/iai.go
@@ -3,6 +3,6 @@ package ai
import "context"
type IAI interface {
- Configure(token string) error
+ Configure(token string, language string) error
GetCompletion(ctx context.Context, prompt string) (string, error)
}