From: Pascal Date: Fri, 10 Jul 2026 07:10:45 +0000 (+0200) Subject: ui: export full message tree instead of active path only (#25501) X-Git-Tag: upstream/0.0.10438~485 X-Git-Url: https://git.djapps.eu/?a=commitdiff_plain;h=d46786f29685d9626fcd7d51c52d1087bac3d059;p=pkg%2Fggml%2Fsources%2Fllama.cpp ui: export full message tree instead of active path only (#25501) downloadConversation serialized activeMessages, the root -> currNode path, so exporting a conversation with edited or regenerated messages dropped every alternate version and kept only the selected one. Fetch the whole message tree via getConversationMessages so the export carries all message versions, matching the multi-conversation export path which already did this. Keep the active conversation as the header source to preserve an up-to-date currNode. Forks are separate conversations, each with its own convId, and are exported on their own. --- diff --git a/tools/ui/src/lib/stores/conversations.svelte.ts b/tools/ui/src/lib/stores/conversations.svelte.ts index b29a900fe..47d2f060d 100644 --- a/tools/ui/src/lib/stores/conversations.svelte.ts +++ b/tools/ui/src/lib/stores/conversations.svelte.ts @@ -1115,21 +1115,18 @@ class ConversationsStore { } /** - * Downloads a conversation as JSON file. + * Downloads a single conversation as a JSONL file, serializing the full message tree. * @param convId - The conversation ID to download */ async downloadConversation(convId: string): Promise { - let conversation: DatabaseConversation | null; - let messages: DatabaseMessage[]; + const conversation = + this.activeConversation?.id === convId + ? this.activeConversation + : await DatabaseService.getConversation(convId); - if (this.activeConversation?.id === convId) { - conversation = this.activeConversation; - messages = this.activeMessages; - } else { - conversation = await DatabaseService.getConversation(convId); - if (!conversation) return; - messages = await DatabaseService.getConversationMessages(convId); - } + if (!conversation) return; + + const messages = await DatabaseService.getConversationMessages(convId); this.downloadConversationFile({ conv: conversation, messages }); }