@juspay/neurolink 12.59.0 → 13.0.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.
Files changed (143) hide show
  1. package/CHANGELOG.md +13 -2
  2. package/dist/auth/anthropicOAuth.js +3 -3
  3. package/dist/auth/middleware/AuthMiddleware.d.ts +1 -1
  4. package/dist/auth/sessionManager.js +4 -4
  5. package/dist/auth/tokenStore.js +4 -4
  6. package/dist/browser/neurolink.min.js +474 -473
  7. package/dist/cli/commands/observability.d.ts +1 -6
  8. package/dist/cli/commands/observability.js +0 -106
  9. package/dist/cli/commands/proxy.js +9 -18
  10. package/dist/cli/commands/telemetry.d.ts +3 -13
  11. package/dist/cli/commands/telemetry.js +7 -354
  12. package/dist/cli/loop/session.js +1 -1
  13. package/dist/client/httpClient.js +1 -1
  14. package/dist/client/sseClient.js +1 -1
  15. package/dist/client/streamingClient.js +2 -2
  16. package/dist/client/wsClient.js +1 -1
  17. package/dist/constants/langfuse.d.ts +25 -0
  18. package/dist/constants/langfuse.js +38 -0
  19. package/dist/constants/telemetry.d.ts +20 -0
  20. package/dist/constants/telemetry.js +34 -0
  21. package/dist/core/baseProvider.d.ts +2 -1
  22. package/dist/core/baseProvider.js +4 -11
  23. package/dist/core/conversationMemoryManager.js +5 -8
  24. package/dist/core/factory.js +1 -1
  25. package/dist/core/geminiLoopAdapter.d.ts +8 -1
  26. package/dist/core/geminiLoopAdapter.js +25 -1
  27. package/dist/core/loopEngine.js +69 -40
  28. package/dist/core/modules/MessageBuilder.js +2 -2
  29. package/dist/core/modules/StreamHandler.js +2 -2
  30. package/dist/core/modules/TelemetryHandler.d.ts +2 -18
  31. package/dist/core/modules/TelemetryHandler.js +1 -66
  32. package/dist/core/modules/ToolsManager.js +40 -31
  33. package/dist/core/nativeGenerateLoop.js +78 -8
  34. package/dist/core/redisConversationMemoryManager.js +8 -15
  35. package/dist/core/toolExecutionGuards.js +1 -13
  36. package/dist/index.d.ts +5 -12
  37. package/dist/index.js +5 -37
  38. package/dist/mcp/batching/requestBatcher.js +1 -1
  39. package/dist/mcp/externalServerManager.js +3 -21
  40. package/dist/mcp/toolDiscoveryService.js +4 -16
  41. package/dist/mcp/toolRegistry.js +2 -5
  42. package/dist/memory/memoryRetrievalTools.js +1 -1
  43. package/dist/neurolink.d.ts +16 -27
  44. package/dist/neurolink.js +788 -792
  45. package/dist/observability/exporterSpanProcessor.d.ts +50 -0
  46. package/dist/observability/exporterSpanProcessor.js +181 -0
  47. package/dist/observability/exporters/langfuseExporter.d.ts +13 -34
  48. package/dist/observability/exporters/langfuseExporter.js +101 -154
  49. package/dist/observability/index.d.ts +1 -0
  50. package/dist/observability/index.js +1 -0
  51. package/dist/observability/langfuseMasking.d.ts +8 -0
  52. package/dist/observability/langfuseMasking.js +47 -0
  53. package/dist/observability/otlpEncoding.d.ts +20 -0
  54. package/dist/observability/otlpEncoding.js +85 -0
  55. package/dist/providers/amazonBedrock/client.js +142 -176
  56. package/dist/providers/amazonBedrock/loopAdapter.js +14 -1
  57. package/dist/providers/amazonSagemaker.js +118 -80
  58. package/dist/providers/anthropic/client.js +3 -52
  59. package/dist/providers/anthropic/loopAdapter.js +24 -1
  60. package/dist/providers/anthropic/rateLimitCapture.js +9 -12
  61. package/dist/providers/googleAiStudio/client.d.ts +4 -5
  62. package/dist/providers/googleAiStudio/client.js +38 -40
  63. package/dist/providers/googleVertex/client.d.ts +2 -7
  64. package/dist/providers/googleVertex/client.js +282 -378
  65. package/dist/providers/googleVertex/constants.js +2 -2
  66. package/dist/providers/litellm/client.d.ts +2 -9
  67. package/dist/providers/litellm/client.js +1 -63
  68. package/dist/providers/openAI/client.d.ts +1 -8
  69. package/dist/providers/openAI/client.js +0 -65
  70. package/dist/providers/openaiChatCompletionsBase.d.ts +1 -0
  71. package/dist/providers/openaiChatCompletionsBase.js +61 -4
  72. package/dist/providers/replicate.js +22 -4
  73. package/dist/proxy/codexUsage.js +7 -0
  74. package/dist/proxy/proxyFetch.js +19 -25
  75. package/dist/proxy/proxyTracer.d.ts +14 -7
  76. package/dist/proxy/proxyTracer.js +129 -83
  77. package/dist/proxy/proxyTranslationEngine.js +0 -1
  78. package/dist/proxy/requestLogger.d.ts +1 -1
  79. package/dist/proxy/requestLogger.js +39 -45
  80. package/dist/server/middleware/common.js +1 -1
  81. package/dist/server/routes/agentRoutes.js +4 -4
  82. package/dist/server/routes/claudeProxyRoutes.js +99 -196
  83. package/dist/server/routes/codexProxyRoutes.js +621 -591
  84. package/dist/server/routes/healthRoutes.js +6 -6
  85. package/dist/server/routes/mcpRoutes.js +7 -7
  86. package/dist/server/routes/memoryRoutes.js +7 -7
  87. package/dist/server/routes/openApiRoutes.js +3 -3
  88. package/dist/server/routes/toolRoutes.js +5 -5
  89. package/dist/server/routes/transcribeRoutes.js +1 -1
  90. package/dist/server/utils/validation.d.ts +3 -3
  91. package/dist/services/server/ai/observability/instrumentation.d.ts +34 -201
  92. package/dist/services/server/ai/observability/instrumentation.js +220 -1267
  93. package/dist/services/server/ai/observability/langfuseSetup.d.ts +14 -0
  94. package/dist/services/server/ai/observability/langfuseSetup.js +55 -0
  95. package/dist/services/server/ai/observability/otlpSetup.d.ts +16 -0
  96. package/dist/services/server/ai/observability/otlpSetup.js +58 -0
  97. package/dist/session/globalSessionState.js +0 -11
  98. package/dist/telemetry/attributes.d.ts +23 -46
  99. package/dist/telemetry/attributes.js +76 -162
  100. package/dist/telemetry/chatMessages.d.ts +13 -0
  101. package/dist/telemetry/chatMessages.js +59 -0
  102. package/dist/telemetry/index.d.ts +5 -19
  103. package/dist/telemetry/index.js +5 -26
  104. package/dist/telemetry/observation.d.ts +37 -0
  105. package/dist/telemetry/observation.js +112 -0
  106. package/dist/telemetry/observationNames.d.ts +18 -0
  107. package/dist/telemetry/observationNames.js +24 -0
  108. package/dist/telemetry/spanSanitizer.d.ts +39 -0
  109. package/dist/telemetry/spanSanitizer.js +92 -0
  110. package/dist/telemetry/spanSerialization.d.ts +13 -0
  111. package/dist/telemetry/spanSerialization.js +46 -0
  112. package/dist/telemetry/tracers.d.ts +37 -18
  113. package/dist/telemetry/tracers.js +97 -19
  114. package/dist/telemetry/withSpan.d.ts +47 -25
  115. package/dist/telemetry/withSpan.js +158 -71
  116. package/dist/types/cli.d.ts +0 -11
  117. package/dist/types/decision.d.ts +3 -0
  118. package/dist/types/exporter.d.ts +54 -0
  119. package/dist/types/exporter.js +0 -4
  120. package/dist/types/generate.d.ts +4 -1
  121. package/dist/types/isolatedAgent.d.ts +5 -4
  122. package/dist/types/loopEngine.d.ts +18 -28
  123. package/dist/types/observability.d.ts +127 -160
  124. package/dist/types/providers.d.ts +15 -0
  125. package/dist/types/proxy.d.ts +41 -2
  126. package/dist/utils/anthropicTraceSanitizer.d.ts +2 -2
  127. package/dist/utils/anthropicTraceSanitizer.js +3 -1
  128. package/dist/utils/conversationMemory.js +4 -4
  129. package/dist/utils/fileDetector.js +1 -1
  130. package/dist/utils/messageBuilder.js +1 -1
  131. package/dist/utils/noOutputSentinel.d.ts +4 -16
  132. package/dist/utils/noOutputSentinel.js +12 -28
  133. package/dist/utils/providerRetry.js +4 -4
  134. package/dist/voice/livekit/brain.js +1 -1
  135. package/dist/voice/livekit/realtimeMemory.d.ts +1 -1
  136. package/dist/voice/livekit/realtimeMemory.js +66 -1
  137. package/dist/voice/livekit/realtimeVoiceAgent.js +1 -1
  138. package/docs-site/static/search-index.json +41 -63
  139. package/package.json +5 -4
  140. package/dist/telemetry/telemetryService.d.ts +0 -79
  141. package/dist/telemetry/telemetryService.js +0 -572
  142. package/dist/utils/observabilityHelpers.d.ts +0 -27
  143. package/dist/utils/observabilityHelpers.js +0 -47
