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:
pablonyx
2025-04-24 22:20:33 -07:00
committed by GitHub
parent 115cfb6ae9
commit df67ca18d8
58 changed files with 1591 additions and 1568 deletions

View File

@@ -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>