-
Notifications
You must be signed in to change notification settings - Fork 0
/
main.go
125 lines (100 loc) · 2.44 KB
/
main.go
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
package main
import (
"bytes"
"encoding/json"
"fmt"
"io"
"io/ioutil"
"log"
"net/http"
"os"
"path/filepath"
"time"
"github.com/briandowns/spinner"
)
type OAIChoices struct {
Text string
Index uint8
Logprobs uint8
FinishReason string
}
type OAIResponse struct {
Id string
Object string
Create uint64
Model string
Choices []OAIChoices
}
type OAIRequest struct {
Prompt string `json:"prompt"`
Max_tokens uint32 `json:"max_tokens"`
}
var dir, file string
func main() {
fmt.Println("\x1bc")
s := spinner.New(spinner.CharSets[11], 100*time.Millisecond)
var userInput string
for {
fmt.Println("Escolha o arquivo a ser analisado:")
fmt.Print("> ")
fmt.Scanln(&userInput)
dir, file = filepath.Split(userInput)
fmt.Println(dir + file)
s.Start()
s.Suffix = " A OpenAI está realizando a documentação do seu código..."
data, err := ioutil.ReadFile(dir + file)
if err != nil {
fmt.Println("Erro ao ler o arquivo:", err.Error())
return
}
requestOpenAI(string(data))
s.Stop()
}
}
func requestOpenAI(docRequest string) {
oaiToken := os.Getenv("OPENAI_KEY")
bearer := "Bearer " + oaiToken
preanble := `Desenvolva uma documentação em markdown (.md) do seguinte código. Utilize o README.md do projeto do kubernetes como base. Utilize também os subtópicos (##) a mais: Requerimentos; Instrução de uso; descrição do código.`
uri := "https://api.openai.com/v1/engines/text-davinci-002/completions"
OAIRequest := OAIRequest{
Prompt: fmt.Sprintf("%s %s", preanble, docRequest),
Max_tokens: 500,
}
var payload bytes.Buffer
err := json.NewEncoder(&payload).Encode(OAIRequest)
if err != nil {
log.Fatal(err)
}
req, err := http.NewRequest(http.MethodPost, uri, &payload)
if err != nil {
log.Fatal(err)
}
req.Header.Set("Authorization", bearer)
req.Header.Set("Content-type", "application/json")
res, err := http.DefaultClient.Do(req)
if err != nil {
log.Fatal(err)
}
defer res.Body.Close()
bytes, err := io.ReadAll(res.Body)
if err != nil {
log.Fatal(err)
}
var response OAIResponse
err = json.Unmarshal([]byte(bytes), &response)
if err != nil {
log.Fatal(err)
}
file, err := os.Create(dir + "README.md")
if err != nil {
fmt.Println("Erro ao criar o arquivo:", err)
return
}
defer file.Close()
_, err = file.WriteString(response.Choices[0].Text)
if err != nil {
fmt.Println("Erro ao escrever no arquivo:", err)
return
}
fmt.Println("")
}