Download src/components/PromptInput/inputPaste.ts from chenbhao/codev: direct link, hf CLI and curl.
- Browser
- Download file 2.69 kB
-
https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/components/PromptInput/inputPaste.ts
- Command line
-
hf download hf://chenbhao/codev@afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/components/PromptInput/inputPaste.ts
-
curl -L -o inputPaste.ts https://huggingface.co/chenbhao/codev/resolve/afbc7edaae4e6bb0102ba024b49ce8be89d2264c/src/components/PromptInput/inputPaste.ts
2.69 kB
| import { getPastedTextRefNumLines } from 'src/history.js' | |
| import type { PastedContent } from 'src/utils/config.js' | |
| const TRUNCATION_THRESHOLD = 10000 // Characters before we truncate | |
| const PREVIEW_LENGTH = 1000 // Characters to show at start and end | |
| type TruncatedMessage = { | |
| truncatedText: string | |
| placeholderContent: string | |
| } | |
| /** | |
| * Determines whether the input text should be truncated. If so, it adds a | |
| * truncated text placeholder and neturns | |
| * | |
| * @param text The input text | |
| * @param nextPasteId The reference id to use | |
| * @returns The new text to display and separate placeholder content if applicable. | |
| */ | |
| export function maybeTruncateMessageForInput( | |
| text: string, | |
| nextPasteId: number, | |
| ): TruncatedMessage { | |
| // If the text is short enough, return it as-is | |
| if (text.length <= TRUNCATION_THRESHOLD) { | |
| return { | |
| truncatedText: text, | |
| placeholderContent: '', | |
| } | |
| } | |
| // Calculate how much text to keep from start and end | |
| const startLength = Math.floor(PREVIEW_LENGTH / 2) | |
| const endLength = Math.floor(PREVIEW_LENGTH / 2) | |
| // Extract the portions we'll keep | |
| const startText = text.slice(0, startLength) | |
| const endText = text.slice(-endLength) | |
| // Calculate the number of lines that will be truncated | |
| const placeholderContent = text.slice(startLength, -endLength) | |
| const truncatedLines = getPastedTextRefNumLines(placeholderContent) | |
| // Create a placeholder reference similar to pasted text | |
| const placeholderId = nextPasteId | |
| const placeholderRef = formatTruncatedTextRef(placeholderId, truncatedLines) | |
| // Combine the parts with the placeholder | |
| const truncatedText = startText + placeholderRef + endText | |
| return { | |
| truncatedText, | |
| placeholderContent, | |
| } | |
| } | |
| function formatTruncatedTextRef(id: number, numLines: number): string { | |
| return `[...Truncated text #${id} +${numLines} lines...]` | |
| } | |
| export function maybeTruncateInput( | |
| input: string, | |
| pastedContents: Record<number, PastedContent>, | |
| ): { newInput: string; newPastedContents: Record<number, PastedContent> } { | |
| // Get the next available ID for the truncated content | |
| const existingIds = Object.keys(pastedContents).map(Number) | |
| const nextPasteId = existingIds.length > 0 ? Math.max(...existingIds) + 1 : 1 | |
| // Apply truncation | |
| const { truncatedText, placeholderContent } = maybeTruncateMessageForInput( | |
| input, | |
| nextPasteId, | |
| ) | |
| if (!placeholderContent) { | |
| return { newInput: input, newPastedContents: pastedContents } | |
| } | |
| return { | |
| newInput: truncatedText, | |
| newPastedContents: { | |
| ...pastedContents, | |
| [nextPasteId]: { | |
| id: nextPasteId, | |
| type: 'text', | |
| content: placeholderContent, | |
| }, | |
| }, | |
| } | |
| } | |