feat(gemini): add file import capability
This commit introduces the `doImport` function, which allows importing the content of a file directly into the "auto" chat session. The imported content is added as a `ChatEntry` from GEMINI, structured as a `ToolCall` with the name "Shell" and the file content as the input. This allows external command outputs to be seamlessly integrated into the chat history for context.
This commit is contained in:
parent
7646310dd4
commit
40243de35b
19
argv.go
19
argv.go
|
@ -10,15 +10,16 @@ package main
|
||||||
var argv args
|
var argv args
|
||||||
|
|
||||||
type args struct {
|
type args struct {
|
||||||
Add string `arg:"--add" help:"add a new chat"`
|
Add string `arg:"--add" help:"add a new chat"`
|
||||||
Format *EmptyCmd `arg:"subcommand:format" help:"add a conversation"`
|
Format *EmptyCmd `arg:"subcommand:format" help:"add a conversation"`
|
||||||
Playback *PlaybackCmd `arg:"subcommand:playback" help:"dump your prior conversations to the terminal'"`
|
Playback *PlaybackCmd `arg:"subcommand:playback" help:"dump your prior conversations to the terminal'"`
|
||||||
Output string `arg:"--output" help:"should get a string from gemini-cli"`
|
Output string `arg:"--output" help:"should get a string from gemini-cli"`
|
||||||
Input string `arg:"--input" help:"should get a string from gemini-cli"`
|
Input string `arg:"--input" help:"should get a string from gemini-cli"`
|
||||||
Force bool `arg:"--force" help:"try to strong arm things"`
|
ImportFile string `arg:"--import" help:"import a file from gemini-cli"`
|
||||||
Verbose bool `arg:"--verbose" help:"show more output"`
|
Force bool `arg:"--force" help:"try to strong arm things"`
|
||||||
Bash bool `arg:"--bash" help:"generate bash completion"`
|
Verbose bool `arg:"--verbose" help:"show more output"`
|
||||||
BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"`
|
Bash bool `arg:"--bash" help:"generate bash completion"`
|
||||||
|
BashAuto []string `arg:"--auto-complete" help:"todo: move this to go-arg"`
|
||||||
}
|
}
|
||||||
|
|
||||||
type EmptyCmd struct {
|
type EmptyCmd struct {
|
||||||
|
|
|
@ -0,0 +1,56 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"io/ioutil"
|
||||||
|
"time"
|
||||||
|
|
||||||
|
"go.wit.com/lib/protobuf/chatpb"
|
||||||
|
"go.wit.com/log"
|
||||||
|
"google.golang.org/protobuf/types/known/timestamppb"
|
||||||
|
)
|
||||||
|
|
||||||
|
func doImport(filename string) {
|
||||||
|
content, err := ioutil.ReadFile(filename)
|
||||||
|
if err != nil {
|
||||||
|
log.Warn("Error reading import file:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
s := string(content)
|
||||||
|
|
||||||
|
// Load the existing chats.
|
||||||
|
all := chatpb.NewChats()
|
||||||
|
if err := all.ConfigLoad(); err != nil {
|
||||||
|
log.Warn("Error loading config, can't add to auto chat:", err)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
// Find the "auto" chat.
|
||||||
|
var autoChat *chatpb.Chat
|
||||||
|
for _, chat := range all.GetChats() {
|
||||||
|
if chat.GetChatName() == "auto" {
|
||||||
|
autoChat = chat
|
||||||
|
break
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// If the "auto" chat is found, add the new entry.
|
||||||
|
if autoChat != nil {
|
||||||
|
newEntry := &chatpb.ChatEntry{
|
||||||
|
From: chatpb.Who_GEMINI,
|
||||||
|
Ctime: timestamppb.New(time.Now()),
|
||||||
|
ToolCalls: []*chatpb.ToolCall{
|
||||||
|
{
|
||||||
|
Name: "Shell",
|
||||||
|
Input: s,
|
||||||
|
},
|
||||||
|
},
|
||||||
|
}
|
||||||
|
autoChat.Entries = append(autoChat.Entries, newEntry)
|
||||||
|
if err := all.ConfigSave(); err != nil {
|
||||||
|
log.Warn("Error saving config after adding to auto chat:", err)
|
||||||
|
} else {
|
||||||
|
log.Info("Added new entry to 'auto' chat.")
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
Loading…
Reference in New Issue