Matt Low
0384c7cb66
This refactor splits out all conversation concerns into a new `conversation` package. There is now a split between `conversation` and `api`s representation of `Message`, the latter storing the minimum information required for interaction with LLM providers. There is necessary conversation between the two when making LLM calls.
61 lines
1.7 KiB
Go
61 lines
1.7 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
cmdutil "git.mlow.ca/mlow/lmcli/pkg/cmd/util"
|
|
"git.mlow.ca/mlow/lmcli/pkg/conversation"
|
|
"git.mlow.ca/mlow/lmcli/pkg/lmcli"
|
|
"github.com/spf13/cobra"
|
|
)
|
|
|
|
func RemoveCmd(ctx *lmcli.Context) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "rm <conversation>...",
|
|
Short: "Remove conversations",
|
|
Long: `Remove conversations by their short names.`,
|
|
Args: func(cmd *cobra.Command, args []string) error {
|
|
argCount := 1
|
|
if err := cobra.MinimumNArgs(argCount)(cmd, args); err != nil {
|
|
return err
|
|
}
|
|
return nil
|
|
},
|
|
RunE: func(cmd *cobra.Command, args []string) error {
|
|
var toRemove []*conversation.Conversation
|
|
for _, shortName := range args {
|
|
conversation := cmdutil.LookupConversation(ctx, shortName)
|
|
toRemove = append(toRemove, conversation)
|
|
}
|
|
var errors []error
|
|
for _, c := range toRemove {
|
|
err := ctx.Conversations.DeleteConversation(c)
|
|
if err != nil {
|
|
errors = append(errors, fmt.Errorf("Could not remove conversation %s: %v", c.ShortName.String, err))
|
|
}
|
|
}
|
|
if len(errors) > 0 {
|
|
return fmt.Errorf("Could not remove some conversations: %v", errors)
|
|
}
|
|
return nil
|
|
},
|
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
compMode := cobra.ShellCompDirectiveNoFileComp
|
|
var completions []string
|
|
outer:
|
|
for _, completion := range ctx.Conversations.ConversationShortNameCompletions(toComplete) {
|
|
parts := strings.Split(completion, "\t")
|
|
for _, arg := range args {
|
|
if parts[0] == arg {
|
|
continue outer
|
|
}
|
|
}
|
|
completions = append(completions, completion)
|
|
}
|
|
return completions, compMode
|
|
},
|
|
}
|
|
return cmd
|
|
}
|