mirror of
https://github.com/danswer-ai/danswer.git
synced 2025-10-10 13:15:18 +02:00
My docs cleanup (#4519)
* update * improved my docs * nit * nit * k * push changes * update * looking good * k * fix preprocessing * try a fix * k * update * nit * k * quick nits * Cleanup / fixes * Fixes * Fix build * fix * fix quality checks --------- Co-authored-by: Weves <chrisweaver101@gmail.com>
This commit is contained in:
@@ -104,9 +104,7 @@ import {
|
||||
SIDEBAR_TOGGLED_COOKIE_NAME,
|
||||
} from "@/components/resizable/constants";
|
||||
import FixedLogo from "@/components/logo/FixedLogo";
|
||||
|
||||
import ExceptionTraceModal from "@/components/modals/ExceptionTraceModal";
|
||||
|
||||
import { SEARCH_TOOL_ID, SEARCH_TOOL_NAME } from "./tools/constants";
|
||||
import { useUser } from "@/components/user/UserProvider";
|
||||
import { ApiKeyModal } from "@/components/llm/ApiKeyModal";
|
||||
@@ -178,12 +176,10 @@ export function ChatPage({
|
||||
selectedFolders,
|
||||
addSelectedFile,
|
||||
addSelectedFolder,
|
||||
removeSelectedFolder,
|
||||
clearSelectedItems,
|
||||
folders: userFolders,
|
||||
files: allUserFiles,
|
||||
uploadFile,
|
||||
removeSelectedFile,
|
||||
currentMessageFiles,
|
||||
setCurrentMessageFiles,
|
||||
} = useDocumentsContext();
|
||||
@@ -224,7 +220,6 @@ export function ChatPage({
|
||||
const settings = useContext(SettingsContext);
|
||||
const enterpriseSettings = settings?.enterpriseSettings;
|
||||
|
||||
const [viewingFilePicker, setViewingFilePicker] = useState(false);
|
||||
const [toggleDocSelection, setToggleDocSelection] = useState(false);
|
||||
const [documentSidebarVisible, setDocumentSidebarVisible] = useState(false);
|
||||
const [proSearchEnabled, setProSearchEnabled] = useState(proSearchToggled);
|
||||
@@ -706,6 +701,7 @@ export function ChatPage({
|
||||
chatSessionId || currentSessionId(),
|
||||
newCompleteMessageMap
|
||||
);
|
||||
console.log(newCompleteMessageDetail);
|
||||
return newCompleteMessageDetail;
|
||||
};
|
||||
|
||||
@@ -1171,6 +1167,13 @@ export function ChatPage({
|
||||
};
|
||||
}, [autoScrollEnabled, screenHeight, currentSessionHasSentLocalUserMessage]);
|
||||
|
||||
const reset = () => {
|
||||
setMessage("");
|
||||
setCurrentMessageFiles([]);
|
||||
clearSelectedItems();
|
||||
setLoadingError(null);
|
||||
};
|
||||
|
||||
const onSubmit = async ({
|
||||
messageIdToResend,
|
||||
messageOverride,
|
||||
@@ -1201,6 +1204,61 @@ export function ChatPage({
|
||||
// Mark that we've sent a message for this session in the current page load
|
||||
markSessionMessageSent(frozenSessionId);
|
||||
|
||||
// Check if the last message was an error and remove it before proceeding with a new message
|
||||
// Ensure this isn't a regeneration or resend, as those operations should preserve the history leading up to the point of regeneration/resend.
|
||||
let currentMap = currentMessageMap(completeMessageDetail);
|
||||
let currentHistory = buildLatestMessageChain(currentMap);
|
||||
let lastMessage = currentHistory[currentHistory.length - 1];
|
||||
|
||||
if (
|
||||
lastMessage &&
|
||||
lastMessage.type === "error" &&
|
||||
!messageIdToResend &&
|
||||
!regenerationRequest
|
||||
) {
|
||||
const newMap = new Map(currentMap);
|
||||
const parentId = lastMessage.parentMessageId;
|
||||
|
||||
// Remove the error message itself
|
||||
newMap.delete(lastMessage.messageId);
|
||||
|
||||
// Remove the parent message + update the parent of the parent to no longer
|
||||
// link to the parent
|
||||
if (parentId !== null && parentId !== undefined) {
|
||||
const parentOfError = newMap.get(parentId);
|
||||
if (parentOfError) {
|
||||
const grandparentId = parentOfError.parentMessageId;
|
||||
if (grandparentId !== null && grandparentId !== undefined) {
|
||||
const grandparent = newMap.get(grandparentId);
|
||||
if (grandparent) {
|
||||
// Update grandparent to no longer link to parent
|
||||
const updatedGrandparent = {
|
||||
...grandparent,
|
||||
childrenMessageIds: (
|
||||
grandparent.childrenMessageIds || []
|
||||
).filter((id) => id !== parentId),
|
||||
latestChildMessageId:
|
||||
grandparent.latestChildMessageId === parentId
|
||||
? null
|
||||
: grandparent.latestChildMessageId,
|
||||
};
|
||||
newMap.set(grandparentId, updatedGrandparent);
|
||||
}
|
||||
}
|
||||
// Remove the parent message
|
||||
newMap.delete(parentId);
|
||||
}
|
||||
}
|
||||
// Update the state immediately so subsequent logic uses the cleaned map
|
||||
updateCompleteMessageDetail(frozenSessionId, newMap);
|
||||
console.log("Removed previous error message ID:", lastMessage.messageId);
|
||||
|
||||
// update state for the new world (with the error message removed)
|
||||
currentHistory = buildLatestMessageChain(newMap);
|
||||
currentMap = newMap;
|
||||
lastMessage = currentHistory[currentHistory.length - 1];
|
||||
}
|
||||
|
||||
if (currentChatState() != "input") {
|
||||
if (currentChatState() == "uploading") {
|
||||
setPopup({
|
||||
@@ -1270,11 +1328,10 @@ export function ChatPage({
|
||||
currentSessionId()
|
||||
);
|
||||
}
|
||||
const messageMap = currentMessageMap(completeMessageDetail);
|
||||
const messageToResendParent =
|
||||
messageToResend?.parentMessageId !== null &&
|
||||
messageToResend?.parentMessageId !== undefined
|
||||
? messageMap.get(messageToResend.parentMessageId)
|
||||
? currentMap.get(messageToResend.parentMessageId)
|
||||
: null;
|
||||
const messageToResendIndex = messageToResend
|
||||
? messageHistory.indexOf(messageToResend)
|
||||
@@ -1301,15 +1358,15 @@ export function ChatPage({
|
||||
|
||||
const currMessageHistory =
|
||||
messageToResendIndex !== null
|
||||
? messageHistory.slice(0, messageToResendIndex)
|
||||
: messageHistory;
|
||||
? currentHistory.slice(0, messageToResendIndex)
|
||||
: currentHistory;
|
||||
|
||||
let parentMessage =
|
||||
messageToResendParent ||
|
||||
(currMessageHistory.length > 0
|
||||
? currMessageHistory[currMessageHistory.length - 1]
|
||||
: null) ||
|
||||
(messageMap.size === 1 ? Array.from(messageMap.values())[0] : null);
|
||||
(currentMap.size === 1 ? Array.from(currentMap.values())[0] : null);
|
||||
|
||||
let currentAssistantId;
|
||||
if (alternativeAssistantOverride) {
|
||||
@@ -1356,13 +1413,9 @@ export function ChatPage({
|
||||
frozenMessageMap: Map<number, Message>;
|
||||
} = null;
|
||||
try {
|
||||
const mapKeys = Array.from(
|
||||
currentMessageMap(completeMessageDetail).keys()
|
||||
);
|
||||
const systemMessage = Math.min(...mapKeys);
|
||||
|
||||
const mapKeys = Array.from(currentMap.keys());
|
||||
const lastSuccessfulMessageId =
|
||||
getLastSuccessfulMessageId(currMessageHistory) || systemMessage;
|
||||
getLastSuccessfulMessageId(currMessageHistory);
|
||||
|
||||
const stack = new CurrentMessageFIFO();
|
||||
|
||||
@@ -1479,11 +1532,12 @@ export function ChatPage({
|
||||
upsertToCompleteMessageMap({
|
||||
messages: messageUpdates,
|
||||
chatSessionId: currChatSessionId,
|
||||
completeMessageMapOverride: currentMap,
|
||||
});
|
||||
currentMap = currentFrozenMessageMap;
|
||||
|
||||
const frozenMessageMap = currentFrozenMessageMap;
|
||||
initialFetchDetails = {
|
||||
frozenMessageMap,
|
||||
frozenMessageMap: currentMap,
|
||||
assistant_message_id,
|
||||
user_message_id,
|
||||
};
|
||||
@@ -1715,14 +1769,18 @@ export function ChatPage({
|
||||
] as [number, number][])
|
||||
: null;
|
||||
|
||||
return upsertToCompleteMessageMap({
|
||||
const newMessageDetails = upsertToCompleteMessageMap({
|
||||
messages: messages,
|
||||
replacementsMap: replacementsMap,
|
||||
completeMessageMapOverride: frozenMessageMap,
|
||||
// Pass the latest map state
|
||||
completeMessageMapOverride: currentMap,
|
||||
chatSessionId: frozenSessionId!,
|
||||
});
|
||||
currentMap = newMessageDetails.messageMap;
|
||||
return newMessageDetails;
|
||||
};
|
||||
|
||||
const systemMessageId = Math.min(...mapKeys);
|
||||
updateFn([
|
||||
{
|
||||
messageId: regenerationRequest
|
||||
@@ -1732,7 +1790,8 @@ export function ChatPage({
|
||||
type: "user",
|
||||
files: files,
|
||||
toolCall: null,
|
||||
parentMessageId: error ? null : lastSuccessfulMessageId,
|
||||
// in the frontend, every message should have a parent ID
|
||||
parentMessageId: lastSuccessfulMessageId ?? systemMessageId,
|
||||
childrenMessageIds: [
|
||||
...(regenerationRequest?.parentMessage?.childrenMessageIds ||
|
||||
[]),
|
||||
@@ -1786,7 +1845,7 @@ export function ChatPage({
|
||||
} catch (e: any) {
|
||||
console.log("Error:", e);
|
||||
const errorMsg = e.message;
|
||||
upsertToCompleteMessageMap({
|
||||
const newMessageDetails = upsertToCompleteMessageMap({
|
||||
messages: [
|
||||
{
|
||||
messageId:
|
||||
@@ -1809,8 +1868,9 @@ export function ChatPage({
|
||||
initialFetchDetails?.user_message_id || TEMP_USER_MESSAGE_ID,
|
||||
},
|
||||
],
|
||||
completeMessageMapOverride: currentMessageMap(completeMessageDetail),
|
||||
completeMessageMapOverride: currentMap,
|
||||
});
|
||||
currentMap = newMessageDetails.messageMap;
|
||||
}
|
||||
console.log("Finished streaming");
|
||||
setAgenticGenerating(false);
|
||||
@@ -1909,15 +1969,21 @@ export function ChatPage({
|
||||
|
||||
updateChatState("uploading", currentSessionId());
|
||||
|
||||
const [uploadedFiles, error] = await uploadFilesForChat(acceptedFiles);
|
||||
if (error) {
|
||||
setPopup({
|
||||
type: "error",
|
||||
message: error,
|
||||
});
|
||||
}
|
||||
for (let file of acceptedFiles) {
|
||||
const formData = new FormData();
|
||||
formData.append("files", file);
|
||||
const response = await uploadFile(formData, null);
|
||||
|
||||
setCurrentMessageFiles((prev) => [...prev, ...uploadedFiles]);
|
||||
if (response.length > 0) {
|
||||
const uploadedFile = response[0];
|
||||
addSelectedFile(uploadedFile);
|
||||
} else {
|
||||
setPopup({
|
||||
type: "error",
|
||||
message: "Failed to upload file",
|
||||
});
|
||||
}
|
||||
}
|
||||
|
||||
updateChatState("input", currentSessionId());
|
||||
};
|
||||
@@ -2396,7 +2462,7 @@ export function ChatPage({
|
||||
liveAssistant={liveAssistant}
|
||||
setShowAssistantsModal={setShowAssistantsModal}
|
||||
explicitlyUntoggle={explicitlyUntoggle}
|
||||
reset={() => setMessage("")}
|
||||
reset={reset}
|
||||
page="chat"
|
||||
ref={innerSidebarElementRef}
|
||||
toggleSidebar={toggleSidebar}
|
||||
@@ -3294,7 +3360,7 @@ export function ChatPage({
|
||||
: "w-[0px]"
|
||||
}
|
||||
`}
|
||||
></div>
|
||||
/>
|
||||
</div>
|
||||
)}
|
||||
</Dropzone>
|
||||
|
Reference in New Issue
Block a user