@@ -16,12 +16,72 @@
16
16
  *
17
17
  * See docs/features/livekit-voice-agent.md.
18
18
  */
19
+ import { context, trace } from "@opentelemetry/api";
20
+ import { setLangfuseContext } from "../../services/server/ai/observability/instrumentation.js";
21
+ import { observe, observeTrace } from "../../telemetry/observation.js";
22
+ import { tracers } from "../../telemetry/tracers.js";
19
23
  import { logger } from "../../utils/logger.js";
20
24
  import { VOICE_MEMORY_SECRET_ENV, verifyVoiceMemoryBinding, } from "./memoryBinding.js";
21
25
  import { createVoiceTurnRecorder } from "./turnRecorder.js";
22
26
  const DEFAULT_FLUSH_BUDGET_MS = 800;
27
+ function traceTurn(turn, call) {
28
+ const { sessionId, userId, roomName, model } = call;
29
+ try {
30
+ setLangfuseContext({
31
+ sessionId,
32
+ userId,
33
+ tags: ["voice"],
34
+ traceName: "realtime-turn",
35
+ metadata: { roomName },
36
+ }, () => {
37
+ const level = turn.interrupted ? "WARNING" : undefined;
38
+ const endTime = new Date();
39
+ const root = tracers.sdk.startSpan("realtime-turn", {
40
+ startTime: turn.startTime,
41
+ });
42
+ observe(root, "agent", {
43
+ input: turn.userMessage,
44
+ output: turn.aiResponse,
45
+ level,
46
+ });
47
+ observeTrace(root, {
48
+ input: turn.userMessage,
49
+ output: turn.aiResponse,
50
+ });
51
+ const inRoot = trace.setSpan(context.active(), root);
52
+ const generation = tracers.generation.startSpan("realtime", { startTime: turn.startTime }, inRoot);
53
+ observe(generation, "generation", {
54
+ ...(model && { model }),
55
+ input: [{ role: "user", content: turn.userMessage }],
56
+ output: [{ role: "assistant", content: turn.aiResponse }],
57
+ level,
58
+ metadata: { provider: "vertex" },
59
+ });
60
+ generation.end(endTime);
61
+ const events = turn.events ?? [];
62
+ for (const start of events.filter((e) => e.type === "tool:start")) {
63
+ const end = events.find((e) => e.type === "tool:end" &&
64
+ e.tool === start.tool &&
65
+ e.seq > start.seq);
66
+ const tool = tracers.sdk.startSpan(String(start.tool), { startTime: start.timestamp }, inRoot);
67
+ observe(tool, "tool", {
68
+ input: start.args,
69
+ output: end?.result ?? end?.error,
70
+ level: end?.success === false ? "ERROR" : undefined,
71
+ });
72
+ tool.end(Math.min(end?.timestamp ?? Infinity, endTime.getTime()));
73
+ }
74
+ root.end(endTime);
75
+ });
76
+ }
77
+ catch (error) {
78
+ logger.debug("realtime.memory.traceFailed", {
79
+ error: error instanceof Error ? error.message : String(error),
80
+ });
81
+ }
82
+ }
23
83
  /** Verify the call's binding and prepare its recorder; `undefined` means "no memory for this call". */
