@minded-ai/mindedjs 1.0.80-beta.12 → 1.0.80-beta.3
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/dist/edges/createLogicalRouter.d.ts +1 -1
- package/dist/edges/createLogicalRouter.d.ts.map +1 -1
- package/dist/edges/createLogicalRouter.js +5 -16
- package/dist/edges/createLogicalRouter.js.map +1 -1
- package/dist/edges/edgeFactory.d.ts.map +1 -1
- package/dist/edges/edgeFactory.js +2 -4
- package/dist/edges/edgeFactory.js.map +1 -1
- package/dist/voice/voiceSession.d.ts.map +1 -1
- package/dist/voice/voiceSession.js +13 -15
- package/dist/voice/voiceSession.js.map +1 -1
- package/package.json +4 -4
- package/src/edges/createLogicalRouter.ts +5 -18
- package/src/edges/edgeFactory.ts +2 -4
- package/src/voice/voiceSession.ts +17 -19
|
@@ -2,5 +2,5 @@ import { LogicalConditionEdge } from '../types/Flows.types';
|
|
|
2
2
|
import { stateAnnotation } from '../types/LangGraph.types';
|
|
3
3
|
export declare const createLogicalRouter: ({ edges }: {
|
|
4
4
|
edges: LogicalConditionEdge[];
|
|
5
|
-
}) => (state: typeof stateAnnotation.State) => Promise<string
|
|
5
|
+
}) => (state: typeof stateAnnotation.State) => Promise<string>;
|
|
6
6
|
//# sourceMappingURL=createLogicalRouter.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLogicalRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,mBAAmB,GAAI,WAAW;IAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,MAChE,OAAO,OAAO,eAAe,CAAC,KAAK,
|
|
1
|
+
{"version":3,"file":"createLogicalRouter.d.ts","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,oBAAoB,EAAE,MAAM,sBAAsB,CAAC;AAC5D,OAAO,EAAE,eAAe,EAAE,MAAM,0BAA0B,CAAC;AAO3D,eAAO,MAAM,mBAAmB,GAAI,WAAW;IAAE,KAAK,EAAE,oBAAoB,EAAE,CAAA;CAAE,MAChE,OAAO,OAAO,eAAe,CAAC,KAAK,oBA2ElD,CAAC"}
|
|
@@ -41,11 +41,7 @@ const CONDITION_TIMEOUT = 5000; // 5 seconds
|
|
|
41
41
|
const createLogicalRouter = ({ edges }) => {
|
|
42
42
|
return async (state) => {
|
|
43
43
|
logger_1.logger.debug(`Evaluating logical conditions for ${edges.length} edges`);
|
|
44
|
-
|
|
45
|
-
const regularEdges = edges.filter(edge => edge.condition.trim() !== 'else');
|
|
46
|
-
const elseEdges = edges.filter(edge => edge.condition.trim() === 'else');
|
|
47
|
-
// First, evaluate all regular conditions
|
|
48
|
-
for (const edge of regularEdges) {
|
|
44
|
+
for (const edge of edges) {
|
|
49
45
|
try {
|
|
50
46
|
// Customer is responsible for providing valid JavaScript syntax
|
|
51
47
|
// We execute their condition in a sandboxed VM with timeout protection
|
|
@@ -83,10 +79,11 @@ const createLogicalRouter = ({ edges }) => {
|
|
|
83
79
|
Promise.resolve(conditionFn({ state })),
|
|
84
80
|
new Promise((_, reject) => setTimeout(() => reject(new Error('Condition execution timeout')), CONDITION_TIMEOUT)),
|
|
85
81
|
]);
|
|
86
|
-
if (result
|
|
82
|
+
if (result) {
|
|
87
83
|
logger_1.logger.info(`Condition matched for edge ${edge.source} → ${edge.target}`);
|
|
88
84
|
return edge.target;
|
|
89
85
|
}
|
|
86
|
+
logger_1.logger.debug(`Condition not matched for edge ${edge.source} → ${edge.target}`);
|
|
90
87
|
}
|
|
91
88
|
catch (error) {
|
|
92
89
|
// Provide detailed error information back to the customer
|
|
@@ -104,17 +101,9 @@ const createLogicalRouter = ({ edges }) => {
|
|
|
104
101
|
continue;
|
|
105
102
|
}
|
|
106
103
|
}
|
|
107
|
-
// If no regular conditions matched, check for "else" conditions
|
|
108
|
-
if (elseEdges.length > 0) {
|
|
109
|
-
logger_1.logger.info(`No regular conditions matched, evaluating ${elseEdges.length} else condition(s)`);
|
|
110
|
-
// Return the first "else" condition's target
|
|
111
|
-
const elseEdge = elseEdges[0];
|
|
112
|
-
logger_1.logger.info(`Else condition matched for edge ${elseEdge.source} → ${elseEdge.target}`);
|
|
113
|
-
return elseEdge.target;
|
|
114
|
-
}
|
|
115
104
|
// If no conditions matched or all failed, return to the source node
|
|
116
|
-
logger_1.logger.info(
|
|
117
|
-
return
|
|
105
|
+
logger_1.logger.info(`No conditions matched, returning to source: ${edges[0].source}`);
|
|
106
|
+
return edges[0].source;
|
|
118
107
|
};
|
|
119
108
|
};
|
|
120
109
|
exports.createLogicalRouter = createLogicalRouter;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"createLogicalRouter.js","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAEA,4CAAyC;AACzC,uCAAyB;AAEzB,6DAA6D;AAC7D,MAAM,iBAAiB,GAAG,IAAI,CAAC,CAAC,YAAY;AAErC,MAAM,mBAAmB,GAAG,CAAC,EAAE,KAAK,EAAqC,EAAE,EAAE;IAClF,OAAO,KAAK,EAAE,KAAmC,EAAE,EAAE;QACnD,eAAM,CAAC,KAAK,CAAC,qCAAqC,KAAK,CAAC,MAAM,QAAQ,CAAC,CAAC;QAExE,
|
|
1
|
+
{"version":3,"file":"createLogicalRouter.js","sourceRoot":"","sources":["../../src/edges/createLogicalRouter.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edgeFactory.d.ts","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,IAAI,EAAkF,MAAM,sBAAsB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC,eAAO,MAAM,WAAW,GAAI,6CAOzB;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;CACd,
|
|
1
|
+
{"version":3,"file":"edgeFactory.d.ts","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAY,IAAI,EAAkF,MAAM,sBAAsB,CAAC;AAC5I,OAAO,EAAE,gBAAgB,EAAE,MAAM,0BAA0B,CAAC;AAC5D,OAAO,EAAE,iBAAiB,EAAE,MAAM,sCAAsC,CAAC;AAMzE,OAAO,EAAE,IAAI,EAAE,MAAM,sBAAsB,CAAC;AAC5C,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC,eAAO,MAAM,WAAW,GAAI,6CAOzB;IACD,KAAK,EAAE,gBAAgB,CAAC;IACxB,KAAK,EAAE,IAAI,EAAE,CAAC;IACd,KAAK,EAAE,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC;IAC5B,KAAK,EAAE,IAAI,CAAC,GAAG,EAAE,GAAG,CAAC,EAAE,CAAC;IACxB,GAAG,EAAE,iBAAiB,CAAC;IACvB,KAAK,EAAE,KAAK,CAAC;CACd,SA0FA,CAAC"}
|
|
@@ -23,7 +23,7 @@ const edgeFactory = ({ graph, edges, nodes, tools, llm, agent, }) => {
|
|
|
23
23
|
if (edgesBySource.logical.length > 0) {
|
|
24
24
|
const logicalRouter = (0, createLogicalRouter_1.createLogicalRouter)({ edges: edgesBySource.logical });
|
|
25
25
|
const result = await logicalRouter(state);
|
|
26
|
-
if (result) {
|
|
26
|
+
if (result && result !== edgesBySource.logical[0].source) {
|
|
27
27
|
return result;
|
|
28
28
|
}
|
|
29
29
|
else {
|
|
@@ -43,9 +43,7 @@ const edgeFactory = ({ graph, edges, nodes, tools, llm, agent, }) => {
|
|
|
43
43
|
return await promptRouter(state);
|
|
44
44
|
}
|
|
45
45
|
// Fallback: stay at current source node
|
|
46
|
-
|
|
47
|
-
logger_1.logger.info(`No conditions matched, returning to source: ${source}`);
|
|
48
|
-
return source;
|
|
46
|
+
return sourceNode;
|
|
49
47
|
};
|
|
50
48
|
};
|
|
51
49
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"edgeFactory.js","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":";;;AAAA,sDAA4I;AAG5I,6DAA0D;AAC1D,+DAA4D;AAC5D,yDAAsD;AACtD,0EAAoG;AACpG,4DAA+E;AAG/E,4CAAyC;AAQlC,MAAM,WAAW,GAAG,CAAC,EAC1B,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACL,GAAG,EACH,KAAK,GAQN,EAAE,EAAE;IACH;;OAEG;IACH,MAAM,oBAAoB,GAAG,CAAC,UAAkB,EAAE,aAA4B,EAAE,YAAkB,EAAE,EAAE;QACpG,OAAO,KAAK,EAAE,KAAU,EAAE,EAAE;YAC1B,wCAAwC;YACxC,IAAI,aAAa,CAAC,WAAW,EAAE,CAAC;gBAC9B,MAAM,YAAY,GAAG,IAAA,mCAAgB,EAAC,aAAa,CAAC,WAAW,CAAC,CAAC;gBACjE,OAAO,MAAM,YAAY,EAAE,CAAC;YAC9B,CAAC;YAED,sCAAsC;YACtC,IAAI,aAAa,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;gBACrC,MAAM,aAAa,GAAG,IAAA,yCAAmB,EAAC,EAAE,KAAK,EAAE,aAAa,CAAC,OAAO,EAAE,CAAC,CAAC;gBAC5E,MAAM,MAAM,GAAG,MAAM,aAAa,CAAC,KAAK,CAAC,CAAC;gBAC1C,IAAI,MAAM,EAAE,CAAC;
|
|
1
|
+
{"version":3,"file":"edgeFactory.js","sourceRoot":"","sources":["../../src/edges/edgeFactory.ts"],"names":[],"mappings":"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"}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voiceSession.d.ts","sourceRoot":"","sources":["../../src/voice/voiceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,sBAAsB,CAAC,CAAa;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAA+C;IACzE,OAAO,CAAC,oBAAoB,CAAC,CAAa;gBAE9B,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAQpI;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBpB,gBAAgB;YAQhB,iBAAiB;IAsB/B,OAAO,CAAC,mBAAmB;
|
|
1
|
+
{"version":3,"file":"voiceSession.d.ts","sourceRoot":"","sources":["../../src/voice/voiceSession.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,UAAU,CAAC;AASjC;;GAEG;AACH,qBAAa,YAAY;IACvB,OAAO,CAAC,KAAK,CAAQ;IACrB,OAAO,CAAC,SAAS,CAAS;IAC1B,OAAO,CAAC,YAAY,CAAS;IAC7B,OAAO,CAAC,OAAO,CAAC,CAAS;IACzB,OAAO,CAAC,gBAAgB,CAAC,CAAY;IAErC,OAAO,CAAC,eAAe,CAAC,CAAyB;IACjD,OAAO,CAAC,sBAAsB,CAAC,CAAa;IAC5C,OAAO,CAAC,iBAAiB,CAAC,CAA+C;IACzE,OAAO,CAAC,oBAAoB,CAAC,CAAa;gBAE9B,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAAE,EAAE;QAAE,KAAK,EAAE,KAAK,CAAC;QAAC,SAAS,EAAE,MAAM,CAAC;QAAC,YAAY,EAAE,MAAM,CAAC;QAAC,OAAO,CAAC,EAAE,MAAM,CAAA;KAAE;IAQpI;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;YAqBpB,gBAAgB;YAQhB,iBAAiB;IAsB/B,OAAO,CAAC,mBAAmB;YAuHb,sBAAsB;YAUtB,mBAAmB;IAsB1B,MAAM,IAAI,IAAI;IAMrB;;OAEG;IACH,OAAO,CAAC,QAAQ,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,GAAG,IAAI;IAI/C;;OAEG;IACH,cAAc,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAI1C;;OAEG;IACH,YAAY,CAAC,QAAQ,EAAE,MAAM,IAAI,GAAG,IAAI;IAIxC;;OAEG;IACH,SAAS,CAAC,SAAS,EAAE,MAAM,GAAG,IAAI;IAIlC,2CAA2C;YAC7B,YAAY;CAa3B"}
|
|
@@ -13,7 +13,7 @@ const Agent_types_1 = require("../types/Agent.types");
|
|
|
13
13
|
*/
|
|
14
14
|
class VoiceSession {
|
|
15
15
|
constructor({ agent, sessionId, firstMessage, voiceId }) {
|
|
16
|
-
logger_1.logger.debug(
|
|
16
|
+
logger_1.logger.debug('Starting voice session', { sessionId, firstMessage, voiceId });
|
|
17
17
|
this.agent = agent;
|
|
18
18
|
this.sessionId = sessionId;
|
|
19
19
|
this.firstMessage = firstMessage;
|
|
@@ -34,7 +34,7 @@ class VoiceSession {
|
|
|
34
34
|
agentId: elevenLabsAgentId,
|
|
35
35
|
apiKey: elevenLabsKey,
|
|
36
36
|
});
|
|
37
|
-
logger_1.logger.debug(
|
|
37
|
+
logger_1.logger.debug('Connecting to ElevenLabs', { sessionId: this.sessionId });
|
|
38
38
|
this.elevenLabsSocket = new ws_1.WebSocket(signedUrl);
|
|
39
39
|
this.setupSocketHandlers();
|
|
40
40
|
}
|
|
@@ -69,7 +69,7 @@ class VoiceSession {
|
|
|
69
69
|
setupSocketHandlers() {
|
|
70
70
|
const socket = this.elevenLabsSocket; // non-null assertion once, we ensured it's assigned in init()
|
|
71
71
|
socket.onopen = () => {
|
|
72
|
-
logger_1.logger.debug(
|
|
72
|
+
logger_1.logger.debug('Connected to ElevenLabs');
|
|
73
73
|
const initiationData = {
|
|
74
74
|
type: 'conversation_initiation_client_data',
|
|
75
75
|
conversation_config_override: {
|
|
@@ -92,12 +92,12 @@ class VoiceSession {
|
|
|
92
92
|
};
|
|
93
93
|
socket.onclose = () => {
|
|
94
94
|
var _a;
|
|
95
|
-
logger_1.logger.debug(
|
|
95
|
+
logger_1.logger.debug(`Disconnected from ElevenLabs, removing voice session: ${this.sessionId}`);
|
|
96
96
|
(_a = this.onDisconnectCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
97
97
|
this.agent.voiceSessions.delete(this.sessionId);
|
|
98
98
|
};
|
|
99
99
|
socket.onerror = (err) => {
|
|
100
|
-
logger_1.logger.error(
|
|
100
|
+
logger_1.logger.error('[ElevenLabsVoice] socket error', err);
|
|
101
101
|
};
|
|
102
102
|
socket.onmessage = async (event) => {
|
|
103
103
|
var _a, _b, _c;
|
|
@@ -109,7 +109,7 @@ class VoiceSession {
|
|
|
109
109
|
}, data.ping_event.ping_ms);
|
|
110
110
|
break;
|
|
111
111
|
case 'user_transcript':
|
|
112
|
-
logger_1.logger.debug(
|
|
112
|
+
logger_1.logger.debug('User transcript received:', data.user_transcription_event.user_transcript);
|
|
113
113
|
if (this.onMessageCallback) {
|
|
114
114
|
this.onMessageCallback(data.user_transcription_event.user_transcript, new messages_1.HumanMessage({ content: data.user_transcription_event.user_transcript }));
|
|
115
115
|
}
|
|
@@ -132,12 +132,11 @@ class VoiceSession {
|
|
|
132
132
|
});
|
|
133
133
|
}
|
|
134
134
|
catch (error) {
|
|
135
|
-
logger_1.logger.error(
|
|
135
|
+
logger_1.logger.error('[ElevenLabsVoice] Error sending interruption to dashboard', error);
|
|
136
136
|
}
|
|
137
137
|
}
|
|
138
138
|
break;
|
|
139
139
|
case 'audio':
|
|
140
|
-
logger_1.logger.debug({ message: 'Agent audio received', sessionId: this.sessionId });
|
|
141
140
|
if (this.onAudioCallback) {
|
|
142
141
|
this.onAudioCallback(data.audio_event.audio_base_64);
|
|
143
142
|
}
|
|
@@ -156,26 +155,25 @@ class VoiceSession {
|
|
|
156
155
|
}
|
|
157
156
|
break;
|
|
158
157
|
case 'conversation_initiation_metadata':
|
|
159
|
-
logger_1.logger.debug(
|
|
158
|
+
logger_1.logger.debug('ElevenLabs conversation initiation metadata', data);
|
|
160
159
|
break;
|
|
161
160
|
case 'agent_response_correction':
|
|
162
161
|
try {
|
|
163
|
-
logger_1.logger.debug(
|
|
162
|
+
logger_1.logger.debug('Agent response correction received', data.agent_response_correction_event);
|
|
164
163
|
await this.updateAgentResponse(data.agent_response_correction_event.original_agent_response, data.agent_response_correction_event.corrected_agent_response);
|
|
165
164
|
}
|
|
166
165
|
catch (error) {
|
|
167
|
-
logger_1.logger.error(
|
|
166
|
+
logger_1.logger.error('[ElevenLabsVoice] Error updating agent response', error);
|
|
168
167
|
}
|
|
169
168
|
break;
|
|
170
169
|
default:
|
|
171
|
-
logger_1.logger.debug(
|
|
170
|
+
logger_1.logger.debug('Received unknown message from ElevenLabs', data);
|
|
172
171
|
break;
|
|
173
172
|
}
|
|
174
173
|
};
|
|
175
174
|
}
|
|
176
175
|
async addFirstMessageToState() {
|
|
177
176
|
var _a;
|
|
178
|
-
logger_1.logger.debug({ message: 'Adding first message to state', sessionId: this.sessionId, firstMessage: this.firstMessage });
|
|
179
177
|
const graphState = await this.agent.compiledGraph.getState(this.agent.getLangraphConfig(this.sessionId));
|
|
180
178
|
if (!((_a = graphState.values.messages) === null || _a === void 0 ? void 0 : _a.length)) {
|
|
181
179
|
await this.agent.compiledGraph.updateState(this.agent.getLangraphConfig(this.sessionId), {
|
|
@@ -197,12 +195,12 @@ class VoiceSession {
|
|
|
197
195
|
}, currentNodeId);
|
|
198
196
|
}
|
|
199
197
|
else {
|
|
200
|
-
logger_1.logger.warn(
|
|
198
|
+
logger_1.logger.warn('Agent message not found for correction', originalAgentResponse);
|
|
201
199
|
}
|
|
202
200
|
}
|
|
203
201
|
hangup() {
|
|
204
202
|
var _a, _b;
|
|
205
|
-
logger_1.logger.info(
|
|
203
|
+
logger_1.logger.info('Hanging up voice session', this.sessionId);
|
|
206
204
|
(_a = this.onDisconnectCallback) === null || _a === void 0 ? void 0 : _a.call(this);
|
|
207
205
|
(_b = this.elevenLabsSocket) === null || _b === void 0 ? void 0 : _b.close();
|
|
208
206
|
}
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"voiceSession.js","sourceRoot":"","sources":["../../src/voice/voiceSession.ts"],"names":[],"mappings":";;;AAAA,2BAA+B;AAE/B,6EAAsF;AACtF,+CAA+C;AAE/C,uDAAgF;AAChF,+BAAoC;AACpC,4CAAyC;AACzC,sDAAmD;AAEnD;;GAEG;AACH,MAAa,YAAY;IAYvB,YAAY,EAAE,KAAK,EAAE,SAAS,EAAE,YAAY,EAAE,OAAO,EAA+E;QAClI,eAAM,CAAC,KAAK,CAAC,
|
|
1
|
+
{"version":3,"file":"voiceSession.js","sourceRoot":"","sources":["../../src/voice/voiceSession.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@minded-ai/mindedjs",
|
|
3
|
-
"version": "1.0.80-beta.
|
|
3
|
+
"version": "1.0.80-beta.3",
|
|
4
4
|
"description": "MindedJS is a TypeScript library for building agents.",
|
|
5
5
|
"main": "dist/index.js",
|
|
6
6
|
"types": "dist/index.d.ts",
|
|
@@ -47,8 +47,7 @@
|
|
|
47
47
|
"ts-node": "^10.9.2",
|
|
48
48
|
"typedoc": "^0.28.5",
|
|
49
49
|
"typescript": "^5.3.3",
|
|
50
|
-
"typescript-eslint": "^8.32.1"
|
|
51
|
-
"zod": "^3.25.74"
|
|
50
|
+
"typescript-eslint": "^8.32.1"
|
|
52
51
|
},
|
|
53
52
|
"dependencies": {
|
|
54
53
|
"@langchain/core": "^0.3.55",
|
|
@@ -64,6 +63,7 @@
|
|
|
64
63
|
"socket.io-client": "^4.8.1",
|
|
65
64
|
"turndown": "^7.2.0",
|
|
66
65
|
"uuid": "^11.1.0",
|
|
67
|
-
"ws": "^8.15.1"
|
|
66
|
+
"ws": "^8.15.1",
|
|
67
|
+
"zod": "^3.24.4"
|
|
68
68
|
}
|
|
69
69
|
}
|
|
@@ -10,12 +10,7 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
10
10
|
return async (state: typeof stateAnnotation.State) => {
|
|
11
11
|
logger.debug(`Evaluating logical conditions for ${edges.length} edges`);
|
|
12
12
|
|
|
13
|
-
|
|
14
|
-
const regularEdges = edges.filter(edge => edge.condition.trim() !== 'else');
|
|
15
|
-
const elseEdges = edges.filter(edge => edge.condition.trim() === 'else');
|
|
16
|
-
|
|
17
|
-
// First, evaluate all regular conditions
|
|
18
|
-
for (const edge of regularEdges) {
|
|
13
|
+
for (const edge of edges) {
|
|
19
14
|
try {
|
|
20
15
|
// Customer is responsible for providing valid JavaScript syntax
|
|
21
16
|
// We execute their condition in a sandboxed VM with timeout protection
|
|
@@ -58,11 +53,12 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
58
53
|
new Promise((_, reject) => setTimeout(() => reject(new Error('Condition execution timeout')), CONDITION_TIMEOUT)),
|
|
59
54
|
]);
|
|
60
55
|
|
|
61
|
-
if (result
|
|
56
|
+
if (result) {
|
|
62
57
|
logger.info(`Condition matched for edge ${edge.source} → ${edge.target}`);
|
|
63
58
|
return edge.target;
|
|
64
59
|
}
|
|
65
60
|
|
|
61
|
+
logger.debug(`Condition not matched for edge ${edge.source} → ${edge.target}`);
|
|
66
62
|
} catch (error) {
|
|
67
63
|
// Provide detailed error information back to the customer
|
|
68
64
|
const errorMessage = error instanceof Error ? error.message : String(error);
|
|
@@ -82,17 +78,8 @@ export const createLogicalRouter = ({ edges }: { edges: LogicalConditionEdge[] }
|
|
|
82
78
|
}
|
|
83
79
|
}
|
|
84
80
|
|
|
85
|
-
// If no regular conditions matched, check for "else" conditions
|
|
86
|
-
if (elseEdges.length > 0) {
|
|
87
|
-
logger.info(`No regular conditions matched, evaluating ${elseEdges.length} else condition(s)`);
|
|
88
|
-
// Return the first "else" condition's target
|
|
89
|
-
const elseEdge = elseEdges[0];
|
|
90
|
-
logger.info(`Else condition matched for edge ${elseEdge.source} → ${elseEdge.target}`);
|
|
91
|
-
return elseEdge.target;
|
|
92
|
-
}
|
|
93
|
-
|
|
94
81
|
// If no conditions matched or all failed, return to the source node
|
|
95
|
-
logger.info(
|
|
96
|
-
return
|
|
82
|
+
logger.info(`No conditions matched, returning to source: ${edges[0].source}`);
|
|
83
|
+
return edges[0].source;
|
|
97
84
|
};
|
|
98
85
|
};
|
package/src/edges/edgeFactory.ts
CHANGED
|
@@ -46,7 +46,7 @@ export const edgeFactory = ({
|
|
|
46
46
|
if (edgesBySource.logical.length > 0) {
|
|
47
47
|
const logicalRouter = createLogicalRouter({ edges: edgesBySource.logical });
|
|
48
48
|
const result = await logicalRouter(state);
|
|
49
|
-
if (result) {
|
|
49
|
+
if (result && result !== edgesBySource.logical[0].source) {
|
|
50
50
|
return result;
|
|
51
51
|
} else {
|
|
52
52
|
logger.debug('No logical conditions matched, continuing to prompt conditions');
|
|
@@ -68,9 +68,7 @@ export const edgeFactory = ({
|
|
|
68
68
|
}
|
|
69
69
|
|
|
70
70
|
// Fallback: stay at current source node
|
|
71
|
-
|
|
72
|
-
logger.info(`No conditions matched, returning to source: ${source}`);
|
|
73
|
-
return source;
|
|
71
|
+
return sourceNode;
|
|
74
72
|
};
|
|
75
73
|
};
|
|
76
74
|
|
|
@@ -24,7 +24,7 @@ export class VoiceSession {
|
|
|
24
24
|
private onDisconnectCallback?: () => void;
|
|
25
25
|
|
|
26
26
|
constructor({ agent, sessionId, firstMessage, voiceId }: { agent: Agent; sessionId: string; firstMessage: string; voiceId?: string }) {
|
|
27
|
-
logger.debug(
|
|
27
|
+
logger.debug('Starting voice session', { sessionId, firstMessage, voiceId });
|
|
28
28
|
this.agent = agent;
|
|
29
29
|
this.sessionId = sessionId;
|
|
30
30
|
this.firstMessage = firstMessage;
|
|
@@ -50,7 +50,7 @@ export class VoiceSession {
|
|
|
50
50
|
apiKey: elevenLabsKey,
|
|
51
51
|
});
|
|
52
52
|
|
|
53
|
-
logger.debug(
|
|
53
|
+
logger.debug('Connecting to ElevenLabs', { sessionId: this.sessionId });
|
|
54
54
|
this.elevenLabsSocket = new WebSocket(signedUrl);
|
|
55
55
|
this.setupSocketHandlers();
|
|
56
56
|
}
|
|
@@ -89,7 +89,7 @@ export class VoiceSession {
|
|
|
89
89
|
const socket = this.elevenLabsSocket!; // non-null assertion once, we ensured it's assigned in init()
|
|
90
90
|
|
|
91
91
|
socket.onopen = () => {
|
|
92
|
-
logger.debug(
|
|
92
|
+
logger.debug('Connected to ElevenLabs');
|
|
93
93
|
const initiationData: ConversationInitiationClientData = {
|
|
94
94
|
type: 'conversation_initiation_client_data',
|
|
95
95
|
conversation_config_override: {
|
|
@@ -99,10 +99,10 @@ export class VoiceSession {
|
|
|
99
99
|
},
|
|
100
100
|
...(this.voiceId
|
|
101
101
|
? {
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
102
|
+
tts: {
|
|
103
|
+
voice_id: this.voiceId,
|
|
104
|
+
},
|
|
105
|
+
}
|
|
106
106
|
: {}),
|
|
107
107
|
} as ConversationInitiationClientData['conversation_config_override'],
|
|
108
108
|
};
|
|
@@ -115,13 +115,13 @@ export class VoiceSession {
|
|
|
115
115
|
};
|
|
116
116
|
|
|
117
117
|
socket.onclose = () => {
|
|
118
|
-
logger.debug(
|
|
118
|
+
logger.debug(`Disconnected from ElevenLabs, removing voice session: ${this.sessionId}`);
|
|
119
119
|
this.onDisconnectCallback?.();
|
|
120
120
|
this.agent.voiceSessions.delete(this.sessionId);
|
|
121
121
|
};
|
|
122
122
|
|
|
123
123
|
socket.onerror = (err: unknown) => {
|
|
124
|
-
logger.error(
|
|
124
|
+
logger.error('[ElevenLabsVoice] socket error', err);
|
|
125
125
|
};
|
|
126
126
|
|
|
127
127
|
socket.onmessage = async (event: any) => {
|
|
@@ -134,7 +134,7 @@ export class VoiceSession {
|
|
|
134
134
|
}, data.ping_event.ping_ms);
|
|
135
135
|
break;
|
|
136
136
|
case 'user_transcript':
|
|
137
|
-
logger.debug(
|
|
137
|
+
logger.debug('User transcript received:', data.user_transcription_event.user_transcript);
|
|
138
138
|
if (this.onMessageCallback) {
|
|
139
139
|
this.onMessageCallback(
|
|
140
140
|
data.user_transcription_event.user_transcript,
|
|
@@ -162,12 +162,11 @@ export class VoiceSession {
|
|
|
162
162
|
timestamp: Date.now(),
|
|
163
163
|
});
|
|
164
164
|
} catch (error) {
|
|
165
|
-
logger.error(
|
|
165
|
+
logger.error('[ElevenLabsVoice] Error sending interruption to dashboard', error);
|
|
166
166
|
}
|
|
167
167
|
}
|
|
168
168
|
break;
|
|
169
169
|
case 'audio':
|
|
170
|
-
logger.debug({ message: 'Agent audio received', sessionId: this.sessionId });
|
|
171
170
|
if (this.onAudioCallback) {
|
|
172
171
|
this.onAudioCallback(data.audio_event.audio_base_64);
|
|
173
172
|
}
|
|
@@ -185,28 +184,27 @@ export class VoiceSession {
|
|
|
185
184
|
}
|
|
186
185
|
break;
|
|
187
186
|
case 'conversation_initiation_metadata':
|
|
188
|
-
logger.debug(
|
|
187
|
+
logger.debug('ElevenLabs conversation initiation metadata', data);
|
|
189
188
|
break;
|
|
190
189
|
case 'agent_response_correction':
|
|
191
190
|
try {
|
|
192
|
-
logger.debug(
|
|
191
|
+
logger.debug('Agent response correction received', data.agent_response_correction_event);
|
|
193
192
|
await this.updateAgentResponse(
|
|
194
193
|
data.agent_response_correction_event.original_agent_response,
|
|
195
194
|
data.agent_response_correction_event.corrected_agent_response,
|
|
196
195
|
);
|
|
197
196
|
} catch (error) {
|
|
198
|
-
logger.error(
|
|
197
|
+
logger.error('[ElevenLabsVoice] Error updating agent response', error);
|
|
199
198
|
}
|
|
200
199
|
break;
|
|
201
200
|
default:
|
|
202
|
-
logger.debug(
|
|
201
|
+
logger.debug('Received unknown message from ElevenLabs', data);
|
|
203
202
|
break;
|
|
204
203
|
}
|
|
205
204
|
};
|
|
206
205
|
}
|
|
207
206
|
|
|
208
207
|
private async addFirstMessageToState(): Promise<void> {
|
|
209
|
-
logger.debug({ message: 'Adding first message to state', sessionId: this.sessionId, firstMessage: this.firstMessage });
|
|
210
208
|
const graphState = await this.agent.compiledGraph.getState(this.agent.getLangraphConfig(this.sessionId));
|
|
211
209
|
if (!graphState.values.messages?.length) {
|
|
212
210
|
await this.agent.compiledGraph.updateState(this.agent.getLangraphConfig(this.sessionId), {
|
|
@@ -234,12 +232,12 @@ export class VoiceSession {
|
|
|
234
232
|
currentNodeId,
|
|
235
233
|
);
|
|
236
234
|
} else {
|
|
237
|
-
logger.warn(
|
|
235
|
+
logger.warn('Agent message not found for correction', originalAgentResponse);
|
|
238
236
|
}
|
|
239
237
|
}
|
|
240
238
|
|
|
241
239
|
public hangup(): void {
|
|
242
|
-
logger.info(
|
|
240
|
+
logger.info('Hanging up voice session', this.sessionId);
|
|
243
241
|
this.onDisconnectCallback?.();
|
|
244
242
|
this.elevenLabsSocket?.close();
|
|
245
243
|
}
|