in main.go [336:381]
func (s *session) repl(ctx context.Context, initialQuery string) error {
query := initialQuery
if query == "" {
s.doc.AddBlock(ui.NewAgentTextBlock().SetText("Hey there, what can I help you with today?"))
}
for {
if query == "" {
input := ui.NewInputTextBlock()
s.doc.AddBlock(input)
userInput, err := input.Observable().Wait()
if err != nil {
if err == io.EOF {
// Use hit control-D, or was piping and we reached the end of stdin.
// Not a "big" problem
return nil
}
return fmt.Errorf("reading input: %w", err)
}
query = strings.TrimSpace(userInput)
}
switch {
case query == "":
continue
case query == "reset":
err := s.conversation.Init(ctx, s.doc)
if err != nil {
return err
}
case query == "clear":
s.ui.ClearScreen()
case query == "exit" || query == "quit":
// s.ui.RenderOutput(ctx, "Allright...bye.\n")
return nil
default:
if err := s.answerQuery(ctx, query); err != nil {
errorBlock := &ui.ErrorBlock{}
errorBlock.SetText(fmt.Sprintf("Error: %v\n", err))
s.doc.AddBlock(errorBlock)
}
}
// Reset query to empty string so that we prompt for input again
query = ""
}
}