mirror of
https://github.com/k8sgpt-ai/k8sgpt.git
synced 2025-08-22 17:45:59 +00:00
chore: add fakeai provider (#218)
* chore: add fakeai provider Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> * chore: add fakeai provider Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> * fix: name of openai provider Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> * fix: renamed fakeai backend to noopai Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> * fix: renamed fakeai backend to noopai Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> --------- Signed-off-by: Thomas Schuetz <thomas.schuetz@t-sc.eu> Co-authored-by: Alex Jones <alexsimonjones@gmail.com>
This commit is contained in:
parent
1069f0c610
commit
e449cb6023
@ -8,13 +8,26 @@ type IAI interface {
|
|||||||
Configure(token string, model string, language string) error
|
Configure(token string, model string, language string) error
|
||||||
GetCompletion(ctx context.Context, prompt string) (string, error)
|
GetCompletion(ctx context.Context, prompt string) (string, error)
|
||||||
Parse(ctx context.Context, prompt []string, nocache bool) (string, error)
|
Parse(ctx context.Context, prompt []string, nocache bool) (string, error)
|
||||||
|
GetName() string
|
||||||
}
|
}
|
||||||
|
|
||||||
func NewClient(provider string) IAI {
|
func NewClient(provider string) IAI {
|
||||||
switch provider {
|
switch provider {
|
||||||
case "openai":
|
case "openai":
|
||||||
return &OpenAIClient{}
|
return &OpenAIClient{}
|
||||||
|
case "noopai":
|
||||||
|
return &NoOpAIClient{}
|
||||||
default:
|
default:
|
||||||
return &OpenAIClient{}
|
return &OpenAIClient{}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
type AIConfiguration struct {
|
||||||
|
Providers []AIProvider `mapstructure:"providers"`
|
||||||
|
}
|
||||||
|
|
||||||
|
type AIProvider struct {
|
||||||
|
Name string `mapstructure:"name"`
|
||||||
|
Model string `mapstructure:"model"`
|
||||||
|
Password string `mapstructure:"password"`
|
||||||
|
}
|
||||||
|
55
pkg/ai/noopai.go
Normal file
55
pkg/ai/noopai.go
Normal file
@ -0,0 +1,55 @@
|
|||||||
|
package ai
|
||||||
|
|
||||||
|
import (
|
||||||
|
"context"
|
||||||
|
"encoding/base64"
|
||||||
|
"fmt"
|
||||||
|
"github.com/fatih/color"
|
||||||
|
"github.com/spf13/viper"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
type NoOpAIClient struct {
|
||||||
|
client string
|
||||||
|
language string
|
||||||
|
model string
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *NoOpAIClient) Configure(token string, model string, language string) error {
|
||||||
|
c.language = language
|
||||||
|
c.client = fmt.Sprintf("I am a noop client with the token %s ", token)
|
||||||
|
c.model = model
|
||||||
|
return nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (c *NoOpAIClient) GetCompletion(ctx context.Context, prompt string) (string, error) {
|
||||||
|
// Create a completion request
|
||||||
|
response := "I am a noop response to the prompt " + prompt
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *NoOpAIClient) Parse(ctx context.Context, prompt []string, nocache bool) (string, error) {
|
||||||
|
// parse the text with the AI backend
|
||||||
|
inputKey := strings.Join(prompt, " ")
|
||||||
|
// Check for cached data
|
||||||
|
sEnc := base64.StdEncoding.EncodeToString([]byte(inputKey))
|
||||||
|
|
||||||
|
response, err := a.GetCompletion(ctx, inputKey)
|
||||||
|
if err != nil {
|
||||||
|
color.Red("error getting completion: %v", err)
|
||||||
|
return "", err
|
||||||
|
}
|
||||||
|
|
||||||
|
if !viper.IsSet(sEnc) {
|
||||||
|
viper.Set(sEnc, base64.StdEncoding.EncodeToString([]byte(response)))
|
||||||
|
if err := viper.WriteConfig(); err != nil {
|
||||||
|
color.Red("error writing config: %v", err)
|
||||||
|
return "", nil
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
func (a *NoOpAIClient) GetName() string {
|
||||||
|
return "noopai"
|
||||||
|
}
|
@ -20,16 +20,6 @@ const (
|
|||||||
prompt_c = "Reading the following %s error message and it's accompanying log message %s, how would you simplify this message?"
|
prompt_c = "Reading the following %s error message and it's accompanying log message %s, how would you simplify this message?"
|
||||||
)
|
)
|
||||||
|
|
||||||
type AIConfiguration struct {
|
|
||||||
Providers []AIProvider `mapstructure:"providers"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type AIProvider struct {
|
|
||||||
Name string `mapstructure:"name"`
|
|
||||||
Model string `mapstructure:"model"`
|
|
||||||
Password string `mapstructure:"password"`
|
|
||||||
}
|
|
||||||
|
|
||||||
type OpenAIClient struct {
|
type OpenAIClient struct {
|
||||||
client *openai.Client
|
client *openai.Client
|
||||||
language string
|
language string
|
||||||
@ -100,3 +90,7 @@ func (a *OpenAIClient) Parse(ctx context.Context, prompt []string, nocache bool)
|
|||||||
}
|
}
|
||||||
return response, nil
|
return response, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func (a *OpenAIClient) GetName() string {
|
||||||
|
return "openai"
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user