Initial commit.
This commit is contained in:
116
cmd/ask.go
Normal file
116
cmd/ask.go
Normal file
@@ -0,0 +1,116 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"bufio"
|
||||
"context"
|
||||
"flag"
|
||||
"fmt"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
util "github.com/olemorud/chatgpt-cli/v2"
|
||||
openai "github.com/sashabaranov/go-openai"
|
||||
)
|
||||
|
||||
func main() {
|
||||
env, err := util.ReadEnvFile(".env")
|
||||
|
||||
if err != nil {
|
||||
fmt.Println("failed to read .env", err)
|
||||
}
|
||||
|
||||
// parse command line arguments
|
||||
token := env["OPENAI_API_KEY"]
|
||||
|
||||
model := *flag.String("model", openai.GPT3Dot5Turbo,
|
||||
"OpenAI Model to use.\n"+
|
||||
"List of models:\n"+
|
||||
"https://platform.openai.com/docs/models/overview\n")
|
||||
|
||||
flag.Parse()
|
||||
|
||||
args := flag.Args()
|
||||
|
||||
if len(args) == 0 {
|
||||
err = runInteractive(token, model)
|
||||
|
||||
if err != nil {
|
||||
fmt.Println(err)
|
||||
}
|
||||
} else {
|
||||
query := strings.Join(args, " ")
|
||||
err = askGpt(token, model, query)
|
||||
|
||||
if err != nil {
|
||||
panic(err)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func askGpt(token string, model string, query string) error {
|
||||
client := openai.NewClient("your token")
|
||||
|
||||
resp, err := client.CreateChatCompletion(
|
||||
context.Background(),
|
||||
openai.ChatCompletionRequest{
|
||||
Model: model,
|
||||
Messages: []openai.ChatCompletionMessage{
|
||||
{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: query,
|
||||
},
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(resp.Choices[0].Message.Content)
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
func runInteractive(token string, model string) error {
|
||||
client := openai.NewClient("your token")
|
||||
messages := make([]openai.ChatCompletionMessage, 0)
|
||||
|
||||
scanner := bufio.NewScanner(os.Stdin)
|
||||
|
||||
fmt.Println("ChatGPT", model, "interactive mode")
|
||||
|
||||
fmt.Println("->")
|
||||
|
||||
for scanner.Scan() {
|
||||
|
||||
text := scanner.Text()
|
||||
|
||||
messages = append(messages, openai.ChatCompletionMessage{
|
||||
Role: openai.ChatMessageRoleUser,
|
||||
Content: text,
|
||||
})
|
||||
|
||||
resp, err := client.CreateChatCompletion(
|
||||
context.Background(),
|
||||
openai.ChatCompletionRequest{
|
||||
Model: model,
|
||||
Messages: messages,
|
||||
},
|
||||
)
|
||||
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
|
||||
fmt.Println(resp.Choices[0].Message.Content)
|
||||
|
||||
fmt.Println("->")
|
||||
}
|
||||
|
||||
if err := scanner.Err(); err != nil {
|
||||
fmt.Fprintln(os.Stderr, "reading standard input:", err)
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
Reference in New Issue
Block a user