2.4 #6

Merged
rune merged 14 commits from 2.4 into main 2026-06-19 08:05:37 +02:00
Showing only changes of commit e7c7b9b5c6 - Show all commits
+18 -3
View File
@@ -67,6 +67,14 @@ enum ConversationMergeService {
try DatabaseService.shared.loadConversation(id: id)
}
// The model used in the merged conversation should reflect the most recently used
// model across the *source* conversations never the model that performed the merge.
let latestModelId = sources
.flatMap { $0.1 }
.filter { $0.modelId != nil }
.max { $0.timestamp < $1.timestamp }?
.modelId
let mergedMessages: [Message]
switch mode {
case .simple:
@@ -75,7 +83,12 @@ enum ConversationMergeService {
mergedMessages = try await aiMerge(sources)
}
let newConversation = try DatabaseService.shared.saveConversation(name: name, messages: mergedMessages)
let newConversation = try DatabaseService.shared.saveConversation(
id: UUID(),
name: name,
messages: mergedMessages,
primaryModel: latestModelId
)
if deleteOriginals {
for id in conversationIds {
@@ -148,13 +161,15 @@ enum ConversationMergeService {
let turns = try parseTurns(from: response.content)
// modelId intentionally left nil here: these messages are a synthesized composite,
// not output from a single source model. The conversation's primaryModel (set by the
// caller from the source conversations) is what drives the model shown in the list.
let base = Date()
return turns.enumerated().map { index, turn in
Message(
role: turn.role == "user" ? .user : .assistant,
content: turn.content,
timestamp: base.addingTimeInterval(TimeInterval(index)),
modelId: modelId
timestamp: base.addingTimeInterval(TimeInterval(index))
)
}
}