function whichSidesToDisplay()

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 };
}