diff --git a/pkg/cmd/reply.go b/pkg/cmd/reply.go index 3063427..8483285 100644 --- a/pkg/cmd/reply.go +++ b/pkg/cmd/reply.go @@ -31,9 +31,8 @@ func ReplyCmd(ctx *lmcli.Context) *cobra.Command { } cmdutil.HandleConversationReply(ctx, conversation, true, model.Message{ - ConversationID: conversation.ID, - Role: model.MessageRoleUser, - Content: reply, + Role: model.MessageRoleUser, + Content: reply, }) return nil }, diff --git a/pkg/lmcli/model/conversation.go b/pkg/lmcli/model/conversation.go index fb1d60d..c817706 100644 --- a/pkg/lmcli/model/conversation.go +++ b/pkg/lmcli/model/conversation.go @@ -16,17 +16,17 @@ const ( ) type Message struct { - ID uint `gorm:"primaryKey"` - ConversationID uint `gorm:"index"` - Conversation Conversation `gorm:"foreignKey:ConversationID"` + ID uint `gorm:"primaryKey"` + ConversationID *uint `gorm:"index"` + Conversation *Conversation `gorm:"foreignKey:ConversationID"` Content string Role MessageRole CreatedAt time.Time ToolCalls ToolCalls // a json array of tool calls (from the model) ToolResults ToolResults // a json array of tool results ParentID *uint - Parent *Message `gorm:"foreignKey:ParentID"` - Replies []Message `gorm:"foreignKey:ParentID"` + Parent *Message `gorm:"foreignKey:ParentID"` + Replies []Message `gorm:"foreignKey:ParentID"` SelectedReplyID *uint SelectedReply *Message `gorm:"foreignKey:SelectedReplyID"` @@ -37,7 +37,7 @@ type Conversation struct { ShortName sql.NullString Title string SelectedRootID *uint - SelectedRoot *Message `gorm:"foreignKey:SelectedRootID"` + SelectedRoot *Message `gorm:"foreignKey:SelectedRootID"` } type RequestParameters struct { diff --git a/pkg/lmcli/store.go b/pkg/lmcli/store.go index 450e9e9..3e10a64 100644 --- a/pkg/lmcli/store.go +++ b/pkg/lmcli/store.go @@ -159,7 +159,7 @@ func (s *SQLStore) StartConversation(messages ...model.Message) (*model.Conversa } // Create first message - messages[0].Conversation = *conversation + messages[0].Conversation = conversation err = s.db.Create(&messages[0]).Error if err != nil { return nil, nil, err @@ -201,7 +201,7 @@ func (s *SQLStore) CloneConversation(toClone model.Conversation) (*model.Convers for _, root := range rootMessages { messageCnt++ newRoot := root - newRoot.ConversationID = clone.ID + newRoot.ConversationID = &clone.ID cloned, count, err := s.CloneBranch(newRoot) if err != nil { @@ -232,9 +232,10 @@ func (s *SQLStore) Reply(to *model.Message, messages ...model.Message) ([]model. err := s.db.Transaction(func(tx *gorm.DB) error { currentParent := to for i := range messages { + parent := currentParent message := messages[i] - message.Parent = currentParent - message.Conversation = currentParent.Conversation + message.Parent = parent + message.Conversation = parent.Conversation message.ID = 0 message.CreatedAt = time.Time{} @@ -243,9 +244,9 @@ func (s *SQLStore) Reply(to *model.Message, messages ...model.Message) ([]model. } // update parent selected reply - currentParent.Replies = append(currentParent.Replies, message) - currentParent.SelectedReply = &message - if err := tx.Model(currentParent).Update("selected_reply_id", message.ID).Error; err != nil { + parent.Replies = append(parent.Replies, message) + parent.SelectedReply = &message + if err := tx.Model(parent).Update("selected_reply_id", message.ID).Error; err != nil { return err } diff --git a/pkg/tui/views/chat/conversation.go b/pkg/tui/views/chat/conversation.go index deade01..59f5220 100644 --- a/pkg/tui/views/chat/conversation.go +++ b/pkg/tui/views/chat/conversation.go @@ -110,7 +110,7 @@ func (m *Model) cloneMessage(message models.Message, selected bool) tea.Cmd { if selected { if msg.Parent == nil { msg.Conversation.SelectedRoot = msg - err = m.Shared.Ctx.Store.UpdateConversation(&msg.Conversation) + err = m.Shared.Ctx.Store.UpdateConversation(msg.Conversation) } else { msg.Parent.SelectedReply = msg err = m.Shared.Ctx.Store.UpdateMessage(msg.Parent) diff --git a/pkg/tui/views/chat/update.go b/pkg/tui/views/chat/update.go index 6d40ef6..369b65d 100644 --- a/pkg/tui/views/chat/update.go +++ b/pkg/tui/views/chat/update.go @@ -173,7 +173,7 @@ func (m Model) Update(msg tea.Msg) (Model, tea.Cmd) { m.updateContent() case msgMessageCloned: if msg.Parent == nil { - m.conversation = &msg.Conversation + m.conversation = msg.Conversation m.rootMessages = append(m.rootMessages, *msg) } cmds = append(cmds, m.loadConversationMessages()) diff --git a/pkg/tui/views/conversations/conversations.go b/pkg/tui/views/conversations/conversations.go index d27c36d..46cd09b 100644 --- a/pkg/tui/views/conversations/conversations.go +++ b/pkg/tui/views/conversations/conversations.go @@ -155,7 +155,7 @@ func (m *Model) loadConversations() tea.Cmd { loaded := make([]loadedConversation, len(messages)) for i, m := range messages { loaded[i].lastReply = m - loaded[i].conv = m.Conversation + loaded[i].conv = *m.Conversation } return msgConversationsLoaded(loaded)