@lobehub/chat
Version:
Lobe Chat - an open-source, high-performance chatbot framework that supports speech synthesis, multimodal, and extensible Function Call plugin system. Supports one-click free deployment of your private ChatGPT/LLM web application.
66 lines (59 loc) • 2.17 kB
text/typescript
import debug from 'debug';
import { readFile } from 'node:fs/promises';
import type { DocumentPage, FileLoaderInterface } from '../../types';
const log = debug('file-loaders:text');
/**
* 用于加载纯文本文件的加载器。
*/
export class TextLoader implements FileLoaderInterface {
async loadPages(filePath: string): Promise<DocumentPage[]> {
log('Loading text file:', filePath);
try {
const fileContent = await readFile(filePath, 'utf8');
log('Text file loaded successfully, size:', fileContent.length, 'bytes');
const lines = fileContent.split('\n');
const lineCount = lines.length;
const charCount = fileContent.length;
log('Text file stats:', { charCount, lineCount });
const page: DocumentPage = {
charCount,
lineCount,
metadata: {
lineNumberEnd: lineCount,
lineNumberStart: 1,
},
pageContent: fileContent,
};
log('Text page created successfully');
return [page];
} catch (e) {
const error = e as Error;
log('Error encountered while loading text file');
console.error(`Error loading text file ${filePath}: ${error.message}`);
// 如果读取失败,返回一个包含错误信息的 Page
const errorPage: DocumentPage = {
charCount: 0,
lineCount: 0,
metadata: {
error: `Failed to load text file: ${error.message}`,
},
pageContent: '',
};
log('Created error page for failed text file loading');
return [errorPage];
}
}
/**
* 对于纯文本,简单地连接所有页面的内容。
* (虽然 TextLoader 通常只有一个页面,但保持接口一致性)
* @param pages 页面数组
* @returns 聚合后的内容
*/
async aggregateContent(pages: DocumentPage[]): Promise<string> {
log('Aggregating content from', pages.length, 'text pages');
// 默认使用换行符连接,可以根据需要调整或使其可配置
const result = pages.map((page) => page.pageContent).join('\n');
log('Content aggregated successfully, length:', result.length);
return result;
}
}