untested: iOS change for tool call logging
This commit is contained in:
@@ -693,7 +693,9 @@ final class SybilViewModel {
|
||||
}
|
||||
|
||||
let requestMessages: [CompletionRequestMessage] =
|
||||
baseChat.messages.map {
|
||||
baseChat.messages
|
||||
.filter { !$0.isToolCallLog }
|
||||
.map {
|
||||
CompletionRequestMessage(role: $0.role, content: $0.content, name: $0.name)
|
||||
} + [CompletionRequestMessage(role: .user, content: content)]
|
||||
|
||||
@@ -749,6 +751,9 @@ final class SybilViewModel {
|
||||
case let .meta(payload):
|
||||
pendingChatState?.chatID = payload.chatId
|
||||
|
||||
case let .toolCall(payload):
|
||||
insertPendingToolCallMessage(payload)
|
||||
|
||||
case let .delta(payload):
|
||||
guard !payload.text.isEmpty else { return }
|
||||
mutatePendingAssistantMessage { existing in
|
||||
@@ -880,6 +885,51 @@ final class SybilViewModel {
|
||||
pendingChatState = pending
|
||||
}
|
||||
|
||||
private func insertPendingToolCallMessage(_ payload: CompletionStreamToolCall) {
|
||||
guard var pending = pendingChatState else {
|
||||
return
|
||||
}
|
||||
|
||||
if pending.messages.contains(where: { $0.toolCallMetadata?.toolCallId == payload.toolCallId }) {
|
||||
return
|
||||
}
|
||||
|
||||
let metadata: JSONValue = .object([
|
||||
"kind": .string("tool_call"),
|
||||
"toolCallId": .string(payload.toolCallId),
|
||||
"toolName": .string(payload.name),
|
||||
"status": .string(payload.status),
|
||||
"summary": .string(payload.summary),
|
||||
"args": .object(payload.args),
|
||||
"startedAt": .string(payload.startedAt),
|
||||
"completedAt": .string(payload.completedAt),
|
||||
"durationMs": .number(Double(payload.durationMs)),
|
||||
"error": payload.error.map { .string($0) } ?? .null,
|
||||
"resultPreview": payload.resultPreview.map { .string($0) } ?? .null
|
||||
])
|
||||
|
||||
let summary = payload.summary.trimmingCharacters(in: .whitespacesAndNewlines).isEmpty
|
||||
? "Ran tool '\(payload.name)'."
|
||||
: payload.summary
|
||||
|
||||
let message = Message(
|
||||
id: "temp-tool-\(payload.toolCallId)",
|
||||
createdAt: Date(),
|
||||
role: .tool,
|
||||
content: summary,
|
||||
name: payload.name,
|
||||
metadata: metadata
|
||||
)
|
||||
|
||||
if let assistantIndex = pending.messages.indices.last(where: { pending.messages[$0].id.hasPrefix("temp-assistant-") }) {
|
||||
pending.messages.insert(message, at: assistantIndex)
|
||||
} else {
|
||||
pending.messages.append(message)
|
||||
}
|
||||
|
||||
pendingChatState = pending
|
||||
}
|
||||
|
||||
private var currentChatID: String? {
|
||||
if draftKind == .chat {
|
||||
return nil
|
||||
|
||||
Reference in New Issue
Block a user