Skip to content

Commit

Permalink
chore: add fakeai provider (#218)
Browse files Browse the repository at this point in the history
* 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>
  • Loading branch information
thschue and AlexsJones committed Apr 6, 2023
1 parent 1069f0c commit e449cb6
Show file tree
Hide file tree
Showing 3 changed files with 72 additions and 10 deletions.
13 changes: 13 additions & 0 deletions pkg/ai/iai.go
Original file line number Diff line number Diff line change
Expand Up @@ -8,13 +8,26 @@ type IAI interface {
Configure(token string, model string, language string) error
GetCompletion(ctx context.Context, prompt string) (string, error)
Parse(ctx context.Context, prompt []string, nocache bool) (string, error)
GetName() string
}

func NewClient(provider string) IAI {
switch provider {
case "openai":
return &OpenAIClient{}
case "noopai":
return &NoOpAIClient{}
default:
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 changes: 55 additions & 0 deletions pkg/ai/noopai.go
Original file line number Diff line number Diff line change
@@ -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"
}
14 changes: 4 additions & 10 deletions pkg/ai/ai.go → pkg/ai/openai.go
Original file line number Diff line number Diff line change
Expand Up @@ -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?"
)

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 {
client *openai.Client
language string
Expand Down Expand Up @@ -100,3 +90,7 @@ func (a *OpenAIClient) Parse(ctx context.Context, prompt []string, nocache bool)
}
return response, nil
}

func (a *OpenAIClient) GetName() string {
return "openai"
}

0 comments on commit e449cb6

Please sign in to comment.