-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.go
More file actions
56 lines (51 loc) · 1.18 KB
/
main.go
File metadata and controls
56 lines (51 loc) · 1.18 KB
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
package main
import (
"context"
tea "github.com/charmbracelet/bubbletea"
"github.com/postsa/strut/internal/models"
"github.com/postsa/strut/internal/tui"
"log"
"os"
)
func main() {
err, client, model := chooseModel()
if err != nil {
log.Fatal(err)
}
if client != nil {
defer client.Close()
next := ""
for next != "quit" {
program := tea.NewProgram(tui.NewModel(client, model), tea.WithAltScreen())
output, err := program.Run()
next = output.(tui.Model).Next
if err != nil {
log.Fatal("There's been an error:", err)
}
if next == "choose" {
err, client, model = chooseModel()
if model == "" {
next = "quit"
}
}
}
} else {
os.Exit(0)
}
}
func chooseModel() (error, models.ChatClient, string) {
var err error
var client models.ChatClient
pickerProgram := tea.NewProgram(tui.NewPicker())
output, err := pickerProgram.Run()
picker := output.(tui.Picker)
model := picker.Choice
if model == "gemini-2.0-flash" {
client, err = models.NewGemini(context.Background())
} else if model == "gpt-4o" {
client, err = models.NewOpenAi()
} else if model == "claude-opus-4-0" {
client, err = models.NewClaude()
}
return err, client, model
}