@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.
- package/CHANGELOG.md +13 -2
- package/dist/auth/anthropicOAuth.js +3 -3
- package/dist/auth/middleware/AuthMiddleware.d.ts +1 -1
- package/dist/auth/sessionManager.js +4 -4
- package/dist/auth/tokenStore.js +4 -4
- package/dist/browser/neurolink.min.js +474 -473
- package/dist/cli/commands/observability.d.ts +1 -6
- package/dist/cli/commands/observability.js +0 -106
- package/dist/cli/commands/proxy.js +9 -18
- package/dist/cli/commands/telemetry.d.ts +3 -13
- package/dist/cli/commands/telemetry.js +7 -354
- package/dist/cli/loop/session.js +1 -1
- package/dist/client/httpClient.js +1 -1
- package/dist/client/sseClient.js +1 -1
- package/dist/client/streamingClient.js +2 -2
- package/dist/client/wsClient.js +1 -1
- package/dist/constants/langfuse.d.ts +25 -0
- package/dist/constants/langfuse.js +38 -0
- package/dist/constants/telemetry.d.ts +20 -0
- package/dist/constants/telemetry.js +34 -0
- package/dist/core/baseProvider.d.ts +2 -1
- package/dist/core/baseProvider.js +4 -11
- package/dist/core/conversationMemoryManager.js +5 -8
- package/dist/core/factory.js +1 -1
- package/dist/core/geminiLoopAdapter.d.ts +8 -1
- package/dist/core/geminiLoopAdapter.js +25 -1
- package/dist/core/loopEngine.js +69 -40
- package/dist/core/modules/MessageBuilder.js +2 -2
- package/dist/core/modules/StreamHandler.js +2 -2
- package/dist/core/modules/TelemetryHandler.d.ts +2 -18
- package/dist/core/modules/TelemetryHandler.js +1 -66
- package/dist/core/modules/ToolsManager.js +40 -31
- package/dist/core/nativeGenerateLoop.js +78 -8
- package/dist/core/redisConversationMemoryManager.js +8 -15
- package/dist/core/toolExecutionGuards.js +1 -13
- package/dist/index.d.ts +5 -12
- package/dist/index.js +5 -37
- package/dist/mcp/batching/requestBatcher.js +1 -1
- package/dist/mcp/externalServerManager.js +3 -21
- package/dist/mcp/toolDiscoveryService.js +4 -16
- package/dist/mcp/toolRegistry.js +2 -5
- package/dist/memory/memoryRetrievalTools.js +1 -1
- package/dist/neurolink.d.ts +16 -27
- package/dist/neurolink.js +788 -792
- package/dist/observability/exporterSpanProcessor.d.ts +50 -0
- package/dist/observability/exporterSpanProcessor.js +181 -0
- package/dist/observability/exporters/langfuseExporter.d.ts +13 -34
- package/dist/observability/exporters/langfuseExporter.js +101 -154
- package/dist/observability/index.d.ts +1 -0
- package/dist/observability/index.js +1 -0
- package/dist/observability/langfuseMasking.d.ts +8 -0
- package/dist/observability/langfuseMasking.js +47 -0
- package/dist/observability/otlpEncoding.d.ts +20 -0
- package/dist/observability/otlpEncoding.js +85 -0
- package/dist/providers/amazonBedrock/client.js +142 -176
- package/dist/providers/amazonBedrock/loopAdapter.js +14 -1
- package/dist/providers/amazonSagemaker.js +118 -80
- package/dist/providers/anthropic/client.js +3 -52
- package/dist/providers/anthropic/loopAdapter.js +24 -1
- package/dist/providers/anthropic/rateLimitCapture.js +9 -12
- package/dist/providers/googleAiStudio/client.d.ts +4 -5
- package/dist/providers/googleAiStudio/client.js +38 -40
- package/dist/providers/googleVertex/client.d.ts +2 -7
- package/dist/providers/googleVertex/client.js +282 -378
- package/dist/providers/googleVertex/constants.js +2 -2
- package/dist/providers/litellm/client.d.ts +2 -9
- package/dist/providers/litellm/client.js +1 -63
- package/dist/providers/openAI/client.d.ts +1 -8
- package/dist/providers/openAI/client.js +0 -65
- package/dist/providers/openaiChatCompletionsBase.d.ts +1 -0
- package/dist/providers/openaiChatCompletionsBase.js +61 -4
- package/dist/providers/replicate.js +22 -4
- package/dist/proxy/codexUsage.js +7 -0
- package/dist/proxy/proxyFetch.js +19 -25
- package/dist/proxy/proxyTracer.d.ts +14 -7
- package/dist/proxy/proxyTracer.js +129 -83
- package/dist/proxy/proxyTranslationEngine.js +0 -1
- package/dist/proxy/requestLogger.d.ts +1 -1
- package/dist/proxy/requestLogger.js +39 -45
- package/dist/server/middleware/common.js +1 -1
- package/dist/server/routes/agentRoutes.js +4 -4
- package/dist/server/routes/claudeProxyRoutes.js +99 -196
- package/dist/server/routes/codexProxyRoutes.js +621 -591
- package/dist/server/routes/healthRoutes.js +6 -6
- package/dist/server/routes/mcpRoutes.js +7 -7
- package/dist/server/routes/memoryRoutes.js +7 -7
- package/dist/server/routes/openApiRoutes.js +3 -3
- package/dist/server/routes/toolRoutes.js +5 -5
- package/dist/server/routes/transcribeRoutes.js +1 -1
- package/dist/server/utils/validation.d.ts +3 -3
- package/dist/services/server/ai/observability/instrumentation.d.ts +34 -201
- package/dist/services/server/ai/observability/instrumentation.js +220 -1267
- package/dist/services/server/ai/observability/langfuseSetup.d.ts +14 -0
- package/dist/services/server/ai/observability/langfuseSetup.js +55 -0
- package/dist/services/server/ai/observability/otlpSetup.d.ts +16 -0
- package/dist/services/server/ai/observability/otlpSetup.js +58 -0
- package/dist/session/globalSessionState.js +0 -11
- package/dist/telemetry/attributes.d.ts +23 -46
- package/dist/telemetry/attributes.js +76 -162
- package/dist/telemetry/chatMessages.d.ts +13 -0
- package/dist/telemetry/chatMessages.js +59 -0
- package/dist/telemetry/index.d.ts +5 -19
- package/dist/telemetry/index.js +5 -26
- package/dist/telemetry/observation.d.ts +37 -0
- package/dist/telemetry/observation.js +112 -0
- package/dist/telemetry/observationNames.d.ts +18 -0
- package/dist/telemetry/observationNames.js +24 -0
- package/dist/telemetry/spanSanitizer.d.ts +39 -0
- package/dist/telemetry/spanSanitizer.js +92 -0
- package/dist/telemetry/spanSerialization.d.ts +13 -0
- package/dist/telemetry/spanSerialization.js +46 -0
- package/dist/telemetry/tracers.d.ts +37 -18
- package/dist/telemetry/tracers.js +97 -19
- package/dist/telemetry/withSpan.d.ts +47 -25
- package/dist/telemetry/withSpan.js +158 -71
- package/dist/types/cli.d.ts +0 -11
- package/dist/types/decision.d.ts +3 -0
- package/dist/types/exporter.d.ts +54 -0
- package/dist/types/exporter.js +0 -4
- package/dist/types/generate.d.ts +4 -1
- package/dist/types/isolatedAgent.d.ts +5 -4
- package/dist/types/loopEngine.d.ts +18 -28
- package/dist/types/observability.d.ts +127 -160
- package/dist/types/providers.d.ts +15 -0
- package/dist/types/proxy.d.ts +41 -2
- package/dist/utils/anthropicTraceSanitizer.d.ts +2 -2
- package/dist/utils/anthropicTraceSanitizer.js +3 -1
- package/dist/utils/conversationMemory.js +4 -4
- package/dist/utils/fileDetector.js +1 -1
- package/dist/utils/messageBuilder.js +1 -1
- package/dist/utils/noOutputSentinel.d.ts +4 -16
- package/dist/utils/noOutputSentinel.js +12 -28
- package/dist/utils/providerRetry.js +4 -4
- package/dist/voice/livekit/brain.js +1 -1
- package/dist/voice/livekit/realtimeMemory.d.ts +1 -1
- package/dist/voice/livekit/realtimeMemory.js +66 -1
- package/dist/voice/livekit/realtimeVoiceAgent.js +1 -1
- package/docs-site/static/search-index.json +41 -63
- package/package.json +5 -4
- package/dist/telemetry/telemetryService.d.ts +0 -79
- package/dist/telemetry/telemetryService.js +0 -572
- package/dist/utils/observabilityHelpers.d.ts +0 -27
- 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");
|