@juspay/neurolink 9.24.0 → 9.25.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +12 -0
- package/dist/adapters/tts/googleTTSHandler.js +26 -1
- package/dist/adapters/video/vertexVideoHandler.js +23 -17
- package/dist/cli/commands/config.d.ts +3 -3
- package/dist/cli/commands/observability.d.ts +53 -0
- package/dist/cli/commands/observability.js +453 -0
- package/dist/cli/commands/telemetry.d.ts +63 -0
- package/dist/cli/commands/telemetry.js +689 -0
- package/dist/cli/factories/commandFactory.js +29 -15
- package/dist/cli/parser.js +6 -9
- package/dist/cli/utils/formatters.d.ts +13 -0
- package/dist/cli/utils/formatters.js +23 -0
- package/dist/constants/contextWindows.js +6 -0
- package/dist/constants/enums.d.ts +6 -0
- package/dist/constants/enums.js +8 -2
- package/dist/context/budgetChecker.js +75 -48
- package/dist/context/contextCompactor.js +135 -127
- package/dist/core/baseProvider.d.ts +5 -0
- package/dist/core/baseProvider.js +117 -110
- package/dist/core/conversationMemoryInitializer.js +7 -4
- package/dist/core/conversationMemoryManager.d.ts +2 -0
- package/dist/core/conversationMemoryManager.js +6 -2
- package/dist/core/modules/GenerationHandler.d.ts +2 -2
- package/dist/core/modules/GenerationHandler.js +12 -12
- package/dist/evaluation/ragasEvaluator.js +39 -19
- package/dist/evaluation/scoring.js +46 -20
- package/dist/features/ppt/presentationOrchestrator.js +23 -0
- package/dist/features/ppt/slideGenerator.js +13 -0
- package/dist/features/ppt/slideRenderers.d.ts +1 -1
- package/dist/features/ppt/slideRenderers.js +6 -4
- package/dist/features/ppt/slideTypeInference.d.ts +1 -1
- package/dist/features/ppt/slideTypeInference.js +75 -73
- package/dist/files/fileTools.d.ts +6 -6
- package/dist/index.d.ts +46 -12
- package/dist/index.js +79 -17
- package/dist/lib/adapters/tts/googleTTSHandler.js +26 -1
- package/dist/lib/adapters/video/vertexVideoHandler.js +23 -17
- package/dist/lib/constants/contextWindows.js +6 -0
- package/dist/lib/constants/enums.d.ts +6 -0
- package/dist/lib/constants/enums.js +8 -2
- package/dist/lib/context/budgetChecker.js +75 -48
- package/dist/lib/context/contextCompactor.js +135 -127
- package/dist/lib/core/baseProvider.d.ts +5 -0
- package/dist/lib/core/baseProvider.js +117 -110
- package/dist/lib/core/conversationMemoryInitializer.js +7 -4
- package/dist/lib/core/conversationMemoryManager.d.ts +2 -0
- package/dist/lib/core/conversationMemoryManager.js +6 -2
- package/dist/lib/core/modules/GenerationHandler.d.ts +2 -2
- package/dist/lib/core/modules/GenerationHandler.js +12 -12
- package/dist/lib/evaluation/ragasEvaluator.js +39 -19
- package/dist/lib/evaluation/scoring.js +46 -20
- package/dist/lib/features/ppt/presentationOrchestrator.js +23 -0
- package/dist/lib/features/ppt/slideGenerator.js +13 -0
- package/dist/lib/features/ppt/slideRenderers.d.ts +1 -1
- package/dist/lib/features/ppt/slideRenderers.js +6 -4
- package/dist/lib/features/ppt/slideTypeInference.d.ts +1 -1
- package/dist/lib/features/ppt/slideTypeInference.js +75 -73
- package/dist/lib/files/fileTools.d.ts +6 -6
- package/dist/lib/index.d.ts +46 -12
- package/dist/lib/index.js +79 -17
- package/dist/lib/mcp/httpRateLimiter.js +39 -12
- package/dist/lib/mcp/httpRetryHandler.js +22 -1
- package/dist/lib/mcp/mcpClientFactory.js +13 -15
- package/dist/lib/memory/memoryRetrievalTools.js +22 -0
- package/dist/lib/neurolink.d.ts +64 -72
- package/dist/lib/neurolink.js +1007 -564
- package/dist/lib/observability/exporterRegistry.d.ts +152 -0
- package/dist/lib/observability/exporterRegistry.js +414 -0
- package/dist/lib/observability/exporters/arizeExporter.d.ts +32 -0
- package/dist/lib/observability/exporters/arizeExporter.js +139 -0
- package/dist/lib/observability/exporters/baseExporter.d.ts +117 -0
- package/dist/lib/observability/exporters/baseExporter.js +191 -0
- package/dist/lib/observability/exporters/braintrustExporter.d.ts +30 -0
- package/dist/lib/observability/exporters/braintrustExporter.js +155 -0
- package/dist/lib/observability/exporters/datadogExporter.d.ts +37 -0
- package/dist/lib/observability/exporters/datadogExporter.js +197 -0
- package/dist/lib/observability/exporters/index.d.ts +13 -0
- package/dist/lib/observability/exporters/index.js +14 -0
- package/dist/lib/observability/exporters/laminarExporter.d.ts +48 -0
- package/dist/lib/observability/exporters/laminarExporter.js +303 -0
- package/dist/lib/observability/exporters/langfuseExporter.d.ts +47 -0
- package/dist/lib/observability/exporters/langfuseExporter.js +204 -0
- package/dist/lib/observability/exporters/langsmithExporter.d.ts +26 -0
- package/dist/lib/observability/exporters/langsmithExporter.js +124 -0
- package/dist/lib/observability/exporters/otelExporter.d.ts +39 -0
- package/dist/lib/observability/exporters/otelExporter.js +165 -0
- package/dist/lib/observability/exporters/posthogExporter.d.ts +48 -0
- package/dist/lib/observability/exporters/posthogExporter.js +288 -0
- package/dist/lib/observability/exporters/sentryExporter.d.ts +32 -0
- package/dist/lib/observability/exporters/sentryExporter.js +166 -0
- package/dist/lib/observability/index.d.ts +25 -0
- package/dist/lib/observability/index.js +32 -0
- package/dist/lib/observability/metricsAggregator.d.ts +260 -0
- package/dist/lib/observability/metricsAggregator.js +557 -0
- package/dist/lib/observability/otelBridge.d.ts +49 -0
- package/dist/lib/observability/otelBridge.js +132 -0
- package/dist/lib/observability/retryPolicy.d.ts +192 -0
- package/dist/lib/observability/retryPolicy.js +384 -0
- package/dist/lib/observability/sampling/index.d.ts +4 -0
- package/dist/lib/observability/sampling/index.js +5 -0
- package/dist/lib/observability/sampling/samplers.d.ts +116 -0
- package/dist/lib/observability/sampling/samplers.js +217 -0
- package/dist/lib/observability/spanProcessor.d.ts +129 -0
- package/dist/lib/observability/spanProcessor.js +304 -0
- package/dist/lib/observability/tokenTracker.d.ts +156 -0
- package/dist/lib/observability/tokenTracker.js +414 -0
- package/dist/lib/observability/types/exporterTypes.d.ts +250 -0
- package/dist/lib/observability/types/exporterTypes.js +6 -0
- package/dist/lib/observability/types/index.d.ts +6 -0
- package/dist/lib/observability/types/index.js +5 -0
- package/dist/lib/observability/types/spanTypes.d.ts +244 -0
- package/dist/lib/observability/types/spanTypes.js +93 -0
- package/dist/lib/observability/utils/index.d.ts +4 -0
- package/dist/lib/observability/utils/index.js +5 -0
- package/dist/lib/observability/utils/safeMetadata.d.ts +10 -0
- package/dist/lib/observability/utils/safeMetadata.js +26 -0
- package/dist/lib/observability/utils/spanSerializer.d.ts +115 -0
- package/dist/lib/observability/utils/spanSerializer.js +291 -0
- package/dist/lib/providers/amazonSagemaker.d.ts +5 -4
- package/dist/lib/providers/amazonSagemaker.js +3 -4
- package/dist/lib/providers/googleVertex.d.ts +7 -0
- package/dist/lib/providers/googleVertex.js +76 -2
- package/dist/lib/rag/pipeline/RAGPipeline.d.ts +0 -5
- package/dist/lib/rag/pipeline/RAGPipeline.js +122 -87
- package/dist/lib/rag/ragIntegration.js +30 -0
- package/dist/lib/rag/retrieval/hybridSearch.js +22 -0
- package/dist/lib/server/abstract/baseServerAdapter.js +51 -19
- package/dist/lib/server/middleware/common.js +44 -12
- package/dist/lib/services/server/ai/observability/instrumentation.d.ts +2 -2
- package/dist/lib/services/server/ai/observability/instrumentation.js +10 -5
- package/dist/lib/types/conversationMemoryInterface.d.ts +2 -0
- package/dist/lib/types/modelTypes.d.ts +18 -18
- package/dist/lib/types/providers.d.ts +5 -0
- package/dist/lib/utils/pricing.js +25 -1
- package/dist/lib/utils/ttsProcessor.js +74 -59
- package/dist/lib/workflow/config.d.ts +36 -36
- package/dist/lib/workflow/core/ensembleExecutor.js +10 -0
- package/dist/lib/workflow/core/judgeScorer.js +20 -2
- package/dist/lib/workflow/core/workflowRunner.js +34 -1
- package/dist/mcp/httpRateLimiter.js +39 -12
- package/dist/mcp/httpRetryHandler.js +22 -1
- package/dist/mcp/mcpClientFactory.js +13 -15
- package/dist/memory/memoryRetrievalTools.js +22 -0
- package/dist/neurolink.d.ts +64 -72
- package/dist/neurolink.js +1007 -564
- package/dist/observability/FEATURE-STATUS.md +269 -0
- package/dist/observability/exporterRegistry.d.ts +152 -0
- package/dist/observability/exporterRegistry.js +413 -0
- package/dist/observability/exporters/arizeExporter.d.ts +32 -0
- package/dist/observability/exporters/arizeExporter.js +138 -0
- package/dist/observability/exporters/baseExporter.d.ts +117 -0
- package/dist/observability/exporters/baseExporter.js +190 -0
- package/dist/observability/exporters/braintrustExporter.d.ts +30 -0
- package/dist/observability/exporters/braintrustExporter.js +154 -0
- package/dist/observability/exporters/datadogExporter.d.ts +37 -0
- package/dist/observability/exporters/datadogExporter.js +196 -0
- package/dist/observability/exporters/index.d.ts +13 -0
- package/dist/observability/exporters/index.js +13 -0
- package/dist/observability/exporters/laminarExporter.d.ts +48 -0
- package/dist/observability/exporters/laminarExporter.js +302 -0
- package/dist/observability/exporters/langfuseExporter.d.ts +47 -0
- package/dist/observability/exporters/langfuseExporter.js +203 -0
- package/dist/observability/exporters/langsmithExporter.d.ts +26 -0
- package/dist/observability/exporters/langsmithExporter.js +123 -0
- package/dist/observability/exporters/otelExporter.d.ts +39 -0
- package/dist/observability/exporters/otelExporter.js +164 -0
- package/dist/observability/exporters/posthogExporter.d.ts +48 -0
- package/dist/observability/exporters/posthogExporter.js +287 -0
- package/dist/observability/exporters/sentryExporter.d.ts +32 -0
- package/dist/observability/exporters/sentryExporter.js +165 -0
- package/dist/observability/index.d.ts +25 -0
- package/dist/observability/index.js +31 -0
- package/dist/observability/metricsAggregator.d.ts +260 -0
- package/dist/observability/metricsAggregator.js +556 -0
- package/dist/observability/otelBridge.d.ts +49 -0
- package/dist/observability/otelBridge.js +131 -0
- package/dist/observability/retryPolicy.d.ts +192 -0
- package/dist/observability/retryPolicy.js +383 -0
- package/dist/observability/sampling/index.d.ts +4 -0
- package/dist/observability/sampling/index.js +4 -0
- package/dist/observability/sampling/samplers.d.ts +116 -0
- package/dist/observability/sampling/samplers.js +216 -0
- package/dist/observability/spanProcessor.d.ts +129 -0
- package/dist/observability/spanProcessor.js +303 -0
- package/dist/observability/tokenTracker.d.ts +156 -0
- package/dist/observability/tokenTracker.js +413 -0
- package/dist/observability/types/exporterTypes.d.ts +250 -0
- package/dist/observability/types/exporterTypes.js +5 -0
- package/dist/observability/types/index.d.ts +6 -0
- package/dist/observability/types/index.js +4 -0
- package/dist/observability/types/spanTypes.d.ts +244 -0
- package/dist/observability/types/spanTypes.js +92 -0
- package/dist/observability/utils/index.d.ts +4 -0
- package/dist/observability/utils/index.js +4 -0
- package/dist/observability/utils/safeMetadata.d.ts +10 -0
- package/dist/observability/utils/safeMetadata.js +25 -0
- package/dist/observability/utils/spanSerializer.d.ts +115 -0
- package/dist/observability/utils/spanSerializer.js +290 -0
- package/dist/providers/amazonSagemaker.d.ts +5 -4
- package/dist/providers/amazonSagemaker.js +3 -4
- package/dist/providers/googleVertex.d.ts +7 -0
- package/dist/providers/googleVertex.js +76 -2
- package/dist/rag/pipeline/RAGPipeline.d.ts +0 -5
- package/dist/rag/pipeline/RAGPipeline.js +122 -87
- package/dist/rag/ragIntegration.js +30 -0
- package/dist/rag/retrieval/hybridSearch.js +22 -0
- package/dist/server/abstract/baseServerAdapter.js +51 -19
- package/dist/server/middleware/common.js +44 -12
- package/dist/services/server/ai/observability/instrumentation.d.ts +2 -2
- package/dist/services/server/ai/observability/instrumentation.js +10 -5
- package/dist/types/conversationMemoryInterface.d.ts +2 -0
- package/dist/types/providers.d.ts +5 -0
- package/dist/utils/pricing.js +25 -1
- package/dist/utils/ttsProcessor.js +74 -59
- package/dist/workflow/config.d.ts +52 -52
- package/dist/workflow/core/ensembleExecutor.js +10 -0
- package/dist/workflow/core/judgeScorer.js +20 -2
- package/dist/workflow/core/workflowRunner.js +34 -1
- package/package.json +1 -1
|
@@ -337,11 +337,11 @@ export declare function createFileTools(registry: FileReferenceRegistry): {
|
|
|
337
337
|
format: z.ZodOptional<z.ZodEnum<["text", "detailed", "summary"]>>;
|
|
338
338
|
}, "strip", z.ZodTypeAny, {
|
|
339
339
|
file_id: string;
|
|
340
|
+
end_time?: number | undefined;
|
|
341
|
+
start_time?: number | undefined;
|
|
340
342
|
format?: "text" | "summary" | "detailed" | undefined;
|
|
341
343
|
sheet?: string | undefined;
|
|
342
344
|
columns?: string[] | undefined;
|
|
343
|
-
start_time?: number | undefined;
|
|
344
|
-
end_time?: number | undefined;
|
|
345
345
|
frame_count?: number | undefined;
|
|
346
346
|
pages?: number[] | undefined;
|
|
347
347
|
page_range?: {
|
|
@@ -355,11 +355,11 @@ export declare function createFileTools(registry: FileReferenceRegistry): {
|
|
|
355
355
|
entry_path?: string | undefined;
|
|
356
356
|
}, {
|
|
357
357
|
file_id: string;
|
|
358
|
+
end_time?: number | undefined;
|
|
359
|
+
start_time?: number | undefined;
|
|
358
360
|
format?: "text" | "summary" | "detailed" | undefined;
|
|
359
361
|
sheet?: string | undefined;
|
|
360
362
|
columns?: string[] | undefined;
|
|
361
|
-
start_time?: number | undefined;
|
|
362
|
-
end_time?: number | undefined;
|
|
363
363
|
frame_count?: number | undefined;
|
|
364
364
|
pages?: number[] | undefined;
|
|
365
365
|
page_range?: {
|
|
@@ -388,11 +388,11 @@ export declare function createFileTools(registry: FileReferenceRegistry): {
|
|
|
388
388
|
}> & {
|
|
389
389
|
execute: (args: {
|
|
390
390
|
file_id: string;
|
|
391
|
+
end_time?: number | undefined;
|
|
392
|
+
start_time?: number | undefined;
|
|
391
393
|
format?: "text" | "summary" | "detailed" | undefined;
|
|
392
394
|
sheet?: string | undefined;
|
|
393
395
|
columns?: string[] | undefined;
|
|
394
|
-
start_time?: number | undefined;
|
|
395
|
-
end_time?: number | undefined;
|
|
396
396
|
frame_count?: number | undefined;
|
|
397
397
|
pages?: number[] | undefined;
|
|
398
398
|
page_range?: {
|
package/dist/lib/index.d.ts
CHANGED
|
@@ -33,17 +33,17 @@
|
|
|
33
33
|
*/
|
|
34
34
|
import { AIProviderFactory } from "./core/factory.js";
|
|
35
35
|
export { AIProviderFactory };
|
|
36
|
+
export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
|
|
36
37
|
export { NeuroLinkConfigManager as ConfigManager } from "./config/configManager.js";
|
|
37
38
|
export { AIProviderName, BedrockModels, OpenAIModels, VertexModels, } from "./constants/enums.js";
|
|
38
39
|
export { dynamicModelProvider } from "./core/dynamicModels.js";
|
|
39
40
|
export { validateTool } from "./sdk/toolRegistration.js";
|
|
40
41
|
export * from "./types/index.js";
|
|
41
42
|
export type { DynamicModelConfig, ModelRegistry } from "./types/modelTypes.js";
|
|
42
|
-
export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
|
|
43
|
-
export { calculateCost, hasPricing } from "./utils/pricing.js";
|
|
44
43
|
export { isAbortError } from "./utils/errorHandling.js";
|
|
44
|
+
export { calculateCost, hasPricing } from "./utils/pricing.js";
|
|
45
|
+
export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
|
|
45
46
|
export { TTSProcessor } from "./utils/ttsProcessor.js";
|
|
46
|
-
export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
|
|
47
47
|
import { NeuroLink } from "./neurolink.js";
|
|
48
48
|
export { NeuroLink };
|
|
49
49
|
export type { MCPServerInfo } from "./types/mcpTypes.js";
|
|
@@ -54,6 +54,15 @@ export type { LangfuseContext } from "./services/server/ai/observability/instrum
|
|
|
54
54
|
export { initializeOpenTelemetry, shutdownOpenTelemetry, flushOpenTelemetry, getLangfuseHealthStatus, setLangfuseContext, getLangfuseSpanProcessor, getTracerProvider, isOpenTelemetryInitialized, getSpanProcessors, createContextEnricher, isUsingExternalTracerProvider, getLangfuseContext, getTracer, runWithCurrentLangfuseContext, };
|
|
55
55
|
export { clearAnalyticsMetrics, createAnalyticsMiddleware, getAnalyticsMetrics, } from "./middleware/builtin/analytics.js";
|
|
56
56
|
export { MiddlewareFactory } from "./middleware/factory.js";
|
|
57
|
+
export { ExporterRegistry } from "./observability/exporterRegistry.js";
|
|
58
|
+
export { NoOpExporter } from "./observability/exporters/baseExporter.js";
|
|
59
|
+
export type { LatencyStats, MetricsSummary, ModelCostStats, ProviderCostStats, TraceView, } from "./observability/metricsAggregator.js";
|
|
60
|
+
export { getMetricsAggregator, MetricsAggregator, resetMetricsAggregator, } from "./observability/metricsAggregator.js";
|
|
61
|
+
export { AlwaysSampler, NeverSampler, } from "./observability/sampling/samplers.js";
|
|
62
|
+
export { TokenTracker } from "./observability/tokenTracker.js";
|
|
63
|
+
export type { SpanAttributes, SpanData, SpanEvent, } from "./observability/types/spanTypes.js";
|
|
64
|
+
export { GENAI_ATTRIBUTES, SpanStatus, SpanType, } from "./observability/types/spanTypes.js";
|
|
65
|
+
export { SpanSerializer } from "./observability/utils/spanSerializer.js";
|
|
57
66
|
export type { MiddlewareConfig, MiddlewareContext, MiddlewareFactoryOptions, MiddlewarePreset, NeuroLinkMiddleware, } from "./types/middlewareTypes.js";
|
|
58
67
|
export declare const VERSION = "1.0.0";
|
|
59
68
|
/**
|
|
@@ -274,17 +283,17 @@ export declare function generateText(options: import("./types/index.js").TextGen
|
|
|
274
283
|
* console.log('Total time:', result.workflow?.metrics?.totalTime);
|
|
275
284
|
* ```
|
|
276
285
|
*/
|
|
277
|
-
export
|
|
278
|
-
export { runWorkflow } from "./workflow/core/workflowRunner.js";
|
|
286
|
+
export { clearRegistry as clearWorkflowRegistry, getWorkflow, listWorkflows, registerWorkflow, } from "./workflow/core/workflowRegistry.js";
|
|
279
287
|
export type { RunWorkflowOptions } from "./workflow/core/workflowRunner.js";
|
|
280
|
-
export {
|
|
281
|
-
export {
|
|
282
|
-
export {
|
|
283
|
-
export { MULTI_JUDGE_5_WORKFLOW, MULTI_JUDGE_3_WORKFLOW, createMultiJudgeWorkflow, } from "./workflow/workflows/multiJudgeWorkflow.js";
|
|
284
|
-
export { QUALITY_MAX_WORKFLOW, SPEED_FIRST_WORKFLOW, BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, } from "./workflow/workflows/adaptiveWorkflow.js";
|
|
285
|
-
export { validateWorkflow } from "./workflow/utils/workflowValidation.js";
|
|
288
|
+
export { runWorkflow } from "./workflow/core/workflowRunner.js";
|
|
289
|
+
export { DEFAULT_SCORE_SCALE, WORKFLOW_ENGINE_VERSION, } from "./workflow/index.js";
|
|
290
|
+
export type { EnsembleResponse, ExecutionStrategy, JudgeConfig, JudgeScores, ModelConfig, ModelGroup, MultiJudgeScores, WorkflowConfig, WorkflowResult, WorkflowType, WorkflowValidationResult, } from "./workflow/types.js";
|
|
286
291
|
export { calculateModelMetrics, compareWorkflows, generateSummaryStats, } from "./workflow/utils/workflowMetrics.js";
|
|
287
|
-
export {
|
|
292
|
+
export { validateWorkflow } from "./workflow/utils/workflowValidation.js";
|
|
293
|
+
export { BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, QUALITY_MAX_WORKFLOW, SPEED_FIRST_WORKFLOW, } from "./workflow/workflows/adaptiveWorkflow.js";
|
|
294
|
+
export { CONSENSUS_3_FAST_WORKFLOW, CONSENSUS_3_WORKFLOW, createConsensus3WithPrompt, } from "./workflow/workflows/consensusWorkflow.js";
|
|
295
|
+
export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflow/workflows/fallbackWorkflow.js";
|
|
296
|
+
export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
|
|
288
297
|
export type { AgentExecuteRequest, AgentExecuteResponse, AuthConfig, AuthenticatedUser, AuthResult, AuthStrategy, BodyParserConfig, CacheConfig, CacheEntry, CacheStore, CORSConfig, CreateRoutesOptions, DataEvent, DataStreamEvent, DataStreamEventType, DataStreamResponseConfig, DataStreamWriter, DataStreamWriterConfig, ErrorCategoryType, ErrorEvent, ErrorResponse, ErrorSeverityType, FinishEvent, HealthResponse, HttpMethod, LoggingConfig, MCPServerStatusResponse, MiddlewareDefinition, MiddlewareHandler, OpenAPIGeneratorConfig, OpenAPISpec, PropertySchema, RateLimitConfig as ServerRateLimitConfig, RateLimitMiddlewareConfig, RateLimitStore, ReadyResponse, RequiredServerAdapterConfig, RouteDefinition, RouteGroup, RouteHandler, ServerAdapterConfig, ServerAdapterErrorCodeType, ServerAdapterErrorContext, ServerAdapterEvents, ServerAdapterFactoryOptions, ServerContext, ServerFramework, ServerResponse, ServerStatus, SSEWriteOptions, StreamingConfig, TextDeltaEvent, TextEndEvent, TextStartEvent, ToolCallEvent, ToolExecuteRequest, ToolExecuteResponse, ToolResultEvent, ValidationConfig, ValidationResult, ValidationSchema, WebSocketAuthConfig, WebSocketConfig, WebSocketConnection, WebSocketHandler, WebSocketMessage, WebSocketMessageType, } from "./server/index.js";
|
|
289
298
|
/**
|
|
290
299
|
* Server Adapters for exposing NeuroLink as HTTP APIs
|
|
@@ -336,3 +345,28 @@ export type { BaseChunkerConfig, BM25Result, CharacterChunkerConfig, Chunk, Chun
|
|
|
336
345
|
* ```
|
|
337
346
|
*/
|
|
338
347
|
export { assembleContext, batchRerank, CharacterChunker, ChunkerRegistry, CohereRelevanceScorer, CrossEncoderReranker, CSVLoader, chunkText, createChunker, createContextWindow, createHybridSearch, createRAGPipeline, createVectorQueryTool, executeWithCircuitBreaker, extractMetadata, formatContextWithCitations, GraphRAG, getAvailableStrategies, getCircuitBreaker, getDefaultChunkerConfig, getRecommendedStrategy, HTMLChunker, HTMLLoader, InMemoryBM25Index, InMemoryVectorStore, JSONChunker as RAGJSONChunker, JSONLoader, LaTeXChunker, LLMMetadataExtractor, linearCombination, loadDocument, loadDocuments, MarkdownChunker, MarkdownLoader, MDocument, PDFLoader, prepareRAGTool, processDocument, RAGCircuitBreaker, type RAGCircuitBreakerConfig, type RAGCircuitBreakerEvents, RAGCircuitBreakerManager, type RAGCircuitBreakerStats, RAGPipeline, RAGRetryHandler, RecursiveChunker, ragCircuitBreakerManager, reciprocalRankFusion, rerank, SemanticChunker, SentenceChunker, simpleRerank, summarizeContext, TextLoader, TokenChunker, WebLoader, } from "./rag/index.js";
|
|
348
|
+
export { ContextBuilder } from "./evaluation/contextBuilder.js";
|
|
349
|
+
/**
|
|
350
|
+
* Evaluation system for AI response quality assessment.
|
|
351
|
+
*
|
|
352
|
+
* Uses RAGAS-style model-based evaluation with a "judge" LLM to score
|
|
353
|
+
* responses on relevance, accuracy, completeness, and overall quality.
|
|
354
|
+
* Supports retry logic with progressive prompt improvement.
|
|
355
|
+
*
|
|
356
|
+
* @example
|
|
357
|
+
* ```typescript
|
|
358
|
+
* import { Evaluator, RAGASEvaluator, ContextBuilder, RetryManager } from '@juspay/neurolink';
|
|
359
|
+
*
|
|
360
|
+
* const evaluator = new Evaluator({
|
|
361
|
+
* evaluationModel: 'gemini-1.5-flash',
|
|
362
|
+
* provider: 'vertex',
|
|
363
|
+
* threshold: 7,
|
|
364
|
+
* });
|
|
365
|
+
* ```
|
|
366
|
+
*/
|
|
367
|
+
export { Evaluator } from "./evaluation/index.js";
|
|
368
|
+
export { PromptBuilder } from "./evaluation/prompts.js";
|
|
369
|
+
export { RAGASEvaluator } from "./evaluation/ragasEvaluator.js";
|
|
370
|
+
export { RetryManager } from "./evaluation/retryManager.js";
|
|
371
|
+
export { mapToEvaluationData } from "./evaluation/scoring.js";
|
|
372
|
+
export type { EnhancedConversationTurn, EnhancedEvaluationContext, EvaluationConfig, EvaluationResult, GetPromptFunction, QualityErrorDetails, QueryIntentAnalysis, } from "./types/evaluationTypes.js";
|
package/dist/lib/index.js
CHANGED
|
@@ -34,6 +34,7 @@
|
|
|
34
34
|
// Core exports
|
|
35
35
|
import { AIProviderFactory } from "./core/factory.js";
|
|
36
36
|
export { AIProviderFactory };
|
|
37
|
+
export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
|
|
37
38
|
// Config Manager export
|
|
38
39
|
export { NeuroLinkConfigManager as ConfigManager } from "./config/configManager.js";
|
|
39
40
|
export { AIProviderName, BedrockModels, OpenAIModels, VertexModels, } from "./constants/enums.js";
|
|
@@ -43,15 +44,14 @@ export { dynamicModelProvider } from "./core/dynamicModels.js";
|
|
|
43
44
|
export { validateTool } from "./sdk/toolRegistration.js";
|
|
44
45
|
// Export ALL types from the centralized type barrel
|
|
45
46
|
export * from "./types/index.js";
|
|
46
|
-
// Utility exports
|
|
47
|
-
export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
|
|
48
|
-
// Pricing utilities
|
|
49
|
-
export { calculateCost, hasPricing } from "./utils/pricing.js";
|
|
50
47
|
// Error utilities
|
|
51
48
|
export { isAbortError } from "./utils/errorHandling.js";
|
|
49
|
+
// Pricing utilities
|
|
50
|
+
export { calculateCost, hasPricing } from "./utils/pricing.js";
|
|
51
|
+
// Utility exports
|
|
52
|
+
export { getAvailableProviders, getBestProvider, isValidProvider, } from "./utils/providerUtils.js";
|
|
52
53
|
// TTS utilities
|
|
53
54
|
export { TTSProcessor } from "./utils/ttsProcessor.js";
|
|
54
|
-
export { GoogleTTSHandler } from "./adapters/tts/googleTTSHandler.js";
|
|
55
55
|
// Main NeuroLink wrapper class and diagnostic types
|
|
56
56
|
import { NeuroLink } from "./neurolink.js";
|
|
57
57
|
export { NeuroLink };
|
|
@@ -72,6 +72,14 @@ runWithCurrentLangfuseContext, };
|
|
|
72
72
|
// Analytics Middleware exports
|
|
73
73
|
export { clearAnalyticsMetrics, createAnalyticsMiddleware, getAnalyticsMetrics, } from "./middleware/builtin/analytics.js";
|
|
74
74
|
export { MiddlewareFactory } from "./middleware/factory.js";
|
|
75
|
+
export { ExporterRegistry } from "./observability/exporterRegistry.js";
|
|
76
|
+
export { NoOpExporter } from "./observability/exporters/baseExporter.js";
|
|
77
|
+
// Observability modules and types
|
|
78
|
+
export { getMetricsAggregator, MetricsAggregator, resetMetricsAggregator, } from "./observability/metricsAggregator.js";
|
|
79
|
+
export { AlwaysSampler, NeverSampler, } from "./observability/sampling/samplers.js";
|
|
80
|
+
export { TokenTracker } from "./observability/tokenTracker.js";
|
|
81
|
+
export { GENAI_ATTRIBUTES, SpanStatus, SpanType, } from "./observability/types/spanTypes.js";
|
|
82
|
+
export { SpanSerializer } from "./observability/utils/spanSerializer.js";
|
|
75
83
|
// Version
|
|
76
84
|
export const VERSION = "1.0.0";
|
|
77
85
|
/**
|
|
@@ -299,23 +307,50 @@ export async function generateText(options) {
|
|
|
299
307
|
const neurolink = new NeuroLink();
|
|
300
308
|
return await neurolink.generateText(options);
|
|
301
309
|
}
|
|
310
|
+
// ============================================================================
|
|
311
|
+
// WORKFLOW ENGINE - Multi-Model Orchestration with Judge Scoring
|
|
312
|
+
// ============================================================================
|
|
313
|
+
/**
|
|
314
|
+
* Workflow Engine for multi-model ensembles with judge-based evaluation
|
|
315
|
+
*
|
|
316
|
+
* Enables sophisticated AI orchestration patterns:
|
|
317
|
+
* - Ensemble execution (parallel multi-model)
|
|
318
|
+
* - Chain execution (sequential fallback)
|
|
319
|
+
* - Adaptive execution (tier-based quality/cost optimization)
|
|
320
|
+
* - Multi-judge voting for consensus
|
|
321
|
+
*
|
|
322
|
+
* @example
|
|
323
|
+
* ```typescript
|
|
324
|
+
* import { neurolink, CONSENSUS_3_WORKFLOW } from '@juspay/neurolink';
|
|
325
|
+
*
|
|
326
|
+
* // Use workflow via generate() with workflowConfig option
|
|
327
|
+
* const result = await neurolink.generate({
|
|
328
|
+
* input: { text: 'Explain quantum computing' },
|
|
329
|
+
* workflowConfig: CONSENSUS_3_WORKFLOW,
|
|
330
|
+
* });
|
|
331
|
+
*
|
|
332
|
+
* console.log('Best response:', result.content);
|
|
333
|
+
* console.log('Selected model:', result.workflow?.selectedModel);
|
|
334
|
+
* console.log('Total time:', result.workflow?.metrics?.totalTime);
|
|
335
|
+
* ```
|
|
336
|
+
*/
|
|
337
|
+
// Workflow registry
|
|
338
|
+
export { clearRegistry as clearWorkflowRegistry, getWorkflow, listWorkflows, registerWorkflow, } from "./workflow/core/workflowRegistry.js";
|
|
302
339
|
// Workflow execution
|
|
303
340
|
export { runWorkflow } from "./workflow/core/workflowRunner.js";
|
|
304
|
-
// Workflow
|
|
305
|
-
export {
|
|
341
|
+
// Workflow constants
|
|
342
|
+
export { DEFAULT_SCORE_SCALE, WORKFLOW_ENGINE_VERSION, } from "./workflow/index.js";
|
|
343
|
+
export { calculateModelMetrics, compareWorkflows, generateSummaryStats, } from "./workflow/utils/workflowMetrics.js";
|
|
344
|
+
// Validation and metrics
|
|
345
|
+
export { validateWorkflow } from "./workflow/utils/workflowValidation.js";
|
|
346
|
+
// Pre-built workflows - Adaptive
|
|
347
|
+
export { BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, QUALITY_MAX_WORKFLOW, SPEED_FIRST_WORKFLOW, } from "./workflow/workflows/adaptiveWorkflow.js";
|
|
306
348
|
// Pre-built workflows - Consensus
|
|
307
|
-
export {
|
|
349
|
+
export { CONSENSUS_3_FAST_WORKFLOW, CONSENSUS_3_WORKFLOW, createConsensus3WithPrompt, } from "./workflow/workflows/consensusWorkflow.js";
|
|
308
350
|
// Pre-built workflows - Fallback
|
|
309
|
-
export {
|
|
351
|
+
export { AGGRESSIVE_FALLBACK_WORKFLOW, FAST_FALLBACK_WORKFLOW, } from "./workflow/workflows/fallbackWorkflow.js";
|
|
310
352
|
// Pre-built workflows - Multi-judge
|
|
311
|
-
export {
|
|
312
|
-
// Pre-built workflows - Adaptive
|
|
313
|
-
export { QUALITY_MAX_WORKFLOW, SPEED_FIRST_WORKFLOW, BALANCED_ADAPTIVE_WORKFLOW, createAdaptiveWorkflow, } from "./workflow/workflows/adaptiveWorkflow.js";
|
|
314
|
-
// Validation and metrics
|
|
315
|
-
export { validateWorkflow } from "./workflow/utils/workflowValidation.js";
|
|
316
|
-
export { calculateModelMetrics, compareWorkflows, generateSummaryStats, } from "./workflow/utils/workflowMetrics.js";
|
|
317
|
-
// Workflow constants
|
|
318
|
-
export { WORKFLOW_ENGINE_VERSION, DEFAULT_SCORE_SCALE, } from "./workflow/index.js";
|
|
353
|
+
export { createMultiJudgeWorkflow, MULTI_JUDGE_3_WORKFLOW, MULTI_JUDGE_5_WORKFLOW, } from "./workflow/workflows/multiJudgeWorkflow.js";
|
|
319
354
|
/**
|
|
320
355
|
* Server Adapters for exposing NeuroLink as HTTP APIs
|
|
321
356
|
*
|
|
@@ -403,4 +438,31 @@ extractMetadata, formatContextWithCitations,
|
|
|
403
438
|
GraphRAG, getAvailableStrategies, getCircuitBreaker, getDefaultChunkerConfig, getRecommendedStrategy, HTMLChunker, HTMLLoader, InMemoryBM25Index, InMemoryVectorStore, JSONChunker as RAGJSONChunker, JSONLoader, LaTeXChunker, LLMMetadataExtractor, linearCombination, loadDocument, loadDocuments, MarkdownChunker, MarkdownLoader, MDocument, PDFLoader,
|
|
404
439
|
// RAG Integration for generate/stream
|
|
405
440
|
prepareRAGTool, processDocument, RAGCircuitBreaker, RAGCircuitBreakerManager, RAGPipeline, RAGRetryHandler, RecursiveChunker, ragCircuitBreakerManager, reciprocalRankFusion, rerank, SemanticChunker, SentenceChunker, simpleRerank, summarizeContext, TextLoader, TokenChunker, WebLoader, } from "./rag/index.js";
|
|
441
|
+
// ============================================================================
|
|
442
|
+
// EVALUATION / SCORING - RAGAS-style Response Quality Evaluation
|
|
443
|
+
// ============================================================================
|
|
444
|
+
export { ContextBuilder } from "./evaluation/contextBuilder.js";
|
|
445
|
+
/**
|
|
446
|
+
* Evaluation system for AI response quality assessment.
|
|
447
|
+
*
|
|
448
|
+
* Uses RAGAS-style model-based evaluation with a "judge" LLM to score
|
|
449
|
+
* responses on relevance, accuracy, completeness, and overall quality.
|
|
450
|
+
* Supports retry logic with progressive prompt improvement.
|
|
451
|
+
*
|
|
452
|
+
* @example
|
|
453
|
+
* ```typescript
|
|
454
|
+
* import { Evaluator, RAGASEvaluator, ContextBuilder, RetryManager } from '@juspay/neurolink';
|
|
455
|
+
*
|
|
456
|
+
* const evaluator = new Evaluator({
|
|
457
|
+
* evaluationModel: 'gemini-1.5-flash',
|
|
458
|
+
* provider: 'vertex',
|
|
459
|
+
* threshold: 7,
|
|
460
|
+
* });
|
|
461
|
+
* ```
|
|
462
|
+
*/
|
|
463
|
+
export { Evaluator } from "./evaluation/index.js";
|
|
464
|
+
export { PromptBuilder } from "./evaluation/prompts.js";
|
|
465
|
+
export { RAGASEvaluator } from "./evaluation/ragasEvaluator.js";
|
|
466
|
+
export { RetryManager } from "./evaluation/retryManager.js";
|
|
467
|
+
export { mapToEvaluationData } from "./evaluation/scoring.js";
|
|
406
468
|
//# sourceMappingURL=index.js.map
|
|
@@ -4,6 +4,8 @@
|
|
|
4
4
|
* Provides fault tolerance and prevents server overload
|
|
5
5
|
*/
|
|
6
6
|
import { mcpLogger } from "../utils/logger.js";
|
|
7
|
+
import { SpanSerializer, SpanType, SpanStatus, } from "../observability/index.js";
|
|
8
|
+
import { getMetricsAggregator } from "../observability/index.js";
|
|
7
9
|
/**
|
|
8
10
|
* Default rate limit configuration
|
|
9
11
|
* Provides sensible defaults for most MCP HTTP transport use cases
|
|
@@ -71,19 +73,44 @@ export class HTTPRateLimiter {
|
|
|
71
73
|
* @throws Error if the wait queue is too long
|
|
72
74
|
*/
|
|
73
75
|
async acquire() {
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
return new Promise((resolve, reject) => {
|
|
80
|
-
this.waitQueue.push({ resolve, reject });
|
|
81
|
-
mcpLogger.debug(`[HTTPRateLimiter] Request queued, queue length: ${this.waitQueue.length}`);
|
|
82
|
-
// Start processing the queue if not already processing
|
|
83
|
-
if (!this.processingQueue) {
|
|
84
|
-
this.processQueue();
|
|
85
|
-
}
|
|
76
|
+
const span = SpanSerializer.createSpan(SpanType.MCP_TRANSPORT, "mcp.rateLimit", {
|
|
77
|
+
"mcp.transport": "http",
|
|
78
|
+
"mcp.operation": "rateLimit",
|
|
79
|
+
"mcp.rateLimit.tokensAvailable": this.tokens,
|
|
80
|
+
"mcp.rateLimit.maxBurst": this.config.maxBurst,
|
|
86
81
|
});
|
|
82
|
+
const startTime = Date.now();
|
|
83
|
+
try {
|
|
84
|
+
// First, try to acquire without waiting
|
|
85
|
+
if (this.tryAcquire()) {
|
|
86
|
+
span.durationMs = Date.now() - startTime;
|
|
87
|
+
span.attributes["mcp.rateLimit.waited"] = false;
|
|
88
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
89
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
90
|
+
return;
|
|
91
|
+
}
|
|
92
|
+
// Add to wait queue
|
|
93
|
+
await new Promise((resolve, reject) => {
|
|
94
|
+
this.waitQueue.push({ resolve, reject });
|
|
95
|
+
mcpLogger.debug(`[HTTPRateLimiter] Request queued, queue length: ${this.waitQueue.length}`);
|
|
96
|
+
// Start processing the queue if not already processing
|
|
97
|
+
if (!this.processingQueue) {
|
|
98
|
+
this.processQueue();
|
|
99
|
+
}
|
|
100
|
+
});
|
|
101
|
+
span.durationMs = Date.now() - startTime;
|
|
102
|
+
span.attributes["mcp.rateLimit.waited"] = true;
|
|
103
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
104
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
105
|
+
}
|
|
106
|
+
catch (error) {
|
|
107
|
+
span.durationMs = Date.now() - startTime;
|
|
108
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.ERROR);
|
|
109
|
+
endedSpan.statusMessage =
|
|
110
|
+
error instanceof Error ? error.message : String(error);
|
|
111
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
112
|
+
throw error;
|
|
113
|
+
}
|
|
87
114
|
}
|
|
88
115
|
/**
|
|
89
116
|
* Process the wait queue, granting tokens as they become available
|
|
@@ -7,6 +7,8 @@
|
|
|
7
7
|
import { isAbortError } from "../utils/errorHandling.js";
|
|
8
8
|
import { calculateBackoffDelay } from "../utils/retryHandler.js";
|
|
9
9
|
import { logger } from "../utils/logger.js";
|
|
10
|
+
import { SpanSerializer, SpanType, SpanStatus, } from "../observability/index.js";
|
|
11
|
+
import { getMetricsAggregator } from "../observability/index.js";
|
|
10
12
|
/**
|
|
11
13
|
* Default HTTP retry configuration
|
|
12
14
|
*/
|
|
@@ -129,10 +131,23 @@ export async function withHTTPRetry(operation, config = {}) {
|
|
|
129
131
|
...DEFAULT_HTTP_RETRY_CONFIG,
|
|
130
132
|
...config,
|
|
131
133
|
};
|
|
134
|
+
const span = SpanSerializer.createSpan(SpanType.MCP_TRANSPORT, "mcp.retry", {
|
|
135
|
+
"mcp.transport": "http",
|
|
136
|
+
"mcp.operation": "retry",
|
|
137
|
+
"mcp.maxAttempts": mergedConfig.maxAttempts,
|
|
138
|
+
});
|
|
139
|
+
const startTime = Date.now();
|
|
132
140
|
let lastError;
|
|
141
|
+
let actualAttempts = 0;
|
|
133
142
|
for (let attempt = 1; attempt <= mergedConfig.maxAttempts; attempt++) {
|
|
143
|
+
actualAttempts = attempt;
|
|
134
144
|
try {
|
|
135
|
-
|
|
145
|
+
const result = await operation();
|
|
146
|
+
span.durationMs = Date.now() - startTime;
|
|
147
|
+
span.attributes["mcp.retryAttempt"] = attempt;
|
|
148
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
149
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
150
|
+
return result;
|
|
136
151
|
}
|
|
137
152
|
catch (error) {
|
|
138
153
|
lastError = error;
|
|
@@ -153,6 +168,12 @@ export async function withHTTPRetry(operation, config = {}) {
|
|
|
153
168
|
await sleep(delay);
|
|
154
169
|
}
|
|
155
170
|
}
|
|
171
|
+
span.durationMs = Date.now() - startTime;
|
|
172
|
+
span.attributes["mcp.retryAttempt"] = actualAttempts;
|
|
173
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.ERROR);
|
|
174
|
+
endedSpan.statusMessage =
|
|
175
|
+
lastError instanceof Error ? lastError.message : String(lastError);
|
|
176
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
156
177
|
throw lastError;
|
|
157
178
|
}
|
|
158
179
|
//# sourceMappingURL=httpRetryHandler.js.map
|
|
@@ -15,8 +15,8 @@ import { globalCircuitBreakerManager } from "./mcpCircuitBreaker.js";
|
|
|
15
15
|
import { withHTTPRetry, DEFAULT_HTTP_RETRY_CONFIG, } from "./httpRetryHandler.js";
|
|
16
16
|
import { globalRateLimiterManager } from "./httpRateLimiter.js";
|
|
17
17
|
import { NeuroLinkOAuthProvider, InMemoryTokenStorage } from "./auth/index.js";
|
|
18
|
-
import {
|
|
19
|
-
import {
|
|
18
|
+
import { SpanSerializer, SpanType, SpanStatus, } from "../observability/index.js";
|
|
19
|
+
import { getMetricsAggregator } from "../observability/index.js";
|
|
20
20
|
/**
|
|
21
21
|
* MCPClientFactory
|
|
22
22
|
* Factory class for creating MCP clients with different transports
|
|
@@ -38,12 +38,10 @@ export class MCPClientFactory {
|
|
|
38
38
|
*/
|
|
39
39
|
static async createClient(config, timeout = 10000) {
|
|
40
40
|
const startTime = Date.now();
|
|
41
|
-
const
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
"mcp.timeout_ms": timeout,
|
|
46
|
-
},
|
|
41
|
+
const obsSpan = SpanSerializer.createSpan(SpanType.MCP_TRANSPORT, "mcp.connect", {
|
|
42
|
+
"mcp.transport": config.transport,
|
|
43
|
+
"mcp.operation": "connect",
|
|
44
|
+
"mcp.server_id": config.id,
|
|
47
45
|
});
|
|
48
46
|
try {
|
|
49
47
|
mcpLogger.info(`[MCPClientFactory] Creating client for ${config.id}`, {
|
|
@@ -103,7 +101,9 @@ export class MCPClientFactory {
|
|
|
103
101
|
duration: Date.now() - startTime,
|
|
104
102
|
capabilities: result.capabilities,
|
|
105
103
|
});
|
|
106
|
-
|
|
104
|
+
obsSpan.durationMs = Date.now() - startTime;
|
|
105
|
+
const endedObsSpan = SpanSerializer.endSpan(obsSpan, SpanStatus.OK);
|
|
106
|
+
getMetricsAggregator().recordSpan(endedObsSpan);
|
|
107
107
|
return {
|
|
108
108
|
...result,
|
|
109
109
|
success: true,
|
|
@@ -113,18 +113,16 @@ export class MCPClientFactory {
|
|
|
113
113
|
catch (error) {
|
|
114
114
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
115
115
|
mcpLogger.error(`[MCPClientFactory] Failed to create client for ${config.id}:`, error);
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
116
|
+
obsSpan.durationMs = Date.now() - startTime;
|
|
117
|
+
const endedObsSpan = SpanSerializer.endSpan(obsSpan, SpanStatus.ERROR);
|
|
118
|
+
endedObsSpan.statusMessage = errorMessage;
|
|
119
|
+
getMetricsAggregator().recordSpan(endedObsSpan);
|
|
119
120
|
return {
|
|
120
121
|
success: false,
|
|
121
122
|
error: errorMessage,
|
|
122
123
|
duration: Date.now() - startTime,
|
|
123
124
|
};
|
|
124
125
|
}
|
|
125
|
-
finally {
|
|
126
|
-
span.end();
|
|
127
|
-
}
|
|
128
126
|
}
|
|
129
127
|
/**
|
|
130
128
|
* Internal client creation logic
|
|
@@ -9,6 +9,8 @@
|
|
|
9
9
|
import { tool } from "ai";
|
|
10
10
|
import { z } from "zod";
|
|
11
11
|
import { logger } from "../utils/logger.js";
|
|
12
|
+
import { SpanSerializer, SpanType, SpanStatus, } from "../observability/index.js";
|
|
13
|
+
import { getMetricsAggregator } from "../observability/index.js";
|
|
12
14
|
/** Maximum characters returned per retrieval request */
|
|
13
15
|
const DEFAULT_RETRIEVAL_LIMIT = 50_000;
|
|
14
16
|
/** Hard maximum for user/LLM-supplied limit to prevent massive tool outputs */
|
|
@@ -62,9 +64,18 @@ export function createMemoryRetrievalTools(memoryManager) {
|
|
|
62
64
|
"Returns matching lines with line numbers."),
|
|
63
65
|
}),
|
|
64
66
|
execute: async (args) => {
|
|
67
|
+
const span = SpanSerializer.createSpan(SpanType.MEMORY, "memory.retrieve", {
|
|
68
|
+
"memory.operation": "retrieve",
|
|
69
|
+
"memory.store": "redis",
|
|
70
|
+
"memory.query": args.search || args.messageId || `lastN:${args.lastN ?? "all"}`,
|
|
71
|
+
});
|
|
72
|
+
const startTime = Date.now();
|
|
65
73
|
try {
|
|
66
74
|
const conversation = await memoryManager.getSessionRaw(args.sessionId);
|
|
67
75
|
if (!conversation) {
|
|
76
|
+
span.durationMs = Date.now() - startTime;
|
|
77
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
78
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
68
79
|
return { error: "Session not found", sessionId: args.sessionId };
|
|
69
80
|
}
|
|
70
81
|
let messages = conversation.messages;
|
|
@@ -72,6 +83,9 @@ export function createMemoryRetrievalTools(memoryManager) {
|
|
|
72
83
|
if (args.messageId) {
|
|
73
84
|
const msg = messages.find((m) => m.id === args.messageId);
|
|
74
85
|
if (!msg) {
|
|
86
|
+
span.durationMs = Date.now() - startTime;
|
|
87
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
88
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
75
89
|
return { error: "Message not found", messageId: args.messageId };
|
|
76
90
|
}
|
|
77
91
|
messages = [msg];
|
|
@@ -130,9 +144,17 @@ export function createMemoryRetrievalTools(memoryManager) {
|
|
|
130
144
|
hasMore: end < content.length,
|
|
131
145
|
};
|
|
132
146
|
});
|
|
147
|
+
span.durationMs = Date.now() - startTime;
|
|
148
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.OK);
|
|
149
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
133
150
|
return { messages: results, totalMessages: results.length };
|
|
134
151
|
}
|
|
135
152
|
catch (error) {
|
|
153
|
+
span.durationMs = Date.now() - startTime;
|
|
154
|
+
const endedSpan = SpanSerializer.endSpan(span, SpanStatus.ERROR);
|
|
155
|
+
endedSpan.statusMessage =
|
|
156
|
+
error instanceof Error ? error.message : String(error);
|
|
157
|
+
getMetricsAggregator().recordSpan(endedSpan);
|
|
136
158
|
logger.error("[MemoryRetrievalTools] Error retrieving context", {
|
|
137
159
|
error: error instanceof Error ? error.message : String(error),
|
|
138
160
|
});
|