|
@@ -118,6 +118,7 @@ export function useChat() {
|
|
|
async function setActiveConversation(id) {
|
|
async function setActiveConversation(id) {
|
|
|
const strId = String(id ?? "").trim();
|
|
const strId = String(id ?? "").trim();
|
|
|
if (!strId) return;
|
|
if (!strId) return;
|
|
|
|
|
+ cancelCurrentStream();
|
|
|
activeConversationId.value = strId;
|
|
activeConversationId.value = strId;
|
|
|
messages.value = [...defaultMessages];
|
|
messages.value = [...defaultMessages];
|
|
|
try {
|
|
try {
|
|
@@ -136,6 +137,7 @@ export function useChat() {
|
|
|
}
|
|
}
|
|
|
|
|
|
|
|
function newConversation() {
|
|
function newConversation() {
|
|
|
|
|
+ cancelCurrentStream();
|
|
|
activeConversationId.value = null;
|
|
activeConversationId.value = null;
|
|
|
messages.value = [...defaultMessages];
|
|
messages.value = [...defaultMessages];
|
|
|
return null;
|
|
return null;
|
|
@@ -232,7 +234,7 @@ export function useChat() {
|
|
|
...conversations.value
|
|
...conversations.value
|
|
|
];
|
|
];
|
|
|
} catch {
|
|
} catch {
|
|
|
- // Continue without persistence if creation fails
|
|
|
|
|
|
|
+
|
|
|
}
|
|
}
|
|
|
}
|
|
}
|
|
|
|
|
|
|
@@ -240,7 +242,8 @@ export function useChat() {
|
|
|
|
|
|
|
|
const assistantMsg = { role: "assistant", content: "", sources: [], sentAt: Date.now(), streaming: true, statusMsg: "" };
|
|
const assistantMsg = { role: "assistant", content: "", sources: [], sentAt: Date.now(), streaming: true, statusMsg: "" };
|
|
|
messages.value.push(assistantMsg);
|
|
messages.value.push(assistantMsg);
|
|
|
- const msgIndex = messages.value.length - 1;
|
|
|
|
|
|
|
+
|
|
|
|
|
+ const liveMsg = messages.value[messages.value.length - 1];
|
|
|
|
|
|
|
|
loading.value = true;
|
|
loading.value = true;
|
|
|
|
|
|
|
@@ -248,20 +251,21 @@ export function useChat() {
|
|
|
conversationId: convId,
|
|
conversationId: convId,
|
|
|
signal: _streamAbort.signal,
|
|
signal: _streamAbort.signal,
|
|
|
onStatus: ({ stage, count }) => {
|
|
onStatus: ({ stage, count }) => {
|
|
|
- if (stage === "buscando") messages.value[msgIndex].statusMsg = "Buscando documentos...";
|
|
|
|
|
- else if (stage === "encontrou") messages.value[msgIndex].statusMsg = `Encontrei ${count} fonte${count !== 1 ? "s" : ""}...`;
|
|
|
|
|
- else if (stage === "gerando") messages.value[msgIndex].statusMsg = "Gerando resposta...";
|
|
|
|
|
|
|
+ if (stage === "buscando") liveMsg.statusMsg = "Buscando documentos...";
|
|
|
|
|
+ else if (stage === "encontrou") liveMsg.statusMsg = `Encontrei ${count} fonte${count !== 1 ? "s" : ""}...`;
|
|
|
|
|
+ else if (stage === "reordenando") liveMsg.statusMsg = "Selecionando as fontes mais relevantes...";
|
|
|
|
|
+ else if (stage === "gerando") liveMsg.statusMsg = "Gerando resposta...";
|
|
|
},
|
|
},
|
|
|
onChunk: (delta) => {
|
|
onChunk: (delta) => {
|
|
|
- messages.value[msgIndex].statusMsg = "";
|
|
|
|
|
- messages.value[msgIndex].content += delta;
|
|
|
|
|
|
|
+ liveMsg.statusMsg = "";
|
|
|
|
|
+ liveMsg.content += delta;
|
|
|
},
|
|
},
|
|
|
onSources: (sources) => {
|
|
onSources: (sources) => {
|
|
|
- messages.value[msgIndex].sources = sources ?? [];
|
|
|
|
|
|
|
+ liveMsg.sources = sources ?? [];
|
|
|
},
|
|
},
|
|
|
onDone: () => {
|
|
onDone: () => {
|
|
|
_streamAbort = null;
|
|
_streamAbort = null;
|
|
|
- messages.value[msgIndex].streaming = false;
|
|
|
|
|
|
|
+ liveMsg.streaming = false;
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
|
if (convId) {
|
|
if (convId) {
|
|
|
conversations.value = conversations.value
|
|
conversations.value = conversations.value
|
|
@@ -276,10 +280,10 @@ export function useChat() {
|
|
|
onError: (e) => {
|
|
onError: (e) => {
|
|
|
_streamAbort = null;
|
|
_streamAbort = null;
|
|
|
error.value = e?.message || "erro";
|
|
error.value = e?.message || "erro";
|
|
|
- if (!messages.value[msgIndex].content) {
|
|
|
|
|
- messages.value[msgIndex].content = "Não consegui responder no momento.";
|
|
|
|
|
|
|
+ if (!liveMsg.content) {
|
|
|
|
|
+ liveMsg.content = "Não consegui responder no momento.";
|
|
|
}
|
|
}
|
|
|
- messages.value[msgIndex].streaming = false;
|
|
|
|
|
|
|
+ liveMsg.streaming = false;
|
|
|
loading.value = false;
|
|
loading.value = false;
|
|
|
}
|
|
}
|
|
|
});
|
|
});
|