@superinterface/react 5.3.0-beta.4 → 5.3.0-beta.5
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.cjs +184 -122
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +184 -122
- package/dist/index.js.map +1 -1
- package/package.json +1 -1
package/dist/index.js
CHANGED
|
@@ -47287,39 +47287,57 @@ function _toPrimitive47(t, r) {
|
|
|
47287
47287
|
}
|
|
47288
47288
|
return ("string" === r ? String : Number)(t);
|
|
47289
47289
|
}
|
|
47290
|
+
var THROTTLE_MS = 80;
|
|
47291
|
+
var MAX_SEG_CACHE = 256;
|
|
47292
|
+
var KEEP_FINISHED_MESSAGES = 12;
|
|
47293
|
+
var hasLetters = function(s) {
|
|
47294
|
+
for(var i = 0; i < s.length; i++){
|
|
47295
|
+
var ch = s.charAt(i);
|
|
47296
|
+
if (ch.toLowerCase() !== ch.toUpperCase()) return true;
|
|
47297
|
+
}
|
|
47298
|
+
return false;
|
|
47299
|
+
};
|
|
47290
47300
|
var splitSentencesFast = function(text) {
|
|
47291
47301
|
var t = text.replace(/\s+/g, " ").trim();
|
|
47292
47302
|
if (!t) return [];
|
|
47293
47303
|
var parts = t.split(RegExp("(?<=[.!?])\\s+(?=[^\\s])", "g"));
|
|
47294
|
-
|
|
47295
|
-
|
|
47296
|
-
var
|
|
47297
|
-
|
|
47298
|
-
return {
|
|
47299
|
-
input: nextInput,
|
|
47300
|
-
sentences: splitSentencesFast(nextInput)
|
|
47301
|
-
};
|
|
47302
|
-
}
|
|
47303
|
-
if (nextInput === prev.input) {
|
|
47304
|
-
return prev;
|
|
47304
|
+
var filtered = [];
|
|
47305
|
+
for(var i = 0; i < parts.length; i++){
|
|
47306
|
+
var p = parts[i].trim();
|
|
47307
|
+
if (p && hasLetters(p)) filtered.push(p);
|
|
47305
47308
|
}
|
|
47309
|
+
return filtered;
|
|
47310
|
+
};
|
|
47311
|
+
var getIncrementalSentences = function(prev, nextInput, now) {
|
|
47312
|
+
if (!prev) return {
|
|
47313
|
+
input: nextInput,
|
|
47314
|
+
sentences: splitSentencesFast(nextInput),
|
|
47315
|
+
touched: now
|
|
47316
|
+
};
|
|
47317
|
+
if (nextInput === prev.input) return {
|
|
47318
|
+
input: prev.input,
|
|
47319
|
+
sentences: prev.sentences,
|
|
47320
|
+
touched: now
|
|
47321
|
+
};
|
|
47306
47322
|
if (nextInput.startsWith(prev.input)) {
|
|
47307
|
-
var
|
|
47308
|
-
var prevLast =
|
|
47323
|
+
var prevSentences = prev.sentences;
|
|
47324
|
+
var prevLast = prevSentences[prevSentences.length - 1] || "";
|
|
47309
47325
|
var baseLen = prev.input.length - prevLast.length;
|
|
47310
47326
|
if (baseLen >= 0 && prev.input.slice(baseLen) === prevLast) {
|
|
47311
47327
|
var tail = nextInput.slice(baseLen);
|
|
47312
47328
|
var tailSegments = splitSentencesFast(tail);
|
|
47313
|
-
var merged =
|
|
47329
|
+
var merged = prevSentences.length > 0 ? prevSentences.slice(0, -1).concat(tailSegments) : tailSegments;
|
|
47314
47330
|
return {
|
|
47315
47331
|
input: nextInput,
|
|
47316
|
-
sentences: merged
|
|
47332
|
+
sentences: merged,
|
|
47333
|
+
touched: now
|
|
47317
47334
|
};
|
|
47318
47335
|
}
|
|
47319
47336
|
}
|
|
47320
47337
|
return {
|
|
47321
47338
|
input: nextInput,
|
|
47322
|
-
sentences: splitSentencesFast(nextInput)
|
|
47339
|
+
sentences: splitSentencesFast(nextInput),
|
|
47340
|
+
touched: now
|
|
47323
47341
|
};
|
|
47324
47342
|
};
|
|
47325
47343
|
var useMessageAudio = function(_ref) {
|
|
@@ -47340,41 +47358,65 @@ var useMessageAudio = function(_ref) {
|
|
|
47340
47358
|
var currentSentenceRef = useRef8(null);
|
|
47341
47359
|
var messagesProps = useMessages();
|
|
47342
47360
|
var segCacheRef = useRef8(/* @__PURE__ */ new Map());
|
|
47361
|
+
var mirrorTimerRef = useRef8(null);
|
|
47362
|
+
var pendingMirrorRef = useRef8(false);
|
|
47343
47363
|
useEffect10(function() {
|
|
47344
|
-
|
|
47345
|
-
|
|
47346
|
-
|
|
47347
|
-
|
|
47348
|
-
|
|
47349
|
-
var
|
|
47350
|
-
return
|
|
47351
|
-
|
|
47352
|
-
|
|
47353
|
-
|
|
47354
|
-
|
|
47355
|
-
var
|
|
47356
|
-
|
|
47357
|
-
|
|
47358
|
-
|
|
47359
|
-
|
|
47360
|
-
|
|
47364
|
+
if (mirrorTimerRef.current != null) {
|
|
47365
|
+
pendingMirrorRef.current = true;
|
|
47366
|
+
return;
|
|
47367
|
+
}
|
|
47368
|
+
var run = function() {
|
|
47369
|
+
var assistantsDesc = messagesProps.messages.filter(function(m) {
|
|
47370
|
+
return m.role === "assistant";
|
|
47371
|
+
});
|
|
47372
|
+
var assistantsAsc = assistantsDesc.slice().reverse();
|
|
47373
|
+
var nowTs = typeof performance !== "undefined" && performance.now ? performance.now() : Date.now();
|
|
47374
|
+
var segCache = segCacheRef.current;
|
|
47375
|
+
var touch = function(id, entry) {
|
|
47376
|
+
segCache.set(id, {
|
|
47377
|
+
input: entry.input,
|
|
47378
|
+
sentences: entry.sentences,
|
|
47379
|
+
touched: nowTs
|
|
47380
|
+
});
|
|
47381
|
+
};
|
|
47382
|
+
var evictLRU = function() {
|
|
47383
|
+
if (segCache.size <= MAX_SEG_CACHE) return;
|
|
47384
|
+
var entries = Array.from(segCache.entries());
|
|
47385
|
+
entries.sort(function(a, b) {
|
|
47386
|
+
return a[1].touched - b[1].touched;
|
|
47387
|
+
});
|
|
47388
|
+
var toRemove = segCache.size - MAX_SEG_CACHE;
|
|
47389
|
+
for(var i = 0; i < toRemove; i++)segCache.delete(entries[i][0]);
|
|
47390
|
+
};
|
|
47391
|
+
setAudioQueue(function(prev) {
|
|
47392
|
+
var prevById = new Map(prev.map(function(p) {
|
|
47393
|
+
return [
|
|
47394
|
+
p.id,
|
|
47395
|
+
p
|
|
47396
|
+
];
|
|
47397
|
+
}));
|
|
47398
|
+
var next = [];
|
|
47399
|
+
var changed = false;
|
|
47400
|
+
for(var i_0 = 0; i_0 < assistantsAsc.length; i_0++){
|
|
47361
47401
|
var _existing$nextIndex, _existing$stopped;
|
|
47402
|
+
var m_0 = assistantsAsc[i_0];
|
|
47362
47403
|
var inp = input({
|
|
47363
47404
|
message: m_0
|
|
47364
47405
|
});
|
|
47365
47406
|
if (inp == null) continue;
|
|
47366
|
-
var prevSeg =
|
|
47367
|
-
var nextSeg = getIncrementalSentences(prevSeg, inp);
|
|
47368
|
-
if (!prevSeg || nextSeg.input !== prevSeg.input) {
|
|
47369
|
-
|
|
47407
|
+
var prevSeg = segCache.get(m_0.id);
|
|
47408
|
+
var nextSeg = getIncrementalSentences(prevSeg, inp, nowTs);
|
|
47409
|
+
if (!prevSeg || nextSeg.input !== prevSeg.input || nextSeg.sentences !== prevSeg.sentences) {
|
|
47410
|
+
touch(m_0.id, nextSeg);
|
|
47411
|
+
} else {
|
|
47412
|
+
touch(m_0.id, prevSeg);
|
|
47370
47413
|
}
|
|
47371
47414
|
var existing = prevById.get(m_0.id);
|
|
47372
47415
|
var sentences = nextSeg.sentences;
|
|
47373
47416
|
var nextIndex = Math.min((_existing$nextIndex = existing === null || existing === void 0 ? void 0 : existing.nextIndex) !== null && _existing$nextIndex !== void 0 ? _existing$nextIndex : 0, sentences.length);
|
|
47374
47417
|
var stopped = (_existing$stopped = existing === null || existing === void 0 ? void 0 : existing.stopped) !== null && _existing$stopped !== void 0 ? _existing$stopped : false;
|
|
47375
|
-
var
|
|
47376
|
-
|
|
47377
|
-
if (reuseExisting) {
|
|
47418
|
+
var reuse = !!existing && existing.status === m_0.status && existing.sentences === sentences && existing.nextIndex === nextIndex && existing.stopped === stopped;
|
|
47419
|
+
if (reuse) {
|
|
47378
47420
|
next.push(existing);
|
|
47379
47421
|
} else {
|
|
47380
47422
|
next.push({
|
|
@@ -47387,32 +47429,69 @@ var useMessageAudio = function(_ref) {
|
|
|
47387
47429
|
changed = true;
|
|
47388
47430
|
}
|
|
47389
47431
|
}
|
|
47390
|
-
|
|
47391
|
-
|
|
47392
|
-
|
|
47393
|
-
|
|
47432
|
+
var unfinished = [];
|
|
47433
|
+
var finished = [];
|
|
47434
|
+
for(var i_1 = 0; i_1 < next.length; i_1++){
|
|
47435
|
+
var m_1 = next[i_1];
|
|
47436
|
+
if (!m_1.stopped && (m_1.status === "in_progress" || m_1.nextIndex < m_1.sentences.length)) {
|
|
47437
|
+
unfinished.push(m_1);
|
|
47438
|
+
} else {
|
|
47439
|
+
finished.push(m_1);
|
|
47440
|
+
}
|
|
47441
|
+
}
|
|
47442
|
+
var prunedFinished = finished.length > KEEP_FINISHED_MESSAGES ? finished.slice(finished.length - KEEP_FINISHED_MESSAGES) : finished;
|
|
47443
|
+
var combined = unfinished.concat(prunedFinished);
|
|
47444
|
+
if (!changed) {
|
|
47445
|
+
if (combined.length !== prev.length) changed = true;
|
|
47446
|
+
else {
|
|
47447
|
+
for(var i_2 = 0; i_2 < combined.length; i_2++){
|
|
47448
|
+
if (combined[i_2] !== prev[i_2]) {
|
|
47449
|
+
changed = true;
|
|
47450
|
+
break;
|
|
47451
|
+
}
|
|
47452
|
+
}
|
|
47453
|
+
}
|
|
47454
|
+
}
|
|
47455
|
+
var idsInQueue = new Set(combined.map(function(m_2) {
|
|
47456
|
+
return m_2.id;
|
|
47457
|
+
}));
|
|
47458
|
+
var _iteratorNormalCompletion = true, _didIteratorError = false, _iteratorError = undefined;
|
|
47394
47459
|
try {
|
|
47395
|
-
|
|
47396
|
-
|
|
47460
|
+
for(var _iterator = Array.from(segCache.keys())[Symbol.iterator](), _step; !(_iteratorNormalCompletion = (_step = _iterator.next()).done); _iteratorNormalCompletion = true){
|
|
47461
|
+
var id_0 = _step.value;
|
|
47462
|
+
if (!idsInQueue.has(id_0)) segCache.delete(id_0);
|
|
47397
47463
|
}
|
|
47464
|
+
} catch (err) {
|
|
47465
|
+
_didIteratorError = true;
|
|
47466
|
+
_iteratorError = err;
|
|
47398
47467
|
} finally{
|
|
47399
|
-
|
|
47400
|
-
|
|
47468
|
+
try {
|
|
47469
|
+
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
47470
|
+
_iterator.return();
|
|
47471
|
+
}
|
|
47472
|
+
} finally{
|
|
47473
|
+
if (_didIteratorError) {
|
|
47474
|
+
throw _iteratorError;
|
|
47475
|
+
}
|
|
47401
47476
|
}
|
|
47402
47477
|
}
|
|
47478
|
+
evictLRU();
|
|
47479
|
+
return changed ? combined : prev;
|
|
47480
|
+
});
|
|
47481
|
+
mirrorTimerRef.current = null;
|
|
47482
|
+
if (pendingMirrorRef.current) {
|
|
47483
|
+
pendingMirrorRef.current = false;
|
|
47484
|
+
mirrorTimerRef.current = window.setTimeout(run, THROTTLE_MS);
|
|
47403
47485
|
}
|
|
47404
|
-
|
|
47405
|
-
|
|
47406
|
-
|
|
47407
|
-
|
|
47408
|
-
|
|
47409
|
-
|
|
47410
|
-
break;
|
|
47411
|
-
}
|
|
47412
|
-
}
|
|
47486
|
+
};
|
|
47487
|
+
mirrorTimerRef.current = window.setTimeout(run, THROTTLE_MS);
|
|
47488
|
+
return function() {
|
|
47489
|
+
if (mirrorTimerRef.current != null) {
|
|
47490
|
+
clearTimeout(mirrorTimerRef.current);
|
|
47491
|
+
mirrorTimerRef.current = null;
|
|
47413
47492
|
}
|
|
47414
|
-
|
|
47415
|
-
}
|
|
47493
|
+
pendingMirrorRef.current = false;
|
|
47494
|
+
};
|
|
47416
47495
|
}, [
|
|
47417
47496
|
messagesProps.messages
|
|
47418
47497
|
]);
|
|
@@ -47424,15 +47503,14 @@ var useMessageAudio = function(_ref) {
|
|
|
47424
47503
|
audioPlayer.load("".concat(superinterfaceContext.baseUrl, "/audio-runtimes/tts?").concat(searchParams), {
|
|
47425
47504
|
format: "mp3",
|
|
47426
47505
|
autoplay: isAudioPlayed,
|
|
47427
|
-
// first call false; then true for snappier chaining
|
|
47428
47506
|
html5: isHtmlAudioSupported,
|
|
47429
47507
|
onplay: onPlay,
|
|
47430
47508
|
onstop: onStop,
|
|
47431
47509
|
onload: function() {
|
|
47432
47510
|
var current = currentSentenceRef.current;
|
|
47433
47511
|
if (!current) return;
|
|
47434
|
-
var msg = audioQueueRef.current.find(function(
|
|
47435
|
-
return
|
|
47512
|
+
var msg = audioQueueRef.current.find(function(m_3) {
|
|
47513
|
+
return m_3.id === current.messageId;
|
|
47436
47514
|
});
|
|
47437
47515
|
if (!msg) return;
|
|
47438
47516
|
var nextSentence = msg.sentences[msg.nextIndex];
|
|
@@ -47467,42 +47545,23 @@ var useMessageAudio = function(_ref) {
|
|
|
47467
47545
|
if (audioPlayer.playing) return;
|
|
47468
47546
|
if (pickLockRef.current) return;
|
|
47469
47547
|
var candidate = null;
|
|
47470
|
-
var
|
|
47471
|
-
|
|
47472
|
-
|
|
47473
|
-
|
|
47474
|
-
|
|
47475
|
-
|
|
47476
|
-
|
|
47477
|
-
|
|
47478
|
-
|
|
47479
|
-
|
|
47480
|
-
|
|
47481
|
-
|
|
47482
|
-
|
|
47483
|
-
|
|
47484
|
-
|
|
47485
|
-
|
|
47486
|
-
|
|
47487
|
-
sentence: sentence,
|
|
47488
|
-
index: msg_0.nextIndex,
|
|
47489
|
-
ownerStatus: msg_0.status
|
|
47490
|
-
};
|
|
47491
|
-
break;
|
|
47492
|
-
}
|
|
47493
|
-
}
|
|
47494
|
-
} catch (err) {
|
|
47495
|
-
_didIteratorError = true;
|
|
47496
|
-
_iteratorError = err;
|
|
47497
|
-
} finally{
|
|
47498
|
-
try {
|
|
47499
|
-
if (!_iteratorNormalCompletion && _iterator.return != null) {
|
|
47500
|
-
_iterator.return();
|
|
47501
|
-
}
|
|
47502
|
-
} finally{
|
|
47503
|
-
if (_didIteratorError) {
|
|
47504
|
-
throw _iteratorError;
|
|
47505
|
-
}
|
|
47548
|
+
for(var mIdx = 0; mIdx < audioQueue.length; mIdx++){
|
|
47549
|
+
var msg_0 = audioQueue[mIdx];
|
|
47550
|
+
if (msg_0.stopped) continue;
|
|
47551
|
+
var idx = msg_0.nextIndex;
|
|
47552
|
+
var sentence = msg_0.sentences[idx];
|
|
47553
|
+
if (!sentence) continue;
|
|
47554
|
+
var isFull = isOptimistic({
|
|
47555
|
+
id: msg_0.id
|
|
47556
|
+
}) || msg_0.status !== "in_progress" || fullSentenceRegex.test(sentence);
|
|
47557
|
+
if (isFull) {
|
|
47558
|
+
candidate = {
|
|
47559
|
+
messageId: msg_0.id,
|
|
47560
|
+
sentence: sentence,
|
|
47561
|
+
index: idx,
|
|
47562
|
+
ownerStatus: msg_0.status
|
|
47563
|
+
};
|
|
47564
|
+
break;
|
|
47506
47565
|
}
|
|
47507
47566
|
}
|
|
47508
47567
|
if (!candidate) return;
|
|
@@ -47513,10 +47572,10 @@ var useMessageAudio = function(_ref) {
|
|
|
47513
47572
|
index: candidate.index
|
|
47514
47573
|
};
|
|
47515
47574
|
setAudioQueue(function(prev_0) {
|
|
47516
|
-
return prev_0.map(function(
|
|
47517
|
-
return
|
|
47518
|
-
nextIndex:
|
|
47519
|
-
}) :
|
|
47575
|
+
return prev_0.map(function(m_4) {
|
|
47576
|
+
return m_4.id === candidate.messageId ? _objectSpread47(_objectSpread47({}, m_4), {}, {
|
|
47577
|
+
nextIndex: candidate.index + 1
|
|
47578
|
+
}) : m_4;
|
|
47520
47579
|
});
|
|
47521
47580
|
});
|
|
47522
47581
|
play({
|
|
@@ -47526,10 +47585,10 @@ var useMessageAudio = function(_ref) {
|
|
|
47526
47585
|
},
|
|
47527
47586
|
onStop: function() {
|
|
47528
47587
|
setAudioQueue(function(prev_1) {
|
|
47529
|
-
return prev_1.map(function(
|
|
47530
|
-
return
|
|
47588
|
+
return prev_1.map(function(m_5) {
|
|
47589
|
+
return m_5.id === candidate.messageId ? _objectSpread47(_objectSpread47({}, m_5), {}, {
|
|
47531
47590
|
stopped: true
|
|
47532
|
-
}) :
|
|
47591
|
+
}) : m_5;
|
|
47533
47592
|
});
|
|
47534
47593
|
});
|
|
47535
47594
|
setIsPlaying(false);
|
|
@@ -47540,10 +47599,10 @@ var useMessageAudio = function(_ref) {
|
|
|
47540
47599
|
setIsPlaying(false);
|
|
47541
47600
|
currentSentenceRef.current = null;
|
|
47542
47601
|
pickLockRef.current = false;
|
|
47543
|
-
var hasPending = audioQueueRef.current.some(function(
|
|
47544
|
-
if (
|
|
47545
|
-
var hasMore =
|
|
47546
|
-
var streaming =
|
|
47602
|
+
var hasPending = audioQueueRef.current.some(function(m_6) {
|
|
47603
|
+
if (m_6.stopped) return false;
|
|
47604
|
+
var hasMore = m_6.nextIndex < m_6.sentences.length;
|
|
47605
|
+
var streaming = m_6.status === "in_progress";
|
|
47547
47606
|
return hasMore || streaming;
|
|
47548
47607
|
});
|
|
47549
47608
|
if (!hasPending) _onEnd();
|
|
@@ -47559,9 +47618,9 @@ var useMessageAudio = function(_ref) {
|
|
|
47559
47618
|
]);
|
|
47560
47619
|
useEffect10(function() {
|
|
47561
47620
|
if (isHtmlAudioSupported) {
|
|
47562
|
-
var _Howler$_howls
|
|
47563
|
-
|
|
47564
|
-
|
|
47621
|
+
var _Howler$_howls;
|
|
47622
|
+
var node = Howler === null || Howler === void 0 || (_Howler$_howls = Howler._howls) === null || _Howler$_howls === void 0 || (_Howler$_howls = _Howler$_howls[0]) === null || _Howler$_howls === void 0 || (_Howler$_howls = _Howler$_howls._sounds) === null || _Howler$_howls === void 0 || (_Howler$_howls = _Howler$_howls[0]) === null || _Howler$_howls === void 0 ? void 0 : _Howler$_howls._node;
|
|
47623
|
+
if (node) node.crossOrigin = "anonymous";
|
|
47565
47624
|
}
|
|
47566
47625
|
}, [
|
|
47567
47626
|
audioPlayer
|
|
@@ -47573,14 +47632,17 @@ var useMessageAudio = function(_ref) {
|
|
|
47573
47632
|
if (isAudioEngineInited.current) return;
|
|
47574
47633
|
isAudioEngineInited.current = true;
|
|
47575
47634
|
if (isHtmlAudioSupported) {
|
|
47576
|
-
var _Howler$
|
|
47577
|
-
var
|
|
47578
|
-
|
|
47579
|
-
|
|
47580
|
-
|
|
47581
|
-
(
|
|
47582
|
-
|
|
47583
|
-
|
|
47635
|
+
var _Howler$_howls2;
|
|
47636
|
+
var AudioCtx = window.AudioContext || window.webkitAudioContext;
|
|
47637
|
+
var audioContext = new AudioCtx();
|
|
47638
|
+
var node_0 = Howler === null || Howler === void 0 || (_Howler$_howls2 = Howler._howls) === null || _Howler$_howls2 === void 0 || (_Howler$_howls2 = _Howler$_howls2[0]) === null || _Howler$_howls2 === void 0 || (_Howler$_howls2 = _Howler$_howls2._sounds) === null || _Howler$_howls2 === void 0 || (_Howler$_howls2 = _Howler$_howls2[0]) === null || _Howler$_howls2 === void 0 ? void 0 : _Howler$_howls2._node;
|
|
47639
|
+
if (node_0) {
|
|
47640
|
+
setAudioEngine({
|
|
47641
|
+
// @ts-ignore-next-line
|
|
47642
|
+
source: audioContext.createMediaElementSource(node_0),
|
|
47643
|
+
audioContext: audioContext
|
|
47644
|
+
});
|
|
47645
|
+
}
|
|
47584
47646
|
} else {
|
|
47585
47647
|
setAudioEngine({
|
|
47586
47648
|
source: Howler.masterGain,
|
|
@@ -47600,8 +47662,8 @@ var useMessageAudio = function(_ref) {
|
|
|
47600
47662
|
audioEngine
|
|
47601
47663
|
]);
|
|
47602
47664
|
var isPending = useMemo17(function() {
|
|
47603
|
-
return isPlaying || audioQueue.some(function(
|
|
47604
|
-
return !
|
|
47665
|
+
return isPlaying || audioQueue.some(function(m_7) {
|
|
47666
|
+
return !m_7.stopped && (m_7.nextIndex < m_7.sentences.length || m_7.status === "in_progress");
|
|
47605
47667
|
});
|
|
47606
47668
|
}, [
|
|
47607
47669
|
isPlaying,
|