From 4575c97aae18d899ee0fcd879217519138881a13 Mon Sep 17 00:00:00 2001 From: Castor Gemini Date: Fri, 22 Aug 2025 02:43:41 -0500 Subject: [PATCH] refactor(chatpb): Simplify AddFile for new log format - Remove all backward-compatibility logic from the AddFile function. - The function now assumes all input logs use the modern, nested 'Chat -> Entries' structure. - This simplifies the codebase significantly but requires that all old log files be deprecated or converted. - Note: This commit leaves the build in a broken state, as other files still reference the now-removed fields. --- helpers.go | 84 ++++-------------------------------------------------- 1 file changed, 6 insertions(+), 78 deletions(-) diff --git a/helpers.go b/helpers.go index d7819e5..e24aee3 100644 --- a/helpers.go +++ b/helpers.go @@ -68,88 +68,16 @@ func (all *Chats) AddFile(filename string) error { return err } - // New logic to handle both flat and nested formats - for _, chatOrGroup := range logData.GetChats() { - if len(chatOrGroup.GetEntries()) > 0 { - // This is a new-style Chat group with entries - for _, entry := range chatOrGroup.GetEntries() { - // Convert the ChatEntry into a new Chat object for the flat list. - newChat := convertEntryToChat(entry, filename) - if newChat != nil { - newChat.VerifyUuid() - all.AppendByUuid(newChat) - } - } - } else { - // This is an old-style flat Chat entry. - // We still process it to handle its external content file correctly. - newChat := convertChatToChat(chatOrGroup, filename) - if newChat != nil { - newChat.VerifyUuid() - all.AppendByUuid(newChat) - } - } + // New, simplified logic assumes all files use the new nested format. + for _, chatGroup := range logData.GetChats() { + // It's now a direct append since the structure is the same. + // We still clone to ensure the appended data is a safe copy. + newChatGroup := proto.Clone(chatGroup).(*Chat) + all.AppendByUuid(newChatGroup) } return nil } -// convertChatToChat handles an old-style Chat message. It creates a clean -// copy and resolves its external content file. -func convertChatToChat(chat *Chat, filename string) *Chat { - if chat == nil { - return nil - } - - // Manually create a ChatEntry from the Chat fields to reuse the logic. - entry := &ChatEntry{ - From: chat.GetFrom(), - Ctime: chat.GetCtime(), - Content: chat.GetContent(), - Table: chat.GetTable(), - ToolCalls: chat.GetToolCalls(), - ContentFile: chat.GetContentFile(), - Uuid: chat.GetUuid(), - Snippets: chat.GetSnippets(), - } - return convertEntryToChat(entry, filename) -} - -// convertEntryToChat creates a new Chat object from a ChatEntry's data -// and resolves its external content file. -func convertEntryToChat(entry *ChatEntry, filename string) *Chat { - if entry == nil { - return nil - } - - // Create a new Chat object and copy the fields. - newChat := &Chat{ - From: entry.GetFrom(), - Ctime: entry.GetCtime(), - Table: entry.GetTable(), - ToolCalls: entry.GetToolCalls(), - Snippets: entry.GetSnippets(), - Uuid: entry.GetUuid(), - } - - // Handle content: prefer content_file, fallback to content. - var content string - if contentFile := entry.GetContentFile(); contentFile != "" { - logDir := filepath.Dir(filename) - contentPath := filepath.Join(logDir, contentFile) - contentBytes, err := os.ReadFile(contentPath) - if err != nil { - content = fmt.Sprintf("--- ERROR: Could not read content file %s: %v ---", contentPath, err) - } else { - content = string(contentBytes) - } - } else { - content = entry.GetContent() - } - newChat.Content = content - - return newChat -} - func (chats *Chats) VerifyUuids() bool { var changed bool