@ai.ntellect/core 0.8.3 → 1.1.0
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/.mocharc.json +2 -1
- package/AGENTS.md +50 -0
- package/ARCHITECTURE.md +58 -0
- package/BENCHMARK.md +38 -0
- package/CHANGELOG.md +224 -0
- package/README.md +413 -199
- package/agent/agent-workflow.ts +569 -0
- package/agent/agent.ts +183 -0
- package/{modules/agent → agent}/base/executor.ts +11 -8
- package/{modules/agent → agent}/base/index.ts +2 -14
- package/agent/entity-resolver/confidence.ts +54 -0
- package/agent/entity-resolver/entity-index.ts +241 -0
- package/agent/entity-resolver/explore-strategy.ts +82 -0
- package/agent/entity-resolver/index.ts +22 -0
- package/agent/entity-resolver/resolver.ts +193 -0
- package/agent/entity-resolver/scorer.ts +211 -0
- package/agent/entity-resolver/types.ts +98 -0
- package/agent/generic-executor.ts +713 -0
- package/agent/handlers/cognitive-handler.ts +197 -0
- package/agent/handlers/index.ts +1 -0
- package/agent/handoff.ts +58 -0
- package/agent/llm-factory.ts +343 -0
- package/agent/orchestrator.ts +45 -0
- package/{modules/agent → agent}/prompt-builder.ts +1 -1
- package/agent/registry.ts +64 -0
- package/agent/tools/file-system.ts +471 -0
- package/agent/tools/index.ts +23 -0
- package/agent/tools/logger.ts +105 -0
- package/agent/tools/tool-resolver.ts +104 -0
- package/benchmark/cortexflow-workflow.ts +182 -0
- package/benchmark/langgraph-workflow.ts +201 -0
- package/benchmark/llm-client.ts +76 -0
- package/benchmark/run-benchmark.ts +222 -0
- package/cli-dev.ts +419 -0
- package/dist/agent/agent-workflow.d.ts +41 -0
- package/dist/agent/agent-workflow.d.ts.map +1 -0
- package/dist/agent/agent-workflow.js +560 -0
- package/dist/agent/agent-workflow.js.map +1 -0
- package/dist/agent/agent.d.ts +38 -0
- package/dist/agent/agent.d.ts.map +1 -0
- package/dist/agent/agent.js +149 -0
- package/dist/agent/agent.js.map +1 -0
- package/dist/{modules/agent → agent}/base/executor.d.ts +3 -3
- package/dist/agent/base/executor.d.ts.map +1 -0
- package/dist/{modules/agent → agent}/base/executor.js +8 -5
- package/dist/agent/base/executor.js.map +1 -0
- package/dist/{modules/agent → agent}/base/index.d.ts +1 -1
- package/dist/agent/base/index.d.ts.map +1 -0
- package/dist/{modules/agent → agent}/base/index.js +0 -12
- package/dist/agent/base/index.js.map +1 -0
- package/dist/agent/entity-resolver/confidence.d.ts +4 -0
- package/dist/agent/entity-resolver/confidence.d.ts.map +1 -0
- package/dist/agent/entity-resolver/confidence.js +47 -0
- package/dist/agent/entity-resolver/confidence.js.map +1 -0
- package/dist/agent/entity-resolver/entity-index.d.ts +40 -0
- package/dist/agent/entity-resolver/entity-index.d.ts.map +1 -0
- package/dist/agent/entity-resolver/entity-index.js +244 -0
- package/dist/agent/entity-resolver/entity-index.js.map +1 -0
- package/dist/agent/entity-resolver/explore-strategy.d.ts +13 -0
- package/dist/agent/entity-resolver/explore-strategy.d.ts.map +1 -0
- package/dist/agent/entity-resolver/explore-strategy.js +109 -0
- package/dist/agent/entity-resolver/explore-strategy.js.map +1 -0
- package/dist/agent/entity-resolver/index.d.ts +8 -0
- package/dist/agent/entity-resolver/index.d.ts.map +1 -0
- package/dist/agent/entity-resolver/index.js +16 -0
- package/dist/agent/entity-resolver/index.js.map +1 -0
- package/dist/agent/entity-resolver/resolver.d.ts +18 -0
- package/dist/agent/entity-resolver/resolver.d.ts.map +1 -0
- package/dist/agent/entity-resolver/resolver.js +158 -0
- package/dist/agent/entity-resolver/resolver.js.map +1 -0
- package/dist/agent/entity-resolver/scorer.d.ts +3 -0
- package/dist/agent/entity-resolver/scorer.d.ts.map +1 -0
- package/dist/agent/entity-resolver/scorer.js +182 -0
- package/dist/agent/entity-resolver/scorer.js.map +1 -0
- package/dist/agent/entity-resolver/types.d.ts +89 -0
- package/dist/agent/entity-resolver/types.d.ts.map +1 -0
- package/dist/agent/entity-resolver/types.js +3 -0
- package/dist/agent/entity-resolver/types.js.map +1 -0
- package/dist/{modules/agent → agent}/generic-executor.d.ts +37 -27
- package/dist/agent/generic-executor.d.ts.map +1 -0
- package/dist/agent/generic-executor.js +620 -0
- package/dist/agent/generic-executor.js.map +1 -0
- package/dist/agent/handlers/cognitive-handler.d.ts +44 -0
- package/dist/agent/handlers/cognitive-handler.d.ts.map +1 -0
- package/dist/agent/handlers/cognitive-handler.js +172 -0
- package/dist/agent/handlers/cognitive-handler.js.map +1 -0
- package/dist/agent/handlers/index.d.ts +2 -0
- package/dist/agent/handlers/index.d.ts.map +1 -0
- package/dist/agent/handlers/index.js +7 -0
- package/dist/agent/handlers/index.js.map +1 -0
- package/dist/agent/handoff.d.ts +12 -0
- package/dist/agent/handoff.d.ts.map +1 -0
- package/dist/agent/handoff.js +62 -0
- package/dist/agent/handoff.js.map +1 -0
- package/dist/agent/llm-factory.d.ts.map +1 -0
- package/dist/agent/llm-factory.js +297 -0
- package/dist/agent/llm-factory.js.map +1 -0
- package/dist/agent/orchestrator.d.ts +18 -0
- package/dist/agent/orchestrator.d.ts.map +1 -0
- package/dist/agent/orchestrator.js +44 -0
- package/dist/agent/orchestrator.js.map +1 -0
- package/dist/{modules/agent → agent}/prompt-builder.d.ts +1 -1
- package/dist/agent/prompt-builder.d.ts.map +1 -0
- package/dist/agent/prompt-builder.js.map +1 -0
- package/dist/agent/registry.d.ts +19 -0
- package/dist/agent/registry.d.ts.map +1 -0
- package/dist/agent/registry.js +48 -0
- package/dist/agent/registry.js.map +1 -0
- package/dist/agent/tools/file-system.d.ts +11 -0
- package/dist/agent/tools/file-system.d.ts.map +1 -0
- package/dist/agent/tools/file-system.js +528 -0
- package/dist/agent/tools/file-system.js.map +1 -0
- package/dist/agent/tools/index.d.ts +4 -0
- package/dist/agent/tools/index.d.ts.map +1 -0
- package/dist/agent/tools/index.js +20 -0
- package/dist/agent/tools/index.js.map +1 -0
- package/dist/agent/tools/logger.d.ts +33 -0
- package/dist/agent/tools/logger.d.ts.map +1 -0
- package/dist/agent/tools/logger.js +86 -0
- package/dist/agent/tools/logger.js.map +1 -0
- package/dist/agent/tools/tool-resolver.d.ts +7 -0
- package/dist/agent/tools/tool-resolver.d.ts.map +1 -0
- package/dist/agent/tools/tool-resolver.js +122 -0
- package/dist/agent/tools/tool-resolver.js.map +1 -0
- package/dist/execution/adapters/in-memory-checkpoint.d.ts +11 -0
- package/dist/execution/adapters/in-memory-checkpoint.d.ts.map +1 -0
- package/dist/execution/adapters/in-memory-checkpoint.js +54 -0
- package/dist/execution/adapters/in-memory-checkpoint.js.map +1 -0
- package/dist/execution/compiler.d.ts +8 -0
- package/dist/execution/compiler.d.ts.map +1 -0
- package/dist/execution/compiler.js +50 -0
- package/dist/execution/compiler.js.map +1 -0
- package/dist/execution/controller.d.ts.map +1 -0
- package/dist/execution/controller.js.map +1 -0
- package/dist/execution/event-manager.d.ts +29 -0
- package/dist/execution/event-manager.d.ts.map +1 -0
- package/dist/{graph → execution}/event-manager.js +4 -114
- package/dist/execution/event-manager.js.map +1 -0
- package/dist/{graph → execution}/index.d.ts +50 -2
- package/dist/execution/index.d.ts.map +1 -0
- package/dist/execution/index.js +638 -0
- package/dist/execution/index.js.map +1 -0
- package/dist/execution/logger.d.ts.map +1 -0
- package/dist/execution/logger.js.map +1 -0
- package/dist/{graph → execution}/node.d.ts +6 -1
- package/dist/execution/node.d.ts.map +1 -0
- package/dist/{graph → execution}/node.js +83 -10
- package/dist/execution/node.js.map +1 -0
- package/dist/execution/observer.d.ts.map +1 -0
- package/dist/execution/observer.js.map +1 -0
- package/dist/execution/planner.d.ts +14 -0
- package/dist/execution/planner.d.ts.map +1 -0
- package/dist/execution/planner.js +43 -0
- package/dist/execution/planner.js.map +1 -0
- package/dist/execution/reducer.d.ts +19 -0
- package/dist/execution/reducer.d.ts.map +1 -0
- package/dist/execution/reducer.js +61 -0
- package/dist/execution/reducer.js.map +1 -0
- package/dist/execution/registry.d.ts +38 -0
- package/dist/execution/registry.d.ts.map +1 -0
- package/dist/execution/registry.js +63 -0
- package/dist/execution/registry.js.map +1 -0
- package/dist/execution/send-api.d.ts +24 -0
- package/dist/execution/send-api.d.ts.map +1 -0
- package/dist/execution/send-api.js +52 -0
- package/dist/execution/send-api.js.map +1 -0
- package/dist/execution/types.parallel.d.ts +61 -0
- package/dist/execution/types.parallel.d.ts.map +1 -0
- package/dist/execution/types.parallel.js +3 -0
- package/dist/execution/types.parallel.js.map +1 -0
- package/dist/execution/visualizer.d.ts.map +1 -0
- package/dist/execution/visualizer.js.map +1 -0
- package/dist/index.d.ts +27 -8
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +42 -8
- package/dist/index.js.map +1 -1
- package/dist/interfaces/index.d.ts +32 -1
- package/dist/interfaces/index.d.ts.map +1 -1
- package/dist/interfaces/index.js.map +1 -1
- package/dist/modules/cli/index.d.ts +13 -0
- package/dist/modules/cli/index.d.ts.map +1 -0
- package/dist/modules/cli/index.js +672 -0
- package/dist/modules/cli/index.js.map +1 -0
- package/dist/modules/nlp/engine.d.ts.map +1 -1
- package/dist/modules/nlp/engine.js +0 -1
- package/dist/modules/nlp/engine.js.map +1 -1
- package/dist/persistence/index.d.ts +12 -0
- package/dist/persistence/index.d.ts.map +1 -0
- package/dist/persistence/index.js +24 -0
- package/dist/persistence/index.js.map +1 -0
- package/dist/persistence/neo4j/driver.d.ts +26 -0
- package/dist/persistence/neo4j/driver.d.ts.map +1 -0
- package/dist/persistence/neo4j/driver.js +64 -0
- package/dist/persistence/neo4j/driver.js.map +1 -0
- package/dist/persistence/neo4j/entity-store.d.ts +15 -0
- package/dist/persistence/neo4j/entity-store.d.ts.map +1 -0
- package/dist/persistence/neo4j/entity-store.js +136 -0
- package/dist/persistence/neo4j/entity-store.js.map +1 -0
- package/dist/persistence/neo4j/execution-tracer.d.ts +19 -0
- package/dist/persistence/neo4j/execution-tracer.d.ts.map +1 -0
- package/dist/persistence/neo4j/execution-tracer.js +166 -0
- package/dist/persistence/neo4j/execution-tracer.js.map +1 -0
- package/dist/persistence/neo4j/memory-adapter.d.ts +35 -0
- package/dist/persistence/neo4j/memory-adapter.d.ts.map +1 -0
- package/dist/persistence/neo4j/memory-adapter.js +252 -0
- package/dist/persistence/neo4j/memory-adapter.js.map +1 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts +22 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.d.ts.map +1 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.js +141 -0
- package/dist/persistence/neo4j/petri-checkpoint-adapter.js.map +1 -0
- package/dist/pipeline/agent-pipeline.d.ts +99 -0
- package/dist/pipeline/agent-pipeline.d.ts.map +1 -0
- package/dist/pipeline/agent-pipeline.js +356 -0
- package/dist/pipeline/agent-pipeline.js.map +1 -0
- package/dist/routing/checkpoint-adapter.d.ts +30 -0
- package/dist/routing/checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/checkpoint-adapter.js +83 -0
- package/dist/routing/checkpoint-adapter.js.map +1 -0
- package/dist/routing/documentation-generator.d.ts +47 -0
- package/dist/routing/documentation-generator.d.ts.map +1 -0
- package/dist/routing/documentation-generator.js +320 -0
- package/dist/routing/documentation-generator.js.map +1 -0
- package/dist/routing/index.d.ts +38 -0
- package/dist/routing/index.d.ts.map +1 -0
- package/dist/routing/index.js +375 -0
- package/dist/routing/index.js.map +1 -0
- package/dist/routing/intent-classifier.d.ts +206 -0
- package/dist/routing/intent-classifier.d.ts.map +1 -0
- package/dist/routing/intent-classifier.js +267 -0
- package/dist/routing/intent-classifier.js.map +1 -0
- package/dist/routing/matrix.d.ts +6 -0
- package/dist/routing/matrix.d.ts.map +1 -0
- package/dist/routing/matrix.js +131 -0
- package/dist/routing/matrix.js.map +1 -0
- package/dist/routing/orchestrator.d.ts +87 -0
- package/dist/routing/orchestrator.d.ts.map +1 -0
- package/dist/routing/orchestrator.js +425 -0
- package/dist/routing/orchestrator.js.map +1 -0
- package/dist/routing/postgres-checkpoint-adapter.d.ts +32 -0
- package/dist/routing/postgres-checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/postgres-checkpoint-adapter.js +167 -0
- package/dist/routing/postgres-checkpoint-adapter.js.map +1 -0
- package/dist/routing/redis-checkpoint-adapter.d.ts +34 -0
- package/dist/routing/redis-checkpoint-adapter.d.ts.map +1 -0
- package/dist/routing/redis-checkpoint-adapter.js +170 -0
- package/dist/routing/redis-checkpoint-adapter.js.map +1 -0
- package/dist/routing/types.d.ts +49 -0
- package/dist/routing/types.d.ts.map +1 -0
- package/dist/routing/types.js +3 -0
- package/dist/routing/types.js.map +1 -0
- package/dist/types/agent.d.ts +144 -88
- package/dist/types/agent.d.ts.map +1 -1
- package/dist/types/agent.js +49 -0
- package/dist/types/agent.js.map +1 -1
- package/dist/types/index.d.ts +46 -4
- package/dist/types/index.d.ts.map +1 -1
- package/dist/utils/generate-action-schema.d.ts +2 -3
- package/dist/utils/generate-action-schema.d.ts.map +1 -1
- package/dist/utils/generate-action-schema.js +3 -1
- package/dist/utils/generate-action-schema.js.map +1 -1
- package/dist/utils/logger.d.ts +27 -0
- package/dist/utils/logger.d.ts.map +1 -0
- package/dist/utils/logger.js +45 -0
- package/dist/utils/logger.js.map +1 -0
- package/docs/.gitbook/assets/image (1).png +0 -0
- package/docs/.gitbook/assets/image (2).png +0 -0
- package/docs/.gitbook/assets/image (3).png +0 -0
- package/docs/.gitbook/assets/image (4).png +0 -0
- package/docs/.gitbook/assets/image (5).png +0 -0
- package/docs/.gitbook/assets/image (6).png +0 -0
- package/docs/.gitbook/assets/image.png +0 -0
- package/docs/README.md +57 -0
- package/docs/SUMMARY.md +34 -0
- package/docs/cas-dusages.md +69 -0
- package/docs/cli/README.md +65 -0
- package/docs/concepts-cles.md +50 -0
- package/docs/core/architecture.md +87 -0
- package/docs/core/benchmark.md +59 -0
- package/docs/core/checkpoint.md +72 -0
- package/docs/core/documentation.md +55 -0
- package/docs/core/graphcontroller.md +63 -0
- package/docs/core/graphflow.md +137 -0
- package/docs/core/introduction.md +41 -0
- package/docs/core/les-evenements.md +95 -0
- package/docs/modules/agenda/README.md +63 -0
- package/docs/modules/agenda/interface-iagenda.md +170 -0
- package/docs/modules/agenda/les-adaptateurs/README.md +237 -0
- package/docs/modules/agenda/les-adaptateurs/nodecronadapter.md +91 -0
- package/docs/modules/introduction.md +55 -0
- package/docs/modules/les-adaptateurs.md +52 -0
- package/docs/modules/memoire/README.md +68 -0
- package/docs/modules/memoire/interface-imemory.md +183 -0
- package/docs/modules/memoire/les-adaptateurs/README.md +209 -0
- package/docs/modules/memoire/les-adaptateurs/inmemoryadapter.md +110 -0
- package/docs/modules/memoire/les-adaptateurs/meilisearchadapter.md +147 -0
- package/docs/modules/memoire/les-adaptateurs/redisadapter.md +212 -0
- package/docs/modules/nlp/README.md +44 -0
- package/docs/philosophie.md +51 -0
- package/docs/tutoriels/ajouter-des-conditions.md +150 -0
- package/docs/tutoriels/branching.md +194 -0
- package/docs/tutoriels/checkpoint-usage.md +99 -0
- package/docs/tutoriels/creer-agent-onchain.md +1041 -0
- package/docs/tutoriels/creer-un-agent.md +108 -0
- package/docs/tutoriels/creer-un-graphe-simple.md +92 -0
- package/docs/tutoriels/gerer-les-erreurs.md +124 -0
- package/docs/tutoriels/pour-commencer.md +73 -0
- package/docs/tutoriels/retry.md +166 -0
- package/execution/adapters/in-memory-checkpoint.ts +35 -0
- package/execution/compiler.ts +47 -0
- package/{graph → execution}/event-manager.ts +4 -117
- package/{graph → execution}/index.ts +376 -8
- package/{graph → execution}/node.ts +116 -12
- package/execution/planner.ts +40 -0
- package/execution/reducer.ts +73 -0
- package/execution/registry.ts +86 -0
- package/execution/send-api.ts +58 -0
- package/execution/types.parallel.ts +81 -0
- package/index.ts +35 -8
- package/interfaces/index.ts +37 -0
- package/modules/cli/index.ts +580 -0
- package/modules/nlp/engine.ts +0 -1
- package/package.json +50 -16
- package/persistence/index.ts +27 -0
- package/persistence/neo4j/driver.ts +34 -0
- package/persistence/neo4j/entity-store.ts +141 -0
- package/persistence/neo4j/execution-tracer.ts +194 -0
- package/persistence/neo4j/memory-adapter.ts +281 -0
- package/persistence/neo4j/petri-checkpoint-adapter.ts +153 -0
- package/pipeline/agent-pipeline.ts +426 -0
- package/routing/checkpoint-adapter.ts +79 -0
- package/routing/documentation-generator.ts +358 -0
- package/routing/index.ts +459 -0
- package/routing/intent-classifier.ts +360 -0
- package/routing/matrix.ts +138 -0
- package/routing/orchestrator.ts +498 -0
- package/routing/patterns/data-extraction.json +79 -0
- package/routing/patterns/human-approval.json +64 -0
- package/routing/patterns/rag-search.json +68 -0
- package/routing/postgres-checkpoint-adapter.ts +172 -0
- package/routing/redis-checkpoint-adapter.ts +187 -0
- package/routing/types.ts +59 -0
- package/routing/web-server.ts +260 -0
- package/scripts/generate-petri-docs.ts +70 -0
- package/scripts/get-gmail-token.js +65 -0
- package/scripts/get-gmail-token.ts +65 -0
- package/test/agent/agent.test.ts +92 -0
- package/test/agent/clone.test.ts +143 -0
- package/test/agent/cognitive-handler.test.ts +78 -0
- package/test/agent/entity-store.test.ts +80 -0
- package/test/agent/generic-executor.test.ts +230 -0
- package/test/agent/handoff.test.ts +163 -0
- package/test/agent/llm-factory.test.ts +40 -0
- package/test/agent/orchestrator.test.ts +156 -0
- package/test/agent/registry.test.ts +97 -0
- package/test/agent/tools.test.ts +267 -0
- package/test/execution/checkpoint.test.ts +811 -0
- package/test/{graph → execution}/controller.test.ts +2 -2
- package/test/{graph → execution}/event-manager.test.ts +1 -1
- package/test/{graph → execution}/index.test.ts +24 -15
- package/test/{graph → execution}/node.test.ts +3 -3
- package/test/{graph → execution}/observer.test.ts +2 -2
- package/test/execution/parallel.test.ts +135 -0
- package/test/execution/plan-llm-integration.test.ts +290 -0
- package/test/execution/plan-real-onchain.test.ts +226 -0
- package/test/execution/send-api.test.ts +121 -0
- package/test/modules/cli/index.test.ts +125 -0
- package/test/persistence/neo4j-execution-tracer.test.ts +96 -0
- package/test/persistence/neo4j-memory-adapter.test.ts +107 -0
- package/test/persistence/neo4j-petri-checkpoint.test.ts +89 -0
- package/test/pipeline/agent-pipeline.test.ts +118 -0
- package/test/routing/checkpoint-persistence.test.ts +58 -0
- package/test/routing/documentation-generator.test.ts +76 -0
- package/test/routing/integration.test.ts +261 -0
- package/test/routing/intent-classifier.test.ts +102 -0
- package/test/routing/petri.test.ts +156 -0
- package/test/routing/real-llm.test.ts +260 -0
- package/test-petri-features.ts +218 -0
- package/test-pipeline-api.ts +163 -0
- package/tsconfig.json +5 -2
- package/types/agent.ts +126 -4
- package/types/index.ts +66 -5
- package/utils/generate-action-schema.ts +5 -4
- package/utils/logger.ts +40 -0
- package/dist/graph/controller.d.ts.map +0 -1
- package/dist/graph/controller.js.map +0 -1
- package/dist/graph/event-manager.d.ts +0 -101
- package/dist/graph/event-manager.d.ts.map +0 -1
- package/dist/graph/event-manager.js.map +0 -1
- package/dist/graph/index.d.ts.map +0 -1
- package/dist/graph/index.js +0 -340
- package/dist/graph/index.js.map +0 -1
- package/dist/graph/logger.d.ts.map +0 -1
- package/dist/graph/logger.js.map +0 -1
- package/dist/graph/node.d.ts.map +0 -1
- package/dist/graph/node.js.map +0 -1
- package/dist/graph/observer.d.ts.map +0 -1
- package/dist/graph/observer.js.map +0 -1
- package/dist/graph/visualizer.d.ts.map +0 -1
- package/dist/graph/visualizer.js.map +0 -1
- package/dist/modules/agent/agent.d.ts +0 -35
- package/dist/modules/agent/agent.d.ts.map +0 -1
- package/dist/modules/agent/agent.js +0 -103
- package/dist/modules/agent/agent.js.map +0 -1
- package/dist/modules/agent/base/executor.d.ts.map +0 -1
- package/dist/modules/agent/base/executor.js.map +0 -1
- package/dist/modules/agent/base/index.d.ts.map +0 -1
- package/dist/modules/agent/base/index.js.map +0 -1
- package/dist/modules/agent/generic-assistant.d.ts +0 -20
- package/dist/modules/agent/generic-assistant.d.ts.map +0 -1
- package/dist/modules/agent/generic-assistant.js +0 -89
- package/dist/modules/agent/generic-assistant.js.map +0 -1
- package/dist/modules/agent/generic-executor.d.ts.map +0 -1
- package/dist/modules/agent/generic-executor.js +0 -189
- package/dist/modules/agent/generic-executor.js.map +0 -1
- package/dist/modules/agent/llm-factory.d.ts.map +0 -1
- package/dist/modules/agent/llm-factory.js +0 -56
- package/dist/modules/agent/llm-factory.js.map +0 -1
- package/dist/modules/agent/prompt-builder.d.ts.map +0 -1
- package/dist/modules/agent/prompt-builder.js.map +0 -1
- package/dist/modules/memory/adapters/in-memory/index.d.ts +0 -120
- package/dist/modules/memory/adapters/in-memory/index.d.ts.map +0 -1
- package/dist/modules/memory/adapters/in-memory/index.js +0 -212
- package/dist/modules/memory/adapters/in-memory/index.js.map +0 -1
- package/dist/modules/memory/adapters/meilisearch/index.d.ts +0 -110
- package/dist/modules/memory/adapters/meilisearch/index.d.ts.map +0 -1
- package/dist/modules/memory/adapters/meilisearch/index.js +0 -324
- package/dist/modules/memory/adapters/meilisearch/index.js.map +0 -1
- package/dist/modules/memory/adapters/redis/index.d.ts +0 -82
- package/dist/modules/memory/adapters/redis/index.d.ts.map +0 -1
- package/dist/modules/memory/adapters/redis/index.js +0 -160
- package/dist/modules/memory/adapters/redis/index.js.map +0 -1
- package/dist/modules/memory/index.d.ts +0 -67
- package/dist/modules/memory/index.d.ts.map +0 -1
- package/dist/modules/memory/index.js +0 -104
- package/dist/modules/memory/index.js.map +0 -1
- package/modules/agent/agent.ts +0 -107
- package/modules/agent/generic-assistant.ts +0 -92
- package/modules/agent/generic-executor.ts +0 -252
- package/modules/agent/llm-factory.ts +0 -47
- package/modules/memory/adapters/in-memory/index.ts +0 -208
- package/modules/memory/adapters/meilisearch/index.ts +0 -364
- package/modules/memory/adapters/redis/index.ts +0 -165
- package/modules/memory/index.ts +0 -93
- package/test/modules/memory/adapters/in-memory.test.ts +0 -153
- package/test/modules/memory/adapters/meilisearch.test.ts +0 -287
- package/test/modules/memory/base.test.ts +0 -230
- /package/dist/{modules/agent → agent}/llm-factory.d.ts +0 -0
- /package/dist/{modules/agent → agent}/prompt-builder.js +0 -0
- /package/dist/{graph → execution}/controller.d.ts +0 -0
- /package/dist/{graph → execution}/controller.js +0 -0
- /package/dist/{graph → execution}/logger.d.ts +0 -0
- /package/dist/{graph → execution}/logger.js +0 -0
- /package/dist/{graph → execution}/observer.d.ts +0 -0
- /package/dist/{graph → execution}/observer.js +0 -0
- /package/dist/{graph → execution}/visualizer.d.ts +0 -0
- /package/dist/{graph → execution}/visualizer.js +0 -0
- /package/{graph → execution}/controller.ts +0 -0
- /package/{graph → execution}/logger.ts +0 -0
- /package/{graph → execution}/observer.ts +0 -0
- /package/{graph → execution}/visualizer.ts +0 -0
|
@@ -1,165 +0,0 @@
|
|
|
1
|
-
import { createClient } from "redis";
|
|
2
|
-
import { IMemoryAdapter } from "../../../../interfaces";
|
|
3
|
-
import { BaseMemoryType, CreateMemoryInput } from "../../../../types";
|
|
4
|
-
|
|
5
|
-
/**
|
|
6
|
-
* @module RedisAdapter
|
|
7
|
-
* @description Adapter implementation for Redis as a memory storage solution.
|
|
8
|
-
* Provides integration with Redis for storing and retrieving memory entries with TTL support.
|
|
9
|
-
* @implements {IMemoryAdapter}
|
|
10
|
-
*/
|
|
11
|
-
export class RedisAdapter implements IMemoryAdapter {
|
|
12
|
-
private redis;
|
|
13
|
-
private readonly cachePrefix: string;
|
|
14
|
-
private readonly cacheTTL: number;
|
|
15
|
-
|
|
16
|
-
/**
|
|
17
|
-
* Creates an instance of RedisAdapter
|
|
18
|
-
* @param {string} redisUrl - Redis connection URL
|
|
19
|
-
* @param {Object} options - Configuration options
|
|
20
|
-
* @param {string} [options.cachePrefix="memory:"] - Prefix for Redis keys
|
|
21
|
-
* @param {number} [options.cacheTTL=3600] - Default TTL in seconds
|
|
22
|
-
*/
|
|
23
|
-
constructor(
|
|
24
|
-
private readonly redisUrl: string,
|
|
25
|
-
options: {
|
|
26
|
-
cachePrefix?: string;
|
|
27
|
-
cacheTTL?: number;
|
|
28
|
-
}
|
|
29
|
-
) {
|
|
30
|
-
this.cachePrefix = options.cachePrefix || "memory:";
|
|
31
|
-
this.cacheTTL = options.cacheTTL || 3600;
|
|
32
|
-
this.redis = createClient({
|
|
33
|
-
url: redisUrl,
|
|
34
|
-
socket: {
|
|
35
|
-
tls: true,
|
|
36
|
-
rejectUnauthorized: true,
|
|
37
|
-
},
|
|
38
|
-
});
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
/**
|
|
42
|
-
* Initializes the Redis connection
|
|
43
|
-
* @param {string} roomId - Room identifier
|
|
44
|
-
* @returns {Promise<void>}
|
|
45
|
-
*/
|
|
46
|
-
async init(roomId: string): Promise<void> {
|
|
47
|
-
this.redis.on("error", (err) => console.error("Redis Client Error:", err));
|
|
48
|
-
await this.redis.connect();
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
/**
|
|
52
|
-
* Creates a new memory entry in Redis
|
|
53
|
-
* @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
|
|
54
|
-
* @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
|
|
55
|
-
*/
|
|
56
|
-
async createMemory(
|
|
57
|
-
input: CreateMemoryInput & { embedding?: number[] }
|
|
58
|
-
): Promise<BaseMemoryType | undefined> {
|
|
59
|
-
const memory: BaseMemoryType = {
|
|
60
|
-
id: input.id || crypto.randomUUID(),
|
|
61
|
-
content: input.content,
|
|
62
|
-
metadata: input.metadata,
|
|
63
|
-
embedding: input.embedding,
|
|
64
|
-
roomId: input.roomId,
|
|
65
|
-
createdAt: new Date(),
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
const key = memory.roomId
|
|
69
|
-
? `${this.cachePrefix}${memory.roomId}:${memory.id}`
|
|
70
|
-
: `${this.cachePrefix}${memory.id}`;
|
|
71
|
-
|
|
72
|
-
await this.redis.set(key, JSON.stringify(memory), {
|
|
73
|
-
EX: this.cacheTTL,
|
|
74
|
-
});
|
|
75
|
-
|
|
76
|
-
return memory;
|
|
77
|
-
}
|
|
78
|
-
|
|
79
|
-
/**
|
|
80
|
-
* Retrieves a memory by ID and room ID from Redis
|
|
81
|
-
* @param {string} id - Memory identifier
|
|
82
|
-
* @param {string} roomId - Room identifier
|
|
83
|
-
* @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
|
|
84
|
-
*/
|
|
85
|
-
async getMemoryById(
|
|
86
|
-
id: string,
|
|
87
|
-
roomId: string
|
|
88
|
-
): Promise<BaseMemoryType | null> {
|
|
89
|
-
const key = `${this.cachePrefix}${roomId}:${id}`;
|
|
90
|
-
const data = await this.redis.get(key);
|
|
91
|
-
return data ? JSON.parse(data) : null;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
/**
|
|
95
|
-
* Searches for memories in Redis based on pattern matching
|
|
96
|
-
* @param {string} query - Search query
|
|
97
|
-
* @param {Object} options - Search options
|
|
98
|
-
* @param {string} options.roomId - Room identifier
|
|
99
|
-
* @param {number} [options.limit] - Maximum number of results
|
|
100
|
-
* @returns {Promise<BaseMemoryType[]>} Array of matching memories
|
|
101
|
-
*/
|
|
102
|
-
async getMemoryByIndex(
|
|
103
|
-
query: string,
|
|
104
|
-
options: { roomId: string; limit?: number }
|
|
105
|
-
): Promise<BaseMemoryType[]> {
|
|
106
|
-
const pattern = `${this.cachePrefix}${options.roomId}:*`;
|
|
107
|
-
const keys = await this.redis.keys(pattern);
|
|
108
|
-
const memories = await Promise.all(
|
|
109
|
-
keys.map(async (key) => {
|
|
110
|
-
const data = await this.redis.get(key);
|
|
111
|
-
return data ? JSON.parse(data) : null;
|
|
112
|
-
})
|
|
113
|
-
);
|
|
114
|
-
return memories.filter(Boolean).slice(0, options.limit || 10);
|
|
115
|
-
}
|
|
116
|
-
|
|
117
|
-
/**
|
|
118
|
-
* Retrieves all memories for a room from Redis
|
|
119
|
-
* @param {string} roomId - Room identifier
|
|
120
|
-
* @returns {Promise<BaseMemoryType[]>} Array of all memories
|
|
121
|
-
*/
|
|
122
|
-
async getAllMemories(roomId: string): Promise<BaseMemoryType[]> {
|
|
123
|
-
const pattern = `${this.cachePrefix}${roomId}:*`;
|
|
124
|
-
const keys = await this.redis.keys(pattern);
|
|
125
|
-
const memories = await Promise.all(
|
|
126
|
-
keys.map(async (key) => {
|
|
127
|
-
const data = await this.redis.get(key);
|
|
128
|
-
return data ? JSON.parse(data) : null;
|
|
129
|
-
})
|
|
130
|
-
);
|
|
131
|
-
return memories.filter(Boolean);
|
|
132
|
-
}
|
|
133
|
-
|
|
134
|
-
/**
|
|
135
|
-
* Deletes a specific memory from Redis
|
|
136
|
-
* @param {string} id - Memory identifier
|
|
137
|
-
* @param {string} roomId - Room identifier
|
|
138
|
-
* @returns {Promise<void>}
|
|
139
|
-
*/
|
|
140
|
-
async clearMemoryById(id: string, roomId: string): Promise<void> {
|
|
141
|
-
const key = `${this.cachePrefix}${roomId}:${id}`;
|
|
142
|
-
await this.redis.del(key);
|
|
143
|
-
}
|
|
144
|
-
|
|
145
|
-
/**
|
|
146
|
-
* Clears all memories across all rooms from Redis
|
|
147
|
-
* @returns {Promise<void>}
|
|
148
|
-
*/
|
|
149
|
-
async clearAllMemories(): Promise<void> {
|
|
150
|
-
const keys = await this.redis.keys(`${this.cachePrefix}*`);
|
|
151
|
-
if (keys.length > 0) {
|
|
152
|
-
await this.redis.del(keys);
|
|
153
|
-
}
|
|
154
|
-
}
|
|
155
|
-
|
|
156
|
-
/**
|
|
157
|
-
* Closes the Redis connection
|
|
158
|
-
* @returns {Promise<void>}
|
|
159
|
-
*/
|
|
160
|
-
async quit(): Promise<void> {
|
|
161
|
-
if (this.redis) {
|
|
162
|
-
await this.redis.quit();
|
|
163
|
-
}
|
|
164
|
-
}
|
|
165
|
-
}
|
package/modules/memory/index.ts
DELETED
|
@@ -1,93 +0,0 @@
|
|
|
1
|
-
import { BaseMemory, IMemoryAdapter } from "../../interfaces";
|
|
2
|
-
import { BaseMemoryType, CreateMemoryInput } from "../../types";
|
|
3
|
-
|
|
4
|
-
/**
|
|
5
|
-
* @module Memory
|
|
6
|
-
* @description A module for managing memory storage and retrieval operations.
|
|
7
|
-
* Implements the BaseMemory abstract class and provides concrete implementations
|
|
8
|
-
* for memory-related operations using the provided adapter.
|
|
9
|
-
* @extends {BaseMemory}
|
|
10
|
-
*/
|
|
11
|
-
export class Memory extends BaseMemory {
|
|
12
|
-
/**
|
|
13
|
-
* Creates an instance of Memory
|
|
14
|
-
* @param {IMemoryAdapter} adapter - The memory adapter implementation to use
|
|
15
|
-
*/
|
|
16
|
-
constructor(adapter: IMemoryAdapter) {
|
|
17
|
-
super(adapter);
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
/**
|
|
21
|
-
* Initializes the memory module with default room
|
|
22
|
-
* @returns {Promise<void>}
|
|
23
|
-
*/
|
|
24
|
-
async init(): Promise<void> {
|
|
25
|
-
await this.adapter.init("default");
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
/**
|
|
29
|
-
* Creates a new memory entry
|
|
30
|
-
* @param {CreateMemoryInput & { embedding?: number[] }} input - Memory data with optional embedding
|
|
31
|
-
* @returns {Promise<BaseMemoryType | undefined>} Created memory or undefined
|
|
32
|
-
*/
|
|
33
|
-
async createMemory(
|
|
34
|
-
input: CreateMemoryInput & { embedding?: number[] }
|
|
35
|
-
): Promise<BaseMemoryType | undefined> {
|
|
36
|
-
return this.adapter.createMemory(input);
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* Retrieves a memory by ID and room ID
|
|
41
|
-
* @param {string} id - Memory identifier
|
|
42
|
-
* @param {string} roomId - Room identifier
|
|
43
|
-
* @returns {Promise<BaseMemoryType | null>} Memory entry or null if not found
|
|
44
|
-
*/
|
|
45
|
-
async getMemoryById(
|
|
46
|
-
id: string,
|
|
47
|
-
roomId: string
|
|
48
|
-
): Promise<BaseMemoryType | null> {
|
|
49
|
-
return this.adapter.getMemoryById(id, roomId);
|
|
50
|
-
}
|
|
51
|
-
|
|
52
|
-
/**
|
|
53
|
-
* Searches for memories based on query and options
|
|
54
|
-
* @param {string} query - Search query
|
|
55
|
-
* @param {Object} options - Search options
|
|
56
|
-
* @param {string} options.roomId - Room identifier
|
|
57
|
-
* @param {number} [options.limit] - Maximum number of results to return
|
|
58
|
-
* @returns {Promise<BaseMemoryType[]>} Array of matching memories
|
|
59
|
-
*/
|
|
60
|
-
async getMemoryByIndex(
|
|
61
|
-
query: string,
|
|
62
|
-
options: { roomId: string; limit?: number }
|
|
63
|
-
): Promise<BaseMemoryType[]> {
|
|
64
|
-
return this.adapter.getMemoryByIndex(query, options);
|
|
65
|
-
}
|
|
66
|
-
|
|
67
|
-
/**
|
|
68
|
-
* Retrieves all memories for a specific room
|
|
69
|
-
* @param {string} roomId - Room identifier
|
|
70
|
-
* @returns {Promise<BaseMemoryType[]>} Array of all memories in the room
|
|
71
|
-
*/
|
|
72
|
-
async getAllMemories(roomId: string): Promise<BaseMemoryType[]> {
|
|
73
|
-
return this.adapter.getAllMemories(roomId);
|
|
74
|
-
}
|
|
75
|
-
|
|
76
|
-
/**
|
|
77
|
-
* Deletes a specific memory
|
|
78
|
-
* @param {string} id - Memory identifier
|
|
79
|
-
* @param {string} roomId - Room identifier
|
|
80
|
-
* @returns {Promise<void>}
|
|
81
|
-
*/
|
|
82
|
-
async clearMemoryById(id: string, roomId: string): Promise<void> {
|
|
83
|
-
await this.adapter.clearMemoryById(id, roomId);
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
/**
|
|
87
|
-
* Clears all memories across all rooms
|
|
88
|
-
* @returns {Promise<void>}
|
|
89
|
-
*/
|
|
90
|
-
async clearAllMemories(): Promise<void> {
|
|
91
|
-
await this.adapter.clearAllMemories();
|
|
92
|
-
}
|
|
93
|
-
}
|
|
@@ -1,153 +0,0 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import { InMemoryAdapter } from "../../../../modules/memory/adapters/in-memory";
|
|
3
|
-
import { BaseMemoryType } from "../../../../types";
|
|
4
|
-
|
|
5
|
-
describe("InMemoryAdapter", () => {
|
|
6
|
-
let inMemoryAdapter: InMemoryAdapter;
|
|
7
|
-
const fixedDate = new Date("2025-01-30T07:43:50.626Z");
|
|
8
|
-
const TEST_ROOM_ID = "test-room";
|
|
9
|
-
|
|
10
|
-
const testMemory: BaseMemoryType = {
|
|
11
|
-
id: "test-id",
|
|
12
|
-
data: "test data",
|
|
13
|
-
roomId: TEST_ROOM_ID,
|
|
14
|
-
createdAt: fixedDate,
|
|
15
|
-
};
|
|
16
|
-
|
|
17
|
-
beforeEach(async () => {
|
|
18
|
-
inMemoryAdapter = new InMemoryAdapter();
|
|
19
|
-
await inMemoryAdapter.init(TEST_ROOM_ID);
|
|
20
|
-
});
|
|
21
|
-
|
|
22
|
-
describe("Initialization", () => {
|
|
23
|
-
it("should initialize storage", async () => {
|
|
24
|
-
await expect(inMemoryAdapter.init("new-room")).to.not.throw;
|
|
25
|
-
const memories = await inMemoryAdapter.getAllMemories("new-room");
|
|
26
|
-
expect(memories).to.be.an("array").that.is.empty;
|
|
27
|
-
});
|
|
28
|
-
});
|
|
29
|
-
|
|
30
|
-
describe("Memory Operations", () => {
|
|
31
|
-
it("should create memory", async () => {
|
|
32
|
-
const memory = await inMemoryAdapter.createMemory({
|
|
33
|
-
data: "test data",
|
|
34
|
-
roomId: TEST_ROOM_ID,
|
|
35
|
-
id: "test-id",
|
|
36
|
-
embedding: [0.1, 0.2, 0.3],
|
|
37
|
-
});
|
|
38
|
-
|
|
39
|
-
expect(memory).to.have.property("id");
|
|
40
|
-
expect(memory?.data).to.equal("test data");
|
|
41
|
-
expect(memory?.roomId).to.equal(TEST_ROOM_ID);
|
|
42
|
-
});
|
|
43
|
-
|
|
44
|
-
it("should not create duplicate memory", async () => {
|
|
45
|
-
// Create first memory
|
|
46
|
-
const memory1 = await inMemoryAdapter.createMemory({
|
|
47
|
-
data: "test data",
|
|
48
|
-
roomId: TEST_ROOM_ID,
|
|
49
|
-
id: "test-id",
|
|
50
|
-
});
|
|
51
|
-
|
|
52
|
-
// Try to create duplicate
|
|
53
|
-
const memory2 = await inMemoryAdapter.createMemory({
|
|
54
|
-
data: "test data",
|
|
55
|
-
roomId: TEST_ROOM_ID,
|
|
56
|
-
id: "another-id",
|
|
57
|
-
});
|
|
58
|
-
|
|
59
|
-
expect(memory2?.id).to.equal(memory1?.id);
|
|
60
|
-
});
|
|
61
|
-
|
|
62
|
-
it("should get memory by ID", async () => {
|
|
63
|
-
await inMemoryAdapter.createMemory({
|
|
64
|
-
data: testMemory.data,
|
|
65
|
-
roomId: testMemory.roomId,
|
|
66
|
-
id: testMemory.id,
|
|
67
|
-
embedding: testMemory.embedding,
|
|
68
|
-
});
|
|
69
|
-
|
|
70
|
-
const result = await inMemoryAdapter.getMemoryById(
|
|
71
|
-
"test-id",
|
|
72
|
-
TEST_ROOM_ID
|
|
73
|
-
);
|
|
74
|
-
expect(result).to.have.property("id", "test-id");
|
|
75
|
-
});
|
|
76
|
-
|
|
77
|
-
it("should get memories by index", async () => {
|
|
78
|
-
// Create test memories
|
|
79
|
-
await inMemoryAdapter.createMemory({
|
|
80
|
-
data: "test data one",
|
|
81
|
-
roomId: TEST_ROOM_ID,
|
|
82
|
-
id: "test-id-1",
|
|
83
|
-
});
|
|
84
|
-
await inMemoryAdapter.createMemory({
|
|
85
|
-
data: "test data two",
|
|
86
|
-
roomId: TEST_ROOM_ID,
|
|
87
|
-
id: "test-id-2",
|
|
88
|
-
});
|
|
89
|
-
|
|
90
|
-
const results = await inMemoryAdapter.getMemoryByIndex("one", {
|
|
91
|
-
roomId: TEST_ROOM_ID,
|
|
92
|
-
limit: 10,
|
|
93
|
-
});
|
|
94
|
-
|
|
95
|
-
expect(results).to.be.an("array");
|
|
96
|
-
expect(results).to.have.lengthOf(1);
|
|
97
|
-
expect(results[0].data).to.include("one");
|
|
98
|
-
});
|
|
99
|
-
|
|
100
|
-
it("should get all memories", async () => {
|
|
101
|
-
// Create multiple memories
|
|
102
|
-
await inMemoryAdapter.createMemory({
|
|
103
|
-
data: "test data 1",
|
|
104
|
-
roomId: TEST_ROOM_ID,
|
|
105
|
-
id: "test-id-1",
|
|
106
|
-
});
|
|
107
|
-
await inMemoryAdapter.createMemory({
|
|
108
|
-
data: "test data 2",
|
|
109
|
-
roomId: TEST_ROOM_ID,
|
|
110
|
-
id: "test-id-2",
|
|
111
|
-
});
|
|
112
|
-
|
|
113
|
-
const results = await inMemoryAdapter.getAllMemories(TEST_ROOM_ID);
|
|
114
|
-
expect(results).to.be.an("array");
|
|
115
|
-
expect(results).to.have.lengthOf(2);
|
|
116
|
-
});
|
|
117
|
-
|
|
118
|
-
it("should clear memory by ID", async () => {
|
|
119
|
-
// Create a memory
|
|
120
|
-
await inMemoryAdapter.createMemory({
|
|
121
|
-
data: "test data",
|
|
122
|
-
roomId: TEST_ROOM_ID,
|
|
123
|
-
id: "test-id",
|
|
124
|
-
});
|
|
125
|
-
|
|
126
|
-
await inMemoryAdapter.clearMemoryById("test-id", TEST_ROOM_ID);
|
|
127
|
-
const result = await inMemoryAdapter.getMemoryById(
|
|
128
|
-
"test-id",
|
|
129
|
-
TEST_ROOM_ID
|
|
130
|
-
);
|
|
131
|
-
expect(result).to.be.null;
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it("should clear all memories", async () => {
|
|
135
|
-
// Create multiple memories
|
|
136
|
-
await inMemoryAdapter.createMemory({
|
|
137
|
-
data: "test data 1",
|
|
138
|
-
roomId: TEST_ROOM_ID,
|
|
139
|
-
id: "test-id-1",
|
|
140
|
-
});
|
|
141
|
-
await inMemoryAdapter.createMemory({
|
|
142
|
-
data: "test data 2",
|
|
143
|
-
roomId: TEST_ROOM_ID,
|
|
144
|
-
id: "test-id-2",
|
|
145
|
-
});
|
|
146
|
-
|
|
147
|
-
await inMemoryAdapter.clearAllMemories();
|
|
148
|
-
const results = await inMemoryAdapter.getAllMemories(TEST_ROOM_ID);
|
|
149
|
-
expect(results).to.be.an("array");
|
|
150
|
-
expect(results).to.have.lengthOf(0);
|
|
151
|
-
});
|
|
152
|
-
});
|
|
153
|
-
});
|
|
@@ -1,287 +0,0 @@
|
|
|
1
|
-
import { expect } from "chai";
|
|
2
|
-
import dotenv from "dotenv";
|
|
3
|
-
import { MeilisearchAdapter } from "../../../../modules/memory/adapters/meilisearch";
|
|
4
|
-
import { BaseMemoryType } from "../../../../types";
|
|
5
|
-
// Load environment variables
|
|
6
|
-
dotenv.config();
|
|
7
|
-
|
|
8
|
-
describe("MeilisearchAdapter", () => {
|
|
9
|
-
let meilisearchAdapter: MeilisearchAdapter;
|
|
10
|
-
const TEST_ROOM_ID = "test-room";
|
|
11
|
-
|
|
12
|
-
const testMemory: BaseMemoryType = {
|
|
13
|
-
id: "test-id",
|
|
14
|
-
data: "test data",
|
|
15
|
-
roomId: "test-room",
|
|
16
|
-
createdAt: new Date(),
|
|
17
|
-
};
|
|
18
|
-
|
|
19
|
-
beforeEach(async function () {
|
|
20
|
-
this.timeout(10000); // Augmenter le timeout
|
|
21
|
-
|
|
22
|
-
// Mock fetch pour simuler l'existence de l'index
|
|
23
|
-
global.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
24
|
-
const url = input.toString();
|
|
25
|
-
|
|
26
|
-
// Mock pour index check/creation
|
|
27
|
-
if (url.includes("/indexes")) {
|
|
28
|
-
if (init?.method === "POST") {
|
|
29
|
-
return new Response(JSON.stringify({ taskUid: 1 }));
|
|
30
|
-
}
|
|
31
|
-
if (url.endsWith("/indexes")) {
|
|
32
|
-
return new Response(
|
|
33
|
-
JSON.stringify({
|
|
34
|
-
results: [{ uid: TEST_ROOM_ID }], // Simuler l'existence de l'index
|
|
35
|
-
})
|
|
36
|
-
);
|
|
37
|
-
}
|
|
38
|
-
if (url.includes(`/indexes/${TEST_ROOM_ID}`)) {
|
|
39
|
-
return new Response(
|
|
40
|
-
JSON.stringify({
|
|
41
|
-
uid: TEST_ROOM_ID,
|
|
42
|
-
primaryKey: "id",
|
|
43
|
-
})
|
|
44
|
-
);
|
|
45
|
-
}
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
// Mock pour settings et autres endpoints
|
|
49
|
-
if (url.includes("/settings")) {
|
|
50
|
-
return new Response(JSON.stringify({ acknowledged: true }));
|
|
51
|
-
}
|
|
52
|
-
|
|
53
|
-
return new Response(JSON.stringify({}));
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
meilisearchAdapter = new MeilisearchAdapter({
|
|
57
|
-
host: "http://localhost:7700",
|
|
58
|
-
apiKey: "test_key",
|
|
59
|
-
searchableAttributes: ["content"],
|
|
60
|
-
sortableAttributes: ["createdAt"],
|
|
61
|
-
});
|
|
62
|
-
|
|
63
|
-
await meilisearchAdapter.init(TEST_ROOM_ID);
|
|
64
|
-
});
|
|
65
|
-
|
|
66
|
-
describe("Initialization", () => {
|
|
67
|
-
it("should initialize storage", async () => {
|
|
68
|
-
await expect(meilisearchAdapter.init("test-room")).to.not.throw;
|
|
69
|
-
});
|
|
70
|
-
});
|
|
71
|
-
|
|
72
|
-
describe("Memory Operations", () => {
|
|
73
|
-
beforeEach(async () => {
|
|
74
|
-
// Reset fetch mock for each test
|
|
75
|
-
if (!process.env.MEILISEARCH_HOST) {
|
|
76
|
-
global.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
77
|
-
const url = input.toString();
|
|
78
|
-
|
|
79
|
-
// Mock for index check/creation
|
|
80
|
-
if (url.includes("/indexes")) {
|
|
81
|
-
if (init?.method === "POST") {
|
|
82
|
-
return new Response(JSON.stringify({ taskUid: 1 }));
|
|
83
|
-
}
|
|
84
|
-
if (url.endsWith("/indexes")) {
|
|
85
|
-
return new Response(JSON.stringify({ results: [] }));
|
|
86
|
-
}
|
|
87
|
-
// Mock for specific index check
|
|
88
|
-
if (url.includes(`/indexes/${TEST_ROOM_ID}`)) {
|
|
89
|
-
return new Response(
|
|
90
|
-
JSON.stringify({
|
|
91
|
-
uid: TEST_ROOM_ID,
|
|
92
|
-
primaryKey: "id",
|
|
93
|
-
})
|
|
94
|
-
);
|
|
95
|
-
}
|
|
96
|
-
if (url.includes("/indexes/memories")) {
|
|
97
|
-
return new Response(
|
|
98
|
-
JSON.stringify({
|
|
99
|
-
uid: "memories",
|
|
100
|
-
primaryKey: "id",
|
|
101
|
-
})
|
|
102
|
-
);
|
|
103
|
-
}
|
|
104
|
-
}
|
|
105
|
-
|
|
106
|
-
// Mock for settings
|
|
107
|
-
if (url.includes("/settings")) {
|
|
108
|
-
return new Response(JSON.stringify({ acknowledged: true }));
|
|
109
|
-
}
|
|
110
|
-
|
|
111
|
-
// Mock for documents
|
|
112
|
-
if (url.includes("/documents")) {
|
|
113
|
-
if (init?.method === "POST") {
|
|
114
|
-
return new Response(JSON.stringify({ taskUid: 2 }));
|
|
115
|
-
}
|
|
116
|
-
if (init?.method === "DELETE") {
|
|
117
|
-
return new Response(JSON.stringify({ taskUid: 3 }));
|
|
118
|
-
}
|
|
119
|
-
return new Response(JSON.stringify([testMemory]));
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
return new Response(JSON.stringify({}));
|
|
123
|
-
};
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
try {
|
|
127
|
-
await meilisearchAdapter.init(TEST_ROOM_ID);
|
|
128
|
-
} catch (error) {
|
|
129
|
-
console.error("Failed to initialize:", error);
|
|
130
|
-
throw error;
|
|
131
|
-
}
|
|
132
|
-
});
|
|
133
|
-
|
|
134
|
-
it("should create memory", async () => {
|
|
135
|
-
const input = {
|
|
136
|
-
id: "test-id",
|
|
137
|
-
roomId: "test-room",
|
|
138
|
-
data: "test data",
|
|
139
|
-
};
|
|
140
|
-
|
|
141
|
-
const result = await meilisearchAdapter.createMemory(input);
|
|
142
|
-
expect(result?.embedding).to.be.undefined;
|
|
143
|
-
});
|
|
144
|
-
|
|
145
|
-
it("should search memories", async () => {
|
|
146
|
-
const results = await meilisearchAdapter.getMemoryByIndex("test", {
|
|
147
|
-
roomId: TEST_ROOM_ID,
|
|
148
|
-
limit: 10,
|
|
149
|
-
});
|
|
150
|
-
|
|
151
|
-
expect(results).to.be.an("array");
|
|
152
|
-
if (results.length > 0) {
|
|
153
|
-
const result = results[0];
|
|
154
|
-
if (result) {
|
|
155
|
-
result.createdAt = new Date(result.createdAt);
|
|
156
|
-
}
|
|
157
|
-
expect(result).to.deep.equal(testMemory);
|
|
158
|
-
}
|
|
159
|
-
});
|
|
160
|
-
|
|
161
|
-
it("should handle memory retrieval by ID", async () => {
|
|
162
|
-
const testDate = new Date("2025-02-11T08:24:38.251Z");
|
|
163
|
-
|
|
164
|
-
const mockData = {
|
|
165
|
-
id: "test-id",
|
|
166
|
-
roomId: "test-room",
|
|
167
|
-
data: "test data",
|
|
168
|
-
createdAt: testDate.toISOString(),
|
|
169
|
-
embedding: undefined,
|
|
170
|
-
};
|
|
171
|
-
|
|
172
|
-
global.fetch = async (input: RequestInfo | URL) => {
|
|
173
|
-
const url = input.toString();
|
|
174
|
-
if (url.includes(`/indexes/test-room/documents/test-id`)) {
|
|
175
|
-
return new Response(JSON.stringify(mockData));
|
|
176
|
-
}
|
|
177
|
-
return new Response(JSON.stringify({}));
|
|
178
|
-
};
|
|
179
|
-
|
|
180
|
-
const result = await meilisearchAdapter.getMemoryById(
|
|
181
|
-
"test-id",
|
|
182
|
-
"test-room"
|
|
183
|
-
);
|
|
184
|
-
|
|
185
|
-
expect(result?.id).to.equal(mockData.id);
|
|
186
|
-
expect(result?.roomId).to.equal(mockData.roomId);
|
|
187
|
-
expect(result?.data).to.equal(mockData.data);
|
|
188
|
-
expect(result?.createdAt).to.equal(mockData.createdAt); // Compare directement les strings
|
|
189
|
-
expect(result?.embedding).to.be.undefined;
|
|
190
|
-
});
|
|
191
|
-
|
|
192
|
-
it("should handle non-existent memory", async () => {
|
|
193
|
-
global.fetch = async (): Promise<Response> => {
|
|
194
|
-
throw new Error("Not found");
|
|
195
|
-
};
|
|
196
|
-
|
|
197
|
-
const result = await meilisearchAdapter.getMemoryById(
|
|
198
|
-
"non-existent",
|
|
199
|
-
TEST_ROOM_ID
|
|
200
|
-
);
|
|
201
|
-
expect(result).to.be.null;
|
|
202
|
-
});
|
|
203
|
-
|
|
204
|
-
it("should clear all memories", async () => {
|
|
205
|
-
// S'assurer que l'index existe avant de le supprimer
|
|
206
|
-
await meilisearchAdapter.init(TEST_ROOM_ID);
|
|
207
|
-
await expect(meilisearchAdapter.clearAllMemories()).to.not.throw;
|
|
208
|
-
});
|
|
209
|
-
|
|
210
|
-
it("should not create duplicate memory with same data", async () => {
|
|
211
|
-
// Override fetch mock for this test
|
|
212
|
-
const firstMemoryId = "test-memory-id";
|
|
213
|
-
const mockMemory = {
|
|
214
|
-
id: firstMemoryId,
|
|
215
|
-
data: "test data",
|
|
216
|
-
roomId: TEST_ROOM_ID,
|
|
217
|
-
embedding: null,
|
|
218
|
-
createdAt: new Date().toISOString(),
|
|
219
|
-
};
|
|
220
|
-
|
|
221
|
-
global.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
222
|
-
const url = input.toString();
|
|
223
|
-
|
|
224
|
-
if (url.includes("/search")) {
|
|
225
|
-
return new Response(
|
|
226
|
-
JSON.stringify({
|
|
227
|
-
hits: [{ ...mockMemory }],
|
|
228
|
-
})
|
|
229
|
-
);
|
|
230
|
-
}
|
|
231
|
-
|
|
232
|
-
if (url.includes("/indexes")) {
|
|
233
|
-
if (init?.method === "POST") {
|
|
234
|
-
return new Response(JSON.stringify({ taskUid: 1 }));
|
|
235
|
-
}
|
|
236
|
-
return new Response(
|
|
237
|
-
JSON.stringify({
|
|
238
|
-
uid: TEST_ROOM_ID,
|
|
239
|
-
primaryKey: "id",
|
|
240
|
-
})
|
|
241
|
-
);
|
|
242
|
-
}
|
|
243
|
-
|
|
244
|
-
return new Response(JSON.stringify({}));
|
|
245
|
-
};
|
|
246
|
-
|
|
247
|
-
const firstMemory = await meilisearchAdapter.createMemory({
|
|
248
|
-
data: "test data",
|
|
249
|
-
roomId: TEST_ROOM_ID,
|
|
250
|
-
});
|
|
251
|
-
|
|
252
|
-
const secondMemory = await meilisearchAdapter.createMemory({
|
|
253
|
-
data: "test data",
|
|
254
|
-
roomId: TEST_ROOM_ID,
|
|
255
|
-
});
|
|
256
|
-
|
|
257
|
-
expect(secondMemory?.id).to.equal(firstMemory?.id);
|
|
258
|
-
expect(secondMemory?.data).to.equal(firstMemory?.data);
|
|
259
|
-
expect(secondMemory?.roomId).to.equal(firstMemory?.roomId);
|
|
260
|
-
});
|
|
261
|
-
|
|
262
|
-
it("should initialize storage", async () => {
|
|
263
|
-
global.fetch = async (input: RequestInfo | URL, init?: RequestInit) => {
|
|
264
|
-
const url = input.toString();
|
|
265
|
-
|
|
266
|
-
// Mock pour la vérification de l'existence de l'index
|
|
267
|
-
if (url.includes(`/indexes/${TEST_ROOM_ID}`)) {
|
|
268
|
-
return new Response(
|
|
269
|
-
JSON.stringify({
|
|
270
|
-
uid: TEST_ROOM_ID,
|
|
271
|
-
primaryKey: "id",
|
|
272
|
-
})
|
|
273
|
-
);
|
|
274
|
-
}
|
|
275
|
-
|
|
276
|
-
// Mock pour les settings
|
|
277
|
-
if (url.includes("/settings")) {
|
|
278
|
-
return new Response(JSON.stringify({ acknowledged: true }));
|
|
279
|
-
}
|
|
280
|
-
|
|
281
|
-
return new Response(JSON.stringify({}));
|
|
282
|
-
};
|
|
283
|
-
|
|
284
|
-
await expect(meilisearchAdapter.init(TEST_ROOM_ID)).to.not.throw;
|
|
285
|
-
});
|
|
286
|
-
});
|
|
287
|
-
});
|