2024-02-21 21:55:38 -07:00
package cmd
import (
"fmt"
cmdutil "git.mlow.ca/mlow/lmcli/pkg/cmd/util"
"git.mlow.ca/mlow/lmcli/pkg/lmcli"
"git.mlow.ca/mlow/lmcli/pkg/lmcli/model"
"github.com/spf13/cobra"
)
func RetryCmd ( ctx * lmcli . Context ) * cobra . Command {
cmd := & cobra . Command {
Use : "retry <conversation>" ,
Short : "Retry the last user reply in a conversation" ,
Long : ` Re-prompt the conversation up to the last user response. Can be used to regenerate the last assistant reply, or simply generate one if an error occurred. ` ,
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 )
messages , err := ctx . Store . Messages ( conversation )
if err != nil {
return fmt . Errorf ( "Could not retrieve messages for conversation: %s" , conversation . Title )
}
// walk backwards through the conversation and delete messages, break
// when we find the latest user response
for i := len ( messages ) - 1 ; i >= 0 ; i -- {
if messages [ i ] . Role == model . MessageRoleUser {
break
}
err = ctx . Store . DeleteMessage ( & messages [ i ] )
if err != nil {
lmcli . Warn ( "Could not delete previous reply: %v\n" , err )
}
}
cmdutil . HandleConversationReply ( ctx , conversation , true )
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 . Store . ConversationShortNameCompletions ( toComplete ) , compMode
} ,
}
2024-05-07 01:11:04 -06:00
applyPromptFlags ( ctx , cmd )
2024-02-21 21:55:38 -07:00
return cmd
}