feat: custom tool renderers

This commit is contained in:
Zoe
2026-09-25 19:46:00 -05:00
parent 3f81f96bda
commit bb5795e00d
18 changed files with 1294 additions and 65 deletions
+28 -8
View File
@@ -153,10 +153,12 @@ export const useChat = async (topicId: MaybeRef<string>, connect = true) => {
case 'text-end': {
const msg = data.value.messages.find(m => m.id === payload.messageId);
const part = msg?.parts?.find(p => p.id === payload.partId);
if (part) {
if (part && part.type !== 'tool-call') {
nextFlush(() => {
part.content = payload.content;
part.lastUpdatedAt = payload.lastUpdatedAt;
if (payload.lastUpdatedAt) {
part.lastUpdatedAt = payload.lastUpdatedAt;
}
part.finished = true;
});
}
@@ -166,8 +168,14 @@ export const useChat = async (topicId: MaybeRef<string>, connect = true) => {
case 'tool-call-start': {
const msg = data.value.messages.find(m => m.id === payload.messageId);
if (msg) {
if (!msg.parts) msg.parts = [];
msg.parts.push(payload.part);
if (!msg.parts) {
msg.parts = [];
}
const part = { ...payload.part };
if (!part.createdAt) {
part.createdAt = new Date().toISOString();
}
msg.parts.push(part);
}
break;
}
@@ -176,10 +184,22 @@ export const useChat = async (topicId: MaybeRef<string>, connect = true) => {
const msg = data.value.messages.find(m => m.id === payload.messageId);
const part = msg?.parts?.find(p => p.toolCallId === payload.toolCallId);
if (part?.toolCall) {
if (payload.input) part.toolCall.input = payload.input;
if (payload.output) part.toolCall.output = payload.output;
if (payload.error) part.toolCall.error = payload.error;
if (payload.status) part.toolCall.status = payload.status;
if (payload.input) {
part.toolCall.input = payload.input;
}
if (payload.output) {
part.toolCall.output = payload.output;
}
if (payload.error) {
part.toolCall.error = payload.error;
}
if (payload.status) {
part.toolCall.status = payload.status;
if (payload.status === 'completed' || payload.status === 'failed') {
part.lastUpdatedAt = payload.lastUpdatedAt || new Date().toISOString();
part.finished = true;
}
}
}
break;
}