in neuron_viewer/src/TransformerDebugger/cards/node_table/TopTokensDisplay.tsx [30:65]
function whichSidesToDisplay(
leftSideData: TopTokens | null,
rightSideData: TopTokens | null,
maxTokens?: number
): { displayLeftSide: boolean; displayRightSide: boolean } {
// Display both sides unless all the tokens are the same. If they are the same, then show the side
// with larger magnitude on the first token (to avoid showing a side with all 0s)
let displayLeftSide = leftSideData !== null;
let displayRightSide = rightSideData !== null;
if (leftSideData && rightSideData) {
const leftTopToken = leftSideData.top[0];
const rightTopToken = rightSideData.top[0];
if (Math.abs(leftTopToken.scalar) <= 0.01) {
return { displayLeftSide: false, displayRightSide: true };
}
if (Math.abs(rightTopToken.scalar) <= 0.01) {
return { displayLeftSide: true, displayRightSide: false };
}
const leftTopTokens = leftSideData.top.slice(0, maxTokens).map((token) => token.token);
const rightTopTokens = rightSideData.top.slice(0, maxTokens).map((token) => token.token);
const leftBottomTokens = leftSideData.bottom.slice(0, maxTokens).map((token) => token.token);
const rightBottomTokens = rightSideData.bottom.slice(0, maxTokens).map((token) => token.token);
const topTokensAreEqual =
leftTopTokens.length === rightTopTokens.length &&
leftTopTokens.every((token, index) => token === rightTopTokens[index]);
const bottomTokensAreEqual =
leftBottomTokens.length === rightBottomTokens.length &&
leftBottomTokens.every((token, index) => token === rightBottomTokens[index]);
if (topTokensAreEqual && bottomTokensAreEqual) {
displayLeftSide = Math.abs(leftTopToken.scalar) > Math.abs(rightTopToken.scalar);
displayRightSide = !displayLeftSide;
}
return { displayLeftSide, displayRightSide };
}
return { displayLeftSide, displayRightSide };
}