Skip to content

Commit 28f0883

Browse files
committed
feat: pluggable client
1 parent bdcdfe1 commit 28f0883

File tree

3 files changed

+76
-43
lines changed

3 files changed

+76
-43
lines changed

client.go

Lines changed: 12 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,20 @@
11
package chat_gpt_ppt
22

3-
import (
4-
"context"
5-
6-
gogpt "github.com/sashabaranov/go-gpt3"
7-
)
8-
9-
type Client struct {
10-
token string
3+
type Client interface {
4+
SetToken(token string)
5+
FillTopic(topic string) (*Topic, error)
116
}
127

13-
func NewClient(token string) *Client {
14-
return &Client{
15-
token,
16-
}
17-
}
8+
type ClientType = string
189

19-
func (c *Client) AskTopic(topic string) (*gogpt.ChatCompletionResponse, error) {
20-
gptClient := gogpt.NewClient(c.token)
21-
ctx := context.Background()
10+
const (
11+
ClientGpt35 = "GPT35"
12+
)
2213

23-
resp, err := gptClient.CreateChatCompletion(ctx, gogpt.ChatCompletionRequest{
24-
Model: gogpt.GPT3Dot5Turbo,
25-
Messages: []gogpt.ChatCompletionMessage{
26-
{
27-
Role: "user",
28-
Content: topic,
29-
},
30-
},
31-
})
32-
if err != nil {
33-
return nil, err
14+
func GetClient(clientType ClientType) Client {
15+
switch clientType {
16+
case ClientGpt35:
17+
return NewGpt35Client()
3418
}
35-
return &resp, nil
19+
return nil
3620
}

client_gpt35.go

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
package chat_gpt_ppt
2+
3+
import (
4+
"context"
5+
6+
gogpt "github.com/sashabaranov/go-gpt3"
7+
)
8+
9+
type ChatGPTClient struct {
10+
token string
11+
}
12+
13+
func NewGpt35Client() Client {
14+
return &ChatGPTClient{}
15+
}
16+
17+
func (c *ChatGPTClient) FillTopic(topic string) (*Topic, error) {
18+
gptClient := gogpt.NewClient(c.token)
19+
ctx := context.Background()
20+
21+
resp, err := gptClient.CreateChatCompletion(ctx, gogpt.ChatCompletionRequest{
22+
Model: gogpt.GPT3Dot5Turbo,
23+
Messages: []gogpt.ChatCompletionMessage{
24+
{
25+
Role: "user",
26+
Content: topic,
27+
},
28+
},
29+
})
30+
if err != nil {
31+
return nil, err
32+
}
33+
34+
return &Topic{
35+
Title: topic,
36+
Content: resp.Choices[0].Message.Content,
37+
}, nil
38+
}
39+
40+
func (c *ChatGPTClient) SetToken(token string) {
41+
c.token = token
42+
}

cmd/cgp/main.go

Lines changed: 22 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -11,35 +11,31 @@ import (
1111
)
1212

1313
func main() {
14+
// cmd parse
1415
tokenFile := flag.String("token", "./token.txt", "token file path")
1516
topicFile := flag.String("topic", "./topic.txt", "topic file path")
1617
outputFile := flag.String("output", "./output.html", "out path")
1718
rendererType := flag.String("renderer", cgp.RendererRemark, "renderer type")
1819
rendererBin := flag.String("rendererBin", "", "binary file for renderer")
20+
clientType := flag.String("client", cgp.ClientGpt35, "gpt client type")
1921
flag.Parse()
2022

23+
logger := log.Default()
24+
25+
// prepare
2126
tokenBytes, err := os.ReadFile(*tokenFile)
2227
panicIfErr(err)
2328
topicContents, err := os.ReadFile(*topicFile)
2429
panicIfErr(err)
2530
questions := strings.Split(string(topicContents), "\n")
2631

27-
logger := log.Default()
28-
29-
topics := make([]*cgp.Topic, 0)
30-
c := cgp.NewClient(string(tokenBytes))
31-
for _, eachTopic := range questions {
32-
resp, err := c.AskTopic(eachTopic)
33-
panicIfErr(err)
34-
topics = append(topics, &cgp.Topic{
35-
Title: eachTopic,
36-
Content: resp.Choices[0].Message.Content,
37-
})
38-
logger.Printf("query topic %v done\n", eachTopic)
32+
// init client
33+
c := cgp.GetClient(*clientType)
34+
if c == nil {
35+
panic(fmt.Errorf("no client named: %v", *clientType))
3936
}
40-
41-
// renderer
42-
logger.Println("start rendering")
37+
c.SetToken(string(tokenBytes))
38+
// init renderer
4339
renderer := cgp.GetRenderer(*rendererType)
4440
if renderer == nil {
4541
panic(fmt.Errorf("no renderer named: %v", *rendererType))
@@ -48,6 +44,17 @@ func main() {
4844
logger.Printf("set renderer bin: %v\n", *rendererBin)
4945
renderer.SetBinPath(*rendererBin)
5046
}
47+
48+
// fill topics
49+
topics := make([]*cgp.Topic, 0)
50+
for _, eachTopic := range questions {
51+
resp, err := c.FillTopic(eachTopic)
52+
panicIfErr(err)
53+
topics = append(topics, resp)
54+
}
55+
56+
// renderer
57+
logger.Println("start rendering")
5158
for _, eachTopic := range topics {
5259
renderer.AddTopic(eachTopic)
5360
}

0 commit comments

Comments
 (0)