add comments

pull/1/head
Tony Worm 1 year ago
parent 6d2e901a70
commit e70f9f99fe

@ -87,6 +87,9 @@ func main() {
var err error var err error
var filename string var filename string
// We build up PromptText as we go, based on flags
// Handle the pretext flag
if Pretext != "" { if Pretext != "" {
files, err := predefined.ReadDir("pretexts") files, err := predefined.ReadDir("pretexts")
@ -94,6 +97,7 @@ func main() {
panic(err) panic(err)
} }
// list and exit
if Pretext == "list" { if Pretext == "list" {
for _, f := range files { for _, f := range files {
fmt.Println(strings.TrimSuffix(f.Name(), ".txt")) fmt.Println(strings.TrimSuffix(f.Name(), ".txt"))
@ -101,6 +105,7 @@ func main() {
os.Exit(0) os.Exit(0)
} }
// print pretext and exit
if strings.HasPrefix(Pretext, "view:") { if strings.HasPrefix(Pretext, "view:") {
name := strings.TrimPrefix(Pretext, "view:") name := strings.TrimPrefix(Pretext, "view:")
contents, err := predefined.ReadFile("pretexts/" + name + ".txt") contents, err := predefined.ReadFile("pretexts/" + name + ".txt")
@ -112,7 +117,7 @@ func main() {
os.Exit(0) os.Exit(0)
} }
// look for predefined // prime prompt with known pretext
for _, f := range files { for _, f := range files {
name := strings.TrimSuffix(f.Name(), ".txt") name := strings.TrimSuffix(f.Name(), ".txt")
if name == Pretext { if name == Pretext {
@ -126,12 +131,15 @@ func main() {
} }
} }
// prime prompt with custom pretext
if PromptText == "" { if PromptText == "" {
PromptText = Pretext PromptText = Pretext
} }
} }
// no args, interactive, or question... read from stdin
// this is mainly for replacing text in vim
if len(args) == 0 && !PromptMode && Question == "" { if len(args) == 0 && !PromptMode && Question == "" {
reader := bufio.NewReader(os.Stdin) reader := bufio.NewReader(os.Stdin)
var buf bytes.Buffer var buf bytes.Buffer
@ -144,6 +152,7 @@ func main() {
} }
PromptText += buf.String() PromptText += buf.String()
} else if len(args) == 1 { } else if len(args) == 1 {
// if we have an arg, add it to the prompt
filename = args[0] filename = args[0]
content, err := os.ReadFile(filename) content, err := os.ReadFile(filename)
if err != nil { if err != nil {
@ -153,14 +162,17 @@ func main() {
PromptText += string(content) PromptText += string(content)
} }
// if there is a question, it comes last in the prompt
if Question != "" { if Question != "" {
PromptText += "\n" + Question PromptText += "\n" + Question
} }
// interactive or file mode
if PromptMode { if PromptMode {
fmt.Println(PromptText) fmt.Println(PromptText)
err = RunPrompt(client) err = RunPrompt(client)
} else { } else {
// empty filename (no args) prints to stdout
err = RunOnce(client, filename) err = RunOnce(client, filename)
} }
@ -172,6 +184,7 @@ func main() {
}, },
} }
// setup flags
rootCmd.Flags().StringVarP(&Question, "question", "q", "", "ask a single question and print the response back") rootCmd.Flags().StringVarP(&Question, "question", "q", "", "ask a single question and print the response back")
rootCmd.Flags().StringVarP(&Pretext, "pretext", "p", "", "pretext to add to ChatGPT input, use 'list' or 'view:<name>' to inspect predefined, '<name>' to use a pretext, or otherwise supply any custom text") rootCmd.Flags().StringVarP(&Pretext, "pretext", "p", "", "pretext to add to ChatGPT input, use 'list' or 'view:<name>' to inspect predefined, '<name>' to use a pretext, or otherwise supply any custom text")
rootCmd.Flags().BoolVarP(&PromptMode, "interactive", "i", false, "start an interactive session with ChatGPT") rootCmd.Flags().BoolVarP(&PromptMode, "interactive", "i", false, "start an interactive session with ChatGPT")
@ -198,13 +211,16 @@ func RunPrompt(client *gpt3.Client) error {
quit = true quit = true
default: default:
// add the question to the existing prompt text, to keep context
PromptText += "\n\n> " + question + "\n" PromptText += "\n\n> " + question + "\n"
r, err := GetResponse(client, ctx, PromptText) r, err := GetResponse(client, ctx, PromptText)
if err != nil { if err != nil {
return err return err
} }
// we add response to the prompt, this is how ChatGPT sessions keep context
PromptText += "\n" + r + "\n" PromptText += "\n" + r + "\n"
// print the latest portion of the conversation
fmt.Println(r + "\n") fmt.Println(r + "\n")
} }
} }

Loading…
Cancel
Save