export function convertChunksToRelevantTextDocuments()

in server/aws-lsp-codewhisperer/src/language-server/chat/tools/relevantTextDocuments.ts [4:53]


export function convertChunksToRelevantTextDocuments(chunks: Chunk[]): RelevantTextDocument[] {
    const filePathSizeLimit = 4_000

    const groupedChunks = chunks.reduce(
        (acc, chunk) => {
            const key = chunk.filePath
            if (!acc[key]) {
                acc[key] = []
            }
            acc[key].push(chunk)
            return acc
        },
        {} as Record<string, Chunk[]>
    )

    return Object.entries(groupedChunks).map(([filePath, fileChunks]) => {
        fileChunks.sort((a, b) => {
            if (a.startLine !== undefined && b.startLine !== undefined) {
                return a.startLine - b.startLine
            }
            return 0
        })

        const firstChunk = fileChunks[0]

        let programmingLanguage
        if (firstChunk.programmingLanguage && firstChunk.programmingLanguage !== 'unknown') {
            programmingLanguage = {
                languageName: firstChunk.programmingLanguage,
            }
        }

        const combinedContent = fileChunks
            .map(chunk => chunk.content)
            .filter(content => content !== undefined && content !== '')
            .join('\n')

        const relevantTextDocument: RelevantTextDocument = {
            relativeFilePath: firstChunk.relativePath
                ? firstChunk.relativePath.substring(0, filePathSizeLimit)
                : undefined,
            programmingLanguage,
            text: combinedContent || undefined,
        }

        return Object.fromEntries(
            Object.entries(relevantTextDocument).filter(([_, value]) => value !== undefined)
        ) as RelevantTextDocument
    })
}