memento-mcp-server 0.1.0 → 1.7.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/INSTALL.en.md +303 -303
- package/INSTALL.md +303 -303
- package/README.en.md +331 -330
- package/README.md +432 -427
- package/dist/algorithms/hybrid-search-engine.d.ts +114 -44
- package/dist/algorithms/hybrid-search-engine.d.ts.map +1 -1
- package/dist/algorithms/hybrid-search-engine.js +261 -235
- package/dist/algorithms/hybrid-search-engine.js.map +1 -1
- package/dist/algorithms/search-engine.d.ts +2 -14
- package/dist/algorithms/search-engine.d.ts.map +1 -1
- package/dist/algorithms/search-engine.js +43 -35
- package/dist/algorithms/search-engine.js.map +1 -1
- package/dist/algorithms/vector-search-engine-migration.d.ts +67 -0
- package/dist/algorithms/vector-search-engine-migration.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-migration.js +196 -0
- package/dist/algorithms/vector-search-engine-migration.js.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts +56 -0
- package/dist/algorithms/vector-search-engine-refactored.d.ts.map +1 -0
- package/dist/algorithms/vector-search-engine-refactored.js +101 -0
- package/dist/algorithms/vector-search-engine-refactored.js.map +1 -0
- package/dist/algorithms/vector-search-engine.d.ts +9 -2
- package/dist/algorithms/vector-search-engine.d.ts.map +1 -1
- package/dist/algorithms/vector-search-engine.js +245 -121
- package/dist/algorithms/vector-search-engine.js.map +1 -1
- package/dist/client/index.d.ts.map +1 -1
- package/dist/client/index.js +34 -11
- package/dist/client/index.js.map +1 -1
- package/dist/config/environment.d.ts +26 -0
- package/dist/config/environment.d.ts.map +1 -0
- package/dist/config/environment.js +103 -0
- package/dist/config/environment.js.map +1 -0
- package/dist/config/index.d.ts.map +1 -1
- package/dist/config/index.js +29 -50
- package/dist/config/index.js.map +1 -1
- package/dist/config/vector-search.config.d.ts +25 -0
- package/dist/config/vector-search.config.d.ts.map +1 -0
- package/dist/config/vector-search.config.js +40 -0
- package/dist/config/vector-search.config.js.map +1 -0
- package/dist/database/init.d.ts.map +1 -1
- package/dist/database/init.js +154 -17
- package/dist/database/init.js.map +1 -1
- package/dist/database/migrate.d.ts +2 -1
- package/dist/database/migrate.d.ts.map +1 -1
- package/dist/database/migrate.js +191 -18
- package/dist/database/migrate.js.map +1 -1
- package/dist/database/schema.sql +234 -159
- package/dist/factories/hybrid-search.factory.d.ts +20 -0
- package/dist/factories/hybrid-search.factory.d.ts.map +1 -0
- package/dist/factories/hybrid-search.factory.js +57 -0
- package/dist/factories/hybrid-search.factory.js.map +1 -0
- package/dist/factories/spaced-repetition.factory.d.ts +48 -0
- package/dist/factories/spaced-repetition.factory.d.ts.map +1 -0
- package/dist/factories/spaced-repetition.factory.js +187 -0
- package/dist/factories/spaced-repetition.factory.js.map +1 -0
- package/dist/factories/vector-search.factory.d.ts +25 -0
- package/dist/factories/vector-search.factory.d.ts.map +1 -0
- package/dist/factories/vector-search.factory.js +47 -0
- package/dist/factories/vector-search.factory.js.map +1 -0
- package/dist/interfaces/database.interface.d.ts +36 -0
- package/dist/interfaces/database.interface.d.ts.map +1 -0
- package/dist/interfaces/database.interface.js +6 -0
- package/dist/interfaces/database.interface.js.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts +63 -0
- package/dist/interfaces/spaced-repetition.interface.d.ts.map +1 -0
- package/dist/interfaces/spaced-repetition.interface.js +6 -0
- package/dist/interfaces/spaced-repetition.interface.js.map +1 -0
- package/dist/repositories/vector-performance.repository.d.ts +25 -0
- package/dist/repositories/vector-performance.repository.d.ts.map +1 -0
- package/dist/repositories/vector-performance.repository.js +134 -0
- package/dist/repositories/vector-performance.repository.js.map +1 -0
- package/dist/repositories/vector-search.repository.d.ts +43 -0
- package/dist/repositories/vector-search.repository.d.ts.map +1 -0
- package/dist/repositories/vector-search.repository.js +377 -0
- package/dist/repositories/vector-search.repository.js.map +1 -0
- package/dist/server/http-server.d.ts.map +1 -1
- package/dist/server/http-server.js +25 -24
- package/dist/server/http-server.js.map +1 -1
- package/dist/server/index.d.ts +1 -0
- package/dist/server/index.d.ts.map +1 -1
- package/dist/server/index.js +3 -1
- package/dist/server/index.js.map +1 -1
- package/dist/services/alert-notification-service.d.ts +16 -0
- package/dist/services/alert-notification-service.d.ts.map +1 -0
- package/dist/services/alert-notification-service.js +44 -0
- package/dist/services/alert-notification-service.js.map +1 -0
- package/dist/services/async-optimizer.d.ts +62 -8
- package/dist/services/async-optimizer.d.ts.map +1 -1
- package/dist/services/async-optimizer.js +137 -8
- package/dist/services/async-optimizer.js.map +1 -1
- package/dist/services/batch-scheduler.d.ts +6 -0
- package/dist/services/batch-scheduler.d.ts.map +1 -1
- package/dist/services/batch-scheduler.js +59 -19
- package/dist/services/batch-scheduler.js.map +1 -1
- package/dist/services/cache-service.d.ts +32 -0
- package/dist/services/cache-service.d.ts.map +1 -1
- package/dist/services/cache-service.js +81 -6
- package/dist/services/cache-service.js.map +1 -1
- package/dist/services/database-optimizer.js +63 -63
- package/dist/services/database-optimizer.js.map +1 -1
- package/dist/services/embedding-migration-service.d.ts +24 -0
- package/dist/services/embedding-migration-service.d.ts.map +1 -0
- package/dist/services/embedding-migration-service.js +360 -0
- package/dist/services/embedding-migration-service.js.map +1 -0
- package/dist/services/embedding-provider-factory.d.ts +12 -5
- package/dist/services/embedding-provider-factory.d.ts.map +1 -1
- package/dist/services/embedding-provider-factory.js +107 -26
- package/dist/services/embedding-provider-factory.js.map +1 -1
- package/dist/services/forgetting-policy-service.js +17 -17
- package/dist/services/gemini-embedding-service.d.ts +1 -1
- package/dist/services/gemini-embedding-service.d.ts.map +1 -1
- package/dist/services/gemini-embedding-service.js +25 -18
- package/dist/services/gemini-embedding-service.js.map +1 -1
- package/dist/services/memory-embedding-service.d.ts +8 -0
- package/dist/services/memory-embedding-service.d.ts.map +1 -1
- package/dist/services/memory-embedding-service.js +180 -71
- package/dist/services/memory-embedding-service.js.map +1 -1
- package/dist/services/migration-history-service.d.ts +14 -0
- package/dist/services/migration-history-service.d.ts.map +1 -0
- package/dist/services/migration-history-service.js +270 -0
- package/dist/services/migration-history-service.js.map +1 -0
- package/dist/services/migration-monitor-service.d.ts +24 -0
- package/dist/services/migration-monitor-service.d.ts.map +1 -0
- package/dist/services/migration-monitor-service.js +93 -0
- package/dist/services/migration-monitor-service.js.map +1 -0
- package/dist/services/model-availability-service.d.ts +22 -0
- package/dist/services/model-availability-service.d.ts.map +1 -0
- package/dist/services/model-availability-service.js +140 -0
- package/dist/services/model-availability-service.js.map +1 -0
- package/dist/services/openai-embedding-service.d.ts +36 -0
- package/dist/services/openai-embedding-service.d.ts.map +1 -0
- package/dist/services/openai-embedding-service.js +192 -0
- package/dist/services/openai-embedding-service.js.map +1 -0
- package/dist/services/performance-monitor.d.ts +154 -10
- package/dist/services/performance-monitor.d.ts.map +1 -1
- package/dist/services/performance-monitor.js +446 -60
- package/dist/services/performance-monitor.js.map +1 -1
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts +38 -0
- package/dist/services/spaced-repetition/interval-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js +105 -0
- package/dist/services/spaced-repetition/interval-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts +56 -0
- package/dist/services/spaced-repetition/optimal-interval.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js +163 -0
- package/dist/services/spaced-repetition/optimal-interval.service.js.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts +48 -0
- package/dist/services/spaced-repetition/performance-analysis.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js +174 -0
- package/dist/services/spaced-repetition/performance-analysis.service.js.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts +53 -0
- package/dist/services/spaced-repetition/priority-calculation.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js +161 -0
- package/dist/services/spaced-repetition/priority-calculation.service.js.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts +36 -0
- package/dist/services/spaced-repetition/recall-probability.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/recall-probability.service.js +88 -0
- package/dist/services/spaced-repetition/recall-probability.service.js.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts +43 -0
- package/dist/services/spaced-repetition/review-scheduling.service.d.ts.map +1 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js +130 -0
- package/dist/services/spaced-repetition/review-scheduling.service.js.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts +69 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.d.ts.map +1 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js +136 -0
- package/dist/services/spaced-repetition/spaced-repetition-container.js.map +1 -0
- package/dist/services/unified-embedding-service.d.ts +3 -0
- package/dist/services/unified-embedding-service.d.ts.map +1 -1
- package/dist/services/unified-embedding-service.js +58 -62
- package/dist/services/unified-embedding-service.js.map +1 -1
- package/dist/services/vector-compatibility-service.d.ts +68 -0
- package/dist/services/vector-compatibility-service.d.ts.map +1 -0
- package/dist/services/vector-compatibility-service.js +373 -0
- package/dist/services/vector-compatibility-service.js.map +1 -0
- package/dist/services/vector-search/vector-index-manager.d.ts +27 -0
- package/dist/services/vector-search/vector-index-manager.d.ts.map +1 -0
- package/dist/services/vector-search/vector-index-manager.js +66 -0
- package/dist/services/vector-search/vector-index-manager.js.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts +30 -0
- package/dist/services/vector-search/vector-performance-tester.d.ts.map +1 -0
- package/dist/services/vector-search/vector-performance-tester.js +87 -0
- package/dist/services/vector-search/vector-performance-tester.js.map +1 -0
- package/dist/services/vector-search/vector-search-container.d.ts +41 -0
- package/dist/services/vector-search/vector-search-container.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-container.js +74 -0
- package/dist/services/vector-search/vector-search-container.js.map +1 -0
- package/dist/services/vector-search/vector-search-facade.d.ts +63 -0
- package/dist/services/vector-search/vector-search-facade.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-facade.js +91 -0
- package/dist/services/vector-search/vector-search-facade.js.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts +6 -0
- package/dist/services/vector-search/vector-search-result-normalizer.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js +65 -0
- package/dist/services/vector-search/vector-search-result-normalizer.js.map +1 -0
- package/dist/services/vector-search/vector-search.service.d.ts +33 -0
- package/dist/services/vector-search/vector-search.service.d.ts.map +1 -0
- package/dist/services/vector-search/vector-search.service.js +149 -0
- package/dist/services/vector-search/vector-search.service.js.map +1 -0
- package/dist/tools/forget-tool.js +14 -14
- package/dist/tools/pin-tool.js +14 -14
- package/dist/tools/unpin-tool.js +21 -21
- package/dist/types/alerts.types.d.ts +26 -0
- package/dist/types/alerts.types.d.ts.map +1 -0
- package/dist/types/alerts.types.js +2 -0
- package/dist/types/alerts.types.js.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts +24 -0
- package/dist/types/embedding-provider-monitoring.types.d.ts.map +1 -0
- package/dist/types/embedding-provider-monitoring.types.js +2 -0
- package/dist/types/embedding-provider-monitoring.types.js.map +1 -0
- package/dist/types/embedding.types.d.ts +36 -1
- package/dist/types/embedding.types.d.ts.map +1 -1
- package/dist/types/migration.types.d.ts +131 -0
- package/dist/types/migration.types.d.ts.map +1 -0
- package/dist/types/migration.types.js +6 -0
- package/dist/types/migration.types.js.map +1 -0
- package/dist/types/spaced-repetition.types.d.ts +61 -0
- package/dist/types/spaced-repetition.types.d.ts.map +1 -0
- package/dist/types/spaced-repetition.types.js +6 -0
- package/dist/types/spaced-repetition.types.js.map +1 -0
- package/dist/types/vector-search.types.d.ts +96 -0
- package/dist/types/vector-search.types.d.ts.map +1 -0
- package/dist/types/vector-search.types.js +2 -0
- package/dist/types/vector-search.types.js.map +1 -0
- package/dist/utils/configuration-validator.d.ts +23 -0
- package/dist/utils/configuration-validator.d.ts.map +1 -0
- package/dist/utils/configuration-validator.js +102 -0
- package/dist/utils/configuration-validator.js.map +1 -0
- package/dist/utils/database.d.ts.map +1 -1
- package/dist/utils/database.js +101 -95
- package/dist/utils/database.js.map +1 -1
- package/dist/utils/environment-check.d.ts +8 -0
- package/dist/utils/environment-check.d.ts.map +1 -0
- package/dist/utils/environment-check.js +25 -0
- package/dist/utils/environment-check.js.map +1 -0
- package/dist/utils/logger.d.ts +8 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +33 -0
- package/dist/utils/logger.js.map +1 -0
- package/package.json +139 -125
- package/scripts/auto-setup.js +234 -234
- package/scripts/backup-daily.bat +28 -28
- package/scripts/backup-embeddings.js +108 -108
- package/scripts/check-db-integrity.js +93 -93
- package/scripts/debug-embeddings.js +184 -184
- package/scripts/direct-sql-migration.sql +36 -36
- package/scripts/docker-migration.sh +105 -105
- package/scripts/fix-migration.js +93 -93
- package/scripts/fix-vector-dimensions.js +206 -206
- package/scripts/migrate-embedding-data.js +307 -307
- package/scripts/regenerate-embeddings.js +144 -144
- package/scripts/restore-legacy.ps1 +60 -60
- package/scripts/run-migration.js +122 -122
- package/scripts/safe-migration.js +150 -150
- package/scripts/simple-migrate.js +41 -41
- package/scripts/simple-update.js +123 -123
- package/src/database/schema.sql +234 -159
- package/.cursor/rules/cache-management.mdc +0 -171
- package/.cursor/rules/database-schema.mdc +0 -344
- package/.cursor/rules/deployment.mdc +0 -596
- package/.cursor/rules/error-logging.mdc +0 -298
- package/.cursor/rules/forgetting-algorithms.mdc +0 -426
- package/.cursor/rules/http-server.mdc +0 -432
- package/.cursor/rules/hybrid-search.mdc +0 -424
- package/.cursor/rules/implementation.mdc +0 -369
- package/.cursor/rules/lightweight-embedding.mdc +0 -178
- package/.cursor/rules/mcp-client-development.mdc +0 -0
- package/.cursor/rules/mcp-server-development.mdc +0 -0
- package/.cursor/rules/mcp-tools-architecture.mdc +0 -205
- package/.cursor/rules/memento-memory-rule.mdc +0 -8
- package/.cursor/rules/memento-project-overview.mdc +0 -0
- package/.cursor/rules/memory-algorithms.mdc +0 -502
- package/.cursor/rules/monitoring.mdc +0 -622
- package/.cursor/rules/performance-alerts.mdc +0 -537
- package/.cursor/rules/performance-monitoring.mdc +0 -345
- package/.cursor/rules/performance-optimization.mdc +0 -563
- package/.cursor/rules/project-structure.mdc +0 -310
- package/.cursor/rules/testing.mdc +0 -473
- package/.dockerignore +0 -15
- package/.eslintrc.json +0 -34
- package/.github/ISSUE_TEMPLATE/bug_report.md +0 -51
- package/.github/ISSUE_TEMPLATE/feature_request.md +0 -45
- package/.github/ISSUE_TEMPLATE/question.md +0 -31
- package/.github/PULL_REQUEST_TEMPLATE.md +0 -97
- package/AGENTS.md +0 -28
- package/CHANGELOG.md +0 -416
- package/CODE_OF_CONDUCT.md +0 -62
- package/CONTRIBUTING.md +0 -165
- package/DOCKER_SETUP_GUIDE.md +0 -84
- package/Dockerfile +0 -90
- package/backup/legacy-removal-20250930-201816/http-server-legacy.ts +0 -1068
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.ps1 +0 -46
- package/backup/legacy-removal-20250930-201816/rollback-to-legacy.sh +0 -48
- package/dist/server/index-backup.d.ts +0 -5
- package/dist/server/index-backup.d.ts.map +0 -1
- package/dist/server/index-backup.js +0 -793
- package/dist/server/index-backup.js.map +0 -1
- package/dist/server/index-refactored.d.ts +0 -6
- package/dist/server/index-refactored.d.ts.map +0 -1
- package/dist/server/index-refactored.js +0 -206
- package/dist/server/index-refactored.js.map +0 -1
- package/dist/services/performance-monitoring-integration.d.ts +0 -77
- package/dist/services/performance-monitoring-integration.d.ts.map +0 -1
- package/dist/services/performance-monitoring-integration.js +0 -177
- package/dist/services/performance-monitoring-integration.js.map +0 -1
- package/dist/test/debug-http-v2.d.ts +0 -5
- package/dist/test/debug-http-v2.d.ts.map +0 -1
- package/dist/test/debug-http-v2.js +0 -28
- package/dist/test/debug-http-v2.js.map +0 -1
- package/dist/test/performance-benchmark.d.ts +0 -57
- package/dist/test/performance-benchmark.d.ts.map +0 -1
- package/dist/test/performance-benchmark.js +0 -427
- package/dist/test/performance-benchmark.js.map +0 -1
- package/dist/test/test-alerts-direct.d.ts +0 -7
- package/dist/test/test-alerts-direct.d.ts.map +0 -1
- package/dist/test/test-alerts-direct.js +0 -101
- package/dist/test/test-alerts-direct.js.map +0 -1
- package/dist/test/test-batch-scheduler.d.ts +0 -2
- package/dist/test/test-batch-scheduler.d.ts.map +0 -1
- package/dist/test/test-batch-scheduler.js +0 -156
- package/dist/test/test-batch-scheduler.js.map +0 -1
- package/dist/test/test-client.d.ts +0 -5
- package/dist/test/test-client.d.ts.map +0 -1
- package/dist/test/test-client.js +0 -86
- package/dist/test/test-client.js.map +0 -1
- package/dist/test/test-embedding.d.ts +0 -6
- package/dist/test/test-embedding.d.ts.map +0 -1
- package/dist/test/test-embedding.js +0 -142
- package/dist/test/test-embedding.js.map +0 -1
- package/dist/test/test-error-logging.d.ts +0 -7
- package/dist/test/test-error-logging.d.ts.map +0 -1
- package/dist/test/test-error-logging.js +0 -105
- package/dist/test/test-error-logging.js.map +0 -1
- package/dist/test/test-forgetting.d.ts +0 -6
- package/dist/test/test-forgetting.d.ts.map +0 -1
- package/dist/test/test-forgetting.js +0 -154
- package/dist/test/test-forgetting.js.map +0 -1
- package/dist/test/test-gemini-embedding.d.ts +0 -7
- package/dist/test/test-gemini-embedding.d.ts.map +0 -1
- package/dist/test/test-gemini-embedding.js +0 -134
- package/dist/test/test-gemini-embedding.js.map +0 -1
- package/dist/test/test-http-server-v2-simple.d.ts +0 -6
- package/dist/test/test-http-server-v2-simple.d.ts.map +0 -1
- package/dist/test/test-http-server-v2-simple.js +0 -131
- package/dist/test/test-http-server-v2-simple.js.map +0 -1
- package/dist/test/test-http-server-v2.d.ts +0 -7
- package/dist/test/test-http-server-v2.d.ts.map +0 -1
- package/dist/test/test-http-server-v2.js +0 -529
- package/dist/test/test-http-server-v2.js.map +0 -1
- package/dist/test/test-lightweight-embedding.d.ts +0 -6
- package/dist/test/test-lightweight-embedding.d.ts.map +0 -1
- package/dist/test/test-lightweight-embedding.js +0 -189
- package/dist/test/test-lightweight-embedding.js.map +0 -1
- package/dist/test/test-m1-completion.d.ts +0 -7
- package/dist/test/test-m1-completion.d.ts.map +0 -1
- package/dist/test/test-m1-completion.js +0 -124
- package/dist/test/test-m1-completion.js.map +0 -1
- package/dist/test/test-memory-injection-prompt.d.ts +0 -2
- package/dist/test/test-memory-injection-prompt.d.ts.map +0 -1
- package/dist/test/test-memory-injection-prompt.js +0 -299
- package/dist/test/test-memory-injection-prompt.js.map +0 -1
- package/dist/test/test-performance-alerts.d.ts +0 -7
- package/dist/test/test-performance-alerts.d.ts.map +0 -1
- package/dist/test/test-performance-alerts.js +0 -109
- package/dist/test/test-performance-alerts.js.map +0 -1
- package/dist/test/test-performance-monitor.d.ts +0 -2
- package/dist/test/test-performance-monitor.d.ts.map +0 -1
- package/dist/test/test-performance-monitor.js +0 -182
- package/dist/test/test-performance-monitor.js.map +0 -1
- package/dist/test/test-performance-monitoring.d.ts +0 -6
- package/dist/test/test-performance-monitoring.d.ts.map +0 -1
- package/dist/test/test-performance-monitoring.js +0 -156
- package/dist/test/test-performance-monitoring.js.map +0 -1
- package/dist/test/test-search.d.ts +0 -5
- package/dist/test/test-search.d.ts.map +0 -1
- package/dist/test/test-search.js +0 -141
- package/dist/test/test-search.js.map +0 -1
- package/dist/test/test-simple-alerts.d.ts +0 -6
- package/dist/test/test-simple-alerts.d.ts.map +0 -1
- package/dist/test/test-simple-alerts.js +0 -106
- package/dist/test/test-simple-alerts.js.map +0 -1
- package/dist/test/test-vector-search-engine.d.ts +0 -2
- package/dist/test/test-vector-search-engine.d.ts.map +0 -1
- package/dist/test/test-vector-search-engine.js +0 -225
- package/dist/test/test-vector-search-engine.js.map +0 -1
- package/docker-compose.dev.yml +0 -50
- package/docker-compose.prod.yml +0 -77
- package/docker-compose.yml +0 -43
- package/docs/en/Memento-Goals.md +0 -217
- package/docs/en/Memento-M1-DetailSpecs.md +0 -130
- package/docs/en/Memento-Milestones.md +0 -135
- package/docs/en/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/en/api-reference.md +0 -658
- package/docs/en/architecture.md +0 -1302
- package/docs/en/developer-guide.md +0 -1005
- package/docs/en/user-manual.md +0 -595
- package/docs/ko/Memento-Goals.md +0 -217
- package/docs/ko/Memento-M1-DetailSpecs.md +0 -130
- package/docs/ko/Memento-Milestones.md +0 -134
- package/docs/ko/Search-Ranking-Memory-Decay-Formulas.md +0 -177
- package/docs/ko/api-reference.md +0 -658
- package/docs/ko/architecture.md +0 -1302
- package/docs/ko/developer-guide.md +0 -1006
- package/docs/ko/embedding-api-reference.md +0 -122
- package/docs/ko/embedding-configuration.md +0 -62
- package/docs/ko/embedding-performance-benchmark.md +0 -62
- package/docs/ko/embedding-service-guide.md +0 -314
- package/docs/ko/user-manual.md +0 -595
- package/env.example +0 -49
- package/install.sh +0 -191
- package/mcp-http-client.js +0 -218
- package/mcp.json +0 -0
- package/packages/mcp-client/docs/API-REFERENCE.md +0 -560
- package/packages/mcp-client/docs/BEST-PRACTICES.md +0 -564
- package/packages/mcp-client/docs/MIGRATION-GUIDE.md +0 -344
- package/packages/mcp-client/docs/PERFORMANCE-GUIDE.md +0 -476
- package/packages/mcp-client/docs/TROUBLESHOOTING.md +0 -564
- package/packages/mcp-client/package-lock.json +0 -907
- package/packages/mcp-client/package.json +0 -58
- package/packages/mcp-client/performance-optimizer.js +0 -428
- package/packages/mcp-client/test-basic.js +0 -65
- package/packages/mcp-client/test-integration.js +0 -366
- package/src/algorithms/forgetting-algorithm.spec.ts +0 -538
- package/src/algorithms/forgetting-algorithm.ts +0 -243
- package/src/algorithms/hybrid-search-engine.spec.ts +0 -484
- package/src/algorithms/hybrid-search-engine.ts +0 -489
- package/src/algorithms/search-engine.spec.ts +0 -429
- package/src/algorithms/search-engine.ts +0 -392
- package/src/algorithms/search-ranking.spec.ts +0 -293
- package/src/algorithms/search-ranking.ts +0 -407
- package/src/algorithms/spaced-repetition.spec.ts +0 -510
- package/src/algorithms/spaced-repetition.ts +0 -238
- package/src/algorithms/vector-search-engine.ts +0 -505
- package/src/client/index.spec.ts +0 -427
- package/src/client/index.ts +0 -222
- package/src/config/index.spec.ts +0 -339
- package/src/config/index.ts +0 -106
- package/src/database/init.spec.ts +0 -239
- package/src/database/init.ts +0 -130
- package/src/database/migrate.spec.ts +0 -293
- package/src/database/migrate.ts +0 -94
- package/src/database/migrations/001_add_embedding_metadata.sql +0 -29
- package/src/npm-client/context-injector.spec.ts +0 -335
- package/src/npm-client/context-injector.ts +0 -412
- package/src/npm-client/index.spec.ts +0 -108
- package/src/npm-client/index.ts +0 -96
- package/src/npm-client/memento-client.spec.ts +0 -549
- package/src/npm-client/memento-client.ts +0 -501
- package/src/npm-client/memory-manager.spec.ts +0 -374
- package/src/npm-client/memory-manager.ts +0 -414
- package/src/npm-client/types.spec.ts +0 -427
- package/src/npm-client/types.ts +0 -296
- package/src/npm-client/utils.spec.ts +0 -355
- package/src/npm-client/utils.ts +0 -423
- package/src/scripts/copy-assets.js +0 -37
- package/src/server/http-server.spec.ts +0 -648
- package/src/server/http-server.ts +0 -1030
- package/src/server/index-backup.ts +0 -875
- package/src/server/index-refactored.ts +0 -237
- package/src/server/index.spec.ts +0 -281
- package/src/server/index.ts +0 -347
- package/src/server/simple-mcp-server.spec.ts +0 -207
- package/src/server/simple-mcp-server.ts +0 -173
- package/src/services/async-optimizer.spec.ts +0 -569
- package/src/services/async-optimizer.ts +0 -484
- package/src/services/batch-scheduler.ts +0 -759
- package/src/services/cache-service.spec.ts +0 -372
- package/src/services/cache-service.ts +0 -434
- package/src/services/database-optimizer.spec.ts +0 -344
- package/src/services/database-optimizer.ts +0 -450
- package/src/services/embedding-provider-factory.ts +0 -173
- package/src/services/embedding-service.spec.ts +0 -342
- package/src/services/embedding-service.ts +0 -333
- package/src/services/error-logging-service.spec.ts +0 -416
- package/src/services/error-logging-service.ts +0 -383
- package/src/services/forgetting-policy-service.spec.ts +0 -140
- package/src/services/forgetting-policy-service.ts +0 -334
- package/src/services/gemini-embedding-service.spec.ts +0 -463
- package/src/services/gemini-embedding-service.ts +0 -283
- package/src/services/lightweight-embedding-service.spec.ts +0 -458
- package/src/services/lightweight-embedding-service.ts +0 -324
- package/src/services/memory-embedding-service.spec.ts +0 -417
- package/src/services/memory-embedding-service.ts +0 -289
- package/src/services/minilm-embedding-service.spec.ts +0 -104
- package/src/services/minilm-embedding-service.ts +0 -262
- package/src/services/performance-alert-service.spec.ts +0 -517
- package/src/services/performance-alert-service.ts +0 -477
- package/src/services/performance-monitor.spec.ts +0 -401
- package/src/services/performance-monitor.ts +0 -532
- package/src/services/performance-monitoring-integration.spec.ts +0 -478
- package/src/services/performance-monitoring-integration.ts.bak +0 -276
- package/src/services/unified-embedding-service.spec.ts +0 -224
- package/src/services/unified-embedding-service.ts +0 -255
- package/src/test/debug-http-v2.ts +0 -30
- package/src/test/embedding-integration-test.spec.ts +0 -295
- package/src/test/embedding-integration-test.ts +0 -295
- package/src/test/embedding-performance-benchmark.spec.ts +0 -354
- package/src/test/embedding-performance-benchmark.ts +0 -312
- package/src/test/performance-benchmark.ts +0 -565
- package/src/test/test-alerts-direct.ts +0 -136
- package/src/test/test-batch-scheduler-simple.spec.ts +0 -122
- package/src/test/test-batch-scheduler.spec.ts +0 -453
- package/src/test/test-batch-scheduler.ts +0 -182
- package/src/test/test-client.ts +0 -97
- package/src/test/test-embedding.ts +0 -153
- package/src/test/test-error-handling.spec.ts +0 -575
- package/src/test/test-error-logging.ts +0 -117
- package/src/test/test-forgetting.ts +0 -162
- package/src/test/test-gemini-embedding.ts +0 -159
- package/src/test/test-http-server-v2-simple.ts +0 -147
- package/src/test/test-http-server-v2.ts +0 -586
- package/src/test/test-hybrid-search-engine.spec.ts +0 -521
- package/src/test/test-integration-fixed.spec.ts +0 -612
- package/src/test/test-integration.spec.ts +0 -463
- package/src/test/test-lightweight-embedding.ts +0 -208
- package/src/test/test-m1-completion.spec.ts +0 -614
- package/src/test/test-m1-completion.ts +0 -141
- package/src/test/test-m1-integration.spec.ts +0 -514
- package/src/test/test-memory-injection-prompt.spec.ts +0 -650
- package/src/test/test-memory-injection-prompt.ts +0 -391
- package/src/test/test-performance-alerts.ts +0 -125
- package/src/test/test-performance-monitor-updates.spec.ts +0 -490
- package/src/test/test-performance-monitor.spec.ts +0 -284
- package/src/test/test-performance-monitor.ts +0 -228
- package/src/test/test-performance-monitoring.ts +0 -171
- package/src/test/test-search.ts +0 -151
- package/src/test/test-simple-alerts.ts +0 -136
- package/src/test/test-vector-search-engine.spec.ts +0 -408
- package/src/test/test-vector-search-engine.ts +0 -303
- package/src/tools/base-tool.ts +0 -189
- package/src/tools/cleanup-memory-tool.ts +0 -77
- package/src/tools/database-optimize-tool.ts +0 -79
- package/src/tools/error-stats.ts +0 -119
- package/src/tools/forget-tool.spec.ts +0 -613
- package/src/tools/forget-tool.ts +0 -454
- package/src/tools/forgetting-stats-tool.ts +0 -47
- package/src/tools/index.ts +0 -71
- package/src/tools/memory-injection-prompt.ts +0 -257
- package/src/tools/performance-alerts.ts +0 -226
- package/src/tools/performance-stats-tool.ts +0 -48
- package/src/tools/pin-tool.spec.ts +0 -497
- package/src/tools/pin-tool.ts +0 -277
- package/src/tools/recall-tool.spec.ts +0 -475
- package/src/tools/recall-tool.ts +0 -389
- package/src/tools/remember-tool.spec.ts +0 -469
- package/src/tools/remember-tool.ts +0 -112
- package/src/tools/resolve-error.ts +0 -69
- package/src/tools/tool-registry.ts +0 -417
- package/src/tools/types.ts +0 -63
- package/src/tools/unpin-tool.spec.ts +0 -549
- package/src/tools/unpin-tool.ts +0 -306
- package/src/types/embedding.types.ts +0 -78
- package/src/types/index.spec.ts +0 -420
- package/src/types/index.ts +0 -117
- package/src/utils/database.spec.ts +0 -77
- package/src/utils/database.ts +0 -458
- package/src/utils/stopwords.ts +0 -128
- package/start-docker-setup.bat +0 -38
- package/static/logo.png +0 -0
- package/static/memento_logo.svg +0 -2
- package/test-docker.js +0 -103
- package/tsconfig.json +0 -46
- package/vitest.config.ts +0 -23
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 성능 테스트 서비스
|
|
3
|
+
* 단일 책임 원칙(SRP) 적용 - 성능 테스트만 담당
|
|
4
|
+
*/
|
|
5
|
+
import { VECTOR_SEARCH_DEFAULTS } from '../../config/vector-search.config';
|
|
6
|
+
export class VectorPerformanceTester {
|
|
7
|
+
repository;
|
|
8
|
+
constructor(repository) {
|
|
9
|
+
this.repository = repository;
|
|
10
|
+
}
|
|
11
|
+
/**
|
|
12
|
+
* 성능 테스트 실행
|
|
13
|
+
*/
|
|
14
|
+
async runPerformanceTest(queryVector, iterations = VECTOR_SEARCH_DEFAULTS.PERFORMANCE_ITERATIONS) {
|
|
15
|
+
this.validateTestParameters(queryVector, iterations);
|
|
16
|
+
try {
|
|
17
|
+
return await this.repository.runPerformanceTest(queryVector, iterations);
|
|
18
|
+
}
|
|
19
|
+
catch (error) {
|
|
20
|
+
console.error('성능 테스트 실패:', error);
|
|
21
|
+
return {
|
|
22
|
+
averageTime: 0,
|
|
23
|
+
minTime: 0,
|
|
24
|
+
maxTime: 0,
|
|
25
|
+
results: 0,
|
|
26
|
+
successRate: 0
|
|
27
|
+
};
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 벡터 차원 검증
|
|
32
|
+
*/
|
|
33
|
+
validateTestParameters(queryVector, iterations) {
|
|
34
|
+
if (!queryVector || queryVector.length !== VECTOR_SEARCH_DEFAULTS.DIMENSIONS) {
|
|
35
|
+
throw new Error(`벡터 차원 불일치: 예상 ${VECTOR_SEARCH_DEFAULTS.DIMENSIONS}, 실제 ${queryVector?.length || 0}`);
|
|
36
|
+
}
|
|
37
|
+
if (iterations < 1 || iterations > 100) {
|
|
38
|
+
throw new Error('반복 횟수는 1-100 사이여야 합니다');
|
|
39
|
+
}
|
|
40
|
+
}
|
|
41
|
+
/**
|
|
42
|
+
* 성능 테스트 결과 분석
|
|
43
|
+
*/
|
|
44
|
+
analyzeResults(result) {
|
|
45
|
+
const recommendations = [];
|
|
46
|
+
let performance = 'good';
|
|
47
|
+
if (result.averageTime < 10) {
|
|
48
|
+
performance = 'excellent';
|
|
49
|
+
}
|
|
50
|
+
else if (result.averageTime < 50) {
|
|
51
|
+
performance = 'good';
|
|
52
|
+
}
|
|
53
|
+
else if (result.averageTime < 100) {
|
|
54
|
+
performance = 'fair';
|
|
55
|
+
recommendations.push('인덱스 최적화를 고려하세요');
|
|
56
|
+
}
|
|
57
|
+
else {
|
|
58
|
+
performance = 'poor';
|
|
59
|
+
recommendations.push('인덱스 재구성이 필요합니다');
|
|
60
|
+
recommendations.push('데이터베이스 성능 튜닝을 고려하세요');
|
|
61
|
+
}
|
|
62
|
+
if (result.successRate < 0.9) {
|
|
63
|
+
recommendations.push('시스템 안정성 검토가 필요합니다');
|
|
64
|
+
}
|
|
65
|
+
return { performance, recommendations };
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 성능 테스트 리포트 생성
|
|
69
|
+
*/
|
|
70
|
+
generateReport(result) {
|
|
71
|
+
const analysis = this.analyzeResults(result);
|
|
72
|
+
return `
|
|
73
|
+
벡터 검색 성능 테스트 리포트
|
|
74
|
+
============================
|
|
75
|
+
평균 응답 시간: ${result.averageTime.toFixed(2)}ms
|
|
76
|
+
최소 응답 시간: ${result.minTime}ms
|
|
77
|
+
최대 응답 시간: ${result.maxTime}ms
|
|
78
|
+
검색 결과 수: ${result.results}개
|
|
79
|
+
성공률: ${(result.successRate * 100).toFixed(1)}%
|
|
80
|
+
성능 등급: ${analysis.performance.toUpperCase()}
|
|
81
|
+
|
|
82
|
+
권장사항:
|
|
83
|
+
${analysis.recommendations.map(rec => `- ${rec}`).join('\n')}
|
|
84
|
+
`.trim();
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
//# sourceMappingURL=vector-performance-tester.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-performance-tester.js","sourceRoot":"","sources":["../../../src/services/vector-search/vector-performance-tester.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 컨테이너
|
|
3
|
+
* 의존성 주입 컨테이너 역할
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { VectorSearchFacade } from './vector-search-facade';
|
|
7
|
+
export declare class VectorSearchContainer {
|
|
8
|
+
private static instance;
|
|
9
|
+
private facade;
|
|
10
|
+
private db;
|
|
11
|
+
private constructor();
|
|
12
|
+
/**
|
|
13
|
+
* 싱글톤 인스턴스 반환
|
|
14
|
+
*/
|
|
15
|
+
static getInstance(): VectorSearchContainer;
|
|
16
|
+
/**
|
|
17
|
+
* 데이터베이스 연결 설정
|
|
18
|
+
*/
|
|
19
|
+
setDatabase(db: Database.Database): void;
|
|
20
|
+
/**
|
|
21
|
+
* 벡터 검색 파사드 반환
|
|
22
|
+
*/
|
|
23
|
+
getFacade(): VectorSearchFacade;
|
|
24
|
+
/**
|
|
25
|
+
* 파사드 생성
|
|
26
|
+
*/
|
|
27
|
+
private createFacade;
|
|
28
|
+
/**
|
|
29
|
+
* 컨테이너 초기화
|
|
30
|
+
*/
|
|
31
|
+
reset(): void;
|
|
32
|
+
/**
|
|
33
|
+
* 데이터베이스 연결 상태 확인
|
|
34
|
+
*/
|
|
35
|
+
isConnected(): boolean;
|
|
36
|
+
/**
|
|
37
|
+
* 파사드 상태 확인
|
|
38
|
+
*/
|
|
39
|
+
isFacadeReady(): boolean;
|
|
40
|
+
}
|
|
41
|
+
//# sourceMappingURL=vector-search-container.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-container.d.ts","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAK5D,qBAAa,qBAAqB;IAChC,OAAO,CAAC,MAAM,CAAC,QAAQ,CAAsC;IAC7D,OAAO,CAAC,MAAM,CAAmC;IACjD,OAAO,CAAC,EAAE,CAAkC;IAE5C,OAAO;IAEP;;OAEG;IACH,MAAM,CAAC,WAAW,IAAI,qBAAqB;IAO3C;;OAEG;IACH,WAAW,CAAC,EAAE,EAAE,QAAQ,CAAC,QAAQ,GAAG,IAAI;IAKxC;;OAEG;IACH,SAAS,IAAI,kBAAkB;IAU/B;;OAEG;IACH,OAAO,CAAC,YAAY;IAepB;;OAEG;IACH,KAAK,IAAI,IAAI;IAKb;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACH,aAAa,IAAI,OAAO;CAGzB"}
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 컨테이너
|
|
3
|
+
* 의존성 주입 컨테이너 역할
|
|
4
|
+
*/
|
|
5
|
+
import Database from 'better-sqlite3';
|
|
6
|
+
import { VectorSearchFacade } from './vector-search-facade';
|
|
7
|
+
import { VectorSearchRepositoryImpl } from '../../repositories/vector-search.repository';
|
|
8
|
+
import { VectorPerformanceRepositoryImpl } from '../../repositories/vector-performance.repository';
|
|
9
|
+
export class VectorSearchContainer {
|
|
10
|
+
static instance = null;
|
|
11
|
+
facade = null;
|
|
12
|
+
db = null;
|
|
13
|
+
constructor() { }
|
|
14
|
+
/**
|
|
15
|
+
* 싱글톤 인스턴스 반환
|
|
16
|
+
*/
|
|
17
|
+
static getInstance() {
|
|
18
|
+
if (!VectorSearchContainer.instance) {
|
|
19
|
+
VectorSearchContainer.instance = new VectorSearchContainer();
|
|
20
|
+
}
|
|
21
|
+
return VectorSearchContainer.instance;
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* 데이터베이스 연결 설정
|
|
25
|
+
*/
|
|
26
|
+
setDatabase(db) {
|
|
27
|
+
this.db = db;
|
|
28
|
+
this.facade = null; // 기존 파사드 무효화
|
|
29
|
+
}
|
|
30
|
+
/**
|
|
31
|
+
* 벡터 검색 파사드 반환
|
|
32
|
+
*/
|
|
33
|
+
getFacade() {
|
|
34
|
+
if (!this.facade) {
|
|
35
|
+
if (!this.db) {
|
|
36
|
+
throw new Error('데이터베이스가 설정되지 않았습니다');
|
|
37
|
+
}
|
|
38
|
+
this.facade = this.createFacade();
|
|
39
|
+
}
|
|
40
|
+
return this.facade;
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 파사드 생성
|
|
44
|
+
*/
|
|
45
|
+
createFacade() {
|
|
46
|
+
if (!this.db) {
|
|
47
|
+
throw new Error('데이터베이스가 설정되지 않았습니다');
|
|
48
|
+
}
|
|
49
|
+
const searchRepository = new VectorSearchRepositoryImpl(this.db);
|
|
50
|
+
const performanceRepository = new VectorPerformanceRepositoryImpl(this.db);
|
|
51
|
+
return new VectorSearchFacade(searchRepository, searchRepository, // 인덱스 리포지토리로 재사용
|
|
52
|
+
performanceRepository);
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 컨테이너 초기화
|
|
56
|
+
*/
|
|
57
|
+
reset() {
|
|
58
|
+
this.facade = null;
|
|
59
|
+
this.db = null;
|
|
60
|
+
}
|
|
61
|
+
/**
|
|
62
|
+
* 데이터베이스 연결 상태 확인
|
|
63
|
+
*/
|
|
64
|
+
isConnected() {
|
|
65
|
+
return this.db !== null;
|
|
66
|
+
}
|
|
67
|
+
/**
|
|
68
|
+
* 파사드 상태 확인
|
|
69
|
+
*/
|
|
70
|
+
isFacadeReady() {
|
|
71
|
+
return this.facade !== null;
|
|
72
|
+
}
|
|
73
|
+
}
|
|
74
|
+
//# sourceMappingURL=vector-search-container.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-container.js","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-container.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,QAAQ,MAAM,gBAAgB,CAAC;AACtC,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,0BAA0B,EAAE,MAAM,6CAA6C,CAAC;AACzF,OAAO,EAAE,+BAA+B,EAAE,MAAM,kDAAkD,CAAC;AAGnG,MAAM,OAAO,qBAAqB;IACxB,MAAM,CAAC,QAAQ,GAAiC,IAAI,CAAC;IACrD,MAAM,GAA8B,IAAI,CAAC;IACzC,EAAE,GAA6B,IAAI,CAAC;IAE5C,gBAAuB,CAAC;IAExB;;OAEG;IACH,MAAM,CAAC,WAAW;QAChB,IAAI,CAAC,qBAAqB,CAAC,QAAQ,EAAE,CAAC;YACpC,qBAAqB,CAAC,QAAQ,GAAG,IAAI,qBAAqB,EAAE,CAAC;QAC/D,CAAC;QACD,OAAO,qBAAqB,CAAC,QAAQ,CAAC;IACxC,CAAC;IAED;;OAEG;IACH,WAAW,CAAC,EAAqB;QAC/B,IAAI,CAAC,EAAE,GAAG,EAAE,CAAC;QACb,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,CAAC,aAAa;IACnC,CAAC;IAED;;OAEG;IACH,SAAS;QACP,IAAI,CAAC,IAAI,CAAC,MAAM,EAAE,CAAC;YACjB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;gBACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;YACxC,CAAC;YACD,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC,YAAY,EAAE,CAAC;QACpC,CAAC;QACD,OAAO,IAAI,CAAC,MAAM,CAAC;IACrB,CAAC;IAED;;OAEG;IACK,YAAY;QAClB,IAAI,CAAC,IAAI,CAAC,EAAE,EAAE,CAAC;YACb,MAAM,IAAI,KAAK,CAAC,oBAAoB,CAAC,CAAC;QACxC,CAAC;QAED,MAAM,gBAAgB,GAAG,IAAI,0BAA0B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QACjE,MAAM,qBAAqB,GAAG,IAAI,+BAA+B,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;QAE3E,OAAO,IAAI,kBAAkB,CAC3B,gBAAgB,EAChB,gBAAgB,EAAE,iBAAiB;QACnC,qBAAqB,CACtB,CAAC;IACJ,CAAC;IAED;;OAEG;IACH,KAAK;QACH,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;QACnB,IAAI,CAAC,EAAE,GAAG,IAAI,CAAC;IACjB,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,EAAE,KAAK,IAAI,CAAC;IAC1B,CAAC;IAED;;OAEG;IACH,aAAa;QACX,OAAO,IAAI,CAAC,MAAM,KAAK,IAAI,CAAC;IAC9B,CAAC"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 파사드
|
|
3
|
+
* 의존성 주입을 통한 통합 인터페이스 제공
|
|
4
|
+
*/
|
|
5
|
+
import type { VectorSearchQuery, VectorSearchResult, VectorIndexStatus, PerformanceTestResult, ProviderHybridQuery, ProviderHybridResult, UnifiedSearchResponse } from '../../types/vector-search.types';
|
|
6
|
+
import type { VectorSearchRepository, VectorIndexRepository, VectorPerformanceRepository } from '../../interfaces/database.interface';
|
|
7
|
+
import { UnifiedEmbeddingService } from '../unified-embedding-service.js';
|
|
8
|
+
export declare class VectorSearchFacade {
|
|
9
|
+
private searchService;
|
|
10
|
+
private indexManager;
|
|
11
|
+
private performanceTester;
|
|
12
|
+
constructor(searchRepository: VectorSearchRepository, indexRepository: VectorIndexRepository, performanceRepository: VectorPerformanceRepository);
|
|
13
|
+
/**
|
|
14
|
+
* 벡터 검색 실행
|
|
15
|
+
*/
|
|
16
|
+
search(query: VectorSearchQuery): Promise<VectorSearchResult[]>;
|
|
17
|
+
/**
|
|
18
|
+
* 하이브리드 검색 실행
|
|
19
|
+
*/
|
|
20
|
+
hybridSearch(query: VectorSearchQuery): Promise<VectorSearchResult[]>;
|
|
21
|
+
providerHybridSearch(query: ProviderHybridQuery, embeddingService: UnifiedEmbeddingService): Promise<ProviderHybridResult[]>;
|
|
22
|
+
unifiedSearch(query: ProviderHybridQuery, embeddingService: UnifiedEmbeddingService): Promise<UnifiedSearchResponse>;
|
|
23
|
+
/**
|
|
24
|
+
* 인덱스 상태 확인
|
|
25
|
+
*/
|
|
26
|
+
getIndexStatus(): VectorIndexStatus;
|
|
27
|
+
/**
|
|
28
|
+
* 인덱스 재구성
|
|
29
|
+
*/
|
|
30
|
+
rebuildIndex(): Promise<boolean>;
|
|
31
|
+
/**
|
|
32
|
+
* VEC 사용 가능 여부 확인
|
|
33
|
+
*/
|
|
34
|
+
isAvailable(): boolean;
|
|
35
|
+
/**
|
|
36
|
+
* 성능 테스트 실행
|
|
37
|
+
*/
|
|
38
|
+
runPerformanceTest(queryVector: number[], iterations?: number): Promise<PerformanceTestResult>;
|
|
39
|
+
/**
|
|
40
|
+
* 성능 테스트 결과 분석
|
|
41
|
+
*/
|
|
42
|
+
analyzePerformance(result: PerformanceTestResult): {
|
|
43
|
+
performance: 'excellent' | 'good' | 'fair' | 'poor';
|
|
44
|
+
recommendations: string[];
|
|
45
|
+
};
|
|
46
|
+
/**
|
|
47
|
+
* 성능 테스트 리포트 생성
|
|
48
|
+
*/
|
|
49
|
+
generatePerformanceReport(result: PerformanceTestResult): string;
|
|
50
|
+
/**
|
|
51
|
+
* 인덱스 상태 요약
|
|
52
|
+
*/
|
|
53
|
+
getStatusSummary(): string;
|
|
54
|
+
/**
|
|
55
|
+
* 전체 시스템 상태 확인
|
|
56
|
+
*/
|
|
57
|
+
getSystemStatus(): {
|
|
58
|
+
available: boolean;
|
|
59
|
+
indexStatus: VectorIndexStatus;
|
|
60
|
+
summary: string;
|
|
61
|
+
};
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=vector-search-facade.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-facade.d.ts","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-facade.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,iBAAiB,EACjB,qBAAqB,EACrB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AAIzC,OAAO,KAAK,EACV,sBAAsB,EACtB,qBAAqB,EACrB,2BAA2B,EAC5B,MAAM,qCAAqC,CAAC;AAC7C,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,qBAAa,kBAAkB;IAC7B,OAAO,CAAC,aAAa,CAAsB;IAC3C,OAAO,CAAC,YAAY,CAAqB;IACzC,OAAO,CAAC,iBAAiB,CAA0B;gBAGjD,gBAAgB,EAAE,sBAAsB,EACxC,eAAe,EAAE,qBAAqB,EACtC,qBAAqB,EAAE,2BAA2B;IAOpD;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIrE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAIrE,oBAAoB,CACxB,KAAK,EAAE,mBAAmB,EAC1B,gBAAgB,EAAE,uBAAuB,GACxC,OAAO,CAAC,oBAAoB,EAAE,CAAC;IAI5B,aAAa,CACjB,KAAK,EAAE,mBAAmB,EAC1B,gBAAgB,EAAE,uBAAuB,GACxC,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;OAEG;IACH,cAAc,IAAI,iBAAiB;IAInC;;OAEG;IACG,YAAY,IAAI,OAAO,CAAC,OAAO,CAAC;IAItC;;OAEG;IACH,WAAW,IAAI,OAAO;IAItB;;OAEG;IACG,kBAAkB,CACtB,WAAW,EAAE,MAAM,EAAE,EACrB,UAAU,GAAE,MAAW,GACtB,OAAO,CAAC,qBAAqB,CAAC;IAIjC;;OAEG;IACH,kBAAkB,CAAC,MAAM,EAAE,qBAAqB,GAAG;QACjD,WAAW,EAAE,WAAW,GAAG,MAAM,GAAG,MAAM,GAAG,MAAM,CAAC;QACpD,eAAe,EAAE,MAAM,EAAE,CAAC;KAC3B;IAID;;OAEG;IACH,yBAAyB,CAAC,MAAM,EAAE,qBAAqB,GAAG,MAAM;IAIhE;;OAEG;IACH,gBAAgB,IAAI,MAAM;IAI1B;;OAEG;IACH,eAAe,IAAI;QACjB,SAAS,EAAE,OAAO,CAAC;QACnB,WAAW,EAAE,iBAAiB,CAAC;QAC/B,OAAO,EAAE,MAAM,CAAC;KACjB;CAUF"}
|
|
@@ -0,0 +1,91 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 파사드
|
|
3
|
+
* 의존성 주입을 통한 통합 인터페이스 제공
|
|
4
|
+
*/
|
|
5
|
+
import { VectorSearchService } from './vector-search.service';
|
|
6
|
+
import { VectorIndexManager } from './vector-index-manager';
|
|
7
|
+
import { VectorPerformanceTester } from './vector-performance-tester';
|
|
8
|
+
import { UnifiedEmbeddingService } from '../unified-embedding-service.js';
|
|
9
|
+
export class VectorSearchFacade {
|
|
10
|
+
searchService;
|
|
11
|
+
indexManager;
|
|
12
|
+
performanceTester;
|
|
13
|
+
constructor(searchRepository, indexRepository, performanceRepository) {
|
|
14
|
+
this.searchService = new VectorSearchService(searchRepository);
|
|
15
|
+
this.indexManager = new VectorIndexManager(indexRepository);
|
|
16
|
+
this.performanceTester = new VectorPerformanceTester(performanceRepository);
|
|
17
|
+
}
|
|
18
|
+
/**
|
|
19
|
+
* 벡터 검색 실행
|
|
20
|
+
*/
|
|
21
|
+
async search(query) {
|
|
22
|
+
return await this.searchService.search(query);
|
|
23
|
+
}
|
|
24
|
+
/**
|
|
25
|
+
* 하이브리드 검색 실행
|
|
26
|
+
*/
|
|
27
|
+
async hybridSearch(query) {
|
|
28
|
+
return await this.searchService.hybridSearch(query);
|
|
29
|
+
}
|
|
30
|
+
async providerHybridSearch(query, embeddingService) {
|
|
31
|
+
return await this.searchService.providerHybridSearch(embeddingService, query);
|
|
32
|
+
}
|
|
33
|
+
async unifiedSearch(query, embeddingService) {
|
|
34
|
+
return await this.searchService.unifiedSearch(embeddingService, query);
|
|
35
|
+
}
|
|
36
|
+
/**
|
|
37
|
+
* 인덱스 상태 확인
|
|
38
|
+
*/
|
|
39
|
+
getIndexStatus() {
|
|
40
|
+
return this.indexManager.getIndexStatus();
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* 인덱스 재구성
|
|
44
|
+
*/
|
|
45
|
+
async rebuildIndex() {
|
|
46
|
+
return await this.indexManager.rebuildIndex();
|
|
47
|
+
}
|
|
48
|
+
/**
|
|
49
|
+
* VEC 사용 가능 여부 확인
|
|
50
|
+
*/
|
|
51
|
+
isAvailable() {
|
|
52
|
+
return this.indexManager.isAvailable();
|
|
53
|
+
}
|
|
54
|
+
/**
|
|
55
|
+
* 성능 테스트 실행
|
|
56
|
+
*/
|
|
57
|
+
async runPerformanceTest(queryVector, iterations = 10) {
|
|
58
|
+
return await this.performanceTester.runPerformanceTest(queryVector, iterations);
|
|
59
|
+
}
|
|
60
|
+
/**
|
|
61
|
+
* 성능 테스트 결과 분석
|
|
62
|
+
*/
|
|
63
|
+
analyzePerformance(result) {
|
|
64
|
+
return this.performanceTester.analyzeResults(result);
|
|
65
|
+
}
|
|
66
|
+
/**
|
|
67
|
+
* 성능 테스트 리포트 생성
|
|
68
|
+
*/
|
|
69
|
+
generatePerformanceReport(result) {
|
|
70
|
+
return this.performanceTester.generateReport(result);
|
|
71
|
+
}
|
|
72
|
+
/**
|
|
73
|
+
* 인덱스 상태 요약
|
|
74
|
+
*/
|
|
75
|
+
getStatusSummary() {
|
|
76
|
+
return this.indexManager.getStatusSummary();
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 전체 시스템 상태 확인
|
|
80
|
+
*/
|
|
81
|
+
getSystemStatus() {
|
|
82
|
+
const indexStatus = this.getIndexStatus();
|
|
83
|
+
const available = this.isAvailable();
|
|
84
|
+
return {
|
|
85
|
+
available,
|
|
86
|
+
indexStatus,
|
|
87
|
+
summary: this.getStatusSummary()
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
}
|
|
91
|
+
//# sourceMappingURL=vector-search-facade.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-facade.js","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-facade.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAWH,OAAO,EAAE,mBAAmB,EAAE,MAAM,yBAAyB,CAAC;AAC9D,OAAO,EAAE,kBAAkB,EAAE,MAAM,wBAAwB,CAAC;AAC5D,OAAO,EAAE,uBAAuB,EAAE,MAAM,6BAA6B,CAAC;AAMtE,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAE1E,MAAM,OAAO,kBAAkB;IACrB,aAAa,CAAsB;IACnC,YAAY,CAAqB;IACjC,iBAAiB,CAA0B;IAEnD,YACE,gBAAwC,EACxC,eAAsC,EACtC,qBAAkD;QAElD,IAAI,CAAC,aAAa,GAAG,IAAI,mBAAmB,CAAC,gBAAgB,CAAC,CAAC;QAC/D,IAAI,CAAC,YAAY,GAAG,IAAI,kBAAkB,CAAC,eAAe,CAAC,CAAC;QAC5D,IAAI,CAAC,iBAAiB,GAAG,IAAI,uBAAuB,CAAC,qBAAqB,CAAC,CAAC;IAC9E,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,MAAM,CAAC,KAAwB;QACnC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,MAAM,CAAC,KAAK,CAAC,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY,CAAC,KAAwB;QACzC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;IACtD,CAAC;IAED,KAAK,CAAC,oBAAoB,CACxB,KAA0B,EAC1B,gBAAyC;QAEzC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,oBAAoB,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IAChF,CAAC;IAED,KAAK,CAAC,aAAa,CACjB,KAA0B,EAC1B,gBAAyC;QAEzC,OAAO,MAAM,IAAI,CAAC,aAAa,CAAC,aAAa,CAAC,gBAAgB,EAAE,KAAK,CAAC,CAAC;IACzE,CAAC;IAED;;OAEG;IACH,cAAc;QACZ,OAAO,IAAI,CAAC,YAAY,CAAC,cAAc,EAAE,CAAC;IAC5C,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,YAAY;QAChB,OAAO,MAAM,IAAI,CAAC,YAAY,CAAC,YAAY,EAAE,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,WAAW;QACT,OAAO,IAAI,CAAC,YAAY,CAAC,WAAW,EAAE,CAAC;IACzC,CAAC;IAED;;OAEG;IACH,KAAK,CAAC,kBAAkB,CACtB,WAAqB,EACrB,aAAqB,EAAE;QAEvB,OAAO,MAAM,IAAI,CAAC,iBAAiB,CAAC,kBAAkB,CAAC,WAAW,EAAE,UAAU,CAAC,CAAC;IAClF,CAAC;IAED;;OAEG;IACH,kBAAkB,CAAC,MAA6B;QAI9C,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,yBAAyB,CAAC,MAA6B;QACrD,OAAO,IAAI,CAAC,iBAAiB,CAAC,cAAc,CAAC,MAAM,CAAC,CAAC;IACvD,CAAC;IAED;;OAEG;IACH,gBAAgB;QACd,OAAO,IAAI,CAAC,YAAY,CAAC,gBAAgB,EAAE,CAAC;IAC9C,CAAC;IAED;;OAEG;IACH,eAAe;QAKb,MAAM,WAAW,GAAG,IAAI,CAAC,cAAc,EAAE,CAAC;QAC1C,MAAM,SAAS,GAAG,IAAI,CAAC,WAAW,EAAE,CAAC;QAErC,OAAO;YACL,SAAS;YACT,WAAW;YACX,OAAO,EAAE,IAAI,CAAC,gBAAgB,EAAE;SACjC,CAAC;IACJ,CAAC;CACF"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
import type { ProviderHybridResult, UnifiedSearchHit } from '../../types/vector-search.types.js';
|
|
2
|
+
export declare class VectorSearchResultNormalizer {
|
|
3
|
+
normalize(providerResults: ProviderHybridResult[]): UnifiedSearchHit[];
|
|
4
|
+
}
|
|
5
|
+
export declare const vectorSearchResultNormalizer: VectorSearchResultNormalizer;
|
|
6
|
+
//# sourceMappingURL=vector-search-result-normalizer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-result-normalizer.d.ts","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-result-normalizer.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EACV,oBAAoB,EACpB,gBAAgB,EACjB,MAAM,oCAAoC,CAAC;AAiC5C,qBAAa,4BAA4B;IACvC,SAAS,CAAC,eAAe,EAAE,oBAAoB,EAAE,GAAG,gBAAgB,EAAE;CA+CvE;AAED,eAAO,MAAM,4BAA4B,8BAAqC,CAAC"}
|
|
@@ -0,0 +1,65 @@
|
|
|
1
|
+
function selectScore(result, hybridResult) {
|
|
2
|
+
if (hybridResult) {
|
|
3
|
+
return {
|
|
4
|
+
score: hybridResult.similarity,
|
|
5
|
+
source: 'hybrid',
|
|
6
|
+
hybridSimilarity: hybridResult.similarity
|
|
7
|
+
};
|
|
8
|
+
}
|
|
9
|
+
return {
|
|
10
|
+
score: result.similarity,
|
|
11
|
+
source: 'vector'
|
|
12
|
+
};
|
|
13
|
+
}
|
|
14
|
+
function computeNormalizationRange(scores) {
|
|
15
|
+
if (scores.length === 0) {
|
|
16
|
+
return { min: 0, max: 1, denom: 1 };
|
|
17
|
+
}
|
|
18
|
+
const min = Math.min(...scores);
|
|
19
|
+
const max = Math.max(...scores);
|
|
20
|
+
const denom = max - min === 0 ? 1 : max - min;
|
|
21
|
+
return { min, max, denom };
|
|
22
|
+
}
|
|
23
|
+
export class VectorSearchResultNormalizer {
|
|
24
|
+
normalize(providerResults) {
|
|
25
|
+
const unifiedMap = new Map();
|
|
26
|
+
for (const providerResult of providerResults) {
|
|
27
|
+
const vectorResults = providerResult.vectorResults ?? [];
|
|
28
|
+
const hybridResults = providerResult.hybridResults ?? [];
|
|
29
|
+
const hybridById = new Map();
|
|
30
|
+
for (const hybrid of hybridResults) {
|
|
31
|
+
hybridById.set(hybrid.memory_id, hybrid);
|
|
32
|
+
}
|
|
33
|
+
const scores = vectorResults.map(result => {
|
|
34
|
+
const hybrid = hybridById.get(result.memory_id);
|
|
35
|
+
return selectScore(result, hybrid).score;
|
|
36
|
+
});
|
|
37
|
+
const { min, denom } = computeNormalizationRange(scores);
|
|
38
|
+
for (const vectorResult of vectorResults) {
|
|
39
|
+
const hybrid = hybridById.get(vectorResult.memory_id);
|
|
40
|
+
const scoreInfo = selectScore(vectorResult, hybrid);
|
|
41
|
+
const normalizedScore = (scoreInfo.score - min) / denom;
|
|
42
|
+
const key = `${vectorResult.memory_id}:${providerResult.provider}`;
|
|
43
|
+
const existing = unifiedMap.get(key);
|
|
44
|
+
if (!existing || normalizedScore > existing.normalizedScore) {
|
|
45
|
+
unifiedMap.set(key, {
|
|
46
|
+
memoryId: vectorResult.memory_id,
|
|
47
|
+
provider: providerResult.provider,
|
|
48
|
+
normalizedScore,
|
|
49
|
+
vectorSimilarity: vectorResult.similarity,
|
|
50
|
+
hybridSimilarity: scoreInfo.hybridSimilarity,
|
|
51
|
+
content: vectorResult.content,
|
|
52
|
+
type: vectorResult.type,
|
|
53
|
+
importance: vectorResult.importance,
|
|
54
|
+
createdAt: vectorResult.created_at,
|
|
55
|
+
tags: vectorResult.tags,
|
|
56
|
+
source: scoreInfo.source
|
|
57
|
+
});
|
|
58
|
+
}
|
|
59
|
+
}
|
|
60
|
+
}
|
|
61
|
+
return Array.from(unifiedMap.values()).sort((a, b) => b.normalizedScore - a.normalizedScore);
|
|
62
|
+
}
|
|
63
|
+
}
|
|
64
|
+
export const vectorSearchResultNormalizer = new VectorSearchResultNormalizer();
|
|
65
|
+
//# sourceMappingURL=vector-search-result-normalizer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search-result-normalizer.js","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search-result-normalizer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 서비스
|
|
3
|
+
* 단일 책임 원칙(SRP) 적용 - 검색 기능만 담당
|
|
4
|
+
*/
|
|
5
|
+
import type { VectorSearchQuery, VectorSearchResult, VectorSearchOptions, ProviderHybridQuery, ProviderHybridResult, UnifiedSearchResponse } from '../../types/vector-search.types';
|
|
6
|
+
import type { VectorSearchRepository } from '../../interfaces/database.interface';
|
|
7
|
+
import { UnifiedEmbeddingService } from '../unified-embedding-service.js';
|
|
8
|
+
export declare class VectorSearchService {
|
|
9
|
+
private repository;
|
|
10
|
+
private config;
|
|
11
|
+
constructor(repository: VectorSearchRepository, config?: import("../../types/vector-search.types").VectorSearchConfig);
|
|
12
|
+
/**
|
|
13
|
+
* 벡터 검색 실행
|
|
14
|
+
*/
|
|
15
|
+
search(query: VectorSearchQuery): Promise<VectorSearchResult[]>;
|
|
16
|
+
/**
|
|
17
|
+
* 하이브리드 검색 실행
|
|
18
|
+
*/
|
|
19
|
+
hybridSearch(query: VectorSearchQuery): Promise<VectorSearchResult[]>;
|
|
20
|
+
providerHybridSearch(embeddingService: UnifiedEmbeddingService, baseQuery: ProviderHybridQuery): Promise<ProviderHybridResult[]>;
|
|
21
|
+
unifiedSearch(embeddingService: UnifiedEmbeddingService, baseQuery: ProviderHybridQuery): Promise<UnifiedSearchResponse>;
|
|
22
|
+
/**
|
|
23
|
+
* 검색 쿼리 유효성 검증
|
|
24
|
+
*/
|
|
25
|
+
private validateQuery;
|
|
26
|
+
private validateProviderHybridQuery;
|
|
27
|
+
private getExpectedDimensions;
|
|
28
|
+
/**
|
|
29
|
+
* 기본 옵션 적용
|
|
30
|
+
*/
|
|
31
|
+
applyDefaultOptions(options: VectorSearchOptions): VectorSearchOptions;
|
|
32
|
+
}
|
|
33
|
+
//# sourceMappingURL=vector-search.service.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"vector-search.service.d.ts","sourceRoot":"","sources":["../../../src/services/vector-search/vector-search.service.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH,OAAO,KAAK,EACV,iBAAiB,EACjB,kBAAkB,EAClB,mBAAmB,EACnB,mBAAmB,EACnB,oBAAoB,EACpB,qBAAqB,EACtB,MAAM,iCAAiC,CAAC;AACzC,OAAO,KAAK,EAAE,sBAAsB,EAAE,MAAM,qCAAqC,CAAC;AAElF,OAAO,EAAE,uBAAuB,EAAE,MAAM,iCAAiC,CAAC;AAI1E,qBAAa,mBAAmB;IAE5B,OAAO,CAAC,UAAU;IAClB,OAAO,CAAC,MAAM;gBADN,UAAU,EAAE,sBAAsB,EAClC,MAAM,+DAAuB;IAGvC;;OAEG;IACG,MAAM,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAUrE;;OAEG;IACG,YAAY,CAAC,KAAK,EAAE,iBAAiB,GAAG,OAAO,CAAC,kBAAkB,EAAE,CAAC;IAUrE,oBAAoB,CACxB,gBAAgB,EAAE,uBAAuB,EACzC,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,oBAAoB,EAAE,CAAC;IA4E5B,aAAa,CACjB,gBAAgB,EAAE,uBAAuB,EACzC,SAAS,EAAE,mBAAmB,GAC7B,OAAO,CAAC,qBAAqB,CAAC;IASjC;;OAEG;IACH,OAAO,CAAC,aAAa;IAWrB,OAAO,CAAC,2BAA2B;IAOnC,OAAO,CAAC,qBAAqB;IAO7B;;OAEG;IACH,mBAAmB,CAAC,OAAO,EAAE,mBAAmB,GAAG,mBAAmB;CASvE"}
|
|
@@ -0,0 +1,149 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 벡터 검색 서비스
|
|
3
|
+
* 단일 책임 원칙(SRP) 적용 - 검색 기능만 담당
|
|
4
|
+
*/
|
|
5
|
+
import { VECTOR_SEARCH_CONFIG } from '../../config/vector-search.config';
|
|
6
|
+
import { UnifiedEmbeddingService } from '../unified-embedding-service.js';
|
|
7
|
+
import { vectorSearchResultNormalizer } from './vector-search-result-normalizer.js';
|
|
8
|
+
export class VectorSearchService {
|
|
9
|
+
repository;
|
|
10
|
+
config;
|
|
11
|
+
constructor(repository, config = VECTOR_SEARCH_CONFIG) {
|
|
12
|
+
this.repository = repository;
|
|
13
|
+
this.config = config;
|
|
14
|
+
}
|
|
15
|
+
/**
|
|
16
|
+
* 벡터 검색 실행
|
|
17
|
+
*/
|
|
18
|
+
async search(query) {
|
|
19
|
+
this.validateQuery(query);
|
|
20
|
+
try {
|
|
21
|
+
return await this.repository.search(query);
|
|
22
|
+
}
|
|
23
|
+
catch (error) {
|
|
24
|
+
throw new Error(`벡터 검색 실패: ${error}`);
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
/**
|
|
28
|
+
* 하이브리드 검색 실행
|
|
29
|
+
*/
|
|
30
|
+
async hybridSearch(query) {
|
|
31
|
+
this.validateQuery(query);
|
|
32
|
+
try {
|
|
33
|
+
return await this.repository.hybridSearch(query);
|
|
34
|
+
}
|
|
35
|
+
catch (error) {
|
|
36
|
+
throw new Error(`하이브리드 검색 실패: ${error}`);
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
async providerHybridSearch(embeddingService, baseQuery) {
|
|
40
|
+
this.validateProviderHybridQuery(baseQuery);
|
|
41
|
+
const providers = new Set();
|
|
42
|
+
if (baseQuery.overrideProviders && baseQuery.overrideProviders.length > 0) {
|
|
43
|
+
baseQuery.overrideProviders.forEach(provider => providers.add(provider));
|
|
44
|
+
}
|
|
45
|
+
else if (baseQuery.useAvailableProviders) {
|
|
46
|
+
embeddingService.getAvailableProviders().forEach(provider => providers.add(provider));
|
|
47
|
+
}
|
|
48
|
+
else if (baseQuery.query.provider) {
|
|
49
|
+
providers.add(baseQuery.query.provider);
|
|
50
|
+
}
|
|
51
|
+
if (providers.size === 0) {
|
|
52
|
+
providers.add('minilm');
|
|
53
|
+
}
|
|
54
|
+
const results = [];
|
|
55
|
+
for (const provider of providers) {
|
|
56
|
+
let providerVector = baseQuery.query.queryVector;
|
|
57
|
+
if (baseQuery.text) {
|
|
58
|
+
const embedding = await embeddingService.generateEmbedding(baseQuery.text, provider);
|
|
59
|
+
if (!embedding || !embedding.embedding) {
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
providerVector = embedding.embedding;
|
|
63
|
+
}
|
|
64
|
+
if (!providerVector || providerVector.length === 0) {
|
|
65
|
+
continue;
|
|
66
|
+
}
|
|
67
|
+
const expectedDimensions = this.getExpectedDimensions(provider);
|
|
68
|
+
if (providerVector.length !== expectedDimensions) {
|
|
69
|
+
continue;
|
|
70
|
+
}
|
|
71
|
+
const providerOptions = {
|
|
72
|
+
...baseQuery.query.options,
|
|
73
|
+
limit: baseQuery.query.options.limit ?? this.config.defaultLimit,
|
|
74
|
+
threshold: baseQuery.query.options.threshold ?? this.config.defaultThreshold
|
|
75
|
+
};
|
|
76
|
+
const providerQuery = {
|
|
77
|
+
...baseQuery.query,
|
|
78
|
+
provider,
|
|
79
|
+
queryVector: providerVector,
|
|
80
|
+
options: providerOptions
|
|
81
|
+
};
|
|
82
|
+
const vectorStart = Date.now();
|
|
83
|
+
const vectorResults = await this.repository.search(providerQuery);
|
|
84
|
+
const vectorLatency = Date.now() - vectorStart;
|
|
85
|
+
const vectorLimit = baseQuery.vectorLimit ?? providerOptions.limit ?? this.config.defaultLimit;
|
|
86
|
+
const topVector = vectorResults.slice(0, vectorLimit);
|
|
87
|
+
let hybridResults = [];
|
|
88
|
+
let hybridLatency;
|
|
89
|
+
if (baseQuery.useHybrid === true) {
|
|
90
|
+
const hybridStart = Date.now();
|
|
91
|
+
hybridResults = await this.repository.hybridSearch(providerQuery);
|
|
92
|
+
hybridLatency = Date.now() - hybridStart;
|
|
93
|
+
}
|
|
94
|
+
results.push({
|
|
95
|
+
provider,
|
|
96
|
+
vectorResults: topVector,
|
|
97
|
+
hybridResults,
|
|
98
|
+
vectorLatencyMs: vectorLatency,
|
|
99
|
+
hybridLatencyMs: hybridLatency
|
|
100
|
+
});
|
|
101
|
+
}
|
|
102
|
+
return results;
|
|
103
|
+
}
|
|
104
|
+
async unifiedSearch(embeddingService, baseQuery) {
|
|
105
|
+
const providerResults = await this.providerHybridSearch(embeddingService, baseQuery);
|
|
106
|
+
const unified = vectorSearchResultNormalizer.normalize(providerResults);
|
|
107
|
+
return {
|
|
108
|
+
providers: providerResults,
|
|
109
|
+
unified
|
|
110
|
+
};
|
|
111
|
+
}
|
|
112
|
+
/**
|
|
113
|
+
* 검색 쿼리 유효성 검증
|
|
114
|
+
*/
|
|
115
|
+
validateQuery(query) {
|
|
116
|
+
const expectedDimensions = this.getExpectedDimensions(query.provider);
|
|
117
|
+
if (!query.queryVector || query.queryVector.length !== expectedDimensions) {
|
|
118
|
+
throw new Error(`벡터 차원 불일치: 예상 ${expectedDimensions}, 실제 ${query.queryVector?.length || 0}`);
|
|
119
|
+
}
|
|
120
|
+
if (query.options.limit && (query.options.limit < 1 || query.options.limit > 100)) {
|
|
121
|
+
throw new Error('검색 제한은 1-100 사이여야 합니다');
|
|
122
|
+
}
|
|
123
|
+
}
|
|
124
|
+
validateProviderHybridQuery(query) {
|
|
125
|
+
if (!query.query) {
|
|
126
|
+
throw new Error('ProviderHybridQuery.query가 필요합니다');
|
|
127
|
+
}
|
|
128
|
+
this.validateQuery(query.query);
|
|
129
|
+
}
|
|
130
|
+
getExpectedDimensions(provider) {
|
|
131
|
+
if (!provider) {
|
|
132
|
+
return this.config.defaultDimensions;
|
|
133
|
+
}
|
|
134
|
+
return this.config.providerDimensions[provider] ?? this.config.defaultDimensions;
|
|
135
|
+
}
|
|
136
|
+
/**
|
|
137
|
+
* 기본 옵션 적용
|
|
138
|
+
*/
|
|
139
|
+
applyDefaultOptions(options) {
|
|
140
|
+
return {
|
|
141
|
+
limit: this.config.defaultLimit,
|
|
142
|
+
threshold: this.config.defaultThreshold,
|
|
143
|
+
includeContent: true,
|
|
144
|
+
includeMetadata: false,
|
|
145
|
+
...options
|
|
146
|
+
};
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
//# sourceMappingURL=vector-search.service.js.map
|