24
- export async function setUpRealtimeCallMemory(ctx, config) {
84
+ export async function setUpRealtimeCallMemory(ctx, config, model) {
25
85
  if (!config) {
26
86
  return undefined;
27
87
  }
@@ -50,9 +110,14 @@ export async function setUpRealtimeCallMemory(ctx, config) {
50
110
  return undefined;
51
111
  }
52
112
  let publish;
113
+ const tracedTurns = new Set();
53
114
  const recorder = createVoiceTurnRecorder({
54
115
  ...(config.settleMs !== undefined ? { settleMs: config.settleMs } : {}),
55
116
  write: async (turn) => {
117
+ if (!tracedTurns.has(turn.turnId)) {
118
+ tracedTurns.add(turn.turnId);
119
+ traceTurn(turn, { sessionId, userId, roomName: ctx.room.name, model });
120
+ }
56
121
  const result = await neurolink.recordConversationTurn({
57
122
  sessionId,
58
123
  userId,
@@ -196,7 +196,7 @@ export function defineRealtimeVoiceAgent(config = {}) {
196
196
  });
197
197
  // Decide whether this call may be remembered BEFORE the lifecycle installs
198
198
  // its process reaper, so the shutdown flush is registered first.
199
- const memory = await setUpRealtimeCallMemory(ctx, memoryConfig);
199
+ const memory = await setUpRealtimeCallMemory(ctx, memoryConfig, cfg.model);
200
200
  await installRealtimeJobLifecycle(ctx, cfg);
201
201
  const { voice } = await import("@livekit/agents");
202
202
  const google = await import("@livekit/agents-plugin-google");