Spaces:
Runtime error
Runtime error
File size: 1,647 Bytes
98f8e86 |
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 |
package cmd
import (
"bufio"
"fmt"
"os"
"strconv"
"github.com/fatih/color"
"github.com/spf13/cobra"
"llm-cli/internal/client"
)
func newChatCmd() *cobra.Command {
cmd := &cobra.Command{
Use: "chat",
Short: "Start an interactive chat session",
RunE: runChat,
}
return cmd
}
func runChat(cmd *cobra.Command, args []string) error {
ctx := cmd.Context()
c := client.New(server)
sessions, err := c.ListSessions(ctx, user)
if err != nil {
return err
}
session := "default"
if len(sessions) > 0 {
fmt.Println("Existing sessions:")
for i, s := range sessions {
fmt.Printf(" %d. %s\n", i+1, s)
}
fmt.Printf("Select session number or enter new name [%d]: ", len(sessions))
var choice string
fmt.Scanln(&choice)
if n, err := strconv.Atoi(choice); err == nil && n >= 1 && n <= len(sessions) {
session = sessions[n-1]
} else if choice != "" {
session = choice
}
}
cyan := color.New(color.FgCyan).SprintFunc()
green := color.New(color.FgGreen).SprintFunc()
yellow := color.New(color.FgYellow).SprintFunc()
fmt.Printf("Chatting as %s in session '%s'\n", green(user), session)
scanner := bufio.NewScanner(os.Stdin)
for {
fmt.Printf("%s> ", cyan("You"))
if !scanner.Scan() {
break
}
line := scanner.Text()
if line == "exit" || line == "quit" {
break
}
stream, err := c.ChatStream(ctx, user, session, line)
if err != nil {
fmt.Println("error:", err)
continue
}
r := bufio.NewReader(stream)
for {
part, err := r.ReadString('\n')
if len(part) > 0 {
fmt.Print(yellow(part))
}
if err != nil {
break
}
}
stream.Close()
}
return nil
}
|