@juspay/neurolink 7.49.0 → 7.51.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 +13 -0
- package/README.md +12 -9
- package/dist/adapters/providerImageAdapter.js +82 -10
- package/dist/agent/directTools.d.ts +10 -10
- package/dist/agent/directTools.js +5 -3
- package/dist/cli/commands/config.js +1 -0
- package/dist/cli/commands/mcp.js +1 -0
- package/dist/cli/commands/models.js +1 -0
- package/dist/cli/commands/ollama.js +1 -0
- package/dist/cli/commands/setup-anthropic.js +1 -0
- package/dist/cli/commands/setup-azure.js +1 -0
- package/dist/cli/commands/setup-bedrock.js +1 -0
- package/dist/cli/commands/setup-gcp.js +1 -0
- package/dist/cli/commands/setup-google-ai.js +1 -0
- package/dist/cli/commands/setup-huggingface.js +1 -0
- package/dist/cli/commands/setup-mistral.js +1 -0
- package/dist/cli/commands/setup-openai.js +1 -0
- package/dist/cli/commands/setup.js +1 -0
- package/dist/cli/errorHandler.js +1 -0
- package/dist/cli/factories/commandFactory.d.ts +5 -0
- package/dist/cli/factories/commandFactory.js +42 -6
- package/dist/cli/factories/ollamaCommandFactory.js +1 -0
- package/dist/cli/factories/sagemakerCommandFactory.js +1 -0
- package/dist/cli/factories/setupCommandFactory.js +1 -0
- package/dist/cli/index.js +14 -2
- package/dist/cli/loop/conversationSelector.js +1 -0
- package/dist/cli/loop/optionsSchema.js +1 -0
- package/dist/cli/loop/session.js +1 -0
- package/dist/cli/parser.js +1 -0
- package/dist/cli/utils/completeSetup.js +1 -0
- package/dist/cli/utils/envManager.js +1 -0
- package/dist/cli/utils/interactiveSetup.js +1 -0
- package/dist/cli/utils/ollamaUtils.js +1 -0
- package/dist/constants/index.js +1 -1
- package/dist/core/baseProvider.d.ts +14 -0
- package/dist/core/baseProvider.js +106 -23
- package/dist/index.d.ts +11 -5
- package/dist/index.js +11 -10
- package/dist/lib/adapters/providerImageAdapter.js +83 -10
- package/dist/lib/agent/directTools.d.ts +10 -10
- package/dist/lib/agent/directTools.js +6 -3
- package/dist/lib/config/configManager.js +1 -0
- package/dist/lib/config/conversationMemory.js +1 -0
- package/dist/lib/config/taskClassificationConfig.js +1 -0
- package/dist/lib/constants/index.js +2 -1
- package/dist/lib/constants/performance.js +1 -0
- package/dist/lib/constants/retry.js +1 -0
- package/dist/lib/constants/timeouts.js +1 -0
- package/dist/lib/constants/tokens.js +1 -0
- package/dist/lib/core/analytics.js +1 -0
- package/dist/lib/core/baseProvider.d.ts +14 -0
- package/dist/lib/core/baseProvider.js +107 -23
- package/dist/lib/core/constants.js +1 -0
- package/dist/lib/core/conversationMemoryFactory.js +1 -0
- package/dist/lib/core/conversationMemoryInitializer.js +1 -0
- package/dist/lib/core/conversationMemoryManager.js +1 -0
- package/dist/lib/core/dynamicModels.js +1 -0
- package/dist/lib/core/evaluation.js +1 -0
- package/dist/lib/core/evaluationProviders.js +1 -0
- package/dist/lib/core/factory.js +1 -0
- package/dist/lib/core/modelConfiguration.js +1 -0
- package/dist/lib/core/redisConversationMemoryManager.js +1 -0
- package/dist/lib/core/serviceRegistry.js +1 -0
- package/dist/lib/core/streamAnalytics.js +1 -0
- package/dist/lib/evaluation/contextBuilder.js +1 -0
- package/dist/lib/evaluation/index.js +1 -0
- package/dist/lib/evaluation/prompts.js +1 -0
- package/dist/lib/evaluation/ragasEvaluator.js +1 -0
- package/dist/lib/evaluation/retryManager.js +1 -0
- package/dist/lib/evaluation/scoring.js +1 -0
- package/dist/lib/factories/providerFactory.js +1 -0
- package/dist/lib/factories/providerRegistry.js +1 -0
- package/dist/lib/hitl/hitlErrors.js +1 -0
- package/dist/lib/hitl/hitlManager.js +1 -0
- package/dist/lib/hitl/index.js +1 -0
- package/dist/lib/hitl/types.js +1 -0
- package/dist/lib/index.d.ts +11 -5
- package/dist/lib/index.js +12 -10
- package/dist/lib/mcp/externalServerManager.js +1 -0
- package/dist/lib/mcp/factory.js +1 -0
- package/dist/lib/mcp/flexibleToolValidator.js +1 -0
- package/dist/lib/mcp/index.js +1 -0
- package/dist/lib/mcp/mcpCircuitBreaker.js +1 -0
- package/dist/lib/mcp/mcpClientFactory.js +2 -1
- package/dist/lib/mcp/registry.js +1 -0
- package/dist/lib/mcp/servers/agent/directToolsServer.js +2 -0
- package/dist/lib/mcp/servers/aiProviders/aiAnalysisTools.js +1 -0
- package/dist/lib/mcp/servers/aiProviders/aiCoreServer.js +1 -0
- package/dist/lib/mcp/servers/aiProviders/aiWorkflowTools.js +1 -0
- package/dist/lib/mcp/servers/utilities/utilityServer.js +1 -0
- package/dist/lib/mcp/toolDiscoveryService.js +1 -0
- package/dist/lib/mcp/toolRegistry.js +1 -0
- package/dist/lib/memory/mem0Initializer.js +1 -0
- package/dist/lib/middleware/builtin/analytics.js +1 -0
- package/dist/lib/middleware/builtin/autoEvaluation.js +1 -0
- package/dist/lib/middleware/builtin/guardrails.js +1 -0
- package/dist/lib/middleware/factory.js +1 -0
- package/dist/lib/middleware/index.js +1 -0
- package/dist/lib/middleware/registry.js +1 -0
- package/dist/lib/middleware/utils/guardrailsUtils.js +1 -0
- package/dist/lib/models/modelRegistry.js +1 -0
- package/dist/lib/models/modelResolver.js +2 -0
- package/dist/lib/neurolink.d.ts +41 -6
- package/dist/lib/neurolink.js +276 -5
- package/dist/lib/providers/amazonBedrock.d.ts +1 -0
- package/dist/lib/providers/amazonBedrock.js +166 -14
- package/dist/lib/providers/amazonSagemaker.js +1 -0
- package/dist/lib/providers/anthropic.js +8 -21
- package/dist/lib/providers/anthropicBaseProvider.js +1 -0
- package/dist/lib/providers/azureOpenai.js +6 -21
- package/dist/lib/providers/googleAiStudio.js +6 -21
- package/dist/lib/providers/googleVertex.js +9 -1
- package/dist/lib/providers/huggingFace.js +34 -3
- package/dist/lib/providers/index.js +1 -0
- package/dist/lib/providers/litellm.js +34 -3
- package/dist/lib/providers/mistral.js +32 -2
- package/dist/lib/providers/ollama.d.ts +37 -1
- package/dist/lib/providers/ollama.js +544 -58
- package/dist/lib/providers/openAI.js +6 -21
- package/dist/lib/providers/openaiCompatible.js +41 -4
- package/dist/lib/providers/sagemaker/adaptive-semaphore.js +1 -0
- package/dist/lib/providers/sagemaker/client.js +1 -0
- package/dist/lib/providers/sagemaker/config.js +1 -0
- package/dist/lib/providers/sagemaker/detection.js +1 -0
- package/dist/lib/providers/sagemaker/diagnostics.js +1 -0
- package/dist/lib/providers/sagemaker/error-constants.js +1 -0
- package/dist/lib/providers/sagemaker/errors.js +1 -0
- package/dist/lib/providers/sagemaker/index.js +1 -0
- package/dist/lib/providers/sagemaker/language-model.js +1 -0
- package/dist/lib/providers/sagemaker/parsers.js +1 -0
- package/dist/lib/providers/sagemaker/streaming.js +1 -0
- package/dist/lib/providers/sagemaker/structured-parser.js +1 -0
- package/dist/lib/proxy/awsProxyIntegration.js +1 -0
- package/dist/lib/proxy/proxyFetch.js +1 -0
- package/dist/lib/proxy/utils/noProxyUtils.js +1 -0
- package/dist/lib/sdk/toolRegistration.js +2 -0
- package/dist/lib/services/server/ai/observability/instrumentation.d.ts +57 -0
- package/dist/lib/services/server/ai/observability/instrumentation.js +171 -0
- package/dist/lib/session/globalSessionState.js +38 -1
- package/dist/lib/telemetry/index.d.ts +1 -0
- package/dist/lib/telemetry/index.js +1 -0
- package/dist/lib/telemetry/telemetryService.d.ts +2 -0
- package/dist/lib/telemetry/telemetryService.js +8 -7
- package/dist/lib/types/analytics.js +1 -0
- package/dist/lib/types/cli.js +1 -0
- package/dist/lib/types/common.js +1 -0
- package/dist/lib/types/configTypes.js +1 -0
- package/dist/lib/types/content.d.ts +14 -1
- package/dist/lib/types/content.js +1 -0
- package/dist/lib/types/contextTypes.js +1 -0
- package/dist/lib/types/conversation.d.ts +2 -0
- package/dist/lib/types/conversation.js +1 -0
- package/dist/lib/types/domainTypes.js +1 -0
- package/dist/lib/types/errors.js +1 -0
- package/dist/lib/types/evaluation.js +1 -0
- package/dist/lib/types/evaluationProviders.js +1 -0
- package/dist/lib/types/evaluationTypes.js +1 -0
- package/dist/lib/types/externalMcp.js +1 -0
- package/dist/lib/types/fileTypes.d.ts +44 -0
- package/dist/lib/types/fileTypes.js +1 -0
- package/dist/lib/types/generateTypes.d.ts +1 -0
- package/dist/lib/types/generateTypes.js +1 -0
- package/dist/lib/types/guardrails.js +1 -0
- package/dist/lib/types/index.js +1 -0
- package/dist/lib/types/mcpTypes.js +1 -0
- package/dist/lib/types/middlewareTypes.js +1 -0
- package/dist/lib/types/modelTypes.d.ts +6 -6
- package/dist/lib/types/modelTypes.js +1 -0
- package/dist/lib/types/observability.d.ts +49 -0
- package/dist/lib/types/observability.js +7 -0
- package/dist/lib/types/providers.d.ts +44 -0
- package/dist/lib/types/providers.js +1 -0
- package/dist/lib/types/sdkTypes.js +1 -0
- package/dist/lib/types/serviceTypes.js +1 -0
- package/dist/lib/types/streamTypes.d.ts +1 -0
- package/dist/lib/types/streamTypes.js +1 -0
- package/dist/lib/types/taskClassificationTypes.js +1 -0
- package/dist/lib/types/tools.js +2 -0
- package/dist/lib/types/typeAliases.js +1 -0
- package/dist/lib/types/universalProviderOptions.js +1 -0
- package/dist/lib/utils/analyticsUtils.js +1 -0
- package/dist/lib/utils/conversationMemory.js +1 -0
- package/dist/lib/utils/conversationMemoryUtils.js +1 -0
- package/dist/lib/utils/csvProcessor.js +1 -0
- package/dist/lib/utils/errorHandling.js +1 -0
- package/dist/lib/utils/evaluationUtils.js +1 -0
- package/dist/lib/utils/factoryProcessing.js +1 -0
- package/dist/lib/utils/fileDetector.js +7 -3
- package/dist/lib/utils/imageProcessor.js +1 -0
- package/dist/lib/utils/logger.js +1 -0
- package/dist/lib/utils/loopUtils.js +1 -0
- package/dist/lib/utils/mcpDefaults.js +1 -0
- package/dist/lib/utils/messageBuilder.js +96 -9
- package/dist/lib/utils/modelRouter.js +1 -0
- package/dist/lib/utils/multimodalOptionsBuilder.d.ts +67 -0
- package/dist/lib/utils/multimodalOptionsBuilder.js +65 -0
- package/dist/lib/utils/optionsConversion.js +1 -0
- package/dist/lib/utils/optionsUtils.js +1 -0
- package/dist/lib/utils/parameterValidation.js +1 -0
- package/dist/lib/utils/pdfProcessor.d.ts +10 -0
- package/dist/lib/utils/pdfProcessor.js +199 -0
- package/dist/lib/utils/performance.js +1 -0
- package/dist/lib/utils/promptRedaction.js +1 -0
- package/dist/lib/utils/providerConfig.js +1 -0
- package/dist/lib/utils/providerHealth.js +1 -0
- package/dist/lib/utils/providerSetupMessages.js +1 -0
- package/dist/lib/utils/providerUtils.js +1 -0
- package/dist/lib/utils/redis.js +1 -0
- package/dist/lib/utils/retryHandler.js +1 -0
- package/dist/lib/utils/schemaConversion.js +1 -0
- package/dist/lib/utils/taskClassificationUtils.js +1 -0
- package/dist/lib/utils/taskClassifier.js +1 -0
- package/dist/lib/utils/timeout.js +1 -0
- package/dist/lib/utils/tokenLimits.js +1 -0
- package/dist/lib/utils/toolUtils.js +1 -0
- package/dist/lib/utils/transformationUtils.js +1 -0
- package/dist/lib/utils/typeUtils.js +1 -0
- package/dist/mcp/mcpClientFactory.js +1 -1
- package/dist/mcp/servers/agent/directToolsServer.js +1 -0
- package/dist/models/modelResolver.js +1 -0
- package/dist/neurolink.d.ts +41 -6
- package/dist/neurolink.js +275 -5
- package/dist/providers/amazonBedrock.d.ts +1 -0
- package/dist/providers/amazonBedrock.js +165 -14
- package/dist/providers/anthropic.js +7 -21
- package/dist/providers/azureOpenai.js +5 -21
- package/dist/providers/googleAiStudio.js +5 -21
- package/dist/providers/googleVertex.js +8 -1
- package/dist/providers/huggingFace.js +33 -3
- package/dist/providers/litellm.js +33 -3
- package/dist/providers/mistral.js +31 -2
- package/dist/providers/ollama.d.ts +37 -1
- package/dist/providers/ollama.js +543 -58
- package/dist/providers/openAI.js +5 -21
- package/dist/providers/openaiCompatible.js +40 -4
- package/dist/sdk/toolRegistration.js +1 -0
- package/dist/services/server/ai/observability/instrumentation.d.ts +57 -0
- package/dist/services/server/ai/observability/instrumentation.js +170 -0
- package/dist/session/globalSessionState.js +37 -1
- package/dist/telemetry/index.d.ts +1 -0
- package/dist/telemetry/telemetryService.d.ts +2 -0
- package/dist/telemetry/telemetryService.js +7 -7
- package/dist/types/content.d.ts +14 -1
- package/dist/types/conversation.d.ts +2 -0
- package/dist/types/fileTypes.d.ts +44 -0
- package/dist/types/generateTypes.d.ts +1 -0
- package/dist/types/observability.d.ts +49 -0
- package/dist/types/observability.js +6 -0
- package/dist/types/providers.d.ts +44 -0
- package/dist/types/streamTypes.d.ts +1 -0
- package/dist/types/tools.js +1 -0
- package/dist/utils/fileDetector.js +6 -3
- package/dist/utils/messageBuilder.js +95 -9
- package/dist/utils/multimodalOptionsBuilder.d.ts +67 -0
- package/dist/utils/multimodalOptionsBuilder.js +64 -0
- package/dist/utils/pdfProcessor.d.ts +10 -0
- package/dist/utils/pdfProcessor.js +198 -0
- package/package.json +12 -16
|
@@ -3,6 +3,7 @@
|
|
|
3
3
|
* Provides model resolution, search, and recommendation functionality
|
|
4
4
|
* Part of Phase 4.1 - Models Command System
|
|
5
5
|
*/
|
|
6
|
+
import { AIProviderName } from "../types/index.js";
|
|
6
7
|
import { MODEL_REGISTRY, MODEL_ALIASES, USE_CASE_RECOMMENDATIONS, getAllModels, getModelById, getModelsByProvider, getAvailableProviders, calculateCost, formatModelForDisplay, } from "./modelRegistry.js";
|
|
7
8
|
import { isNonNullObject } from "../utils/typeUtils.js";
|
|
8
9
|
/**
|
|
@@ -466,3 +467,4 @@ export function formatComparison(comparison) {
|
|
|
466
467
|
},
|
|
467
468
|
};
|
|
468
469
|
}
|
|
470
|
+
//# sourceMappingURL=modelResolver.js.map
|
package/dist/lib/neurolink.d.ts
CHANGED
|
@@ -19,6 +19,17 @@ import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
|
|
|
19
19
|
import { RedisConversationMemoryManager } from "./core/redisConversationMemoryManager.js";
|
|
20
20
|
import type { HITLConfig } from "./hitl/types.js";
|
|
21
21
|
import type { ExternalMCPServerInstance, ExternalMCPOperationResult, ExternalMCPToolInfo } from "./types/externalMcp.js";
|
|
22
|
+
import type { ObservabilityConfig } from "./types/observability.js";
|
|
23
|
+
/**
|
|
24
|
+
* Configuration object for NeuroLink constructor.
|
|
25
|
+
*/
|
|
26
|
+
export interface NeurolinkConstructorConfig {
|
|
27
|
+
conversationMemory?: Partial<ConversationMemoryConfig>;
|
|
28
|
+
enableOrchestration?: boolean;
|
|
29
|
+
hitl?: HITLConfig;
|
|
30
|
+
toolRegistry?: MCPToolRegistry;
|
|
31
|
+
observability?: ObservabilityConfig;
|
|
32
|
+
}
|
|
22
33
|
export interface ProviderStatus {
|
|
23
34
|
provider: string;
|
|
24
35
|
status: "working" | "failed" | "not-configured";
|
|
@@ -138,12 +149,8 @@ export declare class NeuroLink {
|
|
|
138
149
|
* @throws {Error} When external server manager initialization fails
|
|
139
150
|
* @throws {Error} When HITL configuration is invalid (if enabled)
|
|
140
151
|
*/
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
enableOrchestration?: boolean;
|
|
144
|
-
hitl?: HITLConfig;
|
|
145
|
-
toolRegistry?: MCPToolRegistry;
|
|
146
|
-
});
|
|
152
|
+
private observabilityConfig?;
|
|
153
|
+
constructor(config?: NeurolinkConstructorConfig);
|
|
147
154
|
/**
|
|
148
155
|
* Initialize provider registry with security settings
|
|
149
156
|
*/
|
|
@@ -170,6 +177,10 @@ export declare class NeuroLink {
|
|
|
170
177
|
* Setup event handlers for external server manager
|
|
171
178
|
*/
|
|
172
179
|
private setupExternalServerEventHandlers;
|
|
180
|
+
/**
|
|
181
|
+
* Initialize Langfuse observability for AI operations tracking
|
|
182
|
+
*/
|
|
183
|
+
private initializeLangfuse;
|
|
173
184
|
/**
|
|
174
185
|
* Log constructor completion with final state summary
|
|
175
186
|
*/
|
|
@@ -279,6 +290,24 @@ export declare class NeuroLink {
|
|
|
279
290
|
* @throws {Error} When all providers fail to generate content
|
|
280
291
|
* @throws {Error} When conversation memory operations fail (if enabled)
|
|
281
292
|
*/
|
|
293
|
+
/**
|
|
294
|
+
* Get observability configuration
|
|
295
|
+
*/
|
|
296
|
+
getObservabilityConfig(): ObservabilityConfig | undefined;
|
|
297
|
+
/**
|
|
298
|
+
* Check if Langfuse telemetry is enabled
|
|
299
|
+
* Centralized utility to avoid duplication across providers
|
|
300
|
+
*/
|
|
301
|
+
isTelemetryEnabled(): boolean;
|
|
302
|
+
/**
|
|
303
|
+
* Public method to initialize Langfuse observability
|
|
304
|
+
* This method can be called externally to ensure Langfuse is properly initialized
|
|
305
|
+
*/
|
|
306
|
+
initializeLangfuseObservability(): Promise<void>;
|
|
307
|
+
/**
|
|
308
|
+
* Gracefully shutdown NeuroLink and all MCP connections
|
|
309
|
+
*/
|
|
310
|
+
shutdown(): Promise<void>;
|
|
282
311
|
generate(optionsOrPrompt: GenerateOptions | string): Promise<GenerateResult>;
|
|
283
312
|
/**
|
|
284
313
|
* BACKWARD COMPATIBILITY: Legacy generateText method
|
|
@@ -1047,6 +1076,12 @@ export declare class NeuroLink {
|
|
|
1047
1076
|
* Unregister all external MCP tools from the main registry
|
|
1048
1077
|
*/
|
|
1049
1078
|
private unregisterAllExternalMCPToolsFromRegistry;
|
|
1079
|
+
/**
|
|
1080
|
+
* Dispose of all resources and cleanup connections
|
|
1081
|
+
* Call this method when done using the NeuroLink instance to prevent resource leaks
|
|
1082
|
+
* Especially important in test environments where multiple instances are created
|
|
1083
|
+
*/
|
|
1084
|
+
dispose(): Promise<void>;
|
|
1050
1085
|
}
|
|
1051
1086
|
export declare const neurolink: NeuroLink;
|
|
1052
1087
|
export default neurolink;
|
package/dist/lib/neurolink.js
CHANGED
|
@@ -31,6 +31,8 @@ import { transformToolExecutions, transformToolExecutionsForMCP, transformAvaila
|
|
|
31
31
|
// Enhanced error handling imports
|
|
32
32
|
import { ErrorFactory, NeuroLinkError, withTimeout, withRetry, isRetriableError, logStructuredError, CircuitBreaker, } from "./utils/errorHandling.js";
|
|
33
33
|
import { EventEmitter } from "events";
|
|
34
|
+
import { ConversationMemoryManager } from "./core/conversationMemoryManager.js";
|
|
35
|
+
import { RedisConversationMemoryManager } from "./core/redisConversationMemoryManager.js";
|
|
34
36
|
import { getConversationMessages, storeConversationTurn, } from "./utils/conversationMemory.js";
|
|
35
37
|
import { ExternalServerManager } from "./mcp/externalServerManager.js";
|
|
36
38
|
import { HITLManager } from "./hitl/hitlManager.js";
|
|
@@ -39,6 +41,7 @@ import { directToolsServer } from "./mcp/servers/agent/directToolsServer.js";
|
|
|
39
41
|
// Import orchestration components
|
|
40
42
|
import { ModelRouter } from "./utils/modelRouter.js";
|
|
41
43
|
import { BinaryTaskClassifier } from "./utils/taskClassifier.js";
|
|
44
|
+
import { initializeOpenTelemetry, shutdownOpenTelemetry, flushOpenTelemetry, getLangfuseHealthStatus, } from "./services/server/ai/observability/instrumentation.js";
|
|
42
45
|
import { isNonNullObject } from "./utils/typeUtils.js";
|
|
43
46
|
import { isZodSchema } from "./utils/schemaConversion.js";
|
|
44
47
|
// Core types imported from "./types/index.js"
|
|
@@ -178,8 +181,10 @@ export class NeuroLink {
|
|
|
178
181
|
* @throws {Error} When external server manager initialization fails
|
|
179
182
|
* @throws {Error} When HITL configuration is invalid (if enabled)
|
|
180
183
|
*/
|
|
184
|
+
observabilityConfig;
|
|
181
185
|
constructor(config) {
|
|
182
186
|
this.toolRegistry = config?.toolRegistry || new MCPToolRegistry();
|
|
187
|
+
this.observabilityConfig = config?.observability;
|
|
183
188
|
// Initialize orchestration setting
|
|
184
189
|
this.enableOrchestration = config?.enableOrchestration ?? false;
|
|
185
190
|
// Read tool cache duration from environment variables, with a default
|
|
@@ -194,6 +199,7 @@ export class NeuroLink {
|
|
|
194
199
|
this.initializeConversationMemory(config, constructorId, constructorStartTime, constructorHrTimeStart);
|
|
195
200
|
this.initializeExternalServerManager(constructorId, constructorStartTime, constructorHrTimeStart);
|
|
196
201
|
this.initializeHITL(config, constructorId, constructorStartTime, constructorHrTimeStart);
|
|
202
|
+
this.initializeLangfuse(constructorId, constructorStartTime, constructorHrTimeStart);
|
|
197
203
|
this.logConstructorComplete(constructorId, constructorStartTime, constructorHrTimeStart);
|
|
198
204
|
}
|
|
199
205
|
/**
|
|
@@ -494,6 +500,81 @@ export class NeuroLink {
|
|
|
494
500
|
this.unregisterExternalMCPToolFromRegistry(event.toolName);
|
|
495
501
|
});
|
|
496
502
|
}
|
|
503
|
+
/**
|
|
504
|
+
* Initialize Langfuse observability for AI operations tracking
|
|
505
|
+
*/
|
|
506
|
+
initializeLangfuse(constructorId, constructorStartTime, constructorHrTimeStart) {
|
|
507
|
+
const langfuseInitStartTime = process.hrtime.bigint();
|
|
508
|
+
try {
|
|
509
|
+
const langfuseConfig = this.observabilityConfig?.langfuse;
|
|
510
|
+
if (langfuseConfig?.enabled) {
|
|
511
|
+
logger.debug(`[NeuroLink] 📊 LOG_POINT_C019_LANGFUSE_INIT_START`, {
|
|
512
|
+
logPoint: "C019_LANGFUSE_INIT_START",
|
|
513
|
+
constructorId,
|
|
514
|
+
timestamp: new Date().toISOString(),
|
|
515
|
+
elapsedMs: Date.now() - constructorStartTime,
|
|
516
|
+
elapsedNs: (process.hrtime.bigint() - constructorHrTimeStart).toString(),
|
|
517
|
+
langfuseInitStartTimeNs: langfuseInitStartTime.toString(),
|
|
518
|
+
message: "Starting Langfuse observability initialization",
|
|
519
|
+
});
|
|
520
|
+
// Initialize OpenTelemetry FIRST (required for Langfuse v4)
|
|
521
|
+
initializeOpenTelemetry(langfuseConfig);
|
|
522
|
+
const healthStatus = getLangfuseHealthStatus();
|
|
523
|
+
const langfuseInitDurationNs = process.hrtime.bigint() - langfuseInitStartTime;
|
|
524
|
+
if (healthStatus.initialized &&
|
|
525
|
+
healthStatus.hasProcessor &&
|
|
526
|
+
healthStatus.isHealthy) {
|
|
527
|
+
logger.debug(`[NeuroLink] ✅ LOG_POINT_C020_LANGFUSE_INIT_SUCCESS`, {
|
|
528
|
+
logPoint: "C020_LANGFUSE_INIT_SUCCESS",
|
|
529
|
+
constructorId,
|
|
530
|
+
timestamp: new Date().toISOString(),
|
|
531
|
+
elapsedMs: Date.now() - constructorStartTime,
|
|
532
|
+
elapsedNs: (process.hrtime.bigint() - constructorHrTimeStart).toString(),
|
|
533
|
+
langfuseInitDurationNs: langfuseInitDurationNs.toString(),
|
|
534
|
+
langfuseInitDurationMs: Number(langfuseInitDurationNs) / 1_000_000,
|
|
535
|
+
healthStatus,
|
|
536
|
+
message: "Langfuse observability initialized successfully",
|
|
537
|
+
});
|
|
538
|
+
}
|
|
539
|
+
else {
|
|
540
|
+
logger.warn(`[NeuroLink] ⚠️ LOG_POINT_C021_LANGFUSE_INIT_WARNING`, {
|
|
541
|
+
logPoint: "C021_LANGFUSE_INIT_WARNING",
|
|
542
|
+
constructorId,
|
|
543
|
+
timestamp: new Date().toISOString(),
|
|
544
|
+
elapsedMs: Date.now() - constructorStartTime,
|
|
545
|
+
elapsedNs: (process.hrtime.bigint() - constructorHrTimeStart).toString(),
|
|
546
|
+
langfuseInitDurationNs: langfuseInitDurationNs.toString(),
|
|
547
|
+
healthStatus,
|
|
548
|
+
message: "Langfuse initialized but not healthy",
|
|
549
|
+
});
|
|
550
|
+
}
|
|
551
|
+
}
|
|
552
|
+
else {
|
|
553
|
+
logger.debug(`[NeuroLink] 🚫 LOG_POINT_C022_LANGFUSE_DISABLED`, {
|
|
554
|
+
logPoint: "C022_LANGFUSE_DISABLED",
|
|
555
|
+
constructorId,
|
|
556
|
+
timestamp: new Date().toISOString(),
|
|
557
|
+
elapsedMs: Date.now() - constructorStartTime,
|
|
558
|
+
elapsedNs: (process.hrtime.bigint() - constructorHrTimeStart).toString(),
|
|
559
|
+
message: "Langfuse observability not enabled - skipping initialization",
|
|
560
|
+
});
|
|
561
|
+
}
|
|
562
|
+
}
|
|
563
|
+
catch (error) {
|
|
564
|
+
const langfuseInitErrorDurationNs = process.hrtime.bigint() - langfuseInitStartTime;
|
|
565
|
+
logger.error(`[NeuroLink] ❌ LOG_POINT_C023_LANGFUSE_INIT_ERROR`, {
|
|
566
|
+
logPoint: "C023_LANGFUSE_INIT_ERROR",
|
|
567
|
+
constructorId,
|
|
568
|
+
timestamp: new Date().toISOString(),
|
|
569
|
+
elapsedMs: Date.now() - constructorStartTime,
|
|
570
|
+
elapsedNs: (process.hrtime.bigint() - constructorHrTimeStart).toString(),
|
|
571
|
+
langfuseInitDurationNs: langfuseInitErrorDurationNs.toString(),
|
|
572
|
+
errorMessage: error instanceof Error ? error.message : String(error),
|
|
573
|
+
errorStack: error instanceof Error ? error.stack : undefined,
|
|
574
|
+
message: "Langfuse observability initialization failed",
|
|
575
|
+
});
|
|
576
|
+
}
|
|
577
|
+
}
|
|
497
578
|
/**
|
|
498
579
|
* Log constructor completion with final state summary
|
|
499
580
|
*/
|
|
@@ -992,6 +1073,68 @@ export class NeuroLink {
|
|
|
992
1073
|
* @throws {Error} When all providers fail to generate content
|
|
993
1074
|
* @throws {Error} When conversation memory operations fail (if enabled)
|
|
994
1075
|
*/
|
|
1076
|
+
/**
|
|
1077
|
+
* Get observability configuration
|
|
1078
|
+
*/
|
|
1079
|
+
getObservabilityConfig() {
|
|
1080
|
+
return this.observabilityConfig;
|
|
1081
|
+
}
|
|
1082
|
+
/**
|
|
1083
|
+
* Check if Langfuse telemetry is enabled
|
|
1084
|
+
* Centralized utility to avoid duplication across providers
|
|
1085
|
+
*/
|
|
1086
|
+
isTelemetryEnabled() {
|
|
1087
|
+
return this.observabilityConfig?.langfuse?.enabled || false;
|
|
1088
|
+
}
|
|
1089
|
+
/**
|
|
1090
|
+
* Public method to initialize Langfuse observability
|
|
1091
|
+
* This method can be called externally to ensure Langfuse is properly initialized
|
|
1092
|
+
*/
|
|
1093
|
+
async initializeLangfuseObservability() {
|
|
1094
|
+
try {
|
|
1095
|
+
const langfuseConfig = this.observabilityConfig?.langfuse;
|
|
1096
|
+
if (langfuseConfig?.enabled) {
|
|
1097
|
+
initializeOpenTelemetry(langfuseConfig);
|
|
1098
|
+
logger.debug("[NeuroLink] Langfuse observability initialized via public method");
|
|
1099
|
+
}
|
|
1100
|
+
else {
|
|
1101
|
+
logger.debug("[NeuroLink] Langfuse not enabled, skipping initialization");
|
|
1102
|
+
}
|
|
1103
|
+
}
|
|
1104
|
+
catch (error) {
|
|
1105
|
+
logger.warn("[NeuroLink] Failed to initialize Langfuse observability:", error);
|
|
1106
|
+
}
|
|
1107
|
+
}
|
|
1108
|
+
/**
|
|
1109
|
+
* Gracefully shutdown NeuroLink and all MCP connections
|
|
1110
|
+
*/
|
|
1111
|
+
async shutdown() {
|
|
1112
|
+
try {
|
|
1113
|
+
logger.debug("[NeuroLink] Starting graceful shutdown");
|
|
1114
|
+
try {
|
|
1115
|
+
await flushOpenTelemetry();
|
|
1116
|
+
await shutdownOpenTelemetry();
|
|
1117
|
+
logger.debug("[NeuroLink] OpenTelemetry shutdown completed");
|
|
1118
|
+
}
|
|
1119
|
+
catch (error) {
|
|
1120
|
+
logger.warn("[NeuroLink] OpenTelemetry shutdown failed:", error);
|
|
1121
|
+
}
|
|
1122
|
+
if (this.externalServerManager) {
|
|
1123
|
+
try {
|
|
1124
|
+
await this.externalServerManager.shutdown();
|
|
1125
|
+
logger.debug("[NeuroLink] MCP servers shutdown completed");
|
|
1126
|
+
}
|
|
1127
|
+
catch (error) {
|
|
1128
|
+
logger.warn("[NeuroLink] MCP servers shutdown failed:", error);
|
|
1129
|
+
}
|
|
1130
|
+
}
|
|
1131
|
+
logger.debug("[NeuroLink] Graceful shutdown completed");
|
|
1132
|
+
}
|
|
1133
|
+
catch (error) {
|
|
1134
|
+
logger.error("[NeuroLink] Shutdown failed:", error);
|
|
1135
|
+
throw error;
|
|
1136
|
+
}
|
|
1137
|
+
}
|
|
995
1138
|
async generate(optionsOrPrompt) {
|
|
996
1139
|
const originalPrompt = this._extractOriginalPrompt(optionsOrPrompt);
|
|
997
1140
|
// Convert string prompt to full options
|
|
@@ -1910,15 +2053,16 @@ export class NeuroLink {
|
|
|
1910
2053
|
customTools: this.getCustomTools(),
|
|
1911
2054
|
executeTool: this.executeTool.bind(this),
|
|
1912
2055
|
}, "NeuroLink.createMCPStream");
|
|
1913
|
-
// Get conversation messages for context
|
|
2056
|
+
// Get conversation messages for context
|
|
1914
2057
|
const conversationMessages = await getConversationMessages(this.conversationMemory, {
|
|
1915
2058
|
prompt: options.input.text,
|
|
1916
2059
|
context: options.context,
|
|
1917
2060
|
});
|
|
1918
|
-
//
|
|
2061
|
+
// Let provider handle tools and system prompt automatically via Vercel AI SDK
|
|
2062
|
+
// This ensures proper tool integration in stream mode
|
|
1919
2063
|
const streamResult = await provider.stream({
|
|
1920
2064
|
...options,
|
|
1921
|
-
conversationMessages,
|
|
2065
|
+
conversationMessages,
|
|
1922
2066
|
});
|
|
1923
2067
|
return { stream: streamResult.stream, provider: providerName };
|
|
1924
2068
|
}
|
|
@@ -1979,7 +2123,7 @@ export class NeuroLink {
|
|
|
1979
2123
|
const originalPrompt = options.input.text;
|
|
1980
2124
|
const responseTime = Date.now() - startTime;
|
|
1981
2125
|
const providerName = await getBestProvider(options.provider);
|
|
1982
|
-
const provider = await AIProviderFactory.createProvider(providerName, options.model
|
|
2126
|
+
const provider = await AIProviderFactory.createProvider(providerName, options.model);
|
|
1983
2127
|
const fallbackStreamResult = await provider.stream({
|
|
1984
2128
|
input: { text: options.input.text },
|
|
1985
2129
|
model: options.model,
|
|
@@ -3189,7 +3333,7 @@ export class NeuroLink {
|
|
|
3189
3333
|
*/
|
|
3190
3334
|
async testProviderConnection(providerName) {
|
|
3191
3335
|
const { AIProviderFactory } = await import("./core/factory.js");
|
|
3192
|
-
const provider = await AIProviderFactory.createProvider(providerName, null
|
|
3336
|
+
const provider = await AIProviderFactory.createProvider(providerName, null);
|
|
3193
3337
|
await provider.generate({
|
|
3194
3338
|
prompt: "test",
|
|
3195
3339
|
maxTokens: 1,
|
|
@@ -3991,7 +4135,134 @@ export class NeuroLink {
|
|
|
3991
4135
|
mcpLogger.error("[NeuroLink] Failed to unregister all external MCP tools from registry:", error);
|
|
3992
4136
|
}
|
|
3993
4137
|
}
|
|
4138
|
+
/**
|
|
4139
|
+
* Dispose of all resources and cleanup connections
|
|
4140
|
+
* Call this method when done using the NeuroLink instance to prevent resource leaks
|
|
4141
|
+
* Especially important in test environments where multiple instances are created
|
|
4142
|
+
*/
|
|
4143
|
+
async dispose() {
|
|
4144
|
+
logger.debug("[NeuroLink] Starting disposal of resources...");
|
|
4145
|
+
const cleanupErrors = [];
|
|
4146
|
+
try {
|
|
4147
|
+
// 1. Flush and shutdown OpenTelemetry
|
|
4148
|
+
try {
|
|
4149
|
+
logger.debug("[NeuroLink] Flushing and shutting down OpenTelemetry...");
|
|
4150
|
+
await flushOpenTelemetry();
|
|
4151
|
+
await shutdownOpenTelemetry();
|
|
4152
|
+
logger.debug("[NeuroLink] OpenTelemetry shutdown successfully");
|
|
4153
|
+
}
|
|
4154
|
+
catch (error) {
|
|
4155
|
+
const err = error instanceof Error
|
|
4156
|
+
? error
|
|
4157
|
+
: new Error(`OpenTelemetry shutdown error: ${String(error)}`);
|
|
4158
|
+
cleanupErrors.push(err);
|
|
4159
|
+
logger.warn("[NeuroLink] Error shutting down OpenTelemetry:", error);
|
|
4160
|
+
}
|
|
4161
|
+
// 2. Shutdown external MCP server connections
|
|
4162
|
+
if (this.externalServerManager) {
|
|
4163
|
+
try {
|
|
4164
|
+
logger.debug("[NeuroLink] Shutting down external MCP servers...");
|
|
4165
|
+
await this.externalServerManager.shutdown();
|
|
4166
|
+
logger.debug("[NeuroLink] External MCP servers shutdown successfully");
|
|
4167
|
+
}
|
|
4168
|
+
catch (error) {
|
|
4169
|
+
const err = error instanceof Error
|
|
4170
|
+
? error
|
|
4171
|
+
: new Error(`External server shutdown error: ${String(error)}`);
|
|
4172
|
+
cleanupErrors.push(err);
|
|
4173
|
+
logger.warn("[NeuroLink] Error shutting down external MCP servers:", error);
|
|
4174
|
+
}
|
|
4175
|
+
}
|
|
4176
|
+
// 3. Clear all event listeners to prevent memory leaks
|
|
4177
|
+
if (this.emitter) {
|
|
4178
|
+
try {
|
|
4179
|
+
logger.debug("[NeuroLink] Removing all event listeners...");
|
|
4180
|
+
this.emitter.removeAllListeners();
|
|
4181
|
+
logger.debug("[NeuroLink] Event listeners removed successfully");
|
|
4182
|
+
}
|
|
4183
|
+
catch (error) {
|
|
4184
|
+
const err = error instanceof Error
|
|
4185
|
+
? error
|
|
4186
|
+
: new Error(`Event emitter cleanup error: ${String(error)}`);
|
|
4187
|
+
cleanupErrors.push(err);
|
|
4188
|
+
logger.warn("[NeuroLink] Error removing event listeners:", error);
|
|
4189
|
+
}
|
|
4190
|
+
}
|
|
4191
|
+
// 4. Clear all circuit breakers
|
|
4192
|
+
if (this.toolCircuitBreakers && this.toolCircuitBreakers.size > 0) {
|
|
4193
|
+
try {
|
|
4194
|
+
logger.debug(`[NeuroLink] Clearing ${this.toolCircuitBreakers.size} circuit breakers...`);
|
|
4195
|
+
this.toolCircuitBreakers.clear();
|
|
4196
|
+
logger.debug("[NeuroLink] Circuit breakers cleared successfully");
|
|
4197
|
+
}
|
|
4198
|
+
catch (error) {
|
|
4199
|
+
const err = error instanceof Error
|
|
4200
|
+
? error
|
|
4201
|
+
: new Error(`Circuit breaker cleanup error: ${String(error)}`);
|
|
4202
|
+
cleanupErrors.push(err);
|
|
4203
|
+
logger.warn("[NeuroLink] Error clearing circuit breakers:", error);
|
|
4204
|
+
}
|
|
4205
|
+
}
|
|
4206
|
+
// 5. Clear all Maps and caches
|
|
4207
|
+
try {
|
|
4208
|
+
logger.debug("[NeuroLink] Clearing maps and caches...");
|
|
4209
|
+
if (this.toolExecutionMetrics) {
|
|
4210
|
+
this.toolExecutionMetrics.clear();
|
|
4211
|
+
}
|
|
4212
|
+
if (this.activeToolExecutions) {
|
|
4213
|
+
this.activeToolExecutions.clear();
|
|
4214
|
+
}
|
|
4215
|
+
if (this.currentStreamToolExecutions) {
|
|
4216
|
+
this.currentStreamToolExecutions.length = 0;
|
|
4217
|
+
}
|
|
4218
|
+
if (this.toolExecutionHistory) {
|
|
4219
|
+
this.toolExecutionHistory.length = 0;
|
|
4220
|
+
}
|
|
4221
|
+
// Clear tool cache
|
|
4222
|
+
if (this.toolCache) {
|
|
4223
|
+
this.toolCache.tools = [];
|
|
4224
|
+
this.toolCache.timestamp = 0;
|
|
4225
|
+
}
|
|
4226
|
+
logger.debug("[NeuroLink] Maps and caches cleared successfully");
|
|
4227
|
+
}
|
|
4228
|
+
catch (error) {
|
|
4229
|
+
const err = error instanceof Error
|
|
4230
|
+
? error
|
|
4231
|
+
: new Error(`Cache cleanup error: ${String(error)}`);
|
|
4232
|
+
cleanupErrors.push(err);
|
|
4233
|
+
logger.warn("[NeuroLink] Error clearing caches:", error);
|
|
4234
|
+
}
|
|
4235
|
+
// 6. Reset initialization flags
|
|
4236
|
+
try {
|
|
4237
|
+
logger.debug("[NeuroLink] Resetting initialization state...");
|
|
4238
|
+
this.mcpInitialized = false;
|
|
4239
|
+
this.conversationMemoryNeedsInit = false;
|
|
4240
|
+
logger.debug("[NeuroLink] Initialization state reset successfully");
|
|
4241
|
+
}
|
|
4242
|
+
catch (error) {
|
|
4243
|
+
const err = error instanceof Error
|
|
4244
|
+
? error
|
|
4245
|
+
: new Error(`State reset error: ${String(error)}`);
|
|
4246
|
+
cleanupErrors.push(err);
|
|
4247
|
+
logger.warn("[NeuroLink] Error resetting state:", error);
|
|
4248
|
+
}
|
|
4249
|
+
// 6. Log completion
|
|
4250
|
+
if (cleanupErrors.length === 0) {
|
|
4251
|
+
logger.debug("[NeuroLink] ✅ Resource disposal completed successfully");
|
|
4252
|
+
}
|
|
4253
|
+
else {
|
|
4254
|
+
logger.warn(`[NeuroLink] ⚠️ Resource disposal completed with ${cleanupErrors.length} errors`, {
|
|
4255
|
+
errors: cleanupErrors.map((e) => e.message),
|
|
4256
|
+
});
|
|
4257
|
+
}
|
|
4258
|
+
}
|
|
4259
|
+
catch (error) {
|
|
4260
|
+
logger.error("[NeuroLink] Critical error during disposal:", error);
|
|
4261
|
+
throw error;
|
|
4262
|
+
}
|
|
4263
|
+
}
|
|
3994
4264
|
}
|
|
3995
4265
|
// Create default instance
|
|
3996
4266
|
export const neurolink = new NeuroLink();
|
|
3997
4267
|
export default neurolink;
|
|
4268
|
+
//# sourceMappingURL=neurolink.js.map
|
|
@@ -24,6 +24,7 @@ export declare class AmazonBedrockProvider extends BaseProvider {
|
|
|
24
24
|
private executeSingleTool;
|
|
25
25
|
private convertAISDKToolsToToolDefinitions;
|
|
26
26
|
private formatToolsForBedrock;
|
|
27
|
+
private convertToBedrockMessages;
|
|
27
28
|
getBedrockClient(): BedrockRuntimeClient;
|
|
28
29
|
protected executeStream(options: StreamOptions): Promise<StreamResult>;
|
|
29
30
|
private streamingConversationLoop;
|