test-vision-pipeline.js 6.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  14. Object.defineProperty(o, "default", { enumerable: true, value: v });
  15. }) : function(o, v) {
  16. o["default"] = v;
  17. });
  18. var __importStar = (this && this.__importStar) || (function () {
  19. var ownKeys = function(o) {
  20. ownKeys = Object.getOwnPropertyNames || function (o) {
  21. var ar = [];
  22. for (var k in o) if (Object.prototype.hasOwnProperty.call(o, k)) ar[ar.length] = k;
  23. return ar;
  24. };
  25. return ownKeys(o);
  26. };
  27. return function (mod) {
  28. if (mod && mod.__esModule) return mod;
  29. var result = {};
  30. if (mod != null) for (var k = ownKeys(mod), i = 0; i < k.length; i++) if (k[i] !== "default") __createBinding(result, mod, k[i]);
  31. __setModuleDefault(result, mod);
  32. return result;
  33. };
  34. })();
  35. Object.defineProperty(exports, "__esModule", { value: true });
  36. exports.testVisionPipeline = testVisionPipeline;
  37. const core_1 = require("@nestjs/core");
  38. const app_module_1 = require("./src/app.module");
  39. const vision_pipeline_service_1 = require("./src/vision-pipeline/vision-pipeline.service");
  40. const libreoffice_service_1 = require("./src/libreoffice/libreoffice.service");
  41. const pdf2image_service_1 = require("./src/pdf2image/pdf2image.service");
  42. const fs = __importStar(require("fs/promises"));
  43. const path = __importStar(require("path"));
  44. async function testVisionPipeline() {
  45. console.log('🚀 开始 Vision Pipeline 端到端测试\n');
  46. const app = await core_1.NestFactory.createApplicationContext(app_module_1.AppModule, {
  47. logger: ['error', 'warn', 'log'],
  48. });
  49. try {
  50. console.log('=== 测试 1: LibreOffice 服务 ===');
  51. const libreOffice = app.get(libreoffice_service_1.LibreOfficeService);
  52. const isHealthy = await libreOffice.healthCheck();
  53. console.log(`LibreOffice 健康检查: ${isHealthy ? '✅ 通过' : '❌ 失败'}`);
  54. if (!isHealthy) {
  55. console.log('⚠️ LibreOffice 服务未运行,跳过后续测试');
  56. return;
  57. }
  58. console.log('\n=== 测试 2: PDF 转图片服务 ===');
  59. const pdf2Image = app.get(pdf2image_service_1.Pdf2ImageService);
  60. const testPdf = '/home/fzxs/workspaces/demo/simple-kb/uploads/file-1766236004300-577549403.pdf';
  61. if (await fs.access(testPdf).then(() => true).catch(() => false)) {
  62. console.log(`测试 PDF: ${path.basename(testPdf)}`);
  63. const result = await pdf2Image.convertToImages(testPdf, {
  64. density: 150,
  65. quality: 75,
  66. format: 'jpeg',
  67. });
  68. console.log(`✅ 转换成功: ${result.images.length}/${result.totalPages} 页`);
  69. console.log(` 成功: ${result.successCount}, 失败: ${result.failedCount}`);
  70. await pdf2Image.cleanupImages(result.images);
  71. console.log('✅ 临时文件已清理');
  72. }
  73. else {
  74. console.log('⚠️ 测试 PDF 文件不存在,跳过此测试');
  75. }
  76. console.log('\n=== 测试 3: Vision Pipeline 完整流程 ===');
  77. const visionPipeline = app.get(vision_pipeline_service_1.VisionPipelineService);
  78. const testFiles = [
  79. '/home/fzxs/workspaces/demo/simple-kb/uploads/file-1766236004300-577549403.pdf',
  80. '/home/fzxs/workspaces/demo/simple-kb/uploads/file-1765705143480-947461268.pdf',
  81. ];
  82. let testFile = null;
  83. for (const file of testFiles) {
  84. if (await fs.access(file).then(() => true).catch(() => false)) {
  85. testFile = file;
  86. break;
  87. }
  88. }
  89. if (testFile) {
  90. console.log(`测试文件: ${path.basename(testFile)}`);
  91. const recommendation = await visionPipeline.recommendMode(testFile);
  92. console.log(`模式推荐: ${recommendation.recommendedMode}`);
  93. console.log(`原因: ${recommendation.reason}`);
  94. if (recommendation.estimatedCost) {
  95. console.log(`预估成本: $${recommendation.estimatedCost.toFixed(2)}`);
  96. }
  97. if (recommendation.estimatedTime) {
  98. console.log(`预估时间: ${recommendation.estimatedTime.toFixed(1)}s`);
  99. }
  100. if (recommendation.warnings && recommendation.warnings.length > 0) {
  101. console.log(`警告: ${recommendation.warnings.join(', ')}`);
  102. }
  103. console.log('\n✅ Vision Pipeline 模块已正确配置');
  104. console.log(' 注意: 完整流程测试需要配置有效的 Vision 模型 API Key');
  105. }
  106. else {
  107. console.log('⚠️ 未找到测试文件,跳过完整流程测试');
  108. }
  109. console.log('\n=== 测试 4: 环境配置检查 ===');
  110. const configService = app.get(require('@nestjs/config').ConfigService);
  111. const requiredEnvVars = [
  112. 'LIBREOFFICE_URL',
  113. 'TEMP_DIR',
  114. 'ELASTICSEARCH_HOST',
  115. 'TIKA_HOST',
  116. ];
  117. for (const envVar of requiredEnvVars) {
  118. const value = configService.get(envVar);
  119. if (value) {
  120. console.log(`✅ ${envVar}: ${value}`);
  121. }
  122. else {
  123. console.log(`❌ ${envVar}: 未配置`);
  124. }
  125. }
  126. console.log('\n🎉 所有基础测试完成!');
  127. }
  128. catch (error) {
  129. console.error('❌ 测试失败:', error.message);
  130. console.error(error.stack);
  131. }
  132. finally {
  133. await app.close();
  134. }
  135. }
  136. if (require.main === module) {
  137. testVisionPipeline().catch(console.error);
  138. }
  139. //# sourceMappingURL=test-vision-pipeline.js.map