@juspay/neurolink 9.2.0 → 9.4.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/CHANGELOG.md +27 -0
- package/README.md +60 -38
- package/dist/agent/directTools.d.ts +8 -8
- package/dist/cli/commands/rag.d.ts +19 -0
- package/dist/cli/commands/rag.js +756 -0
- package/dist/cli/factories/commandFactory.js +146 -83
- package/dist/cli/index.js +1 -0
- package/dist/cli/parser.js +4 -1
- package/dist/core/baseProvider.d.ts +43 -30
- package/dist/core/baseProvider.js +98 -138
- package/dist/core/conversationMemoryFactory.d.ts +2 -2
- package/dist/core/conversationMemoryFactory.js +2 -2
- package/dist/core/conversationMemoryInitializer.d.ts +1 -2
- package/dist/core/conversationMemoryInitializer.js +2 -2
- package/dist/core/infrastructure/baseError.d.ts +21 -0
- package/dist/core/infrastructure/baseError.js +22 -0
- package/dist/core/infrastructure/baseFactory.d.ts +21 -0
- package/dist/core/infrastructure/baseFactory.js +54 -0
- package/dist/core/infrastructure/baseRegistry.d.ts +21 -0
- package/dist/core/infrastructure/baseRegistry.js +49 -0
- package/dist/core/infrastructure/index.d.ts +5 -0
- package/dist/core/infrastructure/index.js +5 -0
- package/dist/core/infrastructure/retry.d.ts +7 -0
- package/dist/core/infrastructure/retry.js +20 -0
- package/dist/core/infrastructure/typedEventEmitter.d.ts +8 -0
- package/dist/core/infrastructure/typedEventEmitter.js +23 -0
- package/dist/core/redisConversationMemoryManager.d.ts +1 -6
- package/dist/core/redisConversationMemoryManager.js +7 -19
- package/dist/factories/providerFactory.d.ts +5 -3
- package/dist/factories/providerFactory.js +31 -24
- package/dist/index.d.ts +81 -12
- package/dist/index.js +105 -36
- package/dist/lib/core/baseProvider.d.ts +43 -30
- package/dist/lib/core/baseProvider.js +98 -138
- package/dist/lib/core/conversationMemoryFactory.d.ts +2 -2
- package/dist/lib/core/conversationMemoryFactory.js +2 -2
- package/dist/lib/core/conversationMemoryInitializer.d.ts +1 -2
- package/dist/lib/core/conversationMemoryInitializer.js +2 -2
- package/dist/lib/core/infrastructure/baseError.d.ts +21 -0
- package/dist/lib/core/infrastructure/baseError.js +23 -0
- package/dist/lib/core/infrastructure/baseFactory.d.ts +21 -0
- package/dist/lib/core/infrastructure/baseFactory.js +55 -0
- package/dist/lib/core/infrastructure/baseRegistry.d.ts +21 -0
- package/dist/lib/core/infrastructure/baseRegistry.js +50 -0
- package/dist/lib/core/infrastructure/index.d.ts +5 -0
- package/dist/lib/core/infrastructure/index.js +6 -0
- package/dist/lib/core/infrastructure/retry.d.ts +7 -0
- package/dist/lib/core/infrastructure/retry.js +21 -0
- package/dist/lib/core/infrastructure/typedEventEmitter.d.ts +8 -0
- package/dist/lib/core/infrastructure/typedEventEmitter.js +24 -0
- package/dist/lib/core/redisConversationMemoryManager.d.ts +1 -6
- package/dist/lib/core/redisConversationMemoryManager.js +7 -19
- package/dist/lib/factories/providerFactory.d.ts +5 -3
- package/dist/lib/factories/providerFactory.js +31 -24
- package/dist/lib/index.d.ts +81 -12
- package/dist/lib/index.js +105 -36
- package/dist/lib/mcp/index.d.ts +6 -5
- package/dist/lib/mcp/index.js +7 -5
- package/dist/lib/neurolink.d.ts +22 -13
- package/dist/lib/neurolink.js +358 -31
- package/dist/lib/providers/amazonBedrock.d.ts +15 -2
- package/dist/lib/providers/amazonBedrock.js +65 -8
- package/dist/lib/providers/anthropic.d.ts +3 -3
- package/dist/lib/providers/anthropic.js +10 -7
- package/dist/lib/providers/googleAiStudio.d.ts +5 -5
- package/dist/lib/providers/googleAiStudio.js +10 -7
- package/dist/lib/providers/googleVertex.d.ts +16 -4
- package/dist/lib/providers/googleVertex.js +72 -16
- package/dist/lib/providers/litellm.d.ts +3 -3
- package/dist/lib/providers/litellm.js +10 -10
- package/dist/lib/providers/mistral.d.ts +3 -3
- package/dist/lib/providers/mistral.js +7 -6
- package/dist/lib/providers/ollama.d.ts +3 -4
- package/dist/lib/providers/ollama.js +7 -8
- package/dist/lib/providers/openAI.d.ts +14 -2
- package/dist/lib/providers/openAI.js +60 -6
- package/dist/lib/providers/openRouter.d.ts +2 -2
- package/dist/lib/providers/openRouter.js +10 -6
- package/dist/lib/rag/ChunkerFactory.d.ts +91 -0
- package/dist/lib/rag/ChunkerFactory.js +321 -0
- package/dist/lib/rag/ChunkerRegistry.d.ts +91 -0
- package/dist/lib/rag/ChunkerRegistry.js +422 -0
- package/dist/lib/rag/chunkers/BaseChunker.d.ts +53 -0
- package/dist/lib/rag/chunkers/BaseChunker.js +144 -0
- package/dist/lib/rag/chunkers/CharacterChunker.d.ts +18 -0
- package/dist/lib/rag/chunkers/CharacterChunker.js +29 -0
- package/dist/lib/rag/chunkers/HTMLChunker.d.ts +19 -0
- package/dist/lib/rag/chunkers/HTMLChunker.js +39 -0
- package/dist/lib/rag/chunkers/JSONChunker.d.ts +19 -0
- package/dist/lib/rag/chunkers/JSONChunker.js +69 -0
- package/dist/lib/rag/chunkers/LaTeXChunker.d.ts +15 -0
- package/dist/lib/rag/chunkers/LaTeXChunker.js +64 -0
- package/dist/lib/rag/chunkers/MarkdownChunker.d.ts +15 -0
- package/dist/lib/rag/chunkers/MarkdownChunker.js +103 -0
- package/dist/lib/rag/chunkers/RecursiveChunker.d.ts +27 -0
- package/dist/lib/rag/chunkers/RecursiveChunker.js +140 -0
- package/dist/lib/rag/chunkers/SemanticMarkdownChunker.d.ts +22 -0
- package/dist/lib/rag/chunkers/SemanticMarkdownChunker.js +139 -0
- package/dist/lib/rag/chunkers/SentenceChunker.d.ts +19 -0
- package/dist/lib/rag/chunkers/SentenceChunker.js +67 -0
- package/dist/lib/rag/chunkers/TokenChunker.d.ts +19 -0
- package/dist/lib/rag/chunkers/TokenChunker.js +62 -0
- package/dist/lib/rag/chunkers/index.d.ts +15 -0
- package/dist/lib/rag/chunkers/index.js +16 -0
- package/dist/lib/rag/chunking/characterChunker.d.ts +16 -0
- package/dist/lib/rag/chunking/characterChunker.js +143 -0
- package/dist/lib/rag/chunking/chunkerRegistry.d.ts +67 -0
- package/dist/lib/rag/chunking/chunkerRegistry.js +195 -0
- package/dist/lib/rag/chunking/htmlChunker.d.ts +34 -0
- package/dist/lib/rag/chunking/htmlChunker.js +248 -0
- package/dist/lib/rag/chunking/index.d.ts +15 -0
- package/dist/lib/rag/chunking/index.js +18 -0
- package/dist/lib/rag/chunking/jsonChunker.d.ts +20 -0
- package/dist/lib/rag/chunking/jsonChunker.js +282 -0
- package/dist/lib/rag/chunking/latexChunker.d.ts +26 -0
- package/dist/lib/rag/chunking/latexChunker.js +252 -0
- package/dist/lib/rag/chunking/markdownChunker.d.ts +19 -0
- package/dist/lib/rag/chunking/markdownChunker.js +202 -0
- package/dist/lib/rag/chunking/recursiveChunker.d.ts +19 -0
- package/dist/lib/rag/chunking/recursiveChunker.js +149 -0
- package/dist/lib/rag/chunking/semanticChunker.d.ts +41 -0
- package/dist/lib/rag/chunking/semanticChunker.js +307 -0
- package/dist/lib/rag/chunking/sentenceChunker.d.ts +25 -0
- package/dist/lib/rag/chunking/sentenceChunker.js +231 -0
- package/dist/lib/rag/chunking/tokenChunker.d.ts +36 -0
- package/dist/lib/rag/chunking/tokenChunker.js +184 -0
- package/dist/lib/rag/document/MDocument.d.ts +198 -0
- package/dist/lib/rag/document/MDocument.js +393 -0
- package/dist/lib/rag/document/index.d.ts +5 -0
- package/dist/lib/rag/document/index.js +6 -0
- package/dist/lib/rag/document/loaders.d.ts +201 -0
- package/dist/lib/rag/document/loaders.js +501 -0
- package/dist/lib/rag/errors/RAGError.d.ts +244 -0
- package/dist/lib/rag/errors/RAGError.js +275 -0
- package/dist/lib/rag/errors/index.d.ts +6 -0
- package/dist/lib/rag/errors/index.js +7 -0
- package/dist/lib/rag/graphRag/graphRAG.d.ts +115 -0
- package/dist/lib/rag/graphRag/graphRAG.js +385 -0
- package/dist/lib/rag/graphRag/index.d.ts +4 -0
- package/dist/lib/rag/graphRag/index.js +5 -0
- package/dist/lib/rag/index.d.ts +103 -0
- package/dist/lib/rag/index.js +142 -0
- package/dist/lib/rag/metadata/MetadataExtractorFactory.d.ts +157 -0
- package/dist/lib/rag/metadata/MetadataExtractorFactory.js +419 -0
- package/dist/lib/rag/metadata/MetadataExtractorRegistry.d.ts +99 -0
- package/dist/lib/rag/metadata/MetadataExtractorRegistry.js +363 -0
- package/dist/lib/rag/metadata/index.d.ts +6 -0
- package/dist/lib/rag/metadata/index.js +10 -0
- package/dist/lib/rag/metadata/metadataExtractor.d.ts +69 -0
- package/dist/lib/rag/metadata/metadataExtractor.js +278 -0
- package/dist/lib/rag/pipeline/RAGPipeline.d.ts +235 -0
- package/dist/lib/rag/pipeline/RAGPipeline.js +402 -0
- package/dist/lib/rag/pipeline/contextAssembly.d.ts +126 -0
- package/dist/lib/rag/pipeline/contextAssembly.js +338 -0
- package/dist/lib/rag/pipeline/index.d.ts +5 -0
- package/dist/lib/rag/pipeline/index.js +6 -0
- package/dist/lib/rag/ragIntegration.d.ts +38 -0
- package/dist/lib/rag/ragIntegration.js +212 -0
- package/dist/lib/rag/reranker/RerankerFactory.d.ts +184 -0
- package/dist/lib/rag/reranker/RerankerFactory.js +431 -0
- package/dist/lib/rag/reranker/RerankerRegistry.d.ts +119 -0
- package/dist/lib/rag/reranker/RerankerRegistry.js +403 -0
- package/dist/lib/rag/reranker/index.d.ts +6 -0
- package/dist/lib/rag/reranker/index.js +10 -0
- package/dist/lib/rag/reranker/reranker.d.ts +71 -0
- package/dist/lib/rag/reranker/reranker.js +278 -0
- package/dist/lib/rag/resilience/CircuitBreaker.d.ts +215 -0
- package/dist/lib/rag/resilience/CircuitBreaker.js +432 -0
- package/dist/lib/rag/resilience/RetryHandler.d.ts +115 -0
- package/dist/lib/rag/resilience/RetryHandler.js +301 -0
- package/dist/lib/rag/resilience/index.d.ts +7 -0
- package/dist/lib/rag/resilience/index.js +8 -0
- package/dist/lib/rag/retrieval/hybridSearch.d.ts +94 -0
- package/dist/lib/rag/retrieval/hybridSearch.js +314 -0
- package/dist/lib/rag/retrieval/index.d.ts +5 -0
- package/dist/lib/rag/retrieval/index.js +6 -0
- package/dist/lib/rag/retrieval/vectorQueryTool.d.ts +93 -0
- package/dist/lib/rag/retrieval/vectorQueryTool.js +290 -0
- package/dist/lib/rag/types.d.ts +768 -0
- package/dist/lib/rag/types.js +9 -0
- package/dist/lib/server/index.d.ts +15 -11
- package/dist/lib/server/index.js +55 -51
- package/dist/lib/types/common.d.ts +0 -1
- package/dist/lib/types/generateTypes.d.ts +70 -8
- package/dist/lib/types/generateTypes.js +1 -1
- package/dist/lib/types/index.d.ts +6 -0
- package/dist/lib/types/index.js +12 -0
- package/dist/lib/types/streamTypes.d.ts +63 -8
- package/dist/lib/types/streamTypes.js +1 -1
- package/dist/lib/types/workflowTypes.d.ts +558 -0
- package/dist/lib/types/workflowTypes.js +32 -0
- package/dist/lib/utils/modelRouter.d.ts +4 -4
- package/dist/lib/utils/modelRouter.js +4 -4
- package/dist/lib/workflow/LAYER-EXAMPLES.d.ts +13 -0
- package/dist/lib/workflow/LAYER-EXAMPLES.js +312 -0
- package/dist/lib/workflow/PROMPT-EXAMPLES.d.ts +117 -0
- package/dist/lib/workflow/PROMPT-EXAMPLES.js +246 -0
- package/dist/lib/workflow/config.d.ts +1569 -0
- package/dist/lib/workflow/config.js +399 -0
- package/dist/lib/workflow/core/ensembleExecutor.d.ts +56 -0
- package/dist/lib/workflow/core/ensembleExecutor.js +398 -0
- package/dist/lib/workflow/core/judgeScorer.d.ts +26 -0
- package/dist/lib/workflow/core/judgeScorer.js +527 -0
- package/dist/lib/workflow/core/responseConditioner.d.ts +22 -0
- package/dist/lib/workflow/core/responseConditioner.js +226 -0
- package/dist/lib/workflow/core/types/conditionerTypes.d.ts +7 -0
- package/dist/lib/workflow/core/types/conditionerTypes.js +8 -0
- package/dist/lib/workflow/core/types/ensembleTypes.d.ts +7 -0
- package/dist/lib/workflow/core/types/ensembleTypes.js +8 -0
- package/dist/lib/workflow/core/types/index.d.ts +7 -0
- package/dist/lib/workflow/core/types/index.js +8 -0
- package/dist/lib/workflow/core/types/judgeTypes.d.ts +7 -0
- package/dist/lib/workflow/core/types/judgeTypes.js +8 -0
- package/dist/lib/workflow/core/types/layerTypes.d.ts +7 -0
- package/dist/lib/workflow/core/types/layerTypes.js +8 -0
- package/dist/lib/workflow/core/types/registryTypes.d.ts +7 -0
- package/dist/lib/workflow/core/types/registryTypes.js +8 -0
- package/dist/lib/workflow/core/workflowRegistry.d.ts +73 -0
- package/dist/lib/workflow/core/workflowRegistry.js +305 -0
- package/dist/lib/workflow/core/workflowRunner.d.ts +115 -0
- package/dist/lib/workflow/core/workflowRunner.js +554 -0
- package/dist/lib/workflow/index.d.ts +36 -0
- package/dist/lib/workflow/index.js +51 -0
- package/dist/lib/workflow/types.d.ts +19 -0
- package/dist/lib/workflow/types.js +10 -0
- package/dist/lib/workflow/utils/types/index.d.ts +7 -0
- package/dist/lib/workflow/utils/types/index.js +8 -0
- package/dist/lib/workflow/utils/types/metricsTypes.d.ts +7 -0
- package/dist/lib/workflow/utils/types/metricsTypes.js +8 -0
- package/dist/lib/workflow/utils/types/validationTypes.d.ts +7 -0
- package/dist/lib/workflow/utils/types/validationTypes.js +8 -0
- package/dist/lib/workflow/utils/workflowMetrics.d.ts +76 -0
- package/dist/lib/workflow/utils/workflowMetrics.js +312 -0
- package/dist/lib/workflow/utils/workflowValidation.d.ts +29 -0
- package/dist/lib/workflow/utils/workflowValidation.js +421 -0
- package/dist/lib/workflow/workflows/adaptiveWorkflow.d.ts +72 -0
- package/dist/lib/workflow/workflows/adaptiveWorkflow.js +367 -0
- package/dist/lib/workflow/workflows/consensusWorkflow.d.ts +69 -0
- package/dist/lib/workflow/workflows/consensusWorkflow.js +193 -0
- package/dist/lib/workflow/workflows/fallbackWorkflow.d.ts +49 -0
- package/dist/lib/workflow/workflows/fallbackWorkflow.js +226 -0
- package/dist/lib/workflow/workflows/multiJudgeWorkflow.d.ts +70 -0
- package/dist/lib/workflow/workflows/multiJudgeWorkflow.js +352 -0
- package/dist/mcp/index.d.ts +6 -5
- package/dist/mcp/index.js +7 -5
- package/dist/neurolink.d.ts +22 -13
- package/dist/neurolink.js +358 -31
- package/dist/providers/amazonBedrock.d.ts +15 -2
- package/dist/providers/amazonBedrock.js +65 -8
- package/dist/providers/anthropic.d.ts +3 -3
- package/dist/providers/anthropic.js +10 -7
- package/dist/providers/googleAiStudio.d.ts +5 -5
- package/dist/providers/googleAiStudio.js +10 -7
- package/dist/providers/googleVertex.d.ts +16 -4
- package/dist/providers/googleVertex.js +72 -16
- package/dist/providers/litellm.d.ts +3 -3
- package/dist/providers/litellm.js +10 -10
- package/dist/providers/mistral.d.ts +3 -3
- package/dist/providers/mistral.js +7 -6
- package/dist/providers/ollama.d.ts +3 -4
- package/dist/providers/ollama.js +7 -8
- package/dist/providers/openAI.d.ts +14 -2
- package/dist/providers/openAI.js +60 -6
- package/dist/providers/openRouter.d.ts +2 -2
- package/dist/providers/openRouter.js +10 -6
- package/dist/rag/ChunkerFactory.d.ts +91 -0
- package/dist/rag/ChunkerFactory.js +320 -0
- package/dist/rag/ChunkerRegistry.d.ts +91 -0
- package/dist/rag/ChunkerRegistry.js +421 -0
- package/dist/rag/chunkers/BaseChunker.d.ts +53 -0
- package/dist/rag/chunkers/BaseChunker.js +143 -0
- package/dist/rag/chunkers/CharacterChunker.d.ts +18 -0
- package/dist/rag/chunkers/CharacterChunker.js +28 -0
- package/dist/rag/chunkers/HTMLChunker.d.ts +19 -0
- package/dist/rag/chunkers/HTMLChunker.js +38 -0
- package/dist/rag/chunkers/JSONChunker.d.ts +19 -0
- package/dist/rag/chunkers/JSONChunker.js +68 -0
- package/dist/rag/chunkers/LaTeXChunker.d.ts +15 -0
- package/dist/rag/chunkers/LaTeXChunker.js +63 -0
- package/dist/rag/chunkers/MarkdownChunker.d.ts +15 -0
- package/dist/rag/chunkers/MarkdownChunker.js +102 -0
- package/dist/rag/chunkers/RecursiveChunker.d.ts +27 -0
- package/dist/rag/chunkers/RecursiveChunker.js +139 -0
- package/dist/rag/chunkers/SemanticMarkdownChunker.d.ts +22 -0
- package/dist/rag/chunkers/SemanticMarkdownChunker.js +138 -0
- package/dist/rag/chunkers/SentenceChunker.d.ts +19 -0
- package/dist/rag/chunkers/SentenceChunker.js +66 -0
- package/dist/rag/chunkers/TokenChunker.d.ts +19 -0
- package/dist/rag/chunkers/TokenChunker.js +61 -0
- package/dist/rag/chunkers/index.d.ts +15 -0
- package/dist/rag/chunkers/index.js +15 -0
- package/dist/rag/chunking/characterChunker.d.ts +16 -0
- package/dist/rag/chunking/characterChunker.js +142 -0
- package/dist/rag/chunking/chunkerRegistry.d.ts +67 -0
- package/dist/rag/chunking/chunkerRegistry.js +194 -0
- package/dist/rag/chunking/htmlChunker.d.ts +34 -0
- package/dist/rag/chunking/htmlChunker.js +247 -0
- package/dist/rag/chunking/index.d.ts +15 -0
- package/dist/rag/chunking/index.js +17 -0
- package/dist/rag/chunking/jsonChunker.d.ts +20 -0
- package/dist/rag/chunking/jsonChunker.js +281 -0
- package/dist/rag/chunking/latexChunker.d.ts +26 -0
- package/dist/rag/chunking/latexChunker.js +251 -0
- package/dist/rag/chunking/markdownChunker.d.ts +19 -0
- package/dist/rag/chunking/markdownChunker.js +201 -0
- package/dist/rag/chunking/recursiveChunker.d.ts +19 -0
- package/dist/rag/chunking/recursiveChunker.js +148 -0
- package/dist/rag/chunking/semanticChunker.d.ts +41 -0
- package/dist/rag/chunking/semanticChunker.js +306 -0
- package/dist/rag/chunking/sentenceChunker.d.ts +25 -0
- package/dist/rag/chunking/sentenceChunker.js +230 -0
- package/dist/rag/chunking/tokenChunker.d.ts +36 -0
- package/dist/rag/chunking/tokenChunker.js +183 -0
- package/dist/rag/document/MDocument.d.ts +198 -0
- package/dist/rag/document/MDocument.js +392 -0
- package/dist/rag/document/index.d.ts +5 -0
- package/dist/rag/document/index.js +5 -0
- package/dist/rag/document/loaders.d.ts +201 -0
- package/dist/rag/document/loaders.js +500 -0
- package/dist/rag/errors/RAGError.d.ts +244 -0
- package/dist/rag/errors/RAGError.js +274 -0
- package/dist/rag/errors/index.d.ts +6 -0
- package/dist/rag/errors/index.js +6 -0
- package/dist/rag/graphRag/graphRAG.d.ts +115 -0
- package/dist/rag/graphRag/graphRAG.js +384 -0
- package/dist/rag/graphRag/index.d.ts +4 -0
- package/dist/rag/graphRag/index.js +4 -0
- package/dist/rag/index.d.ts +103 -0
- package/dist/rag/index.js +141 -0
- package/dist/rag/metadata/MetadataExtractorFactory.d.ts +157 -0
- package/dist/rag/metadata/MetadataExtractorFactory.js +418 -0
- package/dist/rag/metadata/MetadataExtractorRegistry.d.ts +99 -0
- package/dist/rag/metadata/MetadataExtractorRegistry.js +362 -0
- package/dist/rag/metadata/index.d.ts +6 -0
- package/dist/rag/metadata/index.js +9 -0
- package/dist/rag/metadata/metadataExtractor.d.ts +69 -0
- package/dist/rag/metadata/metadataExtractor.js +277 -0
- package/dist/rag/pipeline/RAGPipeline.d.ts +235 -0
- package/dist/rag/pipeline/RAGPipeline.js +401 -0
- package/dist/rag/pipeline/contextAssembly.d.ts +126 -0
- package/dist/rag/pipeline/contextAssembly.js +337 -0
- package/dist/rag/pipeline/index.d.ts +5 -0
- package/dist/rag/pipeline/index.js +5 -0
- package/dist/rag/ragIntegration.d.ts +38 -0
- package/dist/rag/ragIntegration.js +211 -0
- package/dist/rag/reranker/RerankerFactory.d.ts +184 -0
- package/dist/rag/reranker/RerankerFactory.js +430 -0
- package/dist/rag/reranker/RerankerRegistry.d.ts +119 -0
- package/dist/rag/reranker/RerankerRegistry.js +402 -0
- package/dist/rag/reranker/index.d.ts +6 -0
- package/dist/rag/reranker/index.js +9 -0
- package/dist/rag/reranker/reranker.d.ts +71 -0
- package/dist/rag/reranker/reranker.js +277 -0
- package/dist/rag/resilience/CircuitBreaker.d.ts +215 -0
- package/dist/rag/resilience/CircuitBreaker.js +431 -0
- package/dist/rag/resilience/RetryHandler.d.ts +115 -0
- package/dist/rag/resilience/RetryHandler.js +300 -0
- package/dist/rag/resilience/index.d.ts +7 -0
- package/dist/rag/resilience/index.js +7 -0
- package/dist/rag/retrieval/hybridSearch.d.ts +94 -0
- package/dist/rag/retrieval/hybridSearch.js +313 -0
- package/dist/rag/retrieval/index.d.ts +5 -0
- package/dist/rag/retrieval/index.js +5 -0
- package/dist/rag/retrieval/vectorQueryTool.d.ts +93 -0
- package/dist/rag/retrieval/vectorQueryTool.js +289 -0
- package/dist/rag/types.d.ts +768 -0
- package/dist/rag/types.js +8 -0
- package/dist/server/index.d.ts +15 -11
- package/dist/server/index.js +55 -51
- package/dist/server/utils/validation.d.ts +2 -2
- package/dist/types/common.d.ts +0 -1
- package/dist/types/generateTypes.d.ts +70 -8
- package/dist/types/generateTypes.js +1 -1
- package/dist/types/index.d.ts +6 -0
- package/dist/types/index.js +12 -0
- package/dist/types/modelTypes.d.ts +20 -20
- package/dist/types/streamTypes.d.ts +63 -8
- package/dist/types/streamTypes.js +1 -1
- package/dist/types/workflowTypes.d.ts +558 -0
- package/dist/types/workflowTypes.js +31 -0
- package/dist/utils/modelRouter.d.ts +4 -4
- package/dist/utils/modelRouter.js +4 -4
- package/dist/workflow/LAYER-EXAMPLES.d.ts +13 -0
- package/dist/workflow/LAYER-EXAMPLES.js +311 -0
- package/dist/workflow/PROMPT-EXAMPLES.d.ts +117 -0
- package/dist/workflow/PROMPT-EXAMPLES.js +245 -0
- package/dist/workflow/config.d.ts +1569 -0
- package/dist/workflow/config.js +398 -0
- package/dist/workflow/core/ensembleExecutor.d.ts +56 -0
- package/dist/workflow/core/ensembleExecutor.js +397 -0
- package/dist/workflow/core/judgeScorer.d.ts +26 -0
- package/dist/workflow/core/judgeScorer.js +526 -0
- package/dist/workflow/core/responseConditioner.d.ts +22 -0
- package/dist/workflow/core/responseConditioner.js +225 -0
- package/dist/workflow/core/types/conditionerTypes.d.ts +7 -0
- package/dist/workflow/core/types/conditionerTypes.js +7 -0
- package/dist/workflow/core/types/ensembleTypes.d.ts +7 -0
- package/dist/workflow/core/types/ensembleTypes.js +7 -0
- package/dist/workflow/core/types/index.d.ts +7 -0
- package/dist/workflow/core/types/index.js +7 -0
- package/dist/workflow/core/types/judgeTypes.d.ts +7 -0
- package/dist/workflow/core/types/judgeTypes.js +7 -0
- package/dist/workflow/core/types/layerTypes.d.ts +7 -0
- package/dist/workflow/core/types/layerTypes.js +7 -0
- package/dist/workflow/core/types/registryTypes.d.ts +7 -0
- package/dist/workflow/core/types/registryTypes.js +7 -0
- package/dist/workflow/core/workflowRegistry.d.ts +73 -0
- package/dist/workflow/core/workflowRegistry.js +304 -0
- package/dist/workflow/core/workflowRunner.d.ts +115 -0
- package/dist/workflow/core/workflowRunner.js +553 -0
- package/dist/workflow/index.d.ts +36 -0
- package/dist/workflow/index.js +50 -0
- package/dist/workflow/types.d.ts +19 -0
- package/dist/workflow/types.js +9 -0
- package/dist/workflow/utils/types/index.d.ts +7 -0
- package/dist/workflow/utils/types/index.js +7 -0
- package/dist/workflow/utils/types/metricsTypes.d.ts +7 -0
- package/dist/workflow/utils/types/metricsTypes.js +7 -0
- package/dist/workflow/utils/types/validationTypes.d.ts +7 -0
- package/dist/workflow/utils/types/validationTypes.js +7 -0
- package/dist/workflow/utils/workflowMetrics.d.ts +76 -0
- package/dist/workflow/utils/workflowMetrics.js +311 -0
- package/dist/workflow/utils/workflowValidation.d.ts +29 -0
- package/dist/workflow/utils/workflowValidation.js +420 -0
- package/dist/workflow/workflows/adaptiveWorkflow.d.ts +72 -0
- package/dist/workflow/workflows/adaptiveWorkflow.js +366 -0
- package/dist/workflow/workflows/consensusWorkflow.d.ts +69 -0
- package/dist/workflow/workflows/consensusWorkflow.js +192 -0
- package/dist/workflow/workflows/fallbackWorkflow.d.ts +49 -0
- package/dist/workflow/workflows/fallbackWorkflow.js +225 -0
- package/dist/workflow/workflows/multiJudgeWorkflow.d.ts +70 -0
- package/dist/workflow/workflows/multiJudgeWorkflow.js +351 -0
- package/package.json +3 -2
package/dist/lib/neurolink.js
CHANGED
|
@@ -13,39 +13,38 @@ try {
|
|
|
13
13
|
catch {
|
|
14
14
|
// Environment variables should be set externally in production
|
|
15
15
|
}
|
|
16
|
-
import {
|
|
16
|
+
import { EventEmitter } from "events";
|
|
17
17
|
import { isNonNullObject } from "./utils/typeUtils.js";
|
|
18
|
-
import { isZodSchema } from "./utils/schemaConversion.js";
|
|
19
|
-
import { AIProviderName } from "./constants/enums.js";
|
|
20
|
-
import { mcpLogger } from "./utils/logger.js";
|
|
21
|
-
import { SYSTEM_LIMITS } from "./core/constants.js";
|
|
22
|
-
import { NANOSECOND_TO_MS_DIVISOR, TOOL_TIMEOUTS, RETRY_ATTEMPTS, RETRY_DELAYS, CIRCUIT_BREAKER, CIRCUIT_BREAKER_RESET_MS, MEMORY_THRESHOLDS, PROVIDER_TIMEOUTS, PERFORMANCE_THRESHOLDS, } from "./constants/index.js";
|
|
23
18
|
import pLimit from "p-limit";
|
|
24
|
-
import {
|
|
25
|
-
import {
|
|
26
|
-
import {
|
|
19
|
+
import { CIRCUIT_BREAKER, CIRCUIT_BREAKER_RESET_MS, MEMORY_THRESHOLDS, NANOSECOND_TO_MS_DIVISOR, PERFORMANCE_THRESHOLDS, PROVIDER_TIMEOUTS, RETRY_ATTEMPTS, RETRY_DELAYS, TOOL_TIMEOUTS, } from "./constants/index.js";
|
|
20
|
+
import { SYSTEM_LIMITS } from "./core/constants.js";
|
|
21
|
+
import { AIProviderFactory } from "./core/factory.js";
|
|
27
22
|
import { ProviderRegistry } from "./factories/providerRegistry.js";
|
|
28
|
-
import { createCustomToolServerInfo, detectCategory, } from "./utils/mcpDefaults.js";
|
|
29
|
-
// Factory processing imports
|
|
30
|
-
import { processFactoryOptions, enhanceTextGenerationOptions, validateFactoryConfig, processStreamingFactoryOptions, createCleanStreamOptions, } from "./utils/factoryProcessing.js";
|
|
31
|
-
// Tool detection and execution imports
|
|
32
|
-
// Transformation utilities
|
|
33
|
-
import { transformToolExecutions, transformToolExecutionsForMCP, transformAvailableTools, transformToolsForMCP, transformToolsToExpectedFormat, transformToolsToDescriptions, extractToolNames, transformParamsForLogging, optimizeToolForCollection, } from "./utils/transformationUtils.js";
|
|
34
|
-
// Enhanced error handling imports
|
|
35
|
-
import { ErrorFactory, NeuroLinkError, withTimeout, withRetry, isRetriableError, logStructuredError, CircuitBreaker, } from "./utils/errorHandling.js";
|
|
36
|
-
import { EventEmitter } from "events";
|
|
37
|
-
import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
|
|
38
|
-
import { RedisConversationMemoryManager } from "./core/redisConversationMemoryManager.js";
|
|
39
|
-
import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
|
|
40
|
-
import { ExternalServerManager } from "./mcp/externalServerManager.js";
|
|
41
23
|
import { HITLManager } from "./hitl/hitlManager.js";
|
|
24
|
+
import { ExternalServerManager } from "./mcp/externalServerManager.js";
|
|
42
25
|
// Import direct tools server for automatic registration
|
|
43
26
|
import { directToolsServer } from "./mcp/servers/agent/directToolsServer.js";
|
|
27
|
+
import { MCPToolRegistry } from "./mcp/toolRegistry.js";
|
|
28
|
+
import { initializeMem0 } from "./memory/mem0Initializer.js";
|
|
29
|
+
import { flushOpenTelemetry, getLangfuseHealthStatus, initializeOpenTelemetry, isOpenTelemetryInitialized, setLangfuseContext, shutdownOpenTelemetry, } from "./services/server/ai/observability/instrumentation.js";
|
|
30
|
+
import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
|
|
31
|
+
// Enhanced error handling imports
|
|
32
|
+
import { CircuitBreaker, ErrorFactory, isRetriableError, logStructuredError, NeuroLinkError, withRetry, withTimeout, } from "./utils/errorHandling.js";
|
|
33
|
+
// Factory processing imports
|
|
34
|
+
import { createCleanStreamOptions, enhanceTextGenerationOptions, processFactoryOptions, processStreamingFactoryOptions, validateFactoryConfig, } from "./utils/factoryProcessing.js";
|
|
35
|
+
import { logger, mcpLogger } from "./utils/logger.js";
|
|
36
|
+
import { createCustomToolServerInfo, detectCategory, } from "./utils/mcpDefaults.js";
|
|
44
37
|
// Import orchestration components
|
|
45
38
|
import { ModelRouter } from "./utils/modelRouter.js";
|
|
39
|
+
import { getBestProvider } from "./utils/providerUtils.js";
|
|
40
|
+
import { isZodSchema } from "./utils/schemaConversion.js";
|
|
46
41
|
import { BinaryTaskClassifier } from "./utils/taskClassifier.js";
|
|
47
|
-
|
|
48
|
-
|
|
42
|
+
// Tool detection and execution imports
|
|
43
|
+
// Transformation utilities
|
|
44
|
+
import { extractToolNames, optimizeToolForCollection, transformAvailableTools, transformParamsForLogging, transformToolExecutions, transformToolExecutionsForMCP, transformToolsForMCP, transformToolsToDescriptions, transformToolsToExpectedFormat, } from "./utils/transformationUtils.js";
|
|
45
|
+
import { runWorkflow } from "./workflow/core/workflowRunner.js";
|
|
46
|
+
import { getWorkflow } from "./workflow/core/workflowRegistry.js";
|
|
47
|
+
// Core types imported from core/types.js
|
|
49
48
|
/**
|
|
50
49
|
* NeuroLink - Universal AI Development Platform
|
|
51
50
|
*
|
|
@@ -1152,9 +1151,19 @@ Current user's request: ${currentInput}`;
|
|
|
1152
1151
|
* @returns The original prompt text as a string.
|
|
1153
1152
|
*/
|
|
1154
1153
|
_extractOriginalPrompt(optionsOrPrompt) {
|
|
1155
|
-
|
|
1156
|
-
|
|
1157
|
-
|
|
1154
|
+
if (typeof optionsOrPrompt === "string") {
|
|
1155
|
+
return optionsOrPrompt;
|
|
1156
|
+
}
|
|
1157
|
+
// Handle messages format (for workflow compatibility)
|
|
1158
|
+
const anyOptions = optionsOrPrompt;
|
|
1159
|
+
if (anyOptions.messages && anyOptions.messages.length > 0) {
|
|
1160
|
+
const lastMessage = anyOptions.messages[anyOptions.messages.length - 1];
|
|
1161
|
+
return typeof lastMessage.content === "string"
|
|
1162
|
+
? lastMessage.content
|
|
1163
|
+
: JSON.stringify(lastMessage.content);
|
|
1164
|
+
}
|
|
1165
|
+
// Handle input.text format
|
|
1166
|
+
return optionsOrPrompt.input?.text || "";
|
|
1158
1167
|
}
|
|
1159
1168
|
/**
|
|
1160
1169
|
* Generate AI content using the best available provider with MCP tool integration.
|
|
@@ -1381,6 +1390,10 @@ Current user's request: ${currentInput}`;
|
|
|
1381
1390
|
if (!options.input?.text || typeof options.input.text !== "string") {
|
|
1382
1391
|
throw new Error("Input text is required and must be a non-empty string");
|
|
1383
1392
|
}
|
|
1393
|
+
// Check if workflow is requested
|
|
1394
|
+
if (options.workflow || options.workflowConfig) {
|
|
1395
|
+
return await this.generateWithWorkflow(options);
|
|
1396
|
+
}
|
|
1384
1397
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
1385
1398
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
1386
1399
|
if (this.conversationMemoryConfig?.conversationMemory?.mem0Enabled &&
|
|
@@ -1449,6 +1462,39 @@ Current user's request: ${currentInput}`;
|
|
|
1449
1462
|
// Continue with warning rather than throwing - graceful degradation
|
|
1450
1463
|
}
|
|
1451
1464
|
}
|
|
1465
|
+
// RAG Integration: If rag config is provided, prepare the RAG search tool
|
|
1466
|
+
if (options.rag?.files?.length) {
|
|
1467
|
+
try {
|
|
1468
|
+
const { prepareRAGTool } = await import("./rag/ragIntegration.js");
|
|
1469
|
+
const ragResult = await prepareRAGTool(options.rag, options.provider);
|
|
1470
|
+
// Inject the RAG tool into the tools record
|
|
1471
|
+
if (!options.tools) {
|
|
1472
|
+
options.tools = {};
|
|
1473
|
+
}
|
|
1474
|
+
options.tools[ragResult.toolName] =
|
|
1475
|
+
ragResult.tool;
|
|
1476
|
+
// Inject RAG-aware system prompt so the AI uses the RAG tool first
|
|
1477
|
+
const ragSystemInstruction = [
|
|
1478
|
+
`\n\nIMPORTANT: You have a tool called "${ragResult.toolName}" that searches through`,
|
|
1479
|
+
`${ragResult.filesLoaded} loaded document(s) containing ${ragResult.chunksIndexed} indexed chunks.`,
|
|
1480
|
+
`ALWAYS use the "${ragResult.toolName}" tool FIRST to answer the user's question before using any other tools.`,
|
|
1481
|
+
`This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.`,
|
|
1482
|
+
`Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents.`,
|
|
1483
|
+
].join(" ");
|
|
1484
|
+
options.systemPrompt =
|
|
1485
|
+
(options.systemPrompt || "") + ragSystemInstruction;
|
|
1486
|
+
logger.info("[RAG] Tool injected into generate()", {
|
|
1487
|
+
toolName: ragResult.toolName,
|
|
1488
|
+
filesLoaded: ragResult.filesLoaded,
|
|
1489
|
+
chunksIndexed: ragResult.chunksIndexed,
|
|
1490
|
+
});
|
|
1491
|
+
}
|
|
1492
|
+
catch (error) {
|
|
1493
|
+
logger.warn("[RAG] Failed to prepare RAG tool, continuing without RAG", {
|
|
1494
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1495
|
+
});
|
|
1496
|
+
}
|
|
1497
|
+
}
|
|
1452
1498
|
// 🔧 CRITICAL FIX: Convert to TextGenerationOptions while preserving the input object for multimodal support
|
|
1453
1499
|
const baseOptions = {
|
|
1454
1500
|
prompt: options.input.text,
|
|
@@ -1459,6 +1505,7 @@ Current user's request: ${currentInput}`;
|
|
|
1459
1505
|
systemPrompt: options.systemPrompt,
|
|
1460
1506
|
schema: options.schema,
|
|
1461
1507
|
output: options.output,
|
|
1508
|
+
tools: options.tools, // Includes RAG tools if rag config was provided
|
|
1462
1509
|
disableTools: options.disableTools,
|
|
1463
1510
|
enableAnalytics: options.enableAnalytics,
|
|
1464
1511
|
enableEvaluation: options.enableEvaluation,
|
|
@@ -1572,6 +1619,246 @@ Current user's request: ${currentInput}`;
|
|
|
1572
1619
|
return generateResult;
|
|
1573
1620
|
});
|
|
1574
1621
|
}
|
|
1622
|
+
/**
|
|
1623
|
+
* Generate with workflow engine integration
|
|
1624
|
+
* Returns both original and processed responses for AB testing
|
|
1625
|
+
*/
|
|
1626
|
+
async generateWithWorkflow(options) {
|
|
1627
|
+
const workflowStartTime = Date.now();
|
|
1628
|
+
logger.debug("[NeuroLink] Executing workflow generation", {
|
|
1629
|
+
workflowId: options.workflow,
|
|
1630
|
+
hasInlineConfig: !!options.workflowConfig,
|
|
1631
|
+
prompt: options.input.text.substring(0, 100),
|
|
1632
|
+
startTime: workflowStartTime,
|
|
1633
|
+
});
|
|
1634
|
+
// Determine workflow configuration
|
|
1635
|
+
let workflowConfig;
|
|
1636
|
+
if (options.workflowConfig) {
|
|
1637
|
+
// Use inline config
|
|
1638
|
+
workflowConfig = options.workflowConfig;
|
|
1639
|
+
}
|
|
1640
|
+
else if (options.workflow) {
|
|
1641
|
+
// Look up predefined workflow
|
|
1642
|
+
workflowConfig = getWorkflow(options.workflow);
|
|
1643
|
+
if (!workflowConfig) {
|
|
1644
|
+
throw new Error(`Workflow '${options.workflow}' not found in registry`);
|
|
1645
|
+
}
|
|
1646
|
+
}
|
|
1647
|
+
else {
|
|
1648
|
+
throw new Error("Either workflow or workflowConfig must be provided");
|
|
1649
|
+
}
|
|
1650
|
+
// Execute workflow
|
|
1651
|
+
const workflowResult = await runWorkflow(workflowConfig, {
|
|
1652
|
+
prompt: options.input.text,
|
|
1653
|
+
conversationHistory: options.conversationHistory,
|
|
1654
|
+
timeout: options.timeout,
|
|
1655
|
+
verbose: false,
|
|
1656
|
+
metadata: options.context,
|
|
1657
|
+
});
|
|
1658
|
+
// Build GenerateResult with workflow data
|
|
1659
|
+
const generateResult = {
|
|
1660
|
+
// Primary output (backward compatible) - use the original best response
|
|
1661
|
+
content: workflowResult.content,
|
|
1662
|
+
// Provider info from selected response
|
|
1663
|
+
provider: workflowResult.selectedResponse?.provider ||
|
|
1664
|
+
workflowConfig.models[0]?.provider,
|
|
1665
|
+
model: workflowResult.selectedResponse?.model ||
|
|
1666
|
+
workflowConfig.models[0]?.model,
|
|
1667
|
+
// Basic usage info
|
|
1668
|
+
usage: workflowResult.usage
|
|
1669
|
+
? {
|
|
1670
|
+
input: workflowResult.usage.totalInputTokens,
|
|
1671
|
+
output: workflowResult.usage.totalOutputTokens,
|
|
1672
|
+
total: workflowResult.usage.totalTokens,
|
|
1673
|
+
}
|
|
1674
|
+
: undefined,
|
|
1675
|
+
// Performance
|
|
1676
|
+
responseTime: workflowResult.totalTime,
|
|
1677
|
+
// Workflow-specific data
|
|
1678
|
+
workflow: {
|
|
1679
|
+
originalResponse: workflowResult.originalContent || workflowResult.content, // Original unmodified best response
|
|
1680
|
+
processedResponse: workflowResult.content, // After conditioning (with metadata)
|
|
1681
|
+
ensembleResponses: workflowResult.ensembleResponses.map((r) => ({
|
|
1682
|
+
provider: r.provider,
|
|
1683
|
+
model: r.model,
|
|
1684
|
+
content: r.content,
|
|
1685
|
+
responseTime: r.responseTime,
|
|
1686
|
+
status: r.status,
|
|
1687
|
+
error: r.error,
|
|
1688
|
+
})),
|
|
1689
|
+
judgeScores: workflowResult.judgeScores
|
|
1690
|
+
? {
|
|
1691
|
+
scores: workflowResult.judgeScores.scores,
|
|
1692
|
+
reasoning: workflowResult.reasoning,
|
|
1693
|
+
selectedModel: `${workflowResult.selectedResponse?.provider}-${workflowResult.selectedResponse?.model}`,
|
|
1694
|
+
}
|
|
1695
|
+
: undefined,
|
|
1696
|
+
selectedModel: `${workflowResult.selectedResponse?.provider}-${workflowResult.selectedResponse?.model}`,
|
|
1697
|
+
metrics: {
|
|
1698
|
+
totalTime: workflowResult.totalTime,
|
|
1699
|
+
ensembleTime: workflowResult.ensembleTime,
|
|
1700
|
+
judgeTime: workflowResult.judgeTime,
|
|
1701
|
+
conditioningTime: workflowResult.conditioningTime,
|
|
1702
|
+
},
|
|
1703
|
+
workflowId: workflowResult.workflow,
|
|
1704
|
+
workflowName: workflowResult.workflowName,
|
|
1705
|
+
},
|
|
1706
|
+
};
|
|
1707
|
+
logger.debug("[NeuroLink] Workflow generation complete", {
|
|
1708
|
+
workflowId: workflowResult.workflow,
|
|
1709
|
+
selectedModel: generateResult.workflow?.selectedModel,
|
|
1710
|
+
score: workflowResult.score,
|
|
1711
|
+
totalTime: workflowResult.totalTime,
|
|
1712
|
+
});
|
|
1713
|
+
return generateResult;
|
|
1714
|
+
}
|
|
1715
|
+
/**
|
|
1716
|
+
* Stream with workflow engine integration
|
|
1717
|
+
* Progressive streaming: yields preliminary response (first model) then final synthesis
|
|
1718
|
+
*/
|
|
1719
|
+
async streamWithWorkflow(options, startTime) {
|
|
1720
|
+
logger.debug("[NeuroLink] Executing workflow streaming (progressive)", {
|
|
1721
|
+
workflowId: options.workflow,
|
|
1722
|
+
hasInlineConfig: !!options.workflowConfig,
|
|
1723
|
+
prompt: options.input.text.substring(0, 100),
|
|
1724
|
+
});
|
|
1725
|
+
// Determine workflow configuration
|
|
1726
|
+
let workflowConfig;
|
|
1727
|
+
if (options.workflowConfig) {
|
|
1728
|
+
workflowConfig = options.workflowConfig;
|
|
1729
|
+
}
|
|
1730
|
+
else if (options.workflow) {
|
|
1731
|
+
workflowConfig = getWorkflow(options.workflow);
|
|
1732
|
+
if (!workflowConfig) {
|
|
1733
|
+
throw new Error(`Workflow '${options.workflow}' not found in registry`);
|
|
1734
|
+
}
|
|
1735
|
+
}
|
|
1736
|
+
else {
|
|
1737
|
+
throw new Error("Either workflow or workflowConfig must be provided");
|
|
1738
|
+
}
|
|
1739
|
+
// Import streaming workflow runner
|
|
1740
|
+
const { runWorkflowWithStreaming } = await import("./workflow/core/workflowRunner.js");
|
|
1741
|
+
// Execute workflow with progressive streaming
|
|
1742
|
+
const workflowStream = runWorkflowWithStreaming(workflowConfig, {
|
|
1743
|
+
prompt: options.input.text,
|
|
1744
|
+
conversationHistory: options.conversationHistory,
|
|
1745
|
+
timeout: options.timeout,
|
|
1746
|
+
verbose: false,
|
|
1747
|
+
metadata: options.context,
|
|
1748
|
+
streaming: true,
|
|
1749
|
+
});
|
|
1750
|
+
// Store final result for metadata
|
|
1751
|
+
let finalResult = null;
|
|
1752
|
+
let preliminaryTime = 0;
|
|
1753
|
+
// Create a generator that yields progressive chunks
|
|
1754
|
+
const stream = (async function* () {
|
|
1755
|
+
for await (const chunk of workflowStream) {
|
|
1756
|
+
if (chunk.type === "preliminary") {
|
|
1757
|
+
preliminaryTime = Date.now() - startTime;
|
|
1758
|
+
logger.debug("[NeuroLink] Streaming preliminary response", {
|
|
1759
|
+
responseTime: preliminaryTime,
|
|
1760
|
+
contentLength: chunk.content.length,
|
|
1761
|
+
});
|
|
1762
|
+
yield {
|
|
1763
|
+
content: chunk.content,
|
|
1764
|
+
type: "preliminary",
|
|
1765
|
+
};
|
|
1766
|
+
}
|
|
1767
|
+
else if (chunk.type === "final") {
|
|
1768
|
+
finalResult = chunk.partialResult ?? null;
|
|
1769
|
+
const finalTime = Date.now() - startTime;
|
|
1770
|
+
logger.debug("[NeuroLink] Streaming final synthesis", {
|
|
1771
|
+
responseTime: finalTime,
|
|
1772
|
+
contentLength: chunk.content.length,
|
|
1773
|
+
});
|
|
1774
|
+
yield {
|
|
1775
|
+
content: chunk.content,
|
|
1776
|
+
type: "final",
|
|
1777
|
+
};
|
|
1778
|
+
}
|
|
1779
|
+
}
|
|
1780
|
+
})();
|
|
1781
|
+
const streamResult = {
|
|
1782
|
+
stream,
|
|
1783
|
+
// Provider info (will be from final result)
|
|
1784
|
+
provider: workflowConfig.models[0]?.provider,
|
|
1785
|
+
model: workflowConfig.models[0]?.model,
|
|
1786
|
+
// Metadata
|
|
1787
|
+
metadata: {
|
|
1788
|
+
streamId: `workflow-${workflowConfig.id}-${Date.now()}`,
|
|
1789
|
+
startTime,
|
|
1790
|
+
responseTime: 0, // Will be updated after stream completes
|
|
1791
|
+
},
|
|
1792
|
+
// Note: Workflow data will be populated after stream completes
|
|
1793
|
+
// For now, return placeholder that will be updated via stream metadata
|
|
1794
|
+
};
|
|
1795
|
+
// Wrap stream to capture final result and populate metadata
|
|
1796
|
+
const originalStream = streamResult.stream;
|
|
1797
|
+
streamResult.stream = (async function* () {
|
|
1798
|
+
for await (const chunk of originalStream) {
|
|
1799
|
+
yield chunk;
|
|
1800
|
+
}
|
|
1801
|
+
// After stream completes, update result with final workflow data
|
|
1802
|
+
if (finalResult) {
|
|
1803
|
+
const result = finalResult;
|
|
1804
|
+
const responseTime = Date.now() - startTime;
|
|
1805
|
+
// Update usage if available
|
|
1806
|
+
if (result.usage) {
|
|
1807
|
+
streamResult.usage = {
|
|
1808
|
+
input: result.usage.totalInputTokens,
|
|
1809
|
+
output: result.usage.totalOutputTokens,
|
|
1810
|
+
total: result.usage.totalTokens,
|
|
1811
|
+
};
|
|
1812
|
+
}
|
|
1813
|
+
// Update metadata
|
|
1814
|
+
streamResult.metadata = {
|
|
1815
|
+
...streamResult.metadata,
|
|
1816
|
+
totalChunks: 2, // Preliminary + final
|
|
1817
|
+
responseTime,
|
|
1818
|
+
preliminaryTime,
|
|
1819
|
+
};
|
|
1820
|
+
// Build workflow data with proper type safety
|
|
1821
|
+
const ensembleResponses = result.ensembleResponses?.map((r) => ({
|
|
1822
|
+
provider: r.provider,
|
|
1823
|
+
model: r.model,
|
|
1824
|
+
content: r.content,
|
|
1825
|
+
responseTime: r.responseTime,
|
|
1826
|
+
status: r.status,
|
|
1827
|
+
error: r.error,
|
|
1828
|
+
})) ?? [];
|
|
1829
|
+
const judgeScores = result.judgeScores
|
|
1830
|
+
? {
|
|
1831
|
+
scores: result.judgeScores.scores,
|
|
1832
|
+
reasoning: result.reasoning ?? "",
|
|
1833
|
+
selectedModel: result.selectedResponse
|
|
1834
|
+
? `${result.selectedResponse.provider}-${result.selectedResponse.model}`
|
|
1835
|
+
: "unknown",
|
|
1836
|
+
}
|
|
1837
|
+
: undefined;
|
|
1838
|
+
streamResult.workflow = {
|
|
1839
|
+
originalResponse: result.originalContent ?? result.content ?? "",
|
|
1840
|
+
processedResponse: result.content ?? "",
|
|
1841
|
+
ensembleResponses,
|
|
1842
|
+
judgeScores,
|
|
1843
|
+
selectedModel: result.selectedResponse
|
|
1844
|
+
? `${result.selectedResponse.provider}-${result.selectedResponse.model}`
|
|
1845
|
+
: "unknown",
|
|
1846
|
+
metrics: {
|
|
1847
|
+
totalTime: result.totalTime ?? responseTime,
|
|
1848
|
+
ensembleTime: result.ensembleTime ?? 0,
|
|
1849
|
+
judgeTime: result.judgeTime,
|
|
1850
|
+
conditioningTime: result.conditioningTime,
|
|
1851
|
+
},
|
|
1852
|
+
workflowId: result.workflow ?? workflowConfig.id,
|
|
1853
|
+
workflowName: result.workflowName ?? workflowConfig.name,
|
|
1854
|
+
};
|
|
1855
|
+
}
|
|
1856
|
+
})();
|
|
1857
|
+
logger.debug("[NeuroLink] Workflow streaming initialized", {
|
|
1858
|
+
workflowId: workflowConfig.id,
|
|
1859
|
+
});
|
|
1860
|
+
return streamResult;
|
|
1861
|
+
}
|
|
1575
1862
|
/**
|
|
1576
1863
|
* BACKWARD COMPATIBILITY: Legacy generateText method
|
|
1577
1864
|
* Internally calls generate() and converts result format
|
|
@@ -2105,6 +2392,10 @@ Current user's request: ${currentInput}`;
|
|
|
2105
2392
|
const originalPrompt = options.input.text; // Store the original prompt for memory storage
|
|
2106
2393
|
await this.validateStreamInput(options);
|
|
2107
2394
|
this.emitStreamStartEvents(options, startTime);
|
|
2395
|
+
// Check if workflow is requested
|
|
2396
|
+
if (options.workflow || options.workflowConfig) {
|
|
2397
|
+
return await this.streamWithWorkflow(options, startTime);
|
|
2398
|
+
}
|
|
2108
2399
|
// Set session and user IDs from context for Langfuse spans and execute with proper async scoping
|
|
2109
2400
|
return await this.setLangfuseContextFromOptions(options, async () => {
|
|
2110
2401
|
let enhancedOptions;
|
|
@@ -2184,6 +2475,39 @@ Current user's request: ${currentInput}`;
|
|
|
2184
2475
|
}
|
|
2185
2476
|
}
|
|
2186
2477
|
}
|
|
2478
|
+
// RAG Integration: If rag config is provided, prepare the RAG search tool (stream)
|
|
2479
|
+
if (options.rag?.files?.length) {
|
|
2480
|
+
try {
|
|
2481
|
+
const { prepareRAGTool } = await import("./rag/ragIntegration.js");
|
|
2482
|
+
const ragResult = await prepareRAGTool(options.rag, options.provider);
|
|
2483
|
+
// Inject the RAG tool into the tools record
|
|
2484
|
+
if (!options.tools) {
|
|
2485
|
+
options.tools = {};
|
|
2486
|
+
}
|
|
2487
|
+
options.tools[ragResult.toolName] =
|
|
2488
|
+
ragResult.tool;
|
|
2489
|
+
// Inject RAG-aware system prompt so the AI uses the RAG tool first
|
|
2490
|
+
const ragStreamInstruction = [
|
|
2491
|
+
`\n\nIMPORTANT: You have a tool called "${ragResult.toolName}" that searches through`,
|
|
2492
|
+
`${ragResult.filesLoaded} loaded document(s) containing ${ragResult.chunksIndexed} indexed chunks.`,
|
|
2493
|
+
`ALWAYS use the "${ragResult.toolName}" tool FIRST to answer the user's question before using any other tools.`,
|
|
2494
|
+
`This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.`,
|
|
2495
|
+
`Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents.`,
|
|
2496
|
+
].join(" ");
|
|
2497
|
+
options.systemPrompt =
|
|
2498
|
+
(options.systemPrompt || "") + ragStreamInstruction;
|
|
2499
|
+
logger.info("[RAG] Tool injected into stream()", {
|
|
2500
|
+
toolName: ragResult.toolName,
|
|
2501
|
+
filesLoaded: ragResult.filesLoaded,
|
|
2502
|
+
chunksIndexed: ragResult.chunksIndexed,
|
|
2503
|
+
});
|
|
2504
|
+
}
|
|
2505
|
+
catch (error) {
|
|
2506
|
+
logger.warn("[RAG] Failed to prepare RAG tool, continuing without RAG", {
|
|
2507
|
+
error: error instanceof Error ? error.message : String(error),
|
|
2508
|
+
});
|
|
2509
|
+
}
|
|
2510
|
+
}
|
|
2187
2511
|
factoryResult = processStreamingFactoryOptions(options);
|
|
2188
2512
|
enhancedOptions = createCleanStreamOptions(options);
|
|
2189
2513
|
if (options.input?.text) {
|
|
@@ -2330,7 +2654,7 @@ Current user's request: ${currentInput}`;
|
|
|
2330
2654
|
if (self.conversationMemory && enhancedOptions.context?.sessionId) {
|
|
2331
2655
|
const sessionId = enhancedOptions.context?.sessionId;
|
|
2332
2656
|
const userId = enhancedOptions.context?.userId;
|
|
2333
|
-
let providerDetails
|
|
2657
|
+
let providerDetails;
|
|
2334
2658
|
if (enhancedOptions.model) {
|
|
2335
2659
|
providerDetails = {
|
|
2336
2660
|
provider: providerName,
|
|
@@ -2557,7 +2881,7 @@ Current user's request: ${currentInput}`;
|
|
|
2557
2881
|
const sessionId = enhancedOptions?.context?.sessionId;
|
|
2558
2882
|
const userId = enhancedOptions?.context
|
|
2559
2883
|
?.userId;
|
|
2560
|
-
let providerDetails
|
|
2884
|
+
let providerDetails;
|
|
2561
2885
|
if (options.model) {
|
|
2562
2886
|
providerDetails = {
|
|
2563
2887
|
provider: providerName,
|
|
@@ -3907,7 +4231,10 @@ Current user's request: ${currentInput}`;
|
|
|
3907
4231
|
async hasProviderEnvVars(providerName) {
|
|
3908
4232
|
const { ProviderHealthChecker } = await import("./utils/providerHealth.js");
|
|
3909
4233
|
try {
|
|
3910
|
-
const health = await ProviderHealthChecker.checkProviderHealth(providerName, {
|
|
4234
|
+
const health = await ProviderHealthChecker.checkProviderHealth(providerName, {
|
|
4235
|
+
includeConnectivityTest: false,
|
|
4236
|
+
cacheResults: false,
|
|
4237
|
+
});
|
|
3911
4238
|
return health.isConfigured && health.hasApiKey;
|
|
3912
4239
|
}
|
|
3913
4240
|
catch (error) {
|
|
@@ -4511,7 +4838,7 @@ Current user's request: ${currentInput}`;
|
|
|
4511
4838
|
// Import the integration module
|
|
4512
4839
|
const { initializeConversationMemory } = await import("./core/conversationMemoryInitializer.js");
|
|
4513
4840
|
// Use the integration module to create the appropriate memory manager
|
|
4514
|
-
const memoryManager = await initializeConversationMemory(this.conversationMemoryConfig
|
|
4841
|
+
const memoryManager = await initializeConversationMemory(this.conversationMemoryConfig);
|
|
4515
4842
|
// Assign to conversationMemory with proper type to handle both memory manager types
|
|
4516
4843
|
this.conversationMemory = memoryManager;
|
|
4517
4844
|
// Reset the lazy init flag since we've now initialized
|
|
@@ -1,9 +1,9 @@
|
|
|
1
1
|
import { BedrockRuntimeClient } from "@aws-sdk/client-bedrock-runtime";
|
|
2
|
+
import type { AIProviderName } from "../constants/enums.js";
|
|
2
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
4
|
+
import type { NeuroLink } from "../neurolink.js";
|
|
3
5
|
import type { EnhancedGenerateResult, TextGenerationOptions } from "../types/index.js";
|
|
4
|
-
import { AIProviderName } from "../constants/enums.js";
|
|
5
6
|
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
6
|
-
import type { NeuroLink } from "../neurolink.js";
|
|
7
7
|
export declare class AmazonBedrockProvider extends BaseProvider {
|
|
8
8
|
private bedrockClient;
|
|
9
9
|
private conversationHistory;
|
|
@@ -17,6 +17,11 @@ export declare class AmazonBedrockProvider extends BaseProvider {
|
|
|
17
17
|
getAISDKModel(): never;
|
|
18
18
|
getProviderName(): AIProviderName;
|
|
19
19
|
getDefaultModel(): string;
|
|
20
|
+
/**
|
|
21
|
+
* Get the default embedding model for Amazon Bedrock
|
|
22
|
+
* @returns The default Bedrock embedding model name
|
|
23
|
+
*/
|
|
24
|
+
protected getDefaultEmbeddingModel(): string;
|
|
20
25
|
generate(optionsOrPrompt: TextGenerationOptions | string): Promise<EnhancedGenerateResult | null>;
|
|
21
26
|
private conversationLoop;
|
|
22
27
|
private callBedrock;
|
|
@@ -40,4 +45,12 @@ export declare class AmazonBedrockProvider extends BaseProvider {
|
|
|
40
45
|
*/
|
|
41
46
|
checkBedrockHealth(): Promise<void>;
|
|
42
47
|
handleProviderError(error: unknown): Error;
|
|
48
|
+
/**
|
|
49
|
+
* Generate embeddings for text using Amazon Bedrock embedding models
|
|
50
|
+
* Uses the native AWS SDK InvokeModel command for Titan embeddings
|
|
51
|
+
* @param text - The text to embed
|
|
52
|
+
* @param modelName - The embedding model to use (default: amazon.titan-embed-text-v2:0)
|
|
53
|
+
* @returns Promise resolving to the embedding vector
|
|
54
|
+
*/
|
|
55
|
+
embed(text: string, modelName?: string): Promise<number[]>;
|
|
43
56
|
}
|
|
@@ -1,14 +1,13 @@
|
|
|
1
|
-
import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, ImageFormat, } from "@aws-sdk/client-bedrock-runtime";
|
|
2
1
|
import { BedrockClient, ListFoundationModelsCommand, } from "@aws-sdk/client-bedrock";
|
|
2
|
+
import { BedrockRuntimeClient, ConverseCommand, ConverseStreamCommand, ImageFormat, } from "@aws-sdk/client-bedrock-runtime";
|
|
3
|
+
import path from "path";
|
|
4
|
+
import { createAnalytics } from "../core/analytics.js";
|
|
3
5
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
4
|
-
import {
|
|
6
|
+
import { DEFAULT_MAX_STEPS } from "../core/constants.js";
|
|
5
7
|
import { logger } from "../utils/logger.js";
|
|
6
|
-
import { convertZodToJsonSchema } from "../utils/schemaConversion.js";
|
|
7
8
|
import { buildMultimodalMessagesArray } from "../utils/messageBuilder.js";
|
|
8
9
|
import { buildMultimodalOptions } from "../utils/multimodalOptionsBuilder.js";
|
|
9
|
-
import {
|
|
10
|
-
import { createAnalytics } from "../core/analytics.js";
|
|
11
|
-
import path from "path";
|
|
10
|
+
import { convertZodToJsonSchema } from "../utils/schemaConversion.js";
|
|
12
11
|
// Bedrock-specific types now imported from ../types/providerSpecific.js
|
|
13
12
|
export class AmazonBedrockProvider extends BaseProvider {
|
|
14
13
|
bedrockClient;
|
|
@@ -88,6 +87,15 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
88
87
|
getDefaultModel() {
|
|
89
88
|
return (process.env.BEDROCK_MODEL || "anthropic.claude-3-sonnet-20240229-v1:0");
|
|
90
89
|
}
|
|
90
|
+
/**
|
|
91
|
+
* Get the default embedding model for Amazon Bedrock
|
|
92
|
+
* @returns The default Bedrock embedding model name
|
|
93
|
+
*/
|
|
94
|
+
getDefaultEmbeddingModel() {
|
|
95
|
+
return (process.env.BEDROCK_EMBEDDING_MODEL ||
|
|
96
|
+
process.env.AWS_EMBEDDING_MODEL ||
|
|
97
|
+
"amazon.titan-embed-text-v2:0");
|
|
98
|
+
}
|
|
91
99
|
// Override the main generate method to implement conversation management
|
|
92
100
|
async generate(optionsOrPrompt) {
|
|
93
101
|
logger.debug("[AmazonBedrockProvider] generate() called with conversation management");
|
|
@@ -158,7 +166,6 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
158
166
|
logger.debug(`[AmazonBedrockProvider] Handle response result:`, result);
|
|
159
167
|
if (result.shouldContinue) {
|
|
160
168
|
logger.debug(`[AmazonBedrockProvider] Continuing conversation loop...`);
|
|
161
|
-
continue;
|
|
162
169
|
}
|
|
163
170
|
else {
|
|
164
171
|
logger.debug(`[AmazonBedrockProvider] Conversation completed with final text`);
|
|
@@ -876,7 +883,9 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
876
883
|
logger.info(`🔍 [AmazonBedrockProvider] Message ${index}: role=${msg.role}, content=${JSON.stringify(msg.content)}`);
|
|
877
884
|
});
|
|
878
885
|
// Get all available tools
|
|
879
|
-
|
|
886
|
+
// BaseProvider.stream() pre-merges base tools + external tools into options.tools
|
|
887
|
+
const aiTools = options.tools ||
|
|
888
|
+
(await this.getAllTools());
|
|
880
889
|
const allTools = this.convertAISDKToolsToToolDefinitions(aiTools);
|
|
881
890
|
const toolConfig = this.formatToolsForBedrock(allTools);
|
|
882
891
|
const convertedMessages = this.convertToAWSMessages(this.conversationHistory);
|
|
@@ -1177,5 +1186,53 @@ export class AmazonBedrockProvider extends BaseProvider {
|
|
|
1177
1186
|
}
|
|
1178
1187
|
return new Error(`AWS Bedrock error: ${message}`);
|
|
1179
1188
|
}
|
|
1189
|
+
/**
|
|
1190
|
+
* Generate embeddings for text using Amazon Bedrock embedding models
|
|
1191
|
+
* Uses the native AWS SDK InvokeModel command for Titan embeddings
|
|
1192
|
+
* @param text - The text to embed
|
|
1193
|
+
* @param modelName - The embedding model to use (default: amazon.titan-embed-text-v2:0)
|
|
1194
|
+
* @returns Promise resolving to the embedding vector
|
|
1195
|
+
*/
|
|
1196
|
+
async embed(text, modelName) {
|
|
1197
|
+
const embeddingModelName = modelName || "amazon.titan-embed-text-v2:0";
|
|
1198
|
+
logger.debug("Generating embedding", {
|
|
1199
|
+
provider: this.providerName,
|
|
1200
|
+
model: embeddingModelName,
|
|
1201
|
+
textLength: text.length,
|
|
1202
|
+
});
|
|
1203
|
+
try {
|
|
1204
|
+
const { InvokeModelCommand } = await import("@aws-sdk/client-bedrock-runtime");
|
|
1205
|
+
// Titan Embed models expect a specific input format
|
|
1206
|
+
const requestBody = JSON.stringify({
|
|
1207
|
+
inputText: text,
|
|
1208
|
+
});
|
|
1209
|
+
const command = new InvokeModelCommand({
|
|
1210
|
+
modelId: embeddingModelName,
|
|
1211
|
+
contentType: "application/json",
|
|
1212
|
+
accept: "application/json",
|
|
1213
|
+
body: requestBody,
|
|
1214
|
+
});
|
|
1215
|
+
const response = await this.bedrockClient.send(command);
|
|
1216
|
+
// Parse the response
|
|
1217
|
+
const responseBody = JSON.parse(new TextDecoder().decode(response.body));
|
|
1218
|
+
if (!responseBody.embedding || !Array.isArray(responseBody.embedding)) {
|
|
1219
|
+
throw new Error("Invalid embedding response from Bedrock");
|
|
1220
|
+
}
|
|
1221
|
+
logger.debug("Embedding generated successfully", {
|
|
1222
|
+
provider: this.providerName,
|
|
1223
|
+
model: embeddingModelName,
|
|
1224
|
+
embeddingDimension: responseBody.embedding.length,
|
|
1225
|
+
});
|
|
1226
|
+
return responseBody.embedding;
|
|
1227
|
+
}
|
|
1228
|
+
catch (error) {
|
|
1229
|
+
logger.error("Embedding generation failed", {
|
|
1230
|
+
error: error instanceof Error ? error.message : String(error),
|
|
1231
|
+
model: embeddingModelName,
|
|
1232
|
+
textLength: text.length,
|
|
1233
|
+
});
|
|
1234
|
+
throw this.handleProviderError(error);
|
|
1235
|
+
}
|
|
1236
|
+
}
|
|
1180
1237
|
}
|
|
1181
1238
|
//# sourceMappingURL=amazonBedrock.js.map
|
|
@@ -1,8 +1,8 @@
|
|
|
1
1
|
import { type LanguageModelV1 } from "ai";
|
|
2
|
-
import type
|
|
3
|
-
import { AIProviderName } from "../constants/enums.js";
|
|
4
|
-
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
2
|
+
import { type AIProviderName } from "../constants/enums.js";
|
|
5
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
4
|
+
import type { StreamOptions, StreamResult } from "../types/streamTypes.js";
|
|
5
|
+
import type { ValidationSchema } from "../types/typeAliases.js";
|
|
6
6
|
/**
|
|
7
7
|
* Anthropic Provider v2 - BaseProvider Implementation
|
|
8
8
|
* Fixed syntax and enhanced with proper error handling
|