-
Notifications
You must be signed in to change notification settings - Fork 18
Expand file tree
/
Copy pathmain.go
More file actions
83 lines (71 loc) · 2.02 KB
/
main.go
File metadata and controls
83 lines (71 loc) · 2.02 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
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
package main
import (
"context"
"os"
"os/user"
"github.com/reugn/gemini-cli/gemini"
"github.com/reugn/gemini-cli/internal/chat"
"github.com/reugn/gemini-cli/internal/config"
"github.com/spf13/cobra"
)
const (
version = "0.4.0"
apiKeyEnv = "GEMINI_API_KEY" //nolint:gosec
defaultConfigPath = "gemini_cli_config.json"
)
func run() int {
rootCmd := &cobra.Command{
Short: "Gemini CLI Tool",
Version: version,
}
var opts chat.Opts
var configPath string
rootCmd.Flags().StringVarP(&opts.GenerativeModel, "model", "m", gemini.DefaultModel,
"generative model name")
rootCmd.Flags().BoolVar(&opts.Multiline, "multiline", false,
"read input as a multi-line string")
rootCmd.Flags().StringVarP(&opts.LineTerminator, "term", "t", "$",
"multi-line input terminator")
rootCmd.Flags().StringVarP(&opts.StylePath, "style", "s", "auto",
"markdown format style (ascii, dark, light, pink, notty, dracula)")
rootCmd.Flags().IntVarP(&opts.WordWrap, "wrap", "w", 80,
"line length for response word wrapping")
rootCmd.Flags().StringVarP(&configPath, "config", "c", defaultConfigPath,
"path to configuration file in JSON format")
rootCmd.RunE = func(_ *cobra.Command, _ []string) error {
configuration, err := config.NewConfiguration(configPath)
if err != nil {
return err
}
modelBuilder := gemini.NewGenerativeModelBuilder().
WithName(opts.GenerativeModel).
WithSafetySettings(configuration.Data.SafetySettings)
apiKey := os.Getenv(apiKeyEnv)
chatSession, err := gemini.NewChatSession(context.Background(), modelBuilder, apiKey)
if err != nil {
return err
}
chatHandler, err := chat.New(getCurrentUser(), chatSession, configuration, &opts)
if err != nil {
return err
}
chatHandler.Start()
return chatSession.Close()
}
err := rootCmd.Execute()
if err != nil {
return 1
}
return 0
}
func getCurrentUser() string {
currentUser, err := user.Current()
if err != nil {
return "user"
}
return currentUser.Username
}
func main() {
// start the application
os.Exit(run())
}