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.
68 lines
1.9 KiB
Go
68 lines
1.9 KiB
Go
package cmd
|
|
|
|
import (
|
|
"fmt"
|
|
"strings"
|
|
|
|
"git.mlow.ca/mlow/lmcli/pkg/lmcli"
|
|
"github.com/spf13/cobra"
|
|
cmdutil "git.mlow.ca/mlow/lmcli/pkg/cmd/util"
|
|
)
|
|
|
|
func RenameCmd(ctx *lmcli.Context) *cobra.Command {
|
|
cmd := &cobra.Command{
|
|
Use: "rename <conversation> [title]",
|
|
Short: "Rename a conversation",
|
|
Long: `Renames a conversation, either with the provided title or by generating a new name.`,
|
|
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 {
|
|
shortName := args[0]
|
|
conversation := cmdutil.LookupConversation(ctx, shortName)
|
|
|
|
var err error
|
|
var title string
|
|
|
|
generate, _ := cmd.Flags().GetBool("generate")
|
|
if generate {
|
|
messages, err := ctx.Conversations.PathToLeaf(conversation.SelectedRoot)
|
|
if err != nil {
|
|
return fmt.Errorf("Could not retrieve conversation messages: %v", err)
|
|
}
|
|
title, err = cmdutil.GenerateTitle(ctx, messages)
|
|
if err != nil {
|
|
return fmt.Errorf("Could not generate conversation title: %v", err)
|
|
}
|
|
} else {
|
|
if len(args) < 2 {
|
|
return fmt.Errorf("Conversation title not provided.")
|
|
}
|
|
title = strings.Join(args[1:], " ")
|
|
}
|
|
|
|
conversation.Title = title
|
|
err = ctx.Conversations.UpdateConversation(conversation)
|
|
if err != nil {
|
|
lmcli.Warn("Could not update conversation title: %v\n", err)
|
|
}
|
|
return nil
|
|
},
|
|
ValidArgsFunction: func(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) {
|
|
compMode := cobra.ShellCompDirectiveNoFileComp
|
|
if len(args) != 0 {
|
|
return nil, compMode
|
|
}
|
|
return ctx.Conversations.ConversationShortNameCompletions(toComplete), compMode
|
|
},
|
|
}
|
|
|
|
cmd.Flags().Bool("generate", false, "Generate a conversation title")
|
|
|
|
return cmd
|
|
}
|