@d-id/client-sdk 1.0.19-beta.80 → 1.0.19-beta.82
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/index.js
CHANGED
|
@@ -1,17 +1,17 @@
|
|
|
1
|
-
var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((e) => (e.TRIAL = "deid-trial", e.PRO = "deid-pro", e.ENTERPRISE = "deid-enterprise", e.LITE = "deid-lite", e.ADVANCED = "deid-advanced", e.BUILD = "deid-api-build", e.LAUNCH = "deid-api-launch", e.SCALE = "deid-api-scale", e))(B || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}),
|
|
1
|
+
var U = /* @__PURE__ */ ((e) => (e.TRIAL = "trial", e.BASIC = "basic", e.ENTERPRISE = "enterprise", e.LITE = "lite", e.ADVANCED = "advanced", e))(U || {}), B = /* @__PURE__ */ ((e) => (e.TRIAL = "deid-trial", e.PRO = "deid-pro", e.ENTERPRISE = "deid-enterprise", e.LITE = "deid-lite", e.ADVANCED = "deid-advanced", e.BUILD = "deid-api-build", e.LAUNCH = "deid-api-launch", e.SCALE = "deid-api-scale", e))(B || {}), J = /* @__PURE__ */ ((e) => (e.Unrated = "Unrated", e.Positive = "Positive", e.Negative = "Negative", e))(J || {}), A = /* @__PURE__ */ ((e) => (e.Functional = "Functional", e.TextOnly = "TextOnly", e.Maintenance = "Maintenance", e))(A || {}), x = /* @__PURE__ */ ((e) => (e.Embed = "embed", e.Query = "query", e.Partial = "partial", e.Answer = "answer", e.Complete = "done", e))(x || {}), q = /* @__PURE__ */ ((e) => (e.KnowledgeProcessing = "knowledge/processing", e.KnowledgeIndexing = "knowledge/indexing", e.KnowledgeFailed = "knowledge/error", e.KnowledgeDone = "knowledge/done", e))(q || {}), V = /* @__PURE__ */ ((e) => (e.Knowledge = "knowledge", e.Document = "document", e.Record = "record", e))(V || {}), Q = /* @__PURE__ */ ((e) => (e.Pdf = "pdf", e.Text = "text", e.Html = "html", e.Word = "word", e.Json = "json", e.Markdown = "markdown", e.Csv = "csv", e.Excel = "excel", e.Powerpoint = "powerpoint", e.Archive = "archive", e.Image = "image", e.Audio = "audio", e.Video = "video", e))(Q || {}), C = /* @__PURE__ */ ((e) => (e.Clip = "clip", e.Talk = "talk", e))(C || {}), N = /* @__PURE__ */ ((e) => (e.Start = "START", e.Stop = "STOP", e))(N || {}), b = /* @__PURE__ */ ((e) => (e.ChatAnswer = "chat/answer", e.ChatPartial = "chat/partial", e.StreamDone = "stream/done", e.StreamStarted = "stream/started", e.StreamFailed = "stream/error", e.StreamReady = "stream/ready", e.StreamCreated = "stream/created", e.StreamVideoCreated = "stream-video/started", e.StreamVideoDone = "stream-video/done", e.StreamVideoError = "stream-video/error", e.StreamVideoRejected = "stream-video/rejected", e))(b || {}), S = /* @__PURE__ */ ((e) => (e[e.New = 0] = "New", e[e.Fail = 1] = "Fail", e[e.Connected = 2] = "Connected", e[e.Connecting = 3] = "Connecting", e[e.Terminating = 4] = "Terminating", e))(S || {}), X = /* @__PURE__ */ ((e) => (e.Amazon = "amazon", e.Microsoft = "microsoft", e.Afflorithmics = "afflorithmics", e.Elevenlabs = "elevenlabs", e))(X || {}), Y = /* @__PURE__ */ ((e) => (e.Public = "public", e.Premium = "premium", e.Private = "private", e))(Y || {});
|
|
2
2
|
const T = "https://api.d-id.com", Z = "wss://notifications.d-id.com", G = "79f81a83a67430be2bc0fd61042b8faa", P = () => Math.random().toString(16).slice(2);
|
|
3
|
-
function
|
|
3
|
+
function H() {
|
|
4
4
|
let e = window.localStorage.getItem("did_external_key_id");
|
|
5
5
|
return e || (e = Math.random().toString(16).slice(2), window.localStorage.setItem("did_external_key_id", e)), e;
|
|
6
6
|
}
|
|
7
7
|
let ee = P();
|
|
8
|
-
function
|
|
8
|
+
function K(e) {
|
|
9
9
|
if (e.type === "bearer")
|
|
10
10
|
return `Bearer ${e.token}`;
|
|
11
11
|
if (e.type === "basic")
|
|
12
12
|
return `Basic ${btoa(`${e.username}:${e.password}`)}`;
|
|
13
13
|
if (e.type === "key")
|
|
14
|
-
return `Client-Key ${e.clientKey}.${
|
|
14
|
+
return `Client-Key ${e.clientKey}.${H()}_${ee}`;
|
|
15
15
|
throw new Error(`Unknown auth type: ${e}`);
|
|
16
16
|
}
|
|
17
17
|
function F(e, r = T) {
|
|
@@ -20,7 +20,7 @@ function F(e, r = T) {
|
|
|
20
20
|
...a,
|
|
21
21
|
headers: {
|
|
22
22
|
...a == null ? void 0 : a.headers,
|
|
23
|
-
Authorization:
|
|
23
|
+
Authorization: K(e),
|
|
24
24
|
"Content-Type": "application/json"
|
|
25
25
|
}
|
|
26
26
|
});
|
|
@@ -60,7 +60,7 @@ function F(e, r = T) {
|
|
|
60
60
|
}
|
|
61
61
|
};
|
|
62
62
|
}
|
|
63
|
-
function
|
|
63
|
+
function D(e, r = T) {
|
|
64
64
|
const t = F(e, `${r}/agents`);
|
|
65
65
|
return {
|
|
66
66
|
create(n, a) {
|
|
@@ -107,11 +107,11 @@ function ne(e) {
|
|
|
107
107
|
onOpen: d = null,
|
|
108
108
|
onClose: g = null,
|
|
109
109
|
onError: l = null
|
|
110
|
-
} = n || {},
|
|
111
|
-
|
|
110
|
+
} = n || {}, p = new WebSocket(`${a}?authorization=${K(i)}`);
|
|
111
|
+
p.onmessage = o, p.onclose = g, p.onerror = (f) => {
|
|
112
112
|
console.error(f), l == null || l("Websocket failed to connect", f), t(f);
|
|
113
|
-
},
|
|
114
|
-
d == null || d(f), r(
|
|
113
|
+
}, p.onopen = (f) => {
|
|
114
|
+
d == null || d(f), r(p);
|
|
115
115
|
};
|
|
116
116
|
});
|
|
117
117
|
}
|
|
@@ -265,7 +265,7 @@ function se(e, r) {
|
|
|
265
265
|
});
|
|
266
266
|
}
|
|
267
267
|
let j = !1;
|
|
268
|
-
const
|
|
268
|
+
const I = (e, r) => j && console.log(e, r), oe = (window.RTCPeerConnection || window.webkitRTCPeerConnection || window.mozRTCPeerConnection).bind(window);
|
|
269
269
|
function ce(e) {
|
|
270
270
|
switch (e) {
|
|
271
271
|
case "connected":
|
|
@@ -288,16 +288,16 @@ function de(e, r) {
|
|
|
288
288
|
g.forEach((l) => {
|
|
289
289
|
if (l.type === "inbound-rtp" && l.kind === "video") {
|
|
290
290
|
if (a = t.length - 1, l && t[a]) {
|
|
291
|
-
const
|
|
291
|
+
const p = l.bytesReceived, f = t[a].bytesReceived, k = o;
|
|
292
292
|
let v;
|
|
293
|
-
if (o =
|
|
293
|
+
if (o = p - f > 0, i = o ? 0 : ++i, k !== o)
|
|
294
294
|
if (o)
|
|
295
295
|
n = t.length, r == null || r(N.Start, v);
|
|
296
296
|
else {
|
|
297
|
-
const
|
|
298
|
-
v = se(
|
|
297
|
+
const E = t.slice(n), L = n === 0 ? void 0 : t[n - 1];
|
|
298
|
+
v = se(E, L), v = v.sort((M, s) => s.packetsLost - M.packetsLost).slice(0, 5);
|
|
299
299
|
}
|
|
300
|
-
!o && i ===
|
|
300
|
+
!o && i === 2 && (r == null || r(N.Stop, v));
|
|
301
301
|
}
|
|
302
302
|
t.push(l);
|
|
303
303
|
}
|
|
@@ -317,22 +317,22 @@ async function ge(e, r, {
|
|
|
317
317
|
const {
|
|
318
318
|
startConnection: g,
|
|
319
319
|
sendStreamRequest: l,
|
|
320
|
-
close:
|
|
320
|
+
close: p,
|
|
321
321
|
createStream: f,
|
|
322
322
|
addIceCandidate: k
|
|
323
323
|
} = r.videoType === C.Clip ? re(a, o, e) : ie(a, o, e), {
|
|
324
324
|
id: v,
|
|
325
|
-
offer:
|
|
326
|
-
ice_servers:
|
|
325
|
+
offer: E,
|
|
326
|
+
ice_servers: L,
|
|
327
327
|
session_id: M
|
|
328
328
|
} = await f(r), s = new oe({
|
|
329
|
-
iceServers:
|
|
329
|
+
iceServers: L
|
|
330
330
|
}), u = s.createDataChannel("JanusDataChannel");
|
|
331
331
|
if (!M)
|
|
332
332
|
throw new Error("Could not create session_id");
|
|
333
333
|
const m = de(s, n.onVideoStateChange);
|
|
334
334
|
s.onicecandidate = (c) => {
|
|
335
|
-
|
|
335
|
+
I("peerConnection.onicecandidate", c), c.candidate && c.candidate.sdpMid && c.candidate.sdpMLineIndex !== null ? k(v, {
|
|
336
336
|
candidate: c.candidate.candidate,
|
|
337
337
|
sdpMid: c.candidate.sdpMid,
|
|
338
338
|
sdpMLineIndex: c.candidate.sdpMLineIndex
|
|
@@ -341,7 +341,7 @@ async function ge(e, r, {
|
|
|
341
341
|
}, M);
|
|
342
342
|
}, s.oniceconnectionstatechange = () => {
|
|
343
343
|
var w;
|
|
344
|
-
|
|
344
|
+
I("peerConnection.oniceconnectionstatechange => " + s.iceConnectionState);
|
|
345
345
|
const c = ce(s.iceConnectionState);
|
|
346
346
|
c === S.Connected ? d = setTimeout(() => {
|
|
347
347
|
var y;
|
|
@@ -349,16 +349,16 @@ async function ge(e, r, {
|
|
|
349
349
|
}, 5e3) : (clearTimeout(d), (w = n.onConnectionStateChange) == null || w.call(n, c));
|
|
350
350
|
}, s.ontrack = (c) => {
|
|
351
351
|
var w;
|
|
352
|
-
|
|
352
|
+
I("peerConnection.ontrack", c), (w = n.onSrcObjectReady) == null || w.call(n, c.streams[0]);
|
|
353
353
|
}, u.onmessage = (c) => {
|
|
354
354
|
var w;
|
|
355
355
|
if (u.readyState === "open") {
|
|
356
356
|
const [y, _] = c.data.split(":");
|
|
357
|
-
y ===
|
|
357
|
+
y === b.StreamReady && (clearTimeout(d), (w = n.onConnectionStateChange) == null || w.call(n, S.Connected));
|
|
358
358
|
}
|
|
359
|
-
}, await s.setRemoteDescription(
|
|
360
|
-
const
|
|
361
|
-
return
|
|
359
|
+
}, await s.setRemoteDescription(E), I("set remote description OK");
|
|
360
|
+
const h = await s.createAnswer();
|
|
361
|
+
return I("create answer OK"), await s.setLocalDescription(h), I("set local description OK"), await g(v, h, M), I("start connection OK"), {
|
|
362
362
|
/**
|
|
363
363
|
* Method to send request to server to get clip or talk depend on you payload
|
|
364
364
|
* @param payload
|
|
@@ -371,8 +371,16 @@ async function ge(e, r, {
|
|
|
371
371
|
*/
|
|
372
372
|
async disconnect() {
|
|
373
373
|
var c, w;
|
|
374
|
-
|
|
375
|
-
|
|
374
|
+
if (v) {
|
|
375
|
+
s && (s.close(), s.oniceconnectionstatechange = null, s.onnegotiationneeded = null, s.onicecandidate = null, s.ontrack = null);
|
|
376
|
+
try {
|
|
377
|
+
await p(v, M).catch((y) => {
|
|
378
|
+
});
|
|
379
|
+
} catch (y) {
|
|
380
|
+
I("Error on close stream connection", y);
|
|
381
|
+
}
|
|
382
|
+
(c = n.onConnectionStateChange) == null || c.call(n, S.New), (w = n.onVideoStateChange) == null || w.call(n, N.Stop), clearInterval(m);
|
|
383
|
+
}
|
|
376
384
|
},
|
|
377
385
|
/**
|
|
378
386
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
@@ -387,7 +395,7 @@ async function ge(e, r, {
|
|
|
387
395
|
function le(e) {
|
|
388
396
|
const r = {
|
|
389
397
|
token: e.token || "testKey",
|
|
390
|
-
distinct_id: e.distinctId ||
|
|
398
|
+
distinct_id: e.distinctId || H(),
|
|
391
399
|
isEnabled: e.isEnabled ?? !0,
|
|
392
400
|
agentId: e.agent.id,
|
|
393
401
|
owner_id: e.agent.owner_id ?? ""
|
|
@@ -466,7 +474,7 @@ function z(e, r, t, n, a) {
|
|
|
466
474
|
callbacks: {
|
|
467
475
|
...r.callbacks,
|
|
468
476
|
onConnectionStateChange: async (l) => {
|
|
469
|
-
var
|
|
477
|
+
var p, f;
|
|
470
478
|
if (l === S.Connected)
|
|
471
479
|
try {
|
|
472
480
|
d || (d = await t.newChat(e.id), n.track("agent-chat", {
|
|
@@ -482,14 +490,11 @@ function z(e, r, t, n, a) {
|
|
|
482
490
|
}
|
|
483
491
|
else
|
|
484
492
|
l === S.Fail && o(new Error("Cannot create connection"));
|
|
485
|
-
(f = (
|
|
493
|
+
(f = (p = r.callbacks).onConnectionStateChange) == null || f.call(p, l);
|
|
486
494
|
},
|
|
487
|
-
onVideoStateChange(l,
|
|
495
|
+
onVideoStateChange(l, p) {
|
|
488
496
|
var f, k;
|
|
489
|
-
|
|
490
|
-
event: l,
|
|
491
|
-
rtc_stats: h ?? []
|
|
492
|
-
}), (k = (f = r.callbacks).onVideoStateChange) == null || k.call(f, l, h);
|
|
497
|
+
(k = (f = r.callbacks).onVideoStateChange) == null || k.call(f, l, p);
|
|
493
498
|
}
|
|
494
499
|
},
|
|
495
500
|
analytics: n
|
|
@@ -497,7 +502,7 @@ function z(e, r, t, n, a) {
|
|
|
497
502
|
});
|
|
498
503
|
}
|
|
499
504
|
function we(e, r, t) {
|
|
500
|
-
return
|
|
505
|
+
return D(r, t || T).getById(e);
|
|
501
506
|
}
|
|
502
507
|
function O(e) {
|
|
503
508
|
let r = "";
|
|
@@ -514,14 +519,14 @@ function O(e) {
|
|
|
514
519
|
}];
|
|
515
520
|
}
|
|
516
521
|
async function he(e, r) {
|
|
517
|
-
var
|
|
522
|
+
var E, L, M;
|
|
518
523
|
const t = {
|
|
519
524
|
messages: [],
|
|
520
|
-
chatMode: r.mode ||
|
|
525
|
+
chatMode: r.mode || A.Functional
|
|
521
526
|
};
|
|
522
527
|
let n = -1;
|
|
523
|
-
const a = r.wsURL || Z, i = r.baseURL || T, o = r.mixpanelKey || G, d =
|
|
524
|
-
t.messages = O(g), (
|
|
528
|
+
const a = r.wsURL || Z, i = r.baseURL || T, o = r.mixpanelKey || G, d = D(r.auth, i), g = await d.getById(e);
|
|
529
|
+
t.messages = O(g), (L = (E = r.callbacks).onNewMessage) == null || L.call(E, t.messages);
|
|
525
530
|
const l = le({
|
|
526
531
|
token: o,
|
|
527
532
|
agent: g,
|
|
@@ -531,17 +536,17 @@ async function he(e, r) {
|
|
|
531
536
|
event: "loaded",
|
|
532
537
|
...me(g)
|
|
533
538
|
});
|
|
534
|
-
const
|
|
539
|
+
const p = {
|
|
535
540
|
onMessage: (s, u) => {
|
|
536
|
-
var m,
|
|
537
|
-
if ("content" in u) {
|
|
541
|
+
var m, h;
|
|
542
|
+
if (console.log("event", s, u), "content" in u) {
|
|
538
543
|
const {
|
|
539
544
|
content: c
|
|
540
545
|
} = u, w = t.messages[t.messages.length - 1];
|
|
541
|
-
(w == null ? void 0 : w.role) === "assistant" && (n < t.messages.length && (w.content = s === x.Partial ? w.content + c : c), s === x.Answer && (n = t.messages.length)), s === x.
|
|
546
|
+
(w == null ? void 0 : w.role) === "assistant" && (n < t.messages.length && (w.content = s === x.Partial ? w.content + c : c), s === x.Answer && (n = t.messages.length)), s === x.Answer && l.track("agent-message-received", {
|
|
542
547
|
messages: t.messages.length
|
|
543
|
-
}), (
|
|
544
|
-
} else if ([
|
|
548
|
+
}), (h = (m = r.callbacks).onNewMessage) == null || h.call(m, t.messages);
|
|
549
|
+
} else if ([b.StreamVideoCreated, b.StreamVideoDone, b.StreamVideoError, b.StreamVideoRejected].includes(s)) {
|
|
545
550
|
const c = s.split("/")[1];
|
|
546
551
|
l.track("agent-video", {
|
|
547
552
|
...u,
|
|
@@ -551,20 +556,20 @@ async function he(e, r) {
|
|
|
551
556
|
}
|
|
552
557
|
};
|
|
553
558
|
async function f() {
|
|
554
|
-
var
|
|
555
|
-
const s = await W(r.auth, a,
|
|
559
|
+
var h, c, w, y, _;
|
|
560
|
+
const s = await W(r.auth, a, p), {
|
|
556
561
|
streamingManager: u,
|
|
557
562
|
chat: m
|
|
558
563
|
} = await z(g, r, d, l, t.chat);
|
|
559
|
-
n = -1, t.messages = O(g), (c = (
|
|
564
|
+
n = -1, t.messages.length === 0 && (t.messages = O(g), (c = (h = r.callbacks).onNewMessage) == null || c.call(h, t.messages)), m != null && m.id && m.id !== ((w = t.chat) == null ? void 0 : w.id) && ((_ = (y = r.callbacks).onNewChat) == null || _.call(y, m == null ? void 0 : m.id)), t.streamingManager = u, t.socketManager = s, t.chat = m, v(A.Functional), l.track("agent-chat", {
|
|
560
565
|
event: "connect",
|
|
561
566
|
chatId: m.id,
|
|
562
567
|
agentId: g.id
|
|
563
568
|
});
|
|
564
569
|
}
|
|
565
570
|
async function k() {
|
|
566
|
-
var s, u, m,
|
|
567
|
-
(s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (
|
|
571
|
+
var s, u, m, h, c;
|
|
572
|
+
(s = t.socketManager) == null || s.disconnect(), await ((u = t.streamingManager) == null ? void 0 : u.disconnect()), delete t.streamingManager, delete t.socketManager, t.messages = O(g), (h = (m = r.callbacks).onNewMessage) == null || h.call(m, t.messages), l.track("agent-chat", {
|
|
568
573
|
event: "disconnect",
|
|
569
574
|
chatId: (c = t.chat) == null ? void 0 : c.id,
|
|
570
575
|
agentId: g.id
|
|
@@ -574,7 +579,7 @@ async function he(e, r) {
|
|
|
574
579
|
var u, m;
|
|
575
580
|
s !== t.chatMode && (l.track("agent-mode-change", {
|
|
576
581
|
mode: s
|
|
577
|
-
}), t.chatMode = s, t.chatMode !==
|
|
582
|
+
}), t.chatMode = s, t.chatMode !== A.Functional && await k(), (m = (u = r.callbacks).onModeChange) == null || m.call(u, s));
|
|
578
583
|
}
|
|
579
584
|
return {
|
|
580
585
|
agent: g,
|
|
@@ -583,20 +588,22 @@ async function he(e, r) {
|
|
|
583
588
|
disconnect: k,
|
|
584
589
|
changeMode: v,
|
|
585
590
|
async reconnect() {
|
|
591
|
+
var h, c;
|
|
586
592
|
if (!t.chat)
|
|
587
593
|
return f();
|
|
588
|
-
|
|
594
|
+
(h = t.socketManager) == null || h.disconnect(), await ((c = t.streamingManager) == null ? void 0 : c.disconnect());
|
|
595
|
+
const s = await W(r.auth, a, p), {
|
|
589
596
|
streamingManager: u,
|
|
590
597
|
chat: m
|
|
591
598
|
} = await z(g, r, d, l, t.chat);
|
|
592
|
-
t.streamingManager = u, t.socketManager = s, v(
|
|
599
|
+
t.streamingManager = u, t.socketManager = s, v(A.Functional), l.track("agent-chat", {
|
|
593
600
|
event: "reconnect",
|
|
594
601
|
chatId: m.id,
|
|
595
602
|
agentId: g.id
|
|
596
603
|
});
|
|
597
604
|
},
|
|
598
605
|
async chat(s, u = !1) {
|
|
599
|
-
var m,
|
|
606
|
+
var m, h, c, w, y, _;
|
|
600
607
|
try {
|
|
601
608
|
if (s.length >= 800)
|
|
602
609
|
throw new Error("Message cannot be more than 800 characters");
|
|
@@ -606,11 +613,11 @@ async function he(e, r) {
|
|
|
606
613
|
role: "user",
|
|
607
614
|
content: s,
|
|
608
615
|
created_at: new Date($).toISOString()
|
|
609
|
-
}), (
|
|
616
|
+
}), (h = (m = r.callbacks).onNewMessage) == null || h.call(m, t.messages), s.length === 0)
|
|
610
617
|
throw new Error("Message cannot be empty");
|
|
611
|
-
if (t.chatMode ===
|
|
618
|
+
if (t.chatMode === A.Maintenance)
|
|
612
619
|
throw new Error("Chat is in maintenance mode");
|
|
613
|
-
if (t.chatMode !==
|
|
620
|
+
if (t.chatMode !== A.TextOnly) {
|
|
614
621
|
if (!t.streamingManager)
|
|
615
622
|
throw new Error("Streaming manager is not initialized");
|
|
616
623
|
if (!t.chat)
|
|
@@ -630,13 +637,13 @@ async function he(e, r) {
|
|
|
630
637
|
}), t.messages.push({
|
|
631
638
|
id: P(),
|
|
632
639
|
role: "assistant",
|
|
633
|
-
content: R.result
|
|
640
|
+
content: R.result || "",
|
|
634
641
|
created_at: (/* @__PURE__ */ new Date()).toISOString(),
|
|
635
642
|
matches: R.matches
|
|
636
|
-
}), R.result && l.track("agent-message-received", {
|
|
643
|
+
}), R.result && (l.track("agent-message-received", {
|
|
637
644
|
latency: Date.now() - $,
|
|
638
645
|
messages: t.messages.length
|
|
639
|
-
}), (_ = (y = r.callbacks).onNewMessage) == null || _.call(y, t.messages), R;
|
|
646
|
+
}), (_ = (y = r.callbacks).onNewMessage) == null || _.call(y, t.messages)), R;
|
|
640
647
|
} catch ($) {
|
|
641
648
|
throw l.track("agent-message-send", {
|
|
642
649
|
event: "error",
|
|
@@ -646,13 +653,13 @@ async function he(e, r) {
|
|
|
646
653
|
},
|
|
647
654
|
rate(s, u, m) {
|
|
648
655
|
var w, y, _, $;
|
|
649
|
-
const
|
|
656
|
+
const h = t.messages.find((R) => R.id === s);
|
|
650
657
|
if (t.chat) {
|
|
651
|
-
if (!
|
|
658
|
+
if (!h)
|
|
652
659
|
throw new Error("Message not found");
|
|
653
660
|
} else
|
|
654
661
|
throw new Error("Chat is not initialized");
|
|
655
|
-
const c = ((w =
|
|
662
|
+
const c = ((w = h.matches) == null ? void 0 : w.map((R) => [R.document_id, R.id])) ?? [];
|
|
656
663
|
return l.track("agent-rate", {
|
|
657
664
|
event: m ? "update" : "create",
|
|
658
665
|
thumb: u === 1 ? "up" : "down",
|
|
@@ -710,7 +717,7 @@ async function he(e, r) {
|
|
|
710
717
|
};
|
|
711
718
|
}
|
|
712
719
|
export {
|
|
713
|
-
|
|
720
|
+
A as ChatMode,
|
|
714
721
|
x as ChatProgress,
|
|
715
722
|
S as ConnectionState,
|
|
716
723
|
Q as DocumentType,
|
|
@@ -718,7 +725,7 @@ export {
|
|
|
718
725
|
B as PlanGroup,
|
|
719
726
|
X as Providers,
|
|
720
727
|
J as RateState,
|
|
721
|
-
|
|
728
|
+
b as StreamEvents,
|
|
722
729
|
N as StreamingState,
|
|
723
730
|
q as Subject,
|
|
724
731
|
U as UserPlan,
|
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(w,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(w=typeof globalThis<"u"?globalThis:w||self,b(w.index={}))})(this,function(w){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),j=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(j||{}),z=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(z||{}),$=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))($||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),H=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(H||{}),x=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(x||{}),U=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(U||{}),C=(e=>(e.Clip="clip",e.Talk="talk",e))(C||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),R=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(R||{}),k=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(k||{}),B=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(B||{}),J=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(J||{});const F="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",D=()=>Math.random().toString(16).slice(2);function V(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let te=D();function q(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${V()}_${te}`;throw new Error(`Unknown auth type: ${e}`)}function K(e,i=F){const t=async(n,a)=>{const r=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...a,headers:{...a==null?void 0:a.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(n,a){return t(n,{...a,method:"GET"})},post(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"POST"})},delete(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"DELETE"})},patch(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"PATCH"})}}}function Q(e,i=F){const t=K(e,`${i}/agents`);return{create(n,a){return t.post("/",n,a)},getAgents(n,a){return t.get(`/${n?`?tag=${n}`:""}`,a).then(r=>r??[])},getById(n,a){return t.get(`/${n}`,a)},delete(n,a){return t.delete(`/${n}`,void 0,a)},update(n,a,r){return t.patch(`/${n}`,a,r)},newChat(n,a){return t.post(`/${n}/chat`,void 0,a)},chat(n,a,r,o){return t.post(`/${n}/chat/${a}`,r,o)},createRating(n,a,r,o){return t.post(`/${n}/chat/${a}/ratings`,r,o)},updateRating(n,a,r,o,d){return t.patch(`/${n}/chat/${a}/ratings/${r}`,o,d)},deleteRating(n,a,r,o){return t.delete(`/${n}/chat/${a}/ratings/${r}`,o)}}}const ne=e=>new Promise(i=>setTimeout(i,e));function ae(e){return new Promise((i,t)=>{const{callbacks:n,host:a,auth:r}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:l=null}=n||{},f=new WebSocket(`${a}?authorization=${q(r)}`);f.onmessage=o,f.onclose=g,f.onerror=p=>{console.error(p),l==null||l("Websocket failed to connect",p),t(p)},f.onopen=p=>{d==null||d(p),i(f)}})}async function ie(e){const{retries:i=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ae(e)}catch(a){if(n===i)throw a;await ne(n*500)}return t}async function X(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],a=await ie({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:r=>{const o=JSON.parse(r.data);n.forEach(d=>d(o.event,o))}}});return{socket:a,disconnect:()=>a.close(),subscribeToEvents:r=>n.push(r)}}function re(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a){return n.post("/streams",{driver_id:a.driver_id,presenter_id:a.presenter_id,compatibility_mode:a.compatibility_mode,stream_warmup:a.stream_warmup,type:C.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:C.Clip})}}}function se(e,i,t){const n=K(e,`${i}/agents/${t}`);return{createStream(a,r){return n.post("/streams",{source_url:a.source_url,driver_url:a.driver_url,face:a.face,config:a.config,stream_warmup:a.stream_warmup,type:C.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:C.Talk},o)}}}function oe(e,i){return e.map((t,n)=>n===0?i?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-i.bytesReceived,packetsReceived:t.packetsReceived-i.packetsReceived,packetsLost:t.packetsLost-i.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let Y=!1;const E=(e,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return k.Connected;case"checking":return k.Connecting;case"failed":return k.Fail;case"new":case"closed":case"disconnected":default:return k.New}}function ge(e,i){let t=[],n=0,a=0,r=0,o;return setInterval(()=>{e.getStats().then(g=>{g.forEach(l=>{if(l.type==="inbound-rtp"&&l.kind==="video"){if(a=t.length-1,l&&t[a]){const f=l.bytesReceived,p=t[a].bytesReceived,M=o;let y;if(o=f-p>0,r=o?0:++r,M!==o)if(o)n=t.length,i==null||i(O.Start,y);else{const L=t.slice(n),P=n===0?void 0:t[n-1];y=oe(L,P),y=y.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===3&&(i==null||i(O.Stop,y))}t.push(l)}})})},500)}async function le(e,i,{debug:t=!1,callbacks:n,auth:a,analytics:r,baseURL:o=F}){Y=t;let d;const{startConnection:g,sendStreamRequest:l,close:f,createStream:p,addIceCandidate:M}=i.videoType===C.Clip?re(a,o,e):se(a,o,e),{id:y,offer:L,ice_servers:P,session_id:_}=await p(i),s=new ce({iceServers:P}),u=s.createDataChannel("JanusDataChannel");if(!_)throw new Error("Could not create session_id");const m=ge(s,n.onVideoStateChange);s.onicecandidate=c=>{E("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?M(y,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):M(y,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;E("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===k.Connected?d=setTimeout(()=>{var S;(S=n.onConnectionStateChange)==null||S.call(n,k.Connected)},5e3):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;E("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[S,I]=c.data.split(":");S===R.StreamFailed||S===R.StreamDone?clearInterval(m):S===R.StreamReady&&(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,k.Connected))}},await s.setRemoteDescription(L),E("set remote description OK");const v=await s.createAnswer();return E("create answer OK"),await s.setLocalDescription(v),E("set local description OK"),await g(y,v,_),E("start connection OK"),{speak(c){return l(y,_,c)},async disconnect(){var c,h;y&&(s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null),await f(y,_).catch(S=>{}),(c=n.onConnectionStateChange)==null||c.call(n,k.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m))},sessionId:_,streamId:y}}function me(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...i,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const a={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...i,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",a).then(r=>r.json()).catch(r=>console.error(r))}}}function ue(e){var n,a,r,o,d;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const g=navigator.platform;return g.toLowerCase().includes("win")?"Windows":g.toLowerCase().includes("mac")?"Mac OS X":g.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(n=e.presenter)==null?void 0:n.type,agentVoice:{voiceId:(r=(a=e.presenter)==null?void 0:a.voice)==null?void 0:r.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function he(e){if(e.presenter){if(e.presenter.type===C.Clip)return{videoType:C.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");return{videoType:C.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Z(e,i,t,n,a){return new Promise(async(r,o)=>{let d=a;const g=await le(e.id,he(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async l=>{var f,p;if(l===k.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&r({chat:d,streamingManager:g})}catch(M){console.error(M),o("Cannot create new chat")}else l===k.Fail&&o(new Error("Cannot create connection"));(p=(f=i.callbacks).onConnectionStateChange)==null||p.call(f,l)},onVideoStateChange(l,f){var p,M;n.track("agent-video",{event:l,rtc_stats:f??[]}),(M=(p=i.callbacks).onVideoStateChange)==null||M.call(p,l,f)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function W(e){let i="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);i=e.greetings[t]}else i=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:i,id:D(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||$.Functional};let n=-1;const a=i.wsURL||G,r=i.baseURL||F,o=i.mixpanelKey||ee,d=Q(i.auth,r),g=await d.getById(e);t.messages=W(g),(P=(L=i.callbacks).onNewMessage)==null||P.call(L,t.messages);const l=me({token:o,agent:g,...i});l.track("agent-sdk",{event:"loaded",...ue(g)});const f={onMessage:(s,u)=>{var m,v;if("content"in u){const{content:c}=u,h=t.messages[t.messages.length-1];(h==null?void 0:h.role)==="assistant"&&(n<t.messages.length&&(h.content=s===N.Partial?h.content+c:c),s===N.Answer&&(n=t.messages.length)),s===N.Complete&&l.track("agent-message-received",{messages:t.messages.length}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages)}else if([R.StreamVideoCreated,R.StreamVideoDone,R.StreamVideoError,R.StreamVideoRejected].includes(s)){const c=s.split("/")[1];l.track("agent-video",{...u,event:c})}}};async function p(){var v,c,h,S,I;const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages=W(g),(c=(v=i.callbacks).onNewMessage)==null||c.call(v,t.messages),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((I=(S=i.callbacks).onNewChat)==null||I.call(S,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,y($.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function M(){var s,u,m,v,c;(s=t.socketManager)==null||s.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=W(g),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function y(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==$.Functional&&await M(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:p,disconnect:M,changeMode:y,async reconnect(){if(!t.chat)return p();const s=await X(i.auth,a,f),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,y($.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,v,c,h,S,I;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:D(),role:"user",content:s,created_at:new Date(T).toISOString()}),(v=(m=i.callbacks).onNewMessage)==null||v.call(m,t.messages),s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===$.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==$.TextOnly){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}else t.chat||(t.chat=await d.newChat(g.id));const A=await d.chat(g.id,t.chat.id,{sessionId:(c=t.streamingManager)==null?void 0:c.sessionId,streamId:(h=t.streamingManager)==null?void 0:h.streamId,messages:t.messages,chatMode:t.chatMode,append_chat:u});return l.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:D(),role:"assistant",content:A.result??"",created_at:new Date().toISOString(),matches:A.matches}),A.result&&l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(I=(S=i.callbacks).onNewMessage)==null||I.call(S,t.messages),A}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,S,I,T;const v=t.messages.find(A=>A.id===s);if(t.chat){if(!v)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=v.matches)==null?void 0:h.map(A=>[A.document_id,A.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:u===1?"up":"down",knowledge_id:((S=g.knowledge)==null?void 0:S.id)??"",matches:c,score:u}),m?d.updateRating(g.id,t.chat.id,m,{knowledge_id:((I=g.knowledge)==null?void 0:I.id)??"",message_id:s,matches:c,score:u}):d.createRating(g.id,t.chat.id,{knowledge_id:((T=g.knowledge)==null?void 0:T.id)??"",message_id:s,matches:c,score:u})},deleteRate(s){var u;if(!t.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:s}),d.deleteRating(g.id,t.chat.id,s)},speak(s){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(g.presenter){if(s.type==="text")return{type:"text",provider:s.provider?s.provider:g.presenter.voice,input:s.input,ssml:s.ssml||!1};if(s.type==="audio")return{type:"audio",audio_url:s.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const m=u();return l.track("agent-speak",m),t.streamingManager.speak({script:m})}}}w.ChatMode=$,w.ChatProgress=N,w.ConnectionState=k,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=j,w.Providers=B,w.RateState=z,w.StreamEvents=R,w.StreamingState=O,w.Subject=H,w.UserPlan=b,w.VideoType=C,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(w,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(w=typeof globalThis<"u"?globalThis:w||self,b(w.index={}))})(this,function(w){"use strict";var b=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(b||{}),z=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(z||{}),D=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(D||{}),A=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e))(A||{}),N=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(N||{}),H=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(H||{}),x=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(x||{}),U=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(U||{}),C=(e=>(e.Clip="clip",e.Talk="talk",e))(C||{}),O=(e=>(e.Start="START",e.Stop="STOP",e))(O||{}),E=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(E||{}),M=(e=>(e[e.New=0]="New",e[e.Fail=1]="Fail",e[e.Connected=2]="Connected",e[e.Connecting=3]="Connecting",e[e.Terminating=4]="Terminating",e))(M||{}),B=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(B||{}),J=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(J||{});const F="https://api.d-id.com",G="wss://notifications.d-id.com",ee="79f81a83a67430be2bc0fd61042b8faa",K=()=>Math.random().toString(16).slice(2);function V(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let te=K();function q(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${V()}_${te}`;throw new Error(`Unknown auth type: ${e}`)}function W(e,i=F){const t=async(n,a)=>{const r=await fetch(i+(n!=null&&n.startsWith("/")?n:`/${n}`),{...a,headers:{...a==null?void 0:a.headers,Authorization:q(e),"Content-Type":"application/json"}});if(!r.ok){let o=await r.text().catch(()=>"Failed to fetch");throw new Error(o)}return r.json()};return{get(n,a){return t(n,{...a,method:"GET"})},post(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"POST"})},delete(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"DELETE"})},patch(n,a,r){return t(n,{...r,body:JSON.stringify(a),method:"PATCH"})}}}function Q(e,i=F){const t=W(e,`${i}/agents`);return{create(n,a){return t.post("/",n,a)},getAgents(n,a){return t.get(`/${n?`?tag=${n}`:""}`,a).then(r=>r??[])},getById(n,a){return t.get(`/${n}`,a)},delete(n,a){return t.delete(`/${n}`,void 0,a)},update(n,a,r){return t.patch(`/${n}`,a,r)},newChat(n,a){return t.post(`/${n}/chat`,void 0,a)},chat(n,a,r,o){return t.post(`/${n}/chat/${a}`,r,o)},createRating(n,a,r,o){return t.post(`/${n}/chat/${a}/ratings`,r,o)},updateRating(n,a,r,o,d){return t.patch(`/${n}/chat/${a}/ratings/${r}`,o,d)},deleteRating(n,a,r,o){return t.delete(`/${n}/chat/${a}/ratings/${r}`,o)}}}const ne=e=>new Promise(i=>setTimeout(i,e));function ae(e){return new Promise((i,t)=>{const{callbacks:n,host:a,auth:r}=e,{onMessage:o=null,onOpen:d=null,onClose:g=null,onError:l=null}=n||{},v=new WebSocket(`${a}?authorization=${q(r)}`);v.onmessage=o,v.onclose=g,v.onerror=p=>{console.error(p),l==null||l("Websocket failed to connect",p),t(p)},v.onopen=p=>{d==null||d(p),i(v)}})}async function ie(e){const{retries:i=1}=e;let t=null;for(let n=0;(t==null?void 0:t.readyState)!==WebSocket.OPEN;n++)try{t=await ae(e)}catch(a){if(n===i)throw a;await ne(n*500)}return t}async function X(e,i,t){const n=t!=null&&t.onMessage?[t.onMessage]:[],a=await ie({auth:e,host:i,callbacks:{onError:t==null?void 0:t.onError,onMessage:r=>{const o=JSON.parse(r.data);n.forEach(d=>d(o.event,o))}}});return{socket:a,disconnect:()=>a.close(),subscribeToEvents:r=>n.push(r)}}function re(e,i,t){const n=W(e,`${i}/agents/${t}`);return{createStream(a){return n.post("/streams",{driver_id:a.driver_id,presenter_id:a.presenter_id,compatibility_mode:a.compatibility_mode,stream_warmup:a.stream_warmup,type:C.Clip})},startConnection(a,r,o){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Clip})},addIceCandidate(a,r,o){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Clip})},sendStreamRequest(a,r,o){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Clip})},close(a,r){return n.delete(`/streams/${a}`,{session_id:r,type:C.Clip})}}}function se(e,i,t){const n=W(e,`${i}/agents/${t}`);return{createStream(a,r){return n.post("/streams",{source_url:a.source_url,driver_url:a.driver_url,face:a.face,config:a.config,stream_warmup:a.stream_warmup,type:C.Talk},r)},startConnection(a,r,o,d){return n.post(`/streams/${a}/sdp`,{session_id:o,answer:r,type:C.Talk},d)},addIceCandidate(a,r,o,d){return n.post(`/streams/${a}/ice`,{session_id:o,...r,type:C.Talk},d)},sendStreamRequest(a,r,o,d){return n.post(`/streams/${a}`,{session_id:r,...o,type:C.Talk},d)},close(a,r,o){return n.delete(`/streams/${a}`,{session_id:r,type:C.Talk},o)}}}function oe(e,i){return e.map((t,n)=>n===0?i?{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-i.bytesReceived,packetsReceived:t.packetsReceived-i.packetsReceived,packetsLost:t.packetsLost-i.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived,packetsReceived:t.packetsReceived,packetsLost:t.packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond}:{index:n,timestamp:t.timestamp,bytesReceived:t.bytesReceived-e[n-1].bytesReceived,packetsReceived:t.packetsReceived-e[n-1].packetsReceived,packetsLost:t.packetsLost-e[n-1].packetsLost,jitter:t.jitter,frameWidth:t.frameWidth,frameHeight:t.frameHeight,framesPerSecond:t.framesPerSecond})}let Y=!1;const $=(e,i)=>Y&&console.log(e,i),ce=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function de(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":case"closed":case"disconnected":default:return M.New}}function ge(e,i){let t=[],n=0,a=0,r=0,o;return setInterval(()=>{e.getStats().then(g=>{g.forEach(l=>{if(l.type==="inbound-rtp"&&l.kind==="video"){if(a=t.length-1,l&&t[a]){const v=l.bytesReceived,p=t[a].bytesReceived,k=o;let y;if(o=v-p>0,r=o?0:++r,k!==o)if(o)n=t.length,i==null||i(O.Start,y);else{const L=t.slice(n),P=n===0?void 0:t[n-1];y=oe(L,P),y=y.sort((_,s)=>s.packetsLost-_.packetsLost).slice(0,5)}!o&&r===2&&(i==null||i(O.Stop,y))}t.push(l)}})})},500)}async function le(e,i,{debug:t=!1,callbacks:n,auth:a,analytics:r,baseURL:o=F}){Y=t;let d;const{startConnection:g,sendStreamRequest:l,close:v,createStream:p,addIceCandidate:k}=i.videoType===C.Clip?re(a,o,e):se(a,o,e),{id:y,offer:L,ice_servers:P,session_id:_}=await p(i),s=new ce({iceServers:P}),u=s.createDataChannel("JanusDataChannel");if(!_)throw new Error("Could not create session_id");const m=ge(s,n.onVideoStateChange);s.onicecandidate=c=>{$("peerConnection.onicecandidate",c),c.candidate&&c.candidate.sdpMid&&c.candidate.sdpMLineIndex!==null?k(y,{candidate:c.candidate.candidate,sdpMid:c.candidate.sdpMid,sdpMLineIndex:c.candidate.sdpMLineIndex},_):k(y,{candidate:null},_)},s.oniceconnectionstatechange=()=>{var h;$("peerConnection.oniceconnectionstatechange => "+s.iceConnectionState);const c=de(s.iceConnectionState);c===M.Connected?d=setTimeout(()=>{var S;(S=n.onConnectionStateChange)==null||S.call(n,M.Connected)},5e3):(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,c))},s.ontrack=c=>{var h;$("peerConnection.ontrack",c),(h=n.onSrcObjectReady)==null||h.call(n,c.streams[0])},u.onmessage=c=>{var h;if(u.readyState==="open"){const[S,R]=c.data.split(":");S===E.StreamReady&&(clearTimeout(d),(h=n.onConnectionStateChange)==null||h.call(n,M.Connected))}},await s.setRemoteDescription(L),$("set remote description OK");const f=await s.createAnswer();return $("create answer OK"),await s.setLocalDescription(f),$("set local description OK"),await g(y,f,_),$("start connection OK"),{speak(c){return l(y,_,c)},async disconnect(){var c,h;if(y){s&&(s.close(),s.oniceconnectionstatechange=null,s.onnegotiationneeded=null,s.onicecandidate=null,s.ontrack=null);try{await v(y,_).catch(S=>{})}catch(S){$("Error on close stream connection",S)}(c=n.onConnectionStateChange)==null||c.call(n,M.New),(h=n.onVideoStateChange)==null||h.call(n,O.Stop),clearInterval(m)}},sessionId:_,streamId:y}}function me(e){const i={token:e.token||"testKey",distinct_id:e.distinctId||V(),isEnabled:e.isEnabled??!0,agentId:e.agent.id,owner_id:e.agent.owner_id??""};return{...i,getRandom:()=>Math.random().toString(16).slice(2),track(t,n){if(!this.isEnabled)return Promise.reject("MixPanel analytics is disabled on creation");const a={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:t,properties:{...n,...i,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};return fetch("https://api-js.mixpanel.com/track/?verbose=1&ip=1",a).then(r=>r.json()).catch(r=>console.error(r))}}}function ue(e){var n,a,r,o,d;const i=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop";return{$os:`${(()=>{const g=navigator.platform;return g.toLowerCase().includes("win")?"Windows":g.toLowerCase().includes("mac")?"Mac OS X":g.toLowerCase().includes("linux")?"Linux":"Unknown"})()}`,isMobile:`${i()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:(n=e.presenter)==null?void 0:n.type,agentVoice:{voiceId:(r=(a=e.presenter)==null?void 0:a.voice)==null?void 0:r.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function he(e){if(e.presenter){if(e.presenter.type===C.Clip)return{videoType:C.Clip,driver_id:e.presenter.driver_id,presenter_id:e.presenter.presenter_id,stream_warmup:!0}}else throw new Error("Presenter is not initialized");return{videoType:C.Talk,source_url:e.presenter.source_url,stream_warmup:!0}}function Z(e,i,t,n,a){return new Promise(async(r,o)=>{let d=a;const g=await le(e.id,he(e),{...i,callbacks:{...i.callbacks,onConnectionStateChange:async l=>{var v,p;if(l===M.Connected)try{d||(d=await t.newChat(e.id),n.track("agent-chat",{event:"created",chat_id:d.id,agent_id:e.id})),g&&r({chat:d,streamingManager:g})}catch(k){console.error(k),o("Cannot create new chat")}else l===M.Fail&&o(new Error("Cannot create connection"));(p=(v=i.callbacks).onConnectionStateChange)==null||p.call(v,l)},onVideoStateChange(l,v){var p,k;(k=(p=i.callbacks).onVideoStateChange)==null||k.call(p,l,v)}},analytics:n}).catch(o)})}function we(e,i,t){return Q(i,t||F).getById(e)}function j(e){let i="";if(e.greetings&&e.greetings.length>0){const t=Math.floor(Math.random()*e.greetings.length);i=e.greetings[t]}else i=`Hi! I'm ${e.preview_name}, welcome to agents. How can I help you?`;return[{content:i,id:K(),role:"assistant",created_at:new Date().toISOString()}]}async function fe(e,i){var L,P,_;const t={messages:[],chatMode:i.mode||A.Functional};let n=-1;const a=i.wsURL||G,r=i.baseURL||F,o=i.mixpanelKey||ee,d=Q(i.auth,r),g=await d.getById(e);t.messages=j(g),(P=(L=i.callbacks).onNewMessage)==null||P.call(L,t.messages);const l=me({token:o,agent:g,...i});l.track("agent-sdk",{event:"loaded",...ue(g)});const v={onMessage:(s,u)=>{var m,f;if(console.log("event",s,u),"content"in u){const{content:c}=u,h=t.messages[t.messages.length-1];(h==null?void 0:h.role)==="assistant"&&(n<t.messages.length&&(h.content=s===N.Partial?h.content+c:c),s===N.Answer&&(n=t.messages.length)),s===N.Answer&&l.track("agent-message-received",{messages:t.messages.length}),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages)}else if([E.StreamVideoCreated,E.StreamVideoDone,E.StreamVideoError,E.StreamVideoRejected].includes(s)){const c=s.split("/")[1];l.track("agent-video",{...u,event:c})}}};async function p(){var f,c,h,S,R;const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);n=-1,t.messages.length===0&&(t.messages=j(g),(c=(f=i.callbacks).onNewMessage)==null||c.call(f,t.messages)),m!=null&&m.id&&m.id!==((h=t.chat)==null?void 0:h.id)&&((R=(S=i.callbacks).onNewChat)==null||R.call(S,m==null?void 0:m.id)),t.streamingManager=u,t.socketManager=s,t.chat=m,y(A.Functional),l.track("agent-chat",{event:"connect",chatId:m.id,agentId:g.id})}async function k(){var s,u,m,f,c;(s=t.socketManager)==null||s.disconnect(),await((u=t.streamingManager)==null?void 0:u.disconnect()),delete t.streamingManager,delete t.socketManager,t.messages=j(g),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages),l.track("agent-chat",{event:"disconnect",chatId:(c=t.chat)==null?void 0:c.id,agentId:g.id})}async function y(s){var u,m;s!==t.chatMode&&(l.track("agent-mode-change",{mode:s}),t.chatMode=s,t.chatMode!==A.Functional&&await k(),(m=(u=i.callbacks).onModeChange)==null||m.call(u,s))}return{agent:g,starterMessages:((_=g.knowledge)==null?void 0:_.starter_message)||[],connect:p,disconnect:k,changeMode:y,async reconnect(){var f,c;if(!t.chat)return p();(f=t.socketManager)==null||f.disconnect(),await((c=t.streamingManager)==null?void 0:c.disconnect());const s=await X(i.auth,a,v),{streamingManager:u,chat:m}=await Z(g,i,d,l,t.chat);t.streamingManager=u,t.socketManager=s,y(A.Functional),l.track("agent-chat",{event:"reconnect",chatId:m.id,agentId:g.id})},async chat(s,u=!1){var m,f,c,h,S,R;try{if(s.length>=800)throw new Error("Message cannot be more than 800 characters");const T=Date.now();if(t.messages.push({id:K(),role:"user",content:s,created_at:new Date(T).toISOString()}),(f=(m=i.callbacks).onNewMessage)==null||f.call(m,t.messages),s.length===0)throw new Error("Message cannot be empty");if(t.chatMode===A.Maintenance)throw new Error("Chat is in maintenance mode");if(t.chatMode!==A.TextOnly){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");if(!t.chat)throw new Error("Chat is not initialized")}else t.chat||(t.chat=await d.newChat(g.id));const I=await d.chat(g.id,t.chat.id,{sessionId:(c=t.streamingManager)==null?void 0:c.sessionId,streamId:(h=t.streamingManager)==null?void 0:h.streamId,messages:t.messages,chatMode:t.chatMode,append_chat:u});return l.track("agent-message-send",{event:"success",messages:t.messages.length+1}),t.messages.push({id:K(),role:"assistant",content:I.result||"",created_at:new Date().toISOString(),matches:I.matches}),I.result&&(l.track("agent-message-received",{latency:Date.now()-T,messages:t.messages.length}),(R=(S=i.callbacks).onNewMessage)==null||R.call(S,t.messages)),I}catch(T){throw l.track("agent-message-send",{event:"error",messages:t.messages.length}),T}},rate(s,u,m){var h,S,R,T;const f=t.messages.find(I=>I.id===s);if(t.chat){if(!f)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const c=((h=f.matches)==null?void 0:h.map(I=>[I.document_id,I.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:u===1?"up":"down",knowledge_id:((S=g.knowledge)==null?void 0:S.id)??"",matches:c,score:u}),m?d.updateRating(g.id,t.chat.id,m,{knowledge_id:((R=g.knowledge)==null?void 0:R.id)??"",message_id:s,matches:c,score:u}):d.createRating(g.id,t.chat.id,{knowledge_id:((T=g.knowledge)==null?void 0:T.id)??"",message_id:s,matches:c,score:u})},deleteRate(s){var u;if(!t.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(u=t.chat)==null?void 0:u.id,id:s}),d.deleteRating(g.id,t.chat.id,s)},speak(s){if(!t.streamingManager)throw new Error("Streaming manager is not initialized");function u(){if(g.presenter){if(s.type==="text")return{type:"text",provider:s.provider?s.provider:g.presenter.voice,input:s.input,ssml:s.ssml||!1};if(s.type==="audio")return{type:"audio",audio_url:s.audio_url}}else throw new Error("Presenter is not initialized");throw new Error("Invalid payload")}const m=u();return l.track("agent-speak",m),t.streamingManager.speak({script:m})}}}w.ChatMode=A,w.ChatProgress=N,w.ConnectionState=M,w.DocumentType=U,w.KnowledgeType=x,w.PlanGroup=z,w.Providers=B,w.RateState=D,w.StreamEvents=E,w.StreamingState=O,w.Subject=H,w.UserPlan=b,w.VideoType=C,w.VoiceAccess=J,w.createAgentManager=fe,w.getAgent=we,Object.defineProperty(w,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { Rect } from '../../face-rect';
|
|
1
2
|
import { ExtendedTextToSpeechProviders } from '../../tts';
|
|
2
3
|
export type videoType = 'talk' | 'clip';
|
|
3
4
|
export type Presenter = TalkPresenter | ClipPresenter;
|
|
@@ -11,6 +12,8 @@ export interface TalkPresenter extends BasePresenter {
|
|
|
11
12
|
type: 'talk';
|
|
12
13
|
source_url: string;
|
|
13
14
|
driver_url?: string;
|
|
15
|
+
stitch?: boolean;
|
|
16
|
+
face?: Rect;
|
|
14
17
|
}
|
|
15
18
|
export interface ClipPresenter extends BasePresenter {
|
|
16
19
|
type: 'clip';
|