@juspay/neurolink 9.32.0 → 9.33.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 +12 -0
- package/dist/auth/anthropicOAuth.js +1 -1
- package/dist/cli/commands/proxy.js +18 -5
- package/dist/client/aiSdkAdapter.js +1 -1
- package/dist/client/index.js +137 -501
- package/dist/core/factory.js +0 -1
- package/dist/core/redisConversationMemoryManager.js +1 -1
- package/dist/features/ppt/slideGenerator.js +0 -1
- package/dist/features/ppt/utils.js +0 -1
- package/dist/lib/neurolink.d.ts +10 -0
- package/dist/lib/neurolink.js +41 -7
- package/dist/lib/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/lib/types/generateTypes.d.ts +16 -0
- package/dist/lib/types/streamTypes.d.ts +15 -0
- package/dist/mcp/elicitationProtocol.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +0 -1
- package/dist/neurolink.d.ts +10 -0
- package/dist/neurolink.js +41 -7
- package/dist/providers/azureOpenai.js +1 -1
- package/dist/providers/huggingFace.js +0 -1
- package/dist/providers/openaiCompatible.js +0 -1
- package/dist/sdk/toolRegistration.js +0 -1
- package/dist/server/openapi/generator.js +1 -1
- package/dist/server/routes/claudeProxyRoutes.js +45 -9
- package/dist/types/configTypes.js +0 -5
- package/dist/types/generateTypes.d.ts +16 -0
- package/dist/types/modelTypes.js +0 -1
- package/dist/types/streamTypes.d.ts +15 -0
- package/dist/types/tools.js +0 -1
- package/dist/types/typeAliases.js +0 -1
- package/dist/types/utilities.js +1 -1
- package/dist/types/workflowTypes.js +0 -1
- package/dist/utils/providerRetry.js +0 -1
- package/dist/utils/providerUtils.js +0 -1
- package/package.json +2 -2
- package/dist/client/adapters/providerImageAdapter.js +0 -588
- package/dist/client/adapters/tts/googleTTSHandler.js +0 -344
- package/dist/client/adapters/video/directorPipeline.js +0 -516
- package/dist/client/adapters/video/ffmpegAdapter.js +0 -206
- package/dist/client/adapters/video/frameExtractor.js +0 -143
- package/dist/client/adapters/video/vertexVideoHandler.js +0 -763
- package/dist/client/adapters/video/videoAnalyzer.js +0 -238
- package/dist/client/adapters/video/videoMerger.js +0 -171
- package/dist/client/agent/directTools.js +0 -840
- package/dist/client/auth/AuthProviderFactory.js +0 -111
- package/dist/client/auth/AuthProviderRegistry.js +0 -190
- package/dist/client/auth/RequestContext.js +0 -78
- package/dist/client/auth/accountPool.js +0 -178
- package/dist/client/auth/anthropicOAuth.js +0 -974
- package/dist/client/auth/authContext.js +0 -314
- package/dist/client/auth/errors.js +0 -39
- package/dist/client/auth/index.js +0 -61
- package/dist/client/auth/middleware/AuthMiddleware.js +0 -519
- package/dist/client/auth/middleware/rateLimitByUser.js +0 -554
- package/dist/client/auth/providers/BaseAuthProvider.js +0 -723
- package/dist/client/auth/providers/CognitoProvider.js +0 -304
- package/dist/client/auth/providers/KeycloakProvider.js +0 -393
- package/dist/client/auth/providers/auth0.js +0 -274
- package/dist/client/auth/providers/betterAuth.js +0 -182
- package/dist/client/auth/providers/clerk.js +0 -317
- package/dist/client/auth/providers/custom.js +0 -112
- package/dist/client/auth/providers/firebase.js +0 -226
- package/dist/client/auth/providers/jwt.js +0 -212
- package/dist/client/auth/providers/oauth2.js +0 -303
- package/dist/client/auth/providers/supabase.js +0 -259
- package/dist/client/auth/providers/workos.js +0 -284
- package/dist/client/auth/serverBridge.js +0 -25
- package/dist/client/auth/sessionManager.js +0 -437
- package/dist/client/auth/tokenStore.js +0 -799
- package/dist/client/client/aiSdkAdapter.js +0 -487
- package/dist/client/client/auth.js +0 -473
- package/dist/client/client/errors.js +0 -552
- package/dist/client/client/httpClient.js +0 -837
- package/dist/client/client/index.js +0 -172
- package/dist/client/client/interceptors.js +0 -601
- package/dist/client/client/sseClient.js +0 -545
- package/dist/client/client/streamingClient.js +0 -917
- package/dist/client/client/wsClient.js +0 -369
- package/dist/client/config/configManager.js +0 -303
- package/dist/client/config/conversationMemory.js +0 -86
- package/dist/client/config/taskClassificationConfig.js +0 -148
- package/dist/client/constants/contextWindows.js +0 -295
- package/dist/client/constants/enums.js +0 -853
- package/dist/client/constants/index.js +0 -207
- package/dist/client/constants/performance.js +0 -389
- package/dist/client/constants/retry.js +0 -266
- package/dist/client/constants/timeouts.js +0 -182
- package/dist/client/constants/tokens.js +0 -380
- package/dist/client/constants/videoErrors.js +0 -46
- package/dist/client/context/budgetChecker.js +0 -98
- package/dist/client/context/contextCompactor.js +0 -205
- package/dist/client/context/emergencyTruncation.js +0 -88
- package/dist/client/context/errorDetection.js +0 -171
- package/dist/client/context/errors.js +0 -21
- package/dist/client/context/fileTokenBudget.js +0 -127
- package/dist/client/context/prompts/summarizationPrompt.js +0 -117
- package/dist/client/context/stages/fileReadDeduplicator.js +0 -66
- package/dist/client/context/stages/slidingWindowTruncator.js +0 -190
- package/dist/client/context/stages/structuredSummarizer.js +0 -99
- package/dist/client/context/stages/toolOutputPruner.js +0 -52
- package/dist/client/context/summarizationEngine.js +0 -136
- package/dist/client/context/toolOutputLimits.js +0 -78
- package/dist/client/context/toolPairRepair.js +0 -66
- package/dist/client/core/analytics.js +0 -88
- package/dist/client/core/baseProvider.js +0 -1385
- package/dist/client/core/constants.js +0 -140
- package/dist/client/core/conversationMemoryFactory.js +0 -141
- package/dist/client/core/conversationMemoryInitializer.js +0 -128
- package/dist/client/core/conversationMemoryManager.js +0 -344
- package/dist/client/core/dynamicModels.js +0 -358
- package/dist/client/core/evaluation.js +0 -309
- package/dist/client/core/evaluationProviders.js +0 -248
- package/dist/client/core/factory.js +0 -412
- package/dist/client/core/infrastructure/baseError.js +0 -22
- package/dist/client/core/infrastructure/baseFactory.js +0 -54
- package/dist/client/core/infrastructure/baseRegistry.js +0 -53
- package/dist/client/core/infrastructure/index.js +0 -5
- package/dist/client/core/infrastructure/retry.js +0 -20
- package/dist/client/core/infrastructure/typedEventEmitter.js +0 -23
- package/dist/client/core/modelConfiguration.js +0 -851
- package/dist/client/core/modules/GenerationHandler.js +0 -588
- package/dist/client/core/modules/MessageBuilder.js +0 -273
- package/dist/client/core/modules/StreamHandler.js +0 -185
- package/dist/client/core/modules/TelemetryHandler.js +0 -203
- package/dist/client/core/modules/ToolsManager.js +0 -499
- package/dist/client/core/modules/Utilities.js +0 -331
- package/dist/client/core/redisConversationMemoryManager.js +0 -1435
- package/dist/client/core/streamAnalytics.js +0 -131
- package/dist/client/evaluation/contextBuilder.js +0 -134
- package/dist/client/evaluation/index.js +0 -61
- package/dist/client/evaluation/prompts.js +0 -73
- package/dist/client/evaluation/ragasEvaluator.js +0 -110
- package/dist/client/evaluation/retryManager.js +0 -78
- package/dist/client/evaluation/scoring.js +0 -61
- package/dist/client/factories/providerFactory.js +0 -166
- package/dist/client/factories/providerRegistry.js +0 -166
- package/dist/client/features/ppt/constants.js +0 -896
- package/dist/client/features/ppt/contentPlanner.js +0 -529
- package/dist/client/features/ppt/presentationOrchestrator.js +0 -236
- package/dist/client/features/ppt/slideGenerator.js +0 -532
- package/dist/client/features/ppt/slideRenderers.js +0 -2383
- package/dist/client/features/ppt/slideTypeInference.js +0 -405
- package/dist/client/features/ppt/types.js +0 -13
- package/dist/client/features/ppt/utils.js +0 -443
- package/dist/client/files/fileReferenceRegistry.js +0 -1543
- package/dist/client/files/fileTools.js +0 -450
- package/dist/client/files/streamingReader.js +0 -321
- package/dist/client/files/types.js +0 -23
- package/dist/client/hitl/hitlErrors.js +0 -54
- package/dist/client/hitl/hitlManager.js +0 -460
- package/dist/client/mcp/agentExposure.js +0 -356
- package/dist/client/mcp/auth/index.js +0 -11
- package/dist/client/mcp/auth/oauthClientProvider.js +0 -325
- package/dist/client/mcp/auth/tokenStorage.js +0 -134
- package/dist/client/mcp/batching/index.js +0 -10
- package/dist/client/mcp/batching/requestBatcher.js +0 -441
- package/dist/client/mcp/caching/index.js +0 -10
- package/dist/client/mcp/caching/toolCache.js +0 -433
- package/dist/client/mcp/elicitation/elicitationManager.js +0 -376
- package/dist/client/mcp/elicitation/index.js +0 -11
- package/dist/client/mcp/elicitation/types.js +0 -10
- package/dist/client/mcp/elicitationProtocol.js +0 -375
- package/dist/client/mcp/enhancedToolDiscovery.js +0 -481
- package/dist/client/mcp/externalServerManager.js +0 -1478
- package/dist/client/mcp/factory.js +0 -161
- package/dist/client/mcp/flexibleToolValidator.js +0 -161
- package/dist/client/mcp/httpRateLimiter.js +0 -391
- package/dist/client/mcp/httpRetryHandler.js +0 -178
- package/dist/client/mcp/index.js +0 -74
- package/dist/client/mcp/mcpCircuitBreaker.js +0 -427
- package/dist/client/mcp/mcpClientFactory.js +0 -708
- package/dist/client/mcp/mcpRegistryClient.js +0 -488
- package/dist/client/mcp/mcpServerBase.js +0 -373
- package/dist/client/mcp/multiServerManager.js +0 -579
- package/dist/client/mcp/registry.js +0 -158
- package/dist/client/mcp/routing/index.js +0 -10
- package/dist/client/mcp/routing/toolRouter.js +0 -416
- package/dist/client/mcp/serverCapabilities.js +0 -502
- package/dist/client/mcp/servers/agent/directToolsServer.js +0 -150
- package/dist/client/mcp/toolAnnotations.js +0 -239
- package/dist/client/mcp/toolConverter.js +0 -258
- package/dist/client/mcp/toolDiscoveryService.js +0 -798
- package/dist/client/mcp/toolIntegration.js +0 -334
- package/dist/client/mcp/toolRegistry.js +0 -729
- package/dist/client/memory/hippocampusInitializer.js +0 -19
- package/dist/client/memory/memoryRetrievalTools.js +0 -166
- package/dist/client/middleware/builtin/analytics.js +0 -132
- package/dist/client/middleware/builtin/autoEvaluation.js +0 -203
- package/dist/client/middleware/builtin/guardrails.js +0 -109
- package/dist/client/middleware/builtin/lifecycle.js +0 -168
- package/dist/client/middleware/factory.js +0 -327
- package/dist/client/middleware/registry.js +0 -295
- package/dist/client/middleware/utils/guardrailsUtils.js +0 -396
- package/dist/client/models/anthropicModels.js +0 -527
- package/dist/client/neurolink.js +0 -8233
- package/dist/client/observability/exporterRegistry.js +0 -413
- package/dist/client/observability/exporters/arizeExporter.js +0 -138
- package/dist/client/observability/exporters/baseExporter.js +0 -190
- package/dist/client/observability/exporters/braintrustExporter.js +0 -154
- package/dist/client/observability/exporters/datadogExporter.js +0 -196
- package/dist/client/observability/exporters/laminarExporter.js +0 -302
- package/dist/client/observability/exporters/langfuseExporter.js +0 -209
- package/dist/client/observability/exporters/langsmithExporter.js +0 -143
- package/dist/client/observability/exporters/otelExporter.js +0 -164
- package/dist/client/observability/exporters/posthogExporter.js +0 -287
- package/dist/client/observability/exporters/sentryExporter.js +0 -165
- package/dist/client/observability/index.js +0 -31
- package/dist/client/observability/metricsAggregator.js +0 -556
- package/dist/client/observability/otelBridge.js +0 -131
- package/dist/client/observability/retryPolicy.js +0 -383
- package/dist/client/observability/sampling/samplers.js +0 -216
- package/dist/client/observability/spanProcessor.js +0 -303
- package/dist/client/observability/tokenTracker.js +0 -413
- package/dist/client/observability/types/exporterTypes.js +0 -5
- package/dist/client/observability/types/index.js +0 -4
- package/dist/client/observability/types/spanTypes.js +0 -92
- package/dist/client/observability/utils/safeMetadata.js +0 -25
- package/dist/client/observability/utils/spanSerializer.js +0 -292
- package/dist/client/processors/archive/ArchiveProcessor.js +0 -1308
- package/dist/client/processors/base/BaseFileProcessor.js +0 -614
- package/dist/client/processors/base/types.js +0 -82
- package/dist/client/processors/config/fileTypes.js +0 -520
- package/dist/client/processors/config/index.js +0 -92
- package/dist/client/processors/config/languageMap.js +0 -410
- package/dist/client/processors/config/mimeTypes.js +0 -363
- package/dist/client/processors/config/sizeLimits.js +0 -258
- package/dist/client/processors/document/ExcelProcessor.js +0 -590
- package/dist/client/processors/document/OpenDocumentProcessor.js +0 -212
- package/dist/client/processors/document/PptxProcessor.js +0 -157
- package/dist/client/processors/document/RtfProcessor.js +0 -361
- package/dist/client/processors/document/WordProcessor.js +0 -353
- package/dist/client/processors/errors/FileErrorCode.js +0 -255
- package/dist/client/processors/errors/errorHelpers.js +0 -386
- package/dist/client/processors/errors/errorSerializer.js +0 -507
- package/dist/client/processors/errors/index.js +0 -49
- package/dist/client/processors/markup/SvgProcessor.js +0 -240
- package/dist/client/processors/media/AudioProcessor.js +0 -707
- package/dist/client/processors/media/VideoProcessor.js +0 -1045
- package/dist/client/providers/amazonBedrock.js +0 -1512
- package/dist/client/providers/amazonSagemaker.js +0 -162
- package/dist/client/providers/anthropic.js +0 -831
- package/dist/client/providers/azureOpenai.js +0 -143
- package/dist/client/providers/googleAiStudio.js +0 -1200
- package/dist/client/providers/googleNativeGemini3.js +0 -543
- package/dist/client/providers/googleVertex.js +0 -2936
- package/dist/client/providers/huggingFace.js +0 -315
- package/dist/client/providers/litellm.js +0 -488
- package/dist/client/providers/mistral.js +0 -157
- package/dist/client/providers/ollama.js +0 -1579
- package/dist/client/providers/openAI.js +0 -627
- package/dist/client/providers/openRouter.js +0 -543
- package/dist/client/providers/openaiCompatible.js +0 -290
- package/dist/client/providers/providerTypeUtils.js +0 -46
- package/dist/client/providers/sagemaker/adaptive-semaphore.js +0 -215
- package/dist/client/providers/sagemaker/client.js +0 -472
- package/dist/client/providers/sagemaker/config.js +0 -317
- package/dist/client/providers/sagemaker/detection.js +0 -606
- package/dist/client/providers/sagemaker/error-constants.js +0 -227
- package/dist/client/providers/sagemaker/errors.js +0 -299
- package/dist/client/providers/sagemaker/language-model.js +0 -775
- package/dist/client/providers/sagemaker/parsers.js +0 -634
- package/dist/client/providers/sagemaker/streaming.js +0 -331
- package/dist/client/providers/sagemaker/structured-parser.js +0 -625
- package/dist/client/proxy/accountQuota.js +0 -162
- package/dist/client/proxy/claudeFormat.js +0 -595
- package/dist/client/proxy/modelRouter.js +0 -29
- package/dist/client/proxy/oauthFetch.js +0 -367
- package/dist/client/proxy/proxyFetch.js +0 -586
- package/dist/client/proxy/requestLogger.js +0 -207
- package/dist/client/proxy/tokenRefresh.js +0 -124
- package/dist/client/proxy/usageStats.js +0 -74
- package/dist/client/proxy/utils/noProxyUtils.js +0 -149
- package/dist/client/rag/ChunkerFactory.js +0 -320
- package/dist/client/rag/ChunkerRegistry.js +0 -421
- package/dist/client/rag/chunkers/BaseChunker.js +0 -143
- package/dist/client/rag/chunkers/CharacterChunker.js +0 -28
- package/dist/client/rag/chunkers/HTMLChunker.js +0 -38
- package/dist/client/rag/chunkers/JSONChunker.js +0 -68
- package/dist/client/rag/chunkers/LaTeXChunker.js +0 -63
- package/dist/client/rag/chunkers/MarkdownChunker.js +0 -306
- package/dist/client/rag/chunkers/RecursiveChunker.js +0 -139
- package/dist/client/rag/chunkers/SemanticMarkdownChunker.js +0 -138
- package/dist/client/rag/chunkers/SentenceChunker.js +0 -66
- package/dist/client/rag/chunkers/TokenChunker.js +0 -61
- package/dist/client/rag/chunkers/index.js +0 -15
- package/dist/client/rag/chunking/characterChunker.js +0 -142
- package/dist/client/rag/chunking/chunkerRegistry.js +0 -194
- package/dist/client/rag/chunking/htmlChunker.js +0 -247
- package/dist/client/rag/chunking/index.js +0 -17
- package/dist/client/rag/chunking/jsonChunker.js +0 -281
- package/dist/client/rag/chunking/latexChunker.js +0 -251
- package/dist/client/rag/chunking/markdownChunker.js +0 -373
- package/dist/client/rag/chunking/recursiveChunker.js +0 -148
- package/dist/client/rag/chunking/semanticChunker.js +0 -306
- package/dist/client/rag/chunking/sentenceChunker.js +0 -230
- package/dist/client/rag/chunking/tokenChunker.js +0 -183
- package/dist/client/rag/document/MDocument.js +0 -392
- package/dist/client/rag/document/index.js +0 -5
- package/dist/client/rag/document/loaders.js +0 -500
- package/dist/client/rag/errors/RAGError.js +0 -274
- package/dist/client/rag/errors/index.js +0 -6
- package/dist/client/rag/graphRag/graphRAG.js +0 -401
- package/dist/client/rag/graphRag/index.js +0 -4
- package/dist/client/rag/index.js +0 -141
- package/dist/client/rag/metadata/MetadataExtractorFactory.js +0 -418
- package/dist/client/rag/metadata/MetadataExtractorRegistry.js +0 -362
- package/dist/client/rag/metadata/index.js +0 -9
- package/dist/client/rag/metadata/metadataExtractor.js +0 -280
- package/dist/client/rag/pipeline/RAGPipeline.js +0 -436
- package/dist/client/rag/pipeline/contextAssembly.js +0 -341
- package/dist/client/rag/pipeline/index.js +0 -5
- package/dist/client/rag/ragIntegration.js +0 -321
- package/dist/client/rag/reranker/RerankerFactory.js +0 -430
- package/dist/client/rag/reranker/RerankerRegistry.js +0 -402
- package/dist/client/rag/reranker/index.js +0 -9
- package/dist/client/rag/reranker/reranker.js +0 -277
- package/dist/client/rag/resilience/CircuitBreaker.js +0 -431
- package/dist/client/rag/resilience/RetryHandler.js +0 -304
- package/dist/client/rag/resilience/index.js +0 -7
- package/dist/client/rag/retrieval/hybridSearch.js +0 -335
- package/dist/client/rag/retrieval/index.js +0 -5
- package/dist/client/rag/retrieval/vectorQueryTool.js +0 -307
- package/dist/client/rag/types.js +0 -8
- package/dist/client/sdk/toolRegistration.js +0 -377
- package/dist/client/server/abstract/baseServerAdapter.js +0 -575
- package/dist/client/server/adapters/expressAdapter.js +0 -486
- package/dist/client/server/adapters/fastifyAdapter.js +0 -472
- package/dist/client/server/adapters/honoAdapter.js +0 -632
- package/dist/client/server/adapters/koaAdapter.js +0 -510
- package/dist/client/server/errors.js +0 -486
- package/dist/client/server/factory/serverAdapterFactory.js +0 -160
- package/dist/client/server/index.js +0 -108
- package/dist/client/server/middleware/abortSignal.js +0 -111
- package/dist/client/server/middleware/auth.js +0 -388
- package/dist/client/server/middleware/cache.js +0 -359
- package/dist/client/server/middleware/common.js +0 -281
- package/dist/client/server/middleware/deprecation.js +0 -190
- package/dist/client/server/middleware/mcpBodyAttachment.js +0 -63
- package/dist/client/server/middleware/rateLimit.js +0 -227
- package/dist/client/server/middleware/validation.js +0 -388
- package/dist/client/server/openapi/generator.js +0 -398
- package/dist/client/server/openapi/index.js +0 -36
- package/dist/client/server/openapi/schemas.js +0 -695
- package/dist/client/server/openapi/templates.js +0 -374
- package/dist/client/server/routes/agentRoutes.js +0 -189
- package/dist/client/server/routes/claudeProxyRoutes.js +0 -1600
- package/dist/client/server/routes/healthRoutes.js +0 -187
- package/dist/client/server/routes/index.js +0 -57
- package/dist/client/server/routes/mcpRoutes.js +0 -342
- package/dist/client/server/routes/memoryRoutes.js +0 -350
- package/dist/client/server/routes/openApiRoutes.js +0 -126
- package/dist/client/server/routes/toolRoutes.js +0 -199
- package/dist/client/server/streaming/dataStream.js +0 -486
- package/dist/client/server/streaming/index.js +0 -11
- package/dist/client/server/types.js +0 -67
- package/dist/client/server/utils/redaction.js +0 -334
- package/dist/client/server/utils/validation.js +0 -243
- package/dist/client/server/websocket/WebSocketHandler.js +0 -383
- package/dist/client/server/websocket/index.js +0 -4
- package/dist/client/services/server/ai/observability/instrumentation.js +0 -808
- package/dist/client/telemetry/attributes.js +0 -100
- package/dist/client/telemetry/index.js +0 -26
- package/dist/client/telemetry/telemetryService.js +0 -308
- package/dist/client/telemetry/tracers.js +0 -17
- package/dist/client/telemetry/withSpan.js +0 -34
- package/dist/client/types/actionTypes.js +0 -6
- package/dist/client/types/analytics.js +0 -5
- package/dist/client/types/authTypes.js +0 -9
- package/dist/client/types/circuitBreakerErrors.js +0 -34
- package/dist/client/types/cli.js +0 -21
- package/dist/client/types/clientTypes.js +0 -10
- package/dist/client/types/common.js +0 -51
- package/dist/client/types/configTypes.js +0 -49
- package/dist/client/types/content.js +0 -19
- package/dist/client/types/contextTypes.js +0 -400
- package/dist/client/types/conversation.js +0 -47
- package/dist/client/types/conversationMemoryInterface.js +0 -6
- package/dist/client/types/domainTypes.js +0 -5
- package/dist/client/types/errors.js +0 -167
- package/dist/client/types/evaluation.js +0 -5
- package/dist/client/types/evaluationProviders.js +0 -5
- package/dist/client/types/evaluationTypes.js +0 -1
- package/dist/client/types/externalMcp.js +0 -6
- package/dist/client/types/fileReferenceTypes.js +0 -8
- package/dist/client/types/fileTypes.js +0 -4
- package/dist/client/types/generateTypes.js +0 -1
- package/dist/client/types/guardrails.js +0 -1
- package/dist/client/types/hitlTypes.js +0 -8
- package/dist/client/types/index.js +0 -57
- package/dist/client/types/mcpTypes.js +0 -5
- package/dist/client/types/middlewareTypes.js +0 -1
- package/dist/client/types/modelTypes.js +0 -30
- package/dist/client/types/multimodal.js +0 -135
- package/dist/client/types/observability.js +0 -6
- package/dist/client/types/pptTypes.js +0 -82
- package/dist/client/types/providers.js +0 -111
- package/dist/client/types/proxyTypes.js +0 -16
- package/dist/client/types/ragTypes.js +0 -7
- package/dist/client/types/sdkTypes.js +0 -8
- package/dist/client/types/serviceTypes.js +0 -5
- package/dist/client/types/streamTypes.js +0 -1
- package/dist/client/types/subscriptionTypes.js +0 -9
- package/dist/client/types/taskClassificationTypes.js +0 -5
- package/dist/client/types/tools.js +0 -24
- package/dist/client/types/ttsTypes.js +0 -57
- package/dist/client/types/typeAliases.js +0 -48
- package/dist/client/types/utilities.js +0 -4
- package/dist/client/types/workflowTypes.js +0 -30
- package/dist/client/utils/async/withTimeout.js +0 -98
- package/dist/client/utils/asyncMutex.js +0 -60
- package/dist/client/utils/conversationMemory.js +0 -431
- package/dist/client/utils/csvProcessor.js +0 -846
- package/dist/client/utils/errorHandling.js +0 -936
- package/dist/client/utils/evaluationUtils.js +0 -131
- package/dist/client/utils/factoryProcessing.js +0 -589
- package/dist/client/utils/fileDetector.js +0 -2161
- package/dist/client/utils/imageCache.js +0 -376
- package/dist/client/utils/imageProcessor.js +0 -704
- package/dist/client/utils/logger.js +0 -491
- package/dist/client/utils/mcpDefaults.js +0 -134
- package/dist/client/utils/messageBuilder.js +0 -1653
- package/dist/client/utils/modelAliasResolver.js +0 -54
- package/dist/client/utils/modelDetection.js +0 -80
- package/dist/client/utils/modelRouter.js +0 -292
- package/dist/client/utils/multimodalOptionsBuilder.js +0 -65
- package/dist/client/utils/observabilityHelpers.js +0 -47
- package/dist/client/utils/parameterValidation.js +0 -966
- package/dist/client/utils/pdfProcessor.js +0 -410
- package/dist/client/utils/performance.js +0 -222
- package/dist/client/utils/pricing.js +0 -340
- package/dist/client/utils/promptRedaction.js +0 -62
- package/dist/client/utils/providerConfig.js +0 -1009
- package/dist/client/utils/providerHealth.js +0 -1237
- package/dist/client/utils/providerRetry.js +0 -112
- package/dist/client/utils/providerUtils.js +0 -434
- package/dist/client/utils/rateLimiter.js +0 -200
- package/dist/client/utils/redis.js +0 -368
- package/dist/client/utils/retryHandler.js +0 -269
- package/dist/client/utils/retryability.js +0 -22
- package/dist/client/utils/sanitizers/svg.js +0 -481
- package/dist/client/utils/schemaConversion.js +0 -255
- package/dist/client/utils/taskClassificationUtils.js +0 -149
- package/dist/client/utils/taskClassifier.js +0 -94
- package/dist/client/utils/thinkingConfig.js +0 -104
- package/dist/client/utils/timeout.js +0 -359
- package/dist/client/utils/tokenEstimation.js +0 -142
- package/dist/client/utils/tokenLimits.js +0 -125
- package/dist/client/utils/tokenUtils.js +0 -239
- package/dist/client/utils/toolUtils.js +0 -75
- package/dist/client/utils/transformationUtils.js +0 -554
- package/dist/client/utils/ttsProcessor.js +0 -286
- package/dist/client/utils/typeUtils.js +0 -97
- package/dist/client/utils/videoAnalysisProcessor.js +0 -67
- package/dist/client/workflow/config.js +0 -398
- package/dist/client/workflow/core/ensembleExecutor.js +0 -407
- package/dist/client/workflow/core/judgeScorer.js +0 -544
- package/dist/client/workflow/core/responseConditioner.js +0 -225
- package/dist/client/workflow/core/types/conditionerTypes.js +0 -7
- package/dist/client/workflow/core/types/ensembleTypes.js +0 -7
- package/dist/client/workflow/core/types/index.js +0 -7
- package/dist/client/workflow/core/types/judgeTypes.js +0 -7
- package/dist/client/workflow/core/types/layerTypes.js +0 -7
- package/dist/client/workflow/core/types/registryTypes.js +0 -7
- package/dist/client/workflow/core/workflowRegistry.js +0 -304
- package/dist/client/workflow/core/workflowRunner.js +0 -586
- package/dist/client/workflow/index.js +0 -50
- package/dist/client/workflow/types.js +0 -9
- package/dist/client/workflow/utils/types/index.js +0 -7
- package/dist/client/workflow/utils/workflowMetrics.js +0 -311
- package/dist/client/workflow/utils/workflowValidation.js +0 -420
- package/dist/client/workflow/workflows/adaptiveWorkflow.js +0 -366
- package/dist/client/workflow/workflows/consensusWorkflow.js +0 -192
- package/dist/client/workflow/workflows/fallbackWorkflow.js +0 -225
- package/dist/client/workflow/workflows/multiJudgeWorkflow.js +0 -351
- /package/dist/client/{client/reactHooks.js → reactHooks.js} +0 -0
package/dist/core/factory.js
CHANGED
|
@@ -8,7 +8,6 @@ import { getBestProvider } from "../utils/providerUtils.js";
|
|
|
8
8
|
import { logger } from "../utils/logger.js";
|
|
9
9
|
import { dynamicModelProvider } from "./dynamicModels.js";
|
|
10
10
|
import { withTimeout } from "../utils/errorHandling.js";
|
|
11
|
-
import { AIProviderName } from "../constants/enums.js";
|
|
12
11
|
const componentIdentifier = "aiProviderFactory";
|
|
13
12
|
const factoryTracer = tracers.factory;
|
|
14
13
|
/**
|
|
@@ -14,7 +14,7 @@ import { withTimeout } from "../utils/errorHandling.js";
|
|
|
14
14
|
import { buildContextFromPointer, getEffectiveTokenThreshold, } from "../utils/conversationMemory.js";
|
|
15
15
|
import { runWithCurrentLangfuseContext } from "../services/server/ai/observability/instrumentation.js";
|
|
16
16
|
import { logger } from "../utils/logger.js";
|
|
17
|
-
import {
|
|
17
|
+
import { deserializeConversation, getNormalizedConfig, getPooledRedisClient, getSessionKey, getUserSessionsKey, releasePooledRedisClient, scanKeys, serializeConversation, } from "../utils/redis.js";
|
|
18
18
|
const redisTracer = tracers.redis;
|
|
19
19
|
/**
|
|
20
20
|
* Redis-based implementation of the ConversationMemoryManager
|
|
@@ -26,7 +26,6 @@ import { logger } from "../../utils/logger.js";
|
|
|
26
26
|
import { withTimeout, ErrorFactory, NeuroLinkError, } from "../../utils/errorHandling.js";
|
|
27
27
|
import { SpanSerializer, SpanType, SpanStatus, } from "../../observability/index.js";
|
|
28
28
|
import { getMetricsAggregator } from "../../observability/index.js";
|
|
29
|
-
import { NeuroLink } from "../../neurolink.js";
|
|
30
29
|
import { LAYOUT_POSITIONS, renderTitleSlide, renderSectionHeaderSlide, renderThankYouSlide, renderContentSlide, renderImageSlide, renderTwoColumnSlide, renderThreeColumnSlide, renderQuoteSlide, renderStatisticsSlide, renderChartSlide, renderTableSlide, renderTimelineSlide, renderProcessFlowSlide, renderComparisonSlide, renderFeaturesSlide, renderTeamSlide, renderConclusionSlide, renderDashboardSlide, renderMixedContentSlide, renderStatsGridSlide, renderIconGridSlide, } from "./slideRenderers.js";
|
|
31
30
|
// ============================================================================
|
|
32
31
|
// SLIDE GENERATOR CLASS
|
|
@@ -9,7 +9,6 @@ import * as fs from "fs/promises";
|
|
|
9
9
|
import * as path from "path";
|
|
10
10
|
import { hasProviderEnvVars } from "../../utils/providerUtils.js";
|
|
11
11
|
import { logger } from "../../utils/logger.js";
|
|
12
|
-
import { AIProviderName } from "../../constants/enums.js";
|
|
13
12
|
import { PPTError, PPT_ERROR_CODES } from "../../types/pptTypes.js";
|
|
14
13
|
// ============================================================================
|
|
15
14
|
// CONTEXT EXTRACTION
|
package/dist/lib/neurolink.d.ts
CHANGED
|
@@ -181,6 +181,16 @@ export declare class NeuroLink {
|
|
|
181
181
|
private registerMemoryRetrievalTools;
|
|
182
182
|
/** Format memory context for prompt inclusion */
|
|
183
183
|
private formatMemoryContext;
|
|
184
|
+
/**
|
|
185
|
+
* Determine whether memory should be read (retrieved) for this call.
|
|
186
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
187
|
+
*/
|
|
188
|
+
private shouldReadMemory;
|
|
189
|
+
/**
|
|
190
|
+
* Determine whether memory should be written (stored) for this call.
|
|
191
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
192
|
+
*/
|
|
193
|
+
private shouldWriteMemory;
|
|
184
194
|
/**
|
|
185
195
|
* Retrieve condensed memory for a user.
|
|
186
196
|
* Returns the input text enhanced with memory context, or unchanged if no memory.
|
package/dist/lib/neurolink.js
CHANGED
|
@@ -825,6 +825,43 @@ ${memoryContext}
|
|
|
825
825
|
|
|
826
826
|
Current user's request: ${currentInput}`;
|
|
827
827
|
}
|
|
828
|
+
/**
|
|
829
|
+
* Determine whether memory should be read (retrieved) for this call.
|
|
830
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
831
|
+
*/
|
|
832
|
+
shouldReadMemory(perCallMemory, userId) {
|
|
833
|
+
if (!this.conversationMemoryConfig?.conversationMemory?.memory?.enabled ||
|
|
834
|
+
!userId) {
|
|
835
|
+
return false;
|
|
836
|
+
}
|
|
837
|
+
if (perCallMemory?.enabled === false) {
|
|
838
|
+
return false;
|
|
839
|
+
}
|
|
840
|
+
if (perCallMemory?.read === false) {
|
|
841
|
+
return false;
|
|
842
|
+
}
|
|
843
|
+
return true;
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Determine whether memory should be written (stored) for this call.
|
|
847
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
848
|
+
*/
|
|
849
|
+
shouldWriteMemory(perCallMemory, userId, content) {
|
|
850
|
+
if (!this.conversationMemoryConfig?.conversationMemory?.memory?.enabled ||
|
|
851
|
+
!userId) {
|
|
852
|
+
return false;
|
|
853
|
+
}
|
|
854
|
+
if (!content?.trim()) {
|
|
855
|
+
return false;
|
|
856
|
+
}
|
|
857
|
+
if (perCallMemory?.enabled === false) {
|
|
858
|
+
return false;
|
|
859
|
+
}
|
|
860
|
+
if (perCallMemory?.write === false) {
|
|
861
|
+
return false;
|
|
862
|
+
}
|
|
863
|
+
return true;
|
|
864
|
+
}
|
|
828
865
|
/**
|
|
829
866
|
* Retrieve condensed memory for a user.
|
|
830
867
|
* Returns the input text enhanced with memory context, or unchanged if no memory.
|
|
@@ -2574,9 +2611,8 @@ Current user's request: ${currentInput}`;
|
|
|
2574
2611
|
*/
|
|
2575
2612
|
scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
|
|
2576
2613
|
// Memory storage
|
|
2577
|
-
if (this.
|
|
2578
|
-
options.context?.userId
|
|
2579
|
-
generateResult.content?.trim()) {
|
|
2614
|
+
if (this.shouldWriteMemory(options.memory, options.context?.userId, generateResult.content) &&
|
|
2615
|
+
options.context?.userId) {
|
|
2580
2616
|
this.storeMemoryInBackground(originalPrompt ?? "", generateResult.content.trim(), options.context.userId);
|
|
2581
2617
|
}
|
|
2582
2618
|
}
|
|
@@ -4372,7 +4408,7 @@ Current user's request: ${currentInput}`;
|
|
|
4372
4408
|
// Initialize MCP
|
|
4373
4409
|
await this.initializeMCP();
|
|
4374
4410
|
// Memory retrieval
|
|
4375
|
-
if (this.
|
|
4411
|
+
if (this.shouldReadMemory(options.memory, options.context?.userId) &&
|
|
4376
4412
|
options.context?.userId) {
|
|
4377
4413
|
try {
|
|
4378
4414
|
options.input.text = await this.retrieveMemory(options.input.text, options.context.userId);
|
|
@@ -4687,9 +4723,7 @@ Current user's request: ${currentInput}`;
|
|
|
4687
4723
|
});
|
|
4688
4724
|
}
|
|
4689
4725
|
}
|
|
4690
|
-
if (this.
|
|
4691
|
-
enhancedOptions.context?.userId &&
|
|
4692
|
-
accumulatedContent?.trim()) {
|
|
4726
|
+
if (this.shouldWriteMemory(enhancedOptions.memory, enhancedOptions.context?.userId, accumulatedContent)) {
|
|
4693
4727
|
this.storeMemoryInBackground(originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId);
|
|
4694
4728
|
}
|
|
4695
4729
|
}
|
|
@@ -51,15 +51,18 @@ function redactSensitiveHeaders(headers) {
|
|
|
51
51
|
/** Fill-first: index of the current primary account. Only advances when
|
|
52
52
|
* the current account hits a 429 or auth failure that puts it on cooldown. */
|
|
53
53
|
let primaryAccountIndex = 0;
|
|
54
|
+
/** Track account count so we can reset primaryAccountIndex when it changes. */
|
|
55
|
+
let lastKnownAccountCount = 0;
|
|
54
56
|
const MAX_AUTH_RETRIES = 5;
|
|
55
57
|
const MAX_CONSECUTIVE_REFRESH_FAILURES = 15;
|
|
56
58
|
/** Decision 8: Cooldowns only for 401 and 429. */
|
|
57
59
|
const AUTH_COOLDOWN_MS = 5 * 60 * 1000; // 5 minutes for 401
|
|
58
60
|
const RATE_LIMIT_BACKOFF_BASE_MS = 1000; // 1 second base for 429
|
|
59
61
|
const RATE_LIMIT_BACKOFF_CAP_MS = 10 * 60 * 1000; // 10 minute cap for 429
|
|
60
|
-
/** Timeout for upstream requests to Anthropic.
|
|
61
|
-
*
|
|
62
|
-
|
|
62
|
+
/** Timeout for upstream requests to Anthropic. Must be generous enough
|
|
63
|
+
* to cover the full lifecycle of streaming responses, including extended
|
|
64
|
+
* thinking from Opus models (which can exceed 5 minutes for large contexts). */
|
|
65
|
+
const UPSTREAM_FETCH_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes
|
|
63
66
|
const accountRuntimeState = new Map();
|
|
64
67
|
/** Track whether we've run the one-time startup prune. */
|
|
65
68
|
let startupPruneDone = false;
|
|
@@ -329,6 +332,15 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
329
332
|
// - round-robin: rotate the starting index on every request
|
|
330
333
|
// so traffic is spread evenly across accounts.
|
|
331
334
|
const orderedAccounts = [...enabledAccounts];
|
|
335
|
+
// Reset round-robin index when account list size changes
|
|
336
|
+
// (e.g. a new account was authenticated while the proxy was running).
|
|
337
|
+
// Only applies to round-robin; fill-first uses primaryAccountIndex
|
|
338
|
+
// as a sticky primary and should not be disrupted.
|
|
339
|
+
if (accountStrategy === "round-robin" &&
|
|
340
|
+
orderedAccounts.length !== lastKnownAccountCount) {
|
|
341
|
+
primaryAccountIndex = 0;
|
|
342
|
+
lastKnownAccountCount = orderedAccounts.length;
|
|
343
|
+
}
|
|
332
344
|
if (orderedAccounts.length > 1) {
|
|
333
345
|
if (accountStrategy === "round-robin") {
|
|
334
346
|
// Advance the index on every request for even distribution
|
|
@@ -559,11 +571,19 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
559
571
|
// eslint-disable-next-line max-depth
|
|
560
572
|
if (body.stream && retryResp.body) {
|
|
561
573
|
const retryReader = retryResp.body.getReader();
|
|
574
|
+
let retryStreamClosed = false;
|
|
562
575
|
const retryStream = new ReadableStream({
|
|
563
576
|
async pull(controller) {
|
|
577
|
+
if (retryStreamClosed) {
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
564
580
|
try {
|
|
565
581
|
const { done, value } = await retryReader.read();
|
|
582
|
+
if (retryStreamClosed) {
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
566
585
|
if (done) {
|
|
586
|
+
retryStreamClosed = true;
|
|
567
587
|
controller.close();
|
|
568
588
|
return;
|
|
569
589
|
}
|
|
@@ -582,12 +602,16 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
582
602
|
errorMessage: errMsg,
|
|
583
603
|
durationMs: Date.now() - fetchStartMs,
|
|
584
604
|
});
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
605
|
+
if (!retryStreamClosed) {
|
|
606
|
+
retryStreamClosed = true;
|
|
607
|
+
const errorEvent = `event: error\ndata: ${JSON.stringify({ type: "error", error: { type: "api_error", message: `Upstream stream interrupted: ${errMsg}` } })}\n\n`;
|
|
608
|
+
controller.enqueue(new TextEncoder().encode(errorEvent));
|
|
609
|
+
controller.close();
|
|
610
|
+
}
|
|
588
611
|
}
|
|
589
612
|
},
|
|
590
613
|
cancel() {
|
|
614
|
+
retryStreamClosed = true;
|
|
591
615
|
retryReader.cancel();
|
|
592
616
|
},
|
|
593
617
|
});
|
|
@@ -866,14 +890,22 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
866
890
|
continue;
|
|
867
891
|
}
|
|
868
892
|
// Stream is valid — create a new ReadableStream with first chunk prepended.
|
|
893
|
+
let mainStreamClosed = false;
|
|
869
894
|
const remainingStream = new ReadableStream({
|
|
870
895
|
start(controller) {
|
|
871
896
|
controller.enqueue(firstChunk.value);
|
|
872
897
|
},
|
|
873
898
|
async pull(controller) {
|
|
899
|
+
if (mainStreamClosed) {
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
874
902
|
try {
|
|
875
903
|
const { done, value } = await reader.read();
|
|
904
|
+
if (mainStreamClosed) {
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
876
907
|
if (done) {
|
|
908
|
+
mainStreamClosed = true;
|
|
877
909
|
controller.close();
|
|
878
910
|
return;
|
|
879
911
|
}
|
|
@@ -894,12 +926,16 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
894
926
|
});
|
|
895
927
|
// Send SSE error event so the client gets a meaningful error
|
|
896
928
|
// instead of a raw connection drop
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
929
|
+
if (!mainStreamClosed) {
|
|
930
|
+
mainStreamClosed = true;
|
|
931
|
+
const errorEvent = `event: error\ndata: ${JSON.stringify({ type: "error", error: { type: "api_error", message: `Upstream stream interrupted: ${errMsg}` } })}\n\n`;
|
|
932
|
+
controller.enqueue(new TextEncoder().encode(errorEvent));
|
|
933
|
+
controller.close();
|
|
934
|
+
}
|
|
900
935
|
}
|
|
901
936
|
},
|
|
902
937
|
cancel() {
|
|
938
|
+
mainStreamClosed = true;
|
|
903
939
|
reader.cancel();
|
|
904
940
|
},
|
|
905
941
|
});
|
|
@@ -411,6 +411,22 @@ export type GenerateOptions = {
|
|
|
411
411
|
auth?: {
|
|
412
412
|
token: string;
|
|
413
413
|
};
|
|
414
|
+
/**
|
|
415
|
+
* Per-call memory control.
|
|
416
|
+
*
|
|
417
|
+
* Override the global memory SDK behavior for this specific call.
|
|
418
|
+
* All flags default to `true` when the global memory SDK is enabled.
|
|
419
|
+
* If the global memory SDK is disabled, these flags have no effect.
|
|
420
|
+
*
|
|
421
|
+
*/
|
|
422
|
+
memory?: {
|
|
423
|
+
/** Master toggle for this call. When false, both read and write are skipped. Defaults to true. */
|
|
424
|
+
enabled?: boolean;
|
|
425
|
+
/** Whether to read condensed memory and prepend to prompt. Defaults to true. */
|
|
426
|
+
read?: boolean;
|
|
427
|
+
/** Whether to write (add/condense) the conversation into memory after completion. Defaults to true. */
|
|
428
|
+
write?: boolean;
|
|
429
|
+
};
|
|
414
430
|
};
|
|
415
431
|
/**
|
|
416
432
|
* Generate function result type - Primary output format
|
|
@@ -421,6 +421,21 @@ export type StreamOptions = {
|
|
|
421
421
|
auth?: {
|
|
422
422
|
token: string;
|
|
423
423
|
};
|
|
424
|
+
/**
|
|
425
|
+
* Per-call memory control.
|
|
426
|
+
*
|
|
427
|
+
* Override the global memory SDK behavior for this specific call.
|
|
428
|
+
* All flags default to `true` when the global memory SDK is enabled.
|
|
429
|
+
* If the global memory SDK is disabled, these flags have no effect.
|
|
430
|
+
*/
|
|
431
|
+
memory?: {
|
|
432
|
+
/** Master toggle for this call. When false, both read and write are skipped. Defaults to true. */
|
|
433
|
+
enabled?: boolean;
|
|
434
|
+
/** Whether to read condensed memory and prepend to prompt. Defaults to true. */
|
|
435
|
+
read?: boolean;
|
|
436
|
+
/** Whether to write (add/condense) the conversation into memory after completion. Defaults to true. */
|
|
437
|
+
write?: boolean;
|
|
438
|
+
};
|
|
424
439
|
};
|
|
425
440
|
/**
|
|
426
441
|
* Stream function result type - Primary output format for streaming
|
|
@@ -18,7 +18,7 @@
|
|
|
18
18
|
import { randomUUID } from "crypto";
|
|
19
19
|
import { logger } from "../utils/logger.js";
|
|
20
20
|
import { withTimeout } from "../utils/async/withTimeout.js";
|
|
21
|
-
import {
|
|
21
|
+
import { globalElicitationManager, } from "./elicitation/elicitationManager.js";
|
|
22
22
|
/**
|
|
23
23
|
* Create an elicitation request protocol message
|
|
24
24
|
*/
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* NeuroLink Direct Tools Server
|
|
3
3
|
* Wraps the agent direct tools as an MCP server for proper registration
|
|
4
4
|
*/
|
|
5
|
-
import { z } from "zod";
|
|
6
5
|
import { createMCPServer } from "../../factory.js";
|
|
7
6
|
import { directAgentTools } from "../../../agent/directTools.js";
|
|
8
7
|
import { logger } from "../../../utils/logger.js";
|
package/dist/neurolink.d.ts
CHANGED
|
@@ -181,6 +181,16 @@ export declare class NeuroLink {
|
|
|
181
181
|
private registerMemoryRetrievalTools;
|
|
182
182
|
/** Format memory context for prompt inclusion */
|
|
183
183
|
private formatMemoryContext;
|
|
184
|
+
/**
|
|
185
|
+
* Determine whether memory should be read (retrieved) for this call.
|
|
186
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
187
|
+
*/
|
|
188
|
+
private shouldReadMemory;
|
|
189
|
+
/**
|
|
190
|
+
* Determine whether memory should be written (stored) for this call.
|
|
191
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
192
|
+
*/
|
|
193
|
+
private shouldWriteMemory;
|
|
184
194
|
/**
|
|
185
195
|
* Retrieve condensed memory for a user.
|
|
186
196
|
* Returns the input text enhanced with memory context, or unchanged if no memory.
|
package/dist/neurolink.js
CHANGED
|
@@ -825,6 +825,43 @@ ${memoryContext}
|
|
|
825
825
|
|
|
826
826
|
Current user's request: ${currentInput}`;
|
|
827
827
|
}
|
|
828
|
+
/**
|
|
829
|
+
* Determine whether memory should be read (retrieved) for this call.
|
|
830
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
831
|
+
*/
|
|
832
|
+
shouldReadMemory(perCallMemory, userId) {
|
|
833
|
+
if (!this.conversationMemoryConfig?.conversationMemory?.memory?.enabled ||
|
|
834
|
+
!userId) {
|
|
835
|
+
return false;
|
|
836
|
+
}
|
|
837
|
+
if (perCallMemory?.enabled === false) {
|
|
838
|
+
return false;
|
|
839
|
+
}
|
|
840
|
+
if (perCallMemory?.read === false) {
|
|
841
|
+
return false;
|
|
842
|
+
}
|
|
843
|
+
return true;
|
|
844
|
+
}
|
|
845
|
+
/**
|
|
846
|
+
* Determine whether memory should be written (stored) for this call.
|
|
847
|
+
* Respects both the global memory SDK config and per-call overrides.
|
|
848
|
+
*/
|
|
849
|
+
shouldWriteMemory(perCallMemory, userId, content) {
|
|
850
|
+
if (!this.conversationMemoryConfig?.conversationMemory?.memory?.enabled ||
|
|
851
|
+
!userId) {
|
|
852
|
+
return false;
|
|
853
|
+
}
|
|
854
|
+
if (!content?.trim()) {
|
|
855
|
+
return false;
|
|
856
|
+
}
|
|
857
|
+
if (perCallMemory?.enabled === false) {
|
|
858
|
+
return false;
|
|
859
|
+
}
|
|
860
|
+
if (perCallMemory?.write === false) {
|
|
861
|
+
return false;
|
|
862
|
+
}
|
|
863
|
+
return true;
|
|
864
|
+
}
|
|
828
865
|
/**
|
|
829
866
|
* Retrieve condensed memory for a user.
|
|
830
867
|
* Returns the input text enhanced with memory context, or unchanged if no memory.
|
|
@@ -2574,9 +2611,8 @@ Current user's request: ${currentInput}`;
|
|
|
2574
2611
|
*/
|
|
2575
2612
|
scheduleGenerateMemoryStorage(options, originalPrompt, generateResult) {
|
|
2576
2613
|
// Memory storage
|
|
2577
|
-
if (this.
|
|
2578
|
-
options.context?.userId
|
|
2579
|
-
generateResult.content?.trim()) {
|
|
2614
|
+
if (this.shouldWriteMemory(options.memory, options.context?.userId, generateResult.content) &&
|
|
2615
|
+
options.context?.userId) {
|
|
2580
2616
|
this.storeMemoryInBackground(originalPrompt ?? "", generateResult.content.trim(), options.context.userId);
|
|
2581
2617
|
}
|
|
2582
2618
|
}
|
|
@@ -4372,7 +4408,7 @@ Current user's request: ${currentInput}`;
|
|
|
4372
4408
|
// Initialize MCP
|
|
4373
4409
|
await this.initializeMCP();
|
|
4374
4410
|
// Memory retrieval
|
|
4375
|
-
if (this.
|
|
4411
|
+
if (this.shouldReadMemory(options.memory, options.context?.userId) &&
|
|
4376
4412
|
options.context?.userId) {
|
|
4377
4413
|
try {
|
|
4378
4414
|
options.input.text = await this.retrieveMemory(options.input.text, options.context.userId);
|
|
@@ -4687,9 +4723,7 @@ Current user's request: ${currentInput}`;
|
|
|
4687
4723
|
});
|
|
4688
4724
|
}
|
|
4689
4725
|
}
|
|
4690
|
-
if (this.
|
|
4691
|
-
enhancedOptions.context?.userId &&
|
|
4692
|
-
accumulatedContent?.trim()) {
|
|
4726
|
+
if (this.shouldWriteMemory(enhancedOptions.memory, enhancedOptions.context?.userId, accumulatedContent)) {
|
|
4693
4727
|
this.storeMemoryInBackground(originalPrompt ?? "", accumulatedContent.trim(), enhancedOptions.context?.userId);
|
|
4694
4728
|
}
|
|
4695
4729
|
}
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { createAzure } from "@ai-sdk/azure";
|
|
2
2
|
import { stepCountIs, streamText } from "ai";
|
|
3
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
4
|
-
import {
|
|
4
|
+
import { APIVersions } from "../constants/enums.js";
|
|
5
5
|
import { validateApiKey, createAzureAPIKeyConfig, createAzureEndpointConfig, } from "../utils/providerConfig.js";
|
|
6
6
|
import { DEFAULT_MAX_STEPS } from "../core/constants.js";
|
|
7
7
|
import { logger } from "../utils/logger.js";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createOpenAI } from "@ai-sdk/openai";
|
|
2
2
|
import { NoOutputGeneratedError, stepCountIs, streamText, } from "ai";
|
|
3
|
-
import { AIProviderName } from "../constants/enums.js";
|
|
4
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
5
4
|
import { logger } from "../utils/logger.js";
|
|
6
5
|
import { composeAbortSignals, createTimeoutController, TimeoutError, } from "../utils/timeout.js";
|
|
@@ -1,6 +1,5 @@
|
|
|
1
1
|
import { createOpenAI } from "@ai-sdk/openai";
|
|
2
2
|
import { NoOutputGeneratedError, streamText, } from "ai";
|
|
3
|
-
import { AIProviderName } from "../constants/enums.js";
|
|
4
3
|
import { BaseProvider } from "../core/baseProvider.js";
|
|
5
4
|
import { logger } from "../utils/logger.js";
|
|
6
5
|
import { composeAbortSignals, createTimeoutController, TimeoutError, } from "../utils/timeout.js";
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* NeuroLink SDK Tool Registration API
|
|
3
3
|
* Simple interface for developers to register custom tools
|
|
4
4
|
*/
|
|
5
|
-
import { z } from "zod";
|
|
6
5
|
import { logger } from "../utils/logger.js";
|
|
7
6
|
import { createMCPServerInfo } from "../utils/mcpDefaults.js";
|
|
8
7
|
import { validateToolName, validateToolDescription, } from "../utils/parameterValidation.js";
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
* Generates OpenAPI documentation from NeuroLink server routes
|
|
4
4
|
*/
|
|
5
5
|
import { OpenAPISchemas } from "./schemas.js";
|
|
6
|
-
import { CommonParameters, createDeleteOperation, createGetOperation, createPostOperation, createStreamingPostOperation,
|
|
6
|
+
import { CommonParameters, createDeleteOperation, createGetOperation, createPostOperation, createStreamingPostOperation, DefaultServers, NeuroLinkApiInfo, StandardErrorResponses, StandardTags, BearerSecurityScheme, ApiKeySecurityScheme, } from "./templates.js";
|
|
7
7
|
// ============================================
|
|
8
8
|
// OpenAPI Generator Class
|
|
9
9
|
// ============================================
|
|
@@ -51,15 +51,18 @@ function redactSensitiveHeaders(headers) {
|
|
|
51
51
|
/** Fill-first: index of the current primary account. Only advances when
|
|
52
52
|
* the current account hits a 429 or auth failure that puts it on cooldown. */
|
|
53
53
|
let primaryAccountIndex = 0;
|
|
54
|
+
/** Track account count so we can reset primaryAccountIndex when it changes. */
|
|
55
|
+
let lastKnownAccountCount = 0;
|
|
54
56
|
const MAX_AUTH_RETRIES = 5;
|
|
55
57
|
const MAX_CONSECUTIVE_REFRESH_FAILURES = 15;
|
|
56
58
|
/** Decision 8: Cooldowns only for 401 and 429. */
|
|
57
59
|
const AUTH_COOLDOWN_MS = 5 * 60 * 1000; // 5 minutes for 401
|
|
58
60
|
const RATE_LIMIT_BACKOFF_BASE_MS = 1000; // 1 second base for 429
|
|
59
61
|
const RATE_LIMIT_BACKOFF_CAP_MS = 10 * 60 * 1000; // 10 minute cap for 429
|
|
60
|
-
/** Timeout for upstream requests to Anthropic.
|
|
61
|
-
*
|
|
62
|
-
|
|
62
|
+
/** Timeout for upstream requests to Anthropic. Must be generous enough
|
|
63
|
+
* to cover the full lifecycle of streaming responses, including extended
|
|
64
|
+
* thinking from Opus models (which can exceed 5 minutes for large contexts). */
|
|
65
|
+
const UPSTREAM_FETCH_TIMEOUT_MS = 15 * 60 * 1000; // 15 minutes
|
|
63
66
|
const accountRuntimeState = new Map();
|
|
64
67
|
/** Track whether we've run the one-time startup prune. */
|
|
65
68
|
let startupPruneDone = false;
|
|
@@ -329,6 +332,15 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
329
332
|
// - round-robin: rotate the starting index on every request
|
|
330
333
|
// so traffic is spread evenly across accounts.
|
|
331
334
|
const orderedAccounts = [...enabledAccounts];
|
|
335
|
+
// Reset round-robin index when account list size changes
|
|
336
|
+
// (e.g. a new account was authenticated while the proxy was running).
|
|
337
|
+
// Only applies to round-robin; fill-first uses primaryAccountIndex
|
|
338
|
+
// as a sticky primary and should not be disrupted.
|
|
339
|
+
if (accountStrategy === "round-robin" &&
|
|
340
|
+
orderedAccounts.length !== lastKnownAccountCount) {
|
|
341
|
+
primaryAccountIndex = 0;
|
|
342
|
+
lastKnownAccountCount = orderedAccounts.length;
|
|
343
|
+
}
|
|
332
344
|
if (orderedAccounts.length > 1) {
|
|
333
345
|
if (accountStrategy === "round-robin") {
|
|
334
346
|
// Advance the index on every request for even distribution
|
|
@@ -559,11 +571,19 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
559
571
|
// eslint-disable-next-line max-depth
|
|
560
572
|
if (body.stream && retryResp.body) {
|
|
561
573
|
const retryReader = retryResp.body.getReader();
|
|
574
|
+
let retryStreamClosed = false;
|
|
562
575
|
const retryStream = new ReadableStream({
|
|
563
576
|
async pull(controller) {
|
|
577
|
+
if (retryStreamClosed) {
|
|
578
|
+
return;
|
|
579
|
+
}
|
|
564
580
|
try {
|
|
565
581
|
const { done, value } = await retryReader.read();
|
|
582
|
+
if (retryStreamClosed) {
|
|
583
|
+
return;
|
|
584
|
+
}
|
|
566
585
|
if (done) {
|
|
586
|
+
retryStreamClosed = true;
|
|
567
587
|
controller.close();
|
|
568
588
|
return;
|
|
569
589
|
}
|
|
@@ -582,12 +602,16 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
582
602
|
errorMessage: errMsg,
|
|
583
603
|
durationMs: Date.now() - fetchStartMs,
|
|
584
604
|
});
|
|
585
|
-
|
|
586
|
-
|
|
587
|
-
|
|
605
|
+
if (!retryStreamClosed) {
|
|
606
|
+
retryStreamClosed = true;
|
|
607
|
+
const errorEvent = `event: error\ndata: ${JSON.stringify({ type: "error", error: { type: "api_error", message: `Upstream stream interrupted: ${errMsg}` } })}\n\n`;
|
|
608
|
+
controller.enqueue(new TextEncoder().encode(errorEvent));
|
|
609
|
+
controller.close();
|
|
610
|
+
}
|
|
588
611
|
}
|
|
589
612
|
},
|
|
590
613
|
cancel() {
|
|
614
|
+
retryStreamClosed = true;
|
|
591
615
|
retryReader.cancel();
|
|
592
616
|
},
|
|
593
617
|
});
|
|
@@ -866,14 +890,22 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
866
890
|
continue;
|
|
867
891
|
}
|
|
868
892
|
// Stream is valid — create a new ReadableStream with first chunk prepended.
|
|
893
|
+
let mainStreamClosed = false;
|
|
869
894
|
const remainingStream = new ReadableStream({
|
|
870
895
|
start(controller) {
|
|
871
896
|
controller.enqueue(firstChunk.value);
|
|
872
897
|
},
|
|
873
898
|
async pull(controller) {
|
|
899
|
+
if (mainStreamClosed) {
|
|
900
|
+
return;
|
|
901
|
+
}
|
|
874
902
|
try {
|
|
875
903
|
const { done, value } = await reader.read();
|
|
904
|
+
if (mainStreamClosed) {
|
|
905
|
+
return;
|
|
906
|
+
}
|
|
876
907
|
if (done) {
|
|
908
|
+
mainStreamClosed = true;
|
|
877
909
|
controller.close();
|
|
878
910
|
return;
|
|
879
911
|
}
|
|
@@ -894,12 +926,16 @@ export function createClaudeProxyRoutes(modelRouter, basePath = "", accountStrat
|
|
|
894
926
|
});
|
|
895
927
|
// Send SSE error event so the client gets a meaningful error
|
|
896
928
|
// instead of a raw connection drop
|
|
897
|
-
|
|
898
|
-
|
|
899
|
-
|
|
929
|
+
if (!mainStreamClosed) {
|
|
930
|
+
mainStreamClosed = true;
|
|
931
|
+
const errorEvent = `event: error\ndata: ${JSON.stringify({ type: "error", error: { type: "api_error", message: `Upstream stream interrupted: ${errMsg}` } })}\n\n`;
|
|
932
|
+
controller.enqueue(new TextEncoder().encode(errorEvent));
|
|
933
|
+
controller.close();
|
|
934
|
+
}
|
|
900
935
|
}
|
|
901
936
|
},
|
|
902
937
|
cancel() {
|
|
938
|
+
mainStreamClosed = true;
|
|
903
939
|
reader.cancel();
|
|
904
940
|
},
|
|
905
941
|
});
|
|
@@ -2,7 +2,6 @@
|
|
|
2
2
|
* NeuroLink Configuration Types
|
|
3
3
|
* Centralized configuration type definitions following the established architecture pattern
|
|
4
4
|
*/
|
|
5
|
-
import { MCPToolRegistry } from "../mcp/toolRegistry.js";
|
|
6
5
|
/**
|
|
7
6
|
* Default configuration values
|
|
8
7
|
*/
|
|
@@ -48,7 +47,3 @@ export const DEFAULT_CONFIG = {
|
|
|
48
47
|
},
|
|
49
48
|
configVersion: "3.0.1",
|
|
50
49
|
};
|
|
51
|
-
// =============================================================================
|
|
52
|
-
// CONSTANTS-DERIVED TYPES (moved from constants/index.ts)
|
|
53
|
-
// =============================================================================
|
|
54
|
-
import { TOOL_TIMEOUTS, BACKOFF_CONFIG, PERFORMANCE_PROFILES, PROVIDER_OPERATION_CONFIGS, MCP_OPERATION_CONFIGS, } from "../constants/index.js";
|
|
@@ -411,6 +411,22 @@ export type GenerateOptions = {
|
|
|
411
411
|
auth?: {
|
|
412
412
|
token: string;
|
|
413
413
|
};
|
|
414
|
+
/**
|
|
415
|
+
* Per-call memory control.
|
|
416
|
+
*
|
|
417
|
+
* Override the global memory SDK behavior for this specific call.
|
|
418
|
+
* All flags default to `true` when the global memory SDK is enabled.
|
|
419
|
+
* If the global memory SDK is disabled, these flags have no effect.
|
|
420
|
+
*
|
|
421
|
+
*/
|
|
422
|
+
memory?: {
|
|
423
|
+
/** Master toggle for this call. When false, both read and write are skipped. Defaults to true. */
|
|
424
|
+
enabled?: boolean;
|
|
425
|
+
/** Whether to read condensed memory and prepend to prompt. Defaults to true. */
|
|
426
|
+
read?: boolean;
|
|
427
|
+
/** Whether to write (add/condense) the conversation into memory after completion. Defaults to true. */
|
|
428
|
+
write?: boolean;
|
|
429
|
+
};
|
|
414
430
|
};
|
|
415
431
|
/**
|
|
416
432
|
* Generate function result type - Primary output format
|
package/dist/types/modelTypes.js
CHANGED