@elevenlabs/react 0.9.1 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.turbo/turbo-build.log +8 -8
- package/.turbo/turbo-generate-version.log +1 -1
- package/README.md +33 -34
- package/dist/lib.cjs +1 -1
- package/dist/lib.cjs.map +1 -1
- package/dist/lib.modern.js +1 -1
- package/dist/lib.modern.js.map +1 -1
- package/dist/lib.module.js +1 -1
- package/dist/lib.module.js.map +1 -1
- package/dist/lib.umd.js +1 -1
- package/dist/lib.umd.js.map +1 -1
- package/dist/scribe.d.ts +3 -3
- package/dist/version.d.ts +1 -1
- package/package.json +2 -2
package/.turbo/turbo-build.log
CHANGED
|
@@ -1,22 +1,22 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.
|
|
2
|
+
> @elevenlabs/react@0.10.0 prebuild /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> npm run generate-version
|
|
4
4
|
|
|
5
5
|
|
|
6
|
-
> @elevenlabs/react@0.
|
|
6
|
+
> @elevenlabs/react@0.10.0 generate-version
|
|
7
7
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
8
8
|
|
|
9
9
|
|
|
10
|
-
> @elevenlabs/react@0.
|
|
10
|
+
> @elevenlabs/react@0.10.0 build /home/runner/work/packages/packages/packages/react
|
|
11
11
|
> BROWSERSLIST_ENV=modern microbundle --jsx React.createElement --jsxFragment React.Fragment --jsxImportSource react src/index.ts
|
|
12
12
|
|
|
13
13
|
No name was provided for external module '@elevenlabs/client' in output.globals – guessing 'client'
|
|
14
14
|
Build "@elevenlabs/react" to dist:
|
|
15
|
-
3.
|
|
16
|
-
2.
|
|
15
|
+
3.19 kB: lib.cjs.gz
|
|
16
|
+
2.82 kB: lib.cjs.br
|
|
17
17
|
2.87 kB: lib.modern.js.gz
|
|
18
18
|
2.52 kB: lib.modern.js.br
|
|
19
|
-
3.
|
|
20
|
-
2.
|
|
21
|
-
3.
|
|
19
|
+
3.15 kB: lib.module.js.gz
|
|
20
|
+
2.77 kB: lib.module.js.br
|
|
21
|
+
3.25 kB: lib.umd.js.gz
|
|
22
22
|
2.87 kB: lib.umd.js.br
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
|
|
2
|
-
> @elevenlabs/react@0.
|
|
2
|
+
> @elevenlabs/react@0.10.0 generate-version /home/runner/work/packages/packages/packages/react
|
|
3
3
|
> printf "// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"%s\";\n" "$npm_package_version" > src/version.ts
|
|
4
4
|
|
package/README.md
CHANGED
|
@@ -529,8 +529,6 @@ console.log(canSendFeedback); // boolean
|
|
|
529
529
|
|
|
530
530
|
React hook for managing real-time speech-to-text transcription with ElevenLabs Scribe Realtime v2.
|
|
531
531
|
|
|
532
|
-
**Note:** Scribe Realtime v2 is currently in closed beta. For access please [contact sales](https://elevenlabs.io/contact-sales).
|
|
533
|
-
|
|
534
532
|
#### Quick Start
|
|
535
533
|
|
|
536
534
|
```tsx
|
|
@@ -538,12 +536,12 @@ import { useScribe } from "@elevenlabs/react";
|
|
|
538
536
|
|
|
539
537
|
function MyComponent() {
|
|
540
538
|
const scribe = useScribe({
|
|
541
|
-
modelId: "
|
|
539
|
+
modelId: "scribe_v2_realtime",
|
|
542
540
|
onPartialTranscript: (data) => {
|
|
543
541
|
console.log("Partial:", data.text);
|
|
544
542
|
},
|
|
545
|
-
|
|
546
|
-
console.log("
|
|
543
|
+
onCommittedTranscript: (data) => {
|
|
544
|
+
console.log("Committed:", data.text);
|
|
547
545
|
},
|
|
548
546
|
});
|
|
549
547
|
|
|
@@ -570,7 +568,7 @@ function MyComponent() {
|
|
|
570
568
|
{scribe.partialTranscript && <p>Live: {scribe.partialTranscript}</p>}
|
|
571
569
|
|
|
572
570
|
<div>
|
|
573
|
-
{scribe.
|
|
571
|
+
{scribe.committedTranscripts.map((t) => (
|
|
574
572
|
<p key={t.id}>{t.text}</p>
|
|
575
573
|
))}
|
|
576
574
|
</div>
|
|
@@ -589,6 +587,7 @@ app.get("/scribe-token", yourAuthMiddleware, async (req, res) => {
|
|
|
589
587
|
const response = await fetch(
|
|
590
588
|
"https://api.elevenlabs.io/v1/single-use-token/realtime_scribe",
|
|
591
589
|
{
|
|
590
|
+
method: "POST",
|
|
592
591
|
headers: {
|
|
593
592
|
"xi-api-key": process.env.ELEVENLABS_API_KEY,
|
|
594
593
|
},
|
|
@@ -619,7 +618,7 @@ Configure the hook with default options and callbacks:
|
|
|
619
618
|
const scribe = useScribe({
|
|
620
619
|
// Connection options (can be overridden in connect())
|
|
621
620
|
token: "optional-default-token",
|
|
622
|
-
modelId: "
|
|
621
|
+
modelId: "scribe_v2_realtime",
|
|
623
622
|
baseUri: "wss://api.elevenlabs.io",
|
|
624
623
|
|
|
625
624
|
// VAD options
|
|
@@ -648,8 +647,8 @@ const scribe = useScribe({
|
|
|
648
647
|
// Event callbacks
|
|
649
648
|
onSessionStarted: () => console.log("Session started"),
|
|
650
649
|
onPartialTranscript: (data) => console.log("Partial:", data.text),
|
|
651
|
-
|
|
652
|
-
|
|
650
|
+
onCommittedTranscript: (data) => console.log("Committed:", data.text),
|
|
651
|
+
onCommittedTranscriptWithTimestamps: (data) => console.log("With timestamps:", data),
|
|
653
652
|
onError: (error) => console.error("Error:", error),
|
|
654
653
|
onAuthError: (data) => console.error("Auth error:", data.error),
|
|
655
654
|
onConnect: () => console.log("Connected"),
|
|
@@ -664,7 +663,7 @@ Stream audio directly from the user's microphone:
|
|
|
664
663
|
```tsx
|
|
665
664
|
function MicrophoneTranscription() {
|
|
666
665
|
const scribe = useScribe({
|
|
667
|
-
modelId: "
|
|
666
|
+
modelId: "scribe_v2_realtime",
|
|
668
667
|
});
|
|
669
668
|
|
|
670
669
|
const startRecording = async () => {
|
|
@@ -694,7 +693,7 @@ function MicrophoneTranscription() {
|
|
|
694
693
|
</div>
|
|
695
694
|
)}
|
|
696
695
|
|
|
697
|
-
{scribe.
|
|
696
|
+
{scribe.committedTranscripts.map((transcript) => (
|
|
698
697
|
<div key={transcript.id}>{transcript.text}</div>
|
|
699
698
|
))}
|
|
700
699
|
</div>
|
|
@@ -712,7 +711,7 @@ import { useScribe, AudioFormat } from "@elevenlabs/react";
|
|
|
712
711
|
function FileTranscription() {
|
|
713
712
|
const [file, setFile] = useState<File | null>(null);
|
|
714
713
|
const scribe = useScribe({
|
|
715
|
-
modelId: "
|
|
714
|
+
modelId: "scribe_v2_realtime",
|
|
716
715
|
audioFormat: AudioFormat.PCM_16000,
|
|
717
716
|
sampleRate: 16000,
|
|
718
717
|
});
|
|
@@ -763,7 +762,7 @@ function FileTranscription() {
|
|
|
763
762
|
Transcribe
|
|
764
763
|
</button>
|
|
765
764
|
|
|
766
|
-
{scribe.
|
|
765
|
+
{scribe.committedTranscripts.map((transcript) => (
|
|
767
766
|
<div key={transcript.id}>{transcript.text}</div>
|
|
768
767
|
))}
|
|
769
768
|
</div>
|
|
@@ -779,7 +778,7 @@ function FileTranscription() {
|
|
|
779
778
|
- **isConnected** - Boolean indicating if connected
|
|
780
779
|
- **isTranscribing** - Boolean indicating if actively transcribing
|
|
781
780
|
- **partialTranscript** - Current partial (interim) transcript
|
|
782
|
-
- **
|
|
781
|
+
- **committedTranscripts** - Array of completed transcript segments
|
|
783
782
|
- **error** - Current error message, or null
|
|
784
783
|
|
|
785
784
|
```tsx
|
|
@@ -788,7 +787,7 @@ const scribe = useScribe(/* options */);
|
|
|
788
787
|
console.log(scribe.status); // "connected"
|
|
789
788
|
console.log(scribe.isConnected); // true
|
|
790
789
|
console.log(scribe.partialTranscript); // "hello world"
|
|
791
|
-
console.log(scribe.
|
|
790
|
+
console.log(scribe.committedTranscripts); // [{ id: "...", text: "...", timestamp: ..., isFinal: true }]
|
|
792
791
|
console.log(scribe.error); // null or error string
|
|
793
792
|
```
|
|
794
793
|
|
|
@@ -854,14 +853,14 @@ const connection = scribe.getConnection();
|
|
|
854
853
|
|
|
855
854
|
#### Transcript Segment Type
|
|
856
855
|
|
|
857
|
-
Each
|
|
856
|
+
Each committed transcript segment has the following structure:
|
|
858
857
|
|
|
859
858
|
```typescript
|
|
860
859
|
interface TranscriptSegment {
|
|
861
860
|
id: string; // Unique identifier
|
|
862
861
|
text: string; // Transcript text
|
|
863
862
|
timestamp: number; // Unix timestamp
|
|
864
|
-
isFinal: boolean; // Always true for
|
|
863
|
+
isFinal: boolean; // Always true for committed transcripts
|
|
865
864
|
}
|
|
866
865
|
```
|
|
867
866
|
|
|
@@ -877,10 +876,10 @@ const scribe = useScribe({
|
|
|
877
876
|
onPartialTranscript: (data: { text: string }) => {
|
|
878
877
|
console.log("Partial:", data.text);
|
|
879
878
|
},
|
|
880
|
-
|
|
881
|
-
console.log("
|
|
879
|
+
onCommittedTranscript: (data: { text: string }) => {
|
|
880
|
+
console.log("Committed:", data.text);
|
|
882
881
|
},
|
|
883
|
-
|
|
882
|
+
onCommittedTranscriptWithTimestamps: (data: {
|
|
884
883
|
text: string;
|
|
885
884
|
timestamps?: { start: number; end: number }[];
|
|
886
885
|
}) => {
|
|
@@ -904,23 +903,23 @@ const scribe = useScribe({
|
|
|
904
903
|
|
|
905
904
|
#### Commit Strategies
|
|
906
905
|
|
|
907
|
-
Control when transcriptions are
|
|
906
|
+
Control when transcriptions are committed:
|
|
908
907
|
|
|
909
908
|
```tsx
|
|
910
909
|
import { CommitStrategy } from "@elevenlabs/react";
|
|
911
910
|
|
|
912
|
-
//
|
|
913
|
-
const scribe = useScribe({
|
|
914
|
-
commitStrategy: CommitStrategy.AUTOMATIC,
|
|
915
|
-
});
|
|
916
|
-
|
|
917
|
-
// Manual - you control when to commit
|
|
911
|
+
// Manual (default) - you control when to commit
|
|
918
912
|
const scribe = useScribe({
|
|
919
913
|
commitStrategy: CommitStrategy.MANUAL,
|
|
920
914
|
});
|
|
921
915
|
|
|
922
916
|
// Later...
|
|
923
|
-
scribe.commit(); //
|
|
917
|
+
scribe.commit(); // Commit transcription
|
|
918
|
+
|
|
919
|
+
// Voice Activity Detection - model detects silences and automatically commits
|
|
920
|
+
const scribe = useScribe({
|
|
921
|
+
commitStrategy: CommitStrategy.VAD,
|
|
922
|
+
});
|
|
924
923
|
```
|
|
925
924
|
|
|
926
925
|
#### Complete Example
|
|
@@ -933,10 +932,10 @@ function ScribeDemo() {
|
|
|
933
932
|
const [mode, setMode] = useState<"microphone" | "file">("microphone");
|
|
934
933
|
|
|
935
934
|
const scribe = useScribe({
|
|
936
|
-
modelId: "
|
|
935
|
+
modelId: "scribe_v2_realtime",
|
|
937
936
|
commitStrategy: CommitStrategy.AUTOMATIC,
|
|
938
937
|
onSessionStarted: () => console.log("Started"),
|
|
939
|
-
|
|
938
|
+
onCommittedTranscript: (data) => console.log("Committed:", data.text),
|
|
940
939
|
onError: (error) => console.error("Error:", error),
|
|
941
940
|
});
|
|
942
941
|
|
|
@@ -978,10 +977,10 @@ function ScribeDemo() {
|
|
|
978
977
|
</div>
|
|
979
978
|
)}
|
|
980
979
|
|
|
981
|
-
{/*
|
|
980
|
+
{/* Committed Transcripts */}
|
|
982
981
|
<div>
|
|
983
|
-
<h2>Transcripts ({scribe.
|
|
984
|
-
{scribe.
|
|
982
|
+
<h2>Transcripts ({scribe.committedTranscripts.length})</h2>
|
|
983
|
+
{scribe.committedTranscripts.map((t) => (
|
|
985
984
|
<div key={t.id}>
|
|
986
985
|
<span>{new Date(t.timestamp).toLocaleTimeString()}</span>
|
|
987
986
|
<p>{t.text}</p>
|
|
@@ -1011,7 +1010,7 @@ import {
|
|
|
1011
1010
|
} from "@elevenlabs/react";
|
|
1012
1011
|
|
|
1013
1012
|
const scribe: UseScribeReturn = useScribe({
|
|
1014
|
-
modelId: "
|
|
1013
|
+
modelId: "scribe_v2_realtime",
|
|
1015
1014
|
microphone: {
|
|
1016
1015
|
echoCancellation: true,
|
|
1017
1016
|
},
|
package/dist/lib.cjs
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=u,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(l){void 0===l&&(l={});var a=l.micMuted,c=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(l,r),v=e.useRef(null),f=e.useRef(null),m=e.useState("disconnected"),h=m[0],g=m[1],p=e.useState(!1),S=p[0],C=p[1],b=e.useState("listening"),y=b[0],M=b[1],T=e.useRef(a),R=e.useRef(c);return T.current=a,R.current=c,e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setMicMuted(a))},[a]),e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setVolume({volume:c}))},[c]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var r,l,a=function(r){return l?r:function(r,l){try{var a=(I=i(D=o((null==e?void 0:e.serverLocation)||s)),A=u(D),f.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:A,overrides:t({},null!=(c=null==d?void 0:d.overrides)?c:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(S=null==e||null==(b=e.overrides)?void 0:b.client)?S:{},{source:(null==e||null==(y=e.overrides)||null==(y=y.client)?void 0:y.source)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.source)||"react_sdk",version:(null==e||null==(E=e.overrides)||null==(E=E.client)?void 0:E.version)||(null==d||null==(w=d.overrides)||null==(w=w.client)?void 0:w.version)||"0.9.1"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var t,r=n.mode;M(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;C(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==T.current&&v.current.setMicMuted(T.current),void 0!==R.current&&v.current.setVolume({volume:R.current}),v.current.getId()}))}catch(e){return l(!0,e)}var c,m,h,p,S,b,y,P,E,w,D,I,A;return a&&a.then?a.then(l.bind(null,!1),l.bind(null,!0)):l(!1,a)}(0,function(e,n){if(f.current=null,e)throw n;return n})};if(null!=(r=v.current)&&r.isOpen())return Promise.resolve(v.current.getId());var c=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return l=1,n})}();return Promise.resolve(c&&c.then?c.then(a):a(c))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:S,micMuted:a,isSpeaking:"speaking"===y}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,u=r.onFinalTranscript,l=r.onFinalTranscriptWithTimestamps,a=r.onError,c=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.token,f=r.modelId,m=r.baseUri,h=r.commitStrategy,g=r.vadSilenceThresholdSecs,p=r.vadThreshold,S=r.minSpeechDurationMs,C=r.minSilenceDurationMs,b=r.languageCode,y=r.microphone,M=r.audioFormat,T=r.sampleRate,R=r.autoConnect,P=void 0!==R&&R,E=e.useRef(null),w=e.useState("disconnected"),D=w[0],I=w[1],A=e.useState(""),k=A[0],F=A[1],O=e.useState([]),x=O[0],U=O[1],j=e.useState(null),L=j[0],V=j[1];e.useEffect(function(){return function(){var e;null==(e=E.current)||e.close()}},[]);var N=e.useCallback(function(e){void 0===e&&(e={});try{if(E.current)return console.warn("Already connected"),Promise.resolve();try{I("connecting"),V(null);var t=e.token||v,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,P=e.microphone||y,w=e.audioFormat||M,D=e.sampleRate||T;if(P)R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,microphone:P});else{if(!w||!D)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,audioFormat:w,sampleRate:D})}E.current=R,R.on(n.RealtimeEvents.SESSION_STARTED,function(){I("connected"),null==o||o()}),R.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;F(n.text),I("transcribing"),null==i||i(n)}),R.on(n.RealtimeEvents.FINAL_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),F(""),null==u||u(n)}),R.on(n.RealtimeEvents.FINAL_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),F(""),null==l||l(n)}),R.on(n.RealtimeEvents.ERROR,function(e){var n=e;V(n.error),I("error"),null==a||a(new Error(n.error))}),R.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;V(n.error),I("error"),null==c||c(n)}),R.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(n.RealtimeEvents.CLOSE,function(){I("disconnected"),E.current=null,null==d||d()})}catch(e){var A=e instanceof Error?e.message:"Failed to connect";throw V(A),I("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[v,f,m,h,g,p,S,C,b,y,M,T,o,i,u,l,a,c,s,d]),q=e.useCallback(function(){var e;null==(e=E.current)||e.close(),E.current=null,I("disconnected")},[]),_=e.useCallback(function(e,n){if(!E.current)throw new Error("Not connected to Scribe");E.current.send(t({audioBase64:e},n))},[]),B=e.useCallback(function(){if(!E.current)throw new Error("Not connected to Scribe");E.current.commit()},[]),H=e.useCallback(function(){U([]),F("")},[]),W=e.useCallback(function(){return E.current},[]);return e.useEffect(function(){P&&N()},[P,N]),{status:D,isConnected:"connected"===D||"transcribing"===D,isTranscribing:"transcribing"===D,partialTranscript:k,finalTranscripts:x,error:L,connect:N,disconnect:q,sendAudio:_,commit:B,clearTranscripts:H,getConnection:W}};
|
|
1
|
+
var e=require("react"),n=require("@elevenlabs/client");function t(){return t=Object.assign?Object.assign.bind():function(e){for(var n=1;n<arguments.length;n++){var t=arguments[n];for(var r in t)({}).hasOwnProperty.call(t,r)&&(e[r]=t[r])}return e},t.apply(null,arguments)}var r=["micMuted","volume","serverLocation"];function o(e){switch(void 0===e&&(e="us"),e){case"eu-residency":case"in-residency":case"us":case"global":return e;default:return console.warn("[ConversationalAI] Invalid server-location: "+e+'. Defaulting to "us"'),"us"}}function i(e){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[e]}function u(e){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[e]}Object.defineProperty(exports,"AudioFormat",{enumerable:!0,get:function(){return n.AudioFormat}}),Object.defineProperty(exports,"CommitStrategy",{enumerable:!0,get:function(){return n.CommitStrategy}}),Object.defineProperty(exports,"RealtimeEvents",{enumerable:!0,get:function(){return n.RealtimeEvents}}),Object.defineProperty(exports,"postOverallFeedback",{enumerable:!0,get:function(){return n.postOverallFeedback}}),exports.getLivekitUrlForLocation=u,exports.getOriginForLocation=i,exports.parseLocation=o,exports.useConversation=function(l){void 0===l&&(l={});var c=l.micMuted,a=l.volume,s=l.serverLocation,d=function(e,n){if(null==e)return{};var t={};for(var r in e)if({}.hasOwnProperty.call(e,r)){if(-1!==n.indexOf(r))continue;t[r]=e[r]}return t}(l,r),v=e.useRef(null),f=e.useRef(null),m=e.useState("disconnected"),h=m[0],g=m[1],p=e.useState(!1),S=p[0],C=p[1],b=e.useState("listening"),M=b[0],T=b[1],y=e.useRef(c),R=e.useRef(a);return y.current=c,R.current=a,e.useEffect(function(){var e;void 0!==c&&(null==v||null==(e=v.current)||e.setMicMuted(c))},[c]),e.useEffect(function(){var e;void 0!==a&&(null==v||null==(e=v.current)||e.setVolume({volume:a}))},[a]),e.useEffect(function(){return function(){var e;null==(e=v.current)||e.endSession()}},[]),{startSession:function(e){try{var r,l,c=function(r){return l?r:function(r,l){try{var c=(I=i(w=o((null==e?void 0:e.serverLocation)||s)),k=u(w),f.current=n.Conversation.startSession(t({},null!=d?d:{},null!=e?e:{},{origin:I,livekitUrl:k,overrides:t({},null!=(a=null==d?void 0:d.overrides)?a:{},null!=(m=null==e?void 0:e.overrides)?m:{},{client:t({},null!=(h=null==d||null==(p=d.overrides)?void 0:p.client)?h:{},null!=(S=null==e||null==(b=e.overrides)?void 0:b.client)?S:{},{source:(null==e||null==(M=e.overrides)||null==(M=M.client)?void 0:M.source)||(null==d||null==(P=d.overrides)||null==(P=P.client)?void 0:P.source)||"react_sdk",version:(null==e||null==(E=e.overrides)||null==(E=E.client)?void 0:E.version)||(null==d||null==(D=d.overrides)||null==(D=D.client)?void 0:D.version)||"0.10.0"})}),onConnect:(null==e?void 0:e.onConnect)||(null==d?void 0:d.onConnect),onDisconnect:(null==e?void 0:e.onDisconnect)||(null==d?void 0:d.onDisconnect),onError:(null==e?void 0:e.onError)||(null==d?void 0:d.onError),onMessage:(null==e?void 0:e.onMessage)||(null==d?void 0:d.onMessage),onAudio:(null==e?void 0:e.onAudio)||(null==d?void 0:d.onAudio),onDebug:(null==e?void 0:e.onDebug)||(null==d?void 0:d.onDebug),onUnhandledClientToolCall:(null==e?void 0:e.onUnhandledClientToolCall)||(null==d?void 0:d.onUnhandledClientToolCall),onVadScore:(null==e?void 0:e.onVadScore)||(null==d?void 0:d.onVadScore),onInterruption:(null==e?void 0:e.onInterruption)||(null==d?void 0:d.onInterruption),onAgentToolResponse:(null==e?void 0:e.onAgentToolResponse)||(null==d?void 0:d.onAgentToolResponse),onConversationMetadata:(null==e?void 0:e.onConversationMetadata)||(null==d?void 0:d.onConversationMetadata),onMCPToolCall:(null==e?void 0:e.onMCPToolCall)||(null==d?void 0:d.onMCPToolCall),onMCPConnectionStatus:(null==e?void 0:e.onMCPConnectionStatus)||(null==d?void 0:d.onMCPConnectionStatus),onAsrInitiationMetadata:(null==e?void 0:e.onAsrInitiationMetadata)||(null==d?void 0:d.onAsrInitiationMetadata),onAgentChatResponsePart:(null==e?void 0:e.onAgentChatResponsePart)||(null==d?void 0:d.onAgentChatResponsePart),onModeChange:function(n){var t,r=n.mode;T(r),null==(t=(null==e?void 0:e.onModeChange)||(null==d?void 0:d.onModeChange))||t({mode:r})},onStatusChange:function(n){var t,r=n.status;g(r),null==(t=(null==e?void 0:e.onStatusChange)||(null==d?void 0:d.onStatusChange))||t({status:r})},onCanSendFeedbackChange:function(n){var t,r=n.canSendFeedback;C(r),null==(t=(null==e?void 0:e.onCanSendFeedbackChange)||(null==d?void 0:d.onCanSendFeedbackChange))||t({canSendFeedback:r})}})),Promise.resolve(f.current).then(function(e){return v.current=e,void 0!==y.current&&v.current.setMicMuted(y.current),void 0!==R.current&&v.current.setVolume({volume:R.current}),v.current.getId()}))}catch(e){return l(!0,e)}var a,m,h,p,S,b,M,P,E,D,w,I,k;return c&&c.then?c.then(l.bind(null,!1),l.bind(null,!0)):l(!1,c)}(0,function(e,n){if(f.current=null,e)throw n;return n})};if(null!=(r=v.current)&&r.isOpen())return Promise.resolve(v.current.getId());var a=function(){if(f.current)return Promise.resolve(f.current).then(function(e){var n=e.getId();return l=1,n})}();return Promise.resolve(a&&a.then?a.then(c):c(a))}catch(e){return Promise.reject(e)}},endSession:function(){try{var e=v.current;return v.current=null,Promise.resolve(null==e?void 0:e.endSession()).then(function(){})}catch(e){return Promise.reject(e)}},setVolume:function(e){var n;null==(n=v.current)||n.setVolume({volume:e.volume})},getInputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getInputByteFrequencyData()},getOutputByteFrequencyData:function(){var e;return null==(e=v.current)?void 0:e.getOutputByteFrequencyData()},getInputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getInputVolume())?e:0},getOutputVolume:function(){var e,n;return null!=(e=null==(n=v.current)?void 0:n.getOutputVolume())?e:0},sendFeedback:function(e){var n;null==(n=v.current)||n.sendFeedback(e)},getId:function(){var e;return null==(e=v.current)?void 0:e.getId()},sendContextualUpdate:function(e){var n;null==(n=v.current)||n.sendContextualUpdate(e)},sendUserMessage:function(e){var n;null==(n=v.current)||n.sendUserMessage(e)},sendUserActivity:function(){var e;null==(e=v.current)||e.sendUserActivity()},sendMCPToolApprovalResult:function(e,n){var t;null==(t=v.current)||t.sendMCPToolApprovalResult(e,n)},changeInputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeInputDevice"in v.current)return Promise.resolve(v.current.changeInputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},changeOutputDevice:function(e){try{var n,t=function(e){if(n)return e;throw new Error("Device switching is only available for voice conversations")},r=function(){if(v.current&&"changeOutputDevice"in v.current)return Promise.resolve(v.current.changeOutputDevice(e)).then(function(e){return n=1,e})}();return Promise.resolve(r&&r.then?r.then(t):t(r))}catch(e){return Promise.reject(e)}},status:h,canSendFeedback:S,micMuted:c,isSpeaking:"speaking"===M}},exports.useScribe=function(r){void 0===r&&(r={});var o=r.onSessionStarted,i=r.onPartialTranscript,u=r.onCommittedTranscript,l=r.onCommittedTranscriptWithTimestamps,c=r.onError,a=r.onAuthError,s=r.onConnect,d=r.onDisconnect,v=r.token,f=r.modelId,m=r.baseUri,h=r.commitStrategy,g=r.vadSilenceThresholdSecs,p=r.vadThreshold,S=r.minSpeechDurationMs,C=r.minSilenceDurationMs,b=r.languageCode,M=r.microphone,T=r.audioFormat,y=r.sampleRate,R=r.autoConnect,P=void 0!==R&&R,E=e.useRef(null),D=e.useState("disconnected"),w=D[0],I=D[1],k=e.useState(""),A=k[0],O=k[1],F=e.useState([]),x=F[0],U=F[1],j=e.useState(null),V=j[0],L=j[1];e.useEffect(function(){return function(){var e;null==(e=E.current)||e.close()}},[]);var q=e.useCallback(function(e){void 0===e&&(e={});try{if(E.current)return console.warn("Already connected"),Promise.resolve();try{I("connecting"),L(null);var t=e.token||v,r=e.modelId||f;if(!t)throw new Error("Token is required");if(!r)throw new Error("Model ID is required");var R,P=e.microphone||M,D=e.audioFormat||T,w=e.sampleRate||y;if(P)R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,microphone:P});else{if(!D||!w)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=n.Scribe.connect({token:t,modelId:r,baseUri:e.baseUri||m,commitStrategy:e.commitStrategy||h,vadSilenceThresholdSecs:e.vadSilenceThresholdSecs||g,vadThreshold:e.vadThreshold||p,minSpeechDurationMs:e.minSpeechDurationMs||S,minSilenceDurationMs:e.minSilenceDurationMs||C,languageCode:e.languageCode||b,audioFormat:D,sampleRate:w})}E.current=R,R.on(n.RealtimeEvents.SESSION_STARTED,function(){I("connected"),null==o||o()}),R.on(n.RealtimeEvents.PARTIAL_TRANSCRIPT,function(e){var n=e;O(n.text),I("transcribing"),null==i||i(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),O(""),null==u||u(n)}),R.on(n.RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,function(e){var n=e,t={id:Date.now()+"-"+Math.random(),text:n.text,timestamp:Date.now(),isFinal:!0};U(function(e){return[].concat(e,[t])}),O(""),null==l||l(n)}),R.on(n.RealtimeEvents.ERROR,function(e){var n=e;L(n.error),I("error"),null==c||c(new Error(n.error))}),R.on(n.RealtimeEvents.AUTH_ERROR,function(e){var n=e;L(n.error),I("error"),null==a||a(n)}),R.on(n.RealtimeEvents.OPEN,function(){null==s||s()}),R.on(n.RealtimeEvents.CLOSE,function(){I("disconnected"),E.current=null,null==d||d()})}catch(e){var k=e instanceof Error?e.message:"Failed to connect";throw L(k),I("error"),e}return Promise.resolve()}catch(e){return Promise.reject(e)}},[v,f,m,h,g,p,S,C,b,M,T,y,o,i,u,l,c,a,s,d]),_=e.useCallback(function(){var e;null==(e=E.current)||e.close(),E.current=null,I("disconnected")},[]),N=e.useCallback(function(e,n){if(!E.current)throw new Error("Not connected to Scribe");E.current.send(t({audioBase64:e},n))},[]),B=e.useCallback(function(){if(!E.current)throw new Error("Not connected to Scribe");E.current.commit()},[]),H=e.useCallback(function(){U([]),O("")},[]),W=e.useCallback(function(){return E.current},[]);return e.useEffect(function(){P&&q()},[P,q]),{status:w,isConnected:"connected"===w||"transcribing"===w,isTranscribing:"transcribing"===w,partialTranscript:A,committedTranscripts:x,error:V,connect:q,disconnect:_,sendAudio:N,commit:B,clearTranscripts:H,getConnection:W}};
|
|
2
2
|
//# sourceMappingURL=lib.cjs.map
|
package/dist/lib.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const livekitUrl = getLivekitUrlForLocation(resolvedServerLocation);\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n livekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.9.1\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n FinalTranscriptMessage,\n FinalTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onFinalTranscript?: (data: { text: string }) => void;\n onFinalTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n finalTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onFinalTranscript,\n onFinalTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [finalTranscripts, setFinalTranscripts] = useState<TranscriptSegment[]>(\n []\n );\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.FINAL_TRANSCRIPT, (data: unknown) => {\n const message = data as FinalTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setFinalTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onFinalTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.FINAL_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as FinalTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setFinalTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onFinalTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onFinalTranscript,\n onFinalTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setFinalTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n finalTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","livekitUrl","Conversation","_extends","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_temp4","_exit2","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_temp6","_exit3","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onFinalTranscript","onFinalTranscriptWithTimestamps","onAuthError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","finalTranscripts","setFinalTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","FINAL_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","FINAL_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"lib.cjs","sources":["../src/index.ts","../src/version.ts","../src/scribe.ts"],"sourcesContent":["import { useEffect, useRef, useState } from \"react\";\nimport {\n Conversation,\n type SessionConfig,\n type Options,\n type ClientToolsConfig,\n type InputConfig,\n type AudioWorkletConfig,\n type OutputConfig,\n type FormatConfig,\n type Mode,\n type Status,\n type Callbacks,\n} from \"@elevenlabs/client\";\n\n// Device configuration types for audio device switching\nexport type DeviceFormatConfig = {\n format: \"pcm\" | \"ulaw\";\n sampleRate: number;\n outputDeviceId?: string;\n};\n\nexport type DeviceInputConfig = {\n preferHeadphonesForIosDevices?: boolean;\n inputDeviceId?: string;\n};\n\nimport { PACKAGE_VERSION } from \"./version\";\n\nexport type Location = \"us\" | \"global\" | \"eu-residency\" | \"in-residency\";\n\nexport function parseLocation(location: string = \"us\"): Location {\n switch (location) {\n case \"eu-residency\":\n case \"in-residency\":\n case \"us\":\n case \"global\":\n return location;\n default:\n console.warn(\n `[ConversationalAI] Invalid server-location: ${location}. Defaulting to \"us\"`\n );\n return \"us\";\n }\n}\n\nexport function getOriginForLocation(location: Location): string {\n const originMap: Record<Location, string> = {\n us: \"wss://api.elevenlabs.io\",\n \"eu-residency\": \"wss://api.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://api.in.residency.elevenlabs.io\",\n global: \"wss://api.elevenlabs.io\",\n };\n\n return originMap[location];\n}\n\nexport function getLivekitUrlForLocation(location: Location): string {\n const livekitUrlMap: Record<Location, string> = {\n us: \"wss://livekit.rtc.elevenlabs.io\",\n \"eu-residency\": \"wss://livekit.rtc.eu.residency.elevenlabs.io\",\n \"in-residency\": \"wss://livekit.rtc.in.residency.elevenlabs.io\",\n global: \"wss://livekit.rtc.elevenlabs.io\",\n };\n\n return livekitUrlMap[location];\n}\n\nexport type {\n Role,\n Mode,\n Status,\n SessionConfig,\n DisconnectionDetails,\n Language,\n VadScoreEvent,\n InputConfig,\n FormatConfig,\n VoiceConversation,\n TextConversation,\n Callbacks,\n} from \"@elevenlabs/client\";\nexport { postOverallFeedback } from \"@elevenlabs/client\";\n\n// Scribe exports\nexport {\n useScribe,\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"./scribe\";\nexport type {\n ScribeStatus,\n TranscriptSegment,\n ScribeCallbacks,\n ScribeHookOptions,\n UseScribeReturn,\n RealtimeConnection,\n} from \"./scribe\";\n\nexport type HookOptions = Partial<\n SessionConfig &\n HookCallbacks &\n ClientToolsConfig &\n InputConfig &\n OutputConfig &\n AudioWorkletConfig &\n FormatConfig & {\n serverLocation?: Location | string;\n }\n>;\nexport type ControlledState = {\n micMuted?: boolean;\n volume?: number;\n};\nexport type HookCallbacks = Pick<\n Callbacks,\n | \"onConnect\"\n | \"onDisconnect\"\n | \"onError\"\n | \"onMessage\"\n | \"onAudio\"\n | \"onModeChange\"\n | \"onStatusChange\"\n | \"onCanSendFeedbackChange\"\n | \"onDebug\"\n | \"onUnhandledClientToolCall\"\n | \"onVadScore\"\n | \"onInterruption\"\n | \"onAgentToolResponse\"\n | \"onConversationMetadata\"\n | \"onMCPToolCall\"\n | \"onMCPConnectionStatus\"\n | \"onAsrInitiationMetadata\"\n | \"onAgentChatResponsePart\"\n>;\n\nexport function useConversation<T extends HookOptions & ControlledState>(\n props: T = {} as T\n) {\n const { micMuted, volume, serverLocation, ...defaultOptions } = props;\n const conversationRef = useRef<Conversation | null>(null);\n const lockRef = useRef<Promise<Conversation> | null>(null);\n const [status, setStatus] = useState<Status>(\"disconnected\");\n const [canSendFeedback, setCanSendFeedback] = useState(false);\n const [mode, setMode] = useState<Mode>(\"listening\");\n\n const micMutedRef = useRef<boolean | undefined>(micMuted);\n const volumeRef = useRef<number | undefined>(volume);\n\n micMutedRef.current = micMuted;\n volumeRef.current = volume;\n\n useEffect(() => {\n if (micMuted !== undefined) {\n conversationRef?.current?.setMicMuted(micMuted);\n }\n }, [micMuted]);\n\n useEffect(() => {\n if (volume !== undefined) {\n conversationRef?.current?.setVolume({ volume });\n }\n }, [volume]);\n\n useEffect(() => {\n return () => {\n conversationRef.current?.endSession();\n };\n }, []);\n\n return {\n startSession: (async (options?: HookOptions) => {\n if (conversationRef.current?.isOpen()) {\n return conversationRef.current.getId();\n }\n\n if (lockRef.current) {\n const conversation = await lockRef.current;\n return conversation.getId();\n }\n\n try {\n const resolvedServerLocation = parseLocation(\n options?.serverLocation || serverLocation\n );\n const origin = getOriginForLocation(resolvedServerLocation);\n const livekitUrl = getLivekitUrlForLocation(resolvedServerLocation);\n\n lockRef.current = Conversation.startSession({\n ...(defaultOptions ?? {}),\n ...(options ?? {}),\n origin,\n livekitUrl,\n overrides: {\n ...(defaultOptions?.overrides ?? {}),\n ...(options?.overrides ?? {}),\n client: {\n ...(defaultOptions?.overrides?.client ?? {}),\n ...(options?.overrides?.client ?? {}),\n source:\n options?.overrides?.client?.source ||\n defaultOptions?.overrides?.client?.source ||\n \"react_sdk\",\n version:\n options?.overrides?.client?.version ||\n defaultOptions?.overrides?.client?.version ||\n PACKAGE_VERSION,\n },\n },\n // Pass through user-provided callbacks\n onConnect: options?.onConnect || defaultOptions?.onConnect,\n onDisconnect: options?.onDisconnect || defaultOptions?.onDisconnect,\n onError: options?.onError || defaultOptions?.onError,\n onMessage: options?.onMessage || defaultOptions?.onMessage,\n onAudio: options?.onAudio || defaultOptions?.onAudio,\n onDebug: options?.onDebug || defaultOptions?.onDebug,\n onUnhandledClientToolCall:\n options?.onUnhandledClientToolCall ||\n defaultOptions?.onUnhandledClientToolCall,\n onVadScore: options?.onVadScore || defaultOptions?.onVadScore,\n onInterruption:\n options?.onInterruption || defaultOptions?.onInterruption,\n onAgentToolResponse:\n options?.onAgentToolResponse || defaultOptions?.onAgentToolResponse,\n onConversationMetadata:\n options?.onConversationMetadata ||\n defaultOptions?.onConversationMetadata,\n onMCPToolCall:\n options?.onMCPToolCall || defaultOptions?.onMCPToolCall,\n onMCPConnectionStatus:\n options?.onMCPConnectionStatus ||\n defaultOptions?.onMCPConnectionStatus,\n onAsrInitiationMetadata:\n options?.onAsrInitiationMetadata ||\n defaultOptions?.onAsrInitiationMetadata,\n onAgentChatResponsePart:\n options?.onAgentChatResponsePart ||\n defaultOptions?.onAgentChatResponsePart,\n onModeChange: ({ mode }) => {\n setMode(mode);\n (options?.onModeChange || defaultOptions?.onModeChange)?.({ mode });\n },\n onStatusChange: ({ status }) => {\n setStatus(status);\n (options?.onStatusChange || defaultOptions?.onStatusChange)?.({\n status,\n });\n },\n onCanSendFeedbackChange: ({ canSendFeedback }) => {\n setCanSendFeedback(canSendFeedback);\n (\n options?.onCanSendFeedbackChange ||\n defaultOptions?.onCanSendFeedbackChange\n )?.({ canSendFeedback });\n },\n } as Options);\n\n conversationRef.current = await lockRef.current;\n // Persist controlled state between sessions using refs to get current values\n if (micMutedRef.current !== undefined) {\n conversationRef.current.setMicMuted(micMutedRef.current);\n }\n if (volumeRef.current !== undefined) {\n conversationRef.current.setVolume({ volume: volumeRef.current });\n }\n\n return conversationRef.current.getId();\n } finally {\n lockRef.current = null;\n }\n }) as T extends SessionConfig\n ? (options?: HookOptions) => Promise<string>\n : (options: SessionConfig & HookOptions) => Promise<string>,\n endSession: async () => {\n const conversation = conversationRef.current;\n conversationRef.current = null;\n await conversation?.endSession();\n },\n setVolume: ({ volume }: { volume: number }) => {\n conversationRef.current?.setVolume({ volume });\n },\n getInputByteFrequencyData: () => {\n return conversationRef.current?.getInputByteFrequencyData();\n },\n getOutputByteFrequencyData: () => {\n return conversationRef.current?.getOutputByteFrequencyData();\n },\n getInputVolume: () => {\n return conversationRef.current?.getInputVolume() ?? 0;\n },\n getOutputVolume: () => {\n return conversationRef.current?.getOutputVolume() ?? 0;\n },\n sendFeedback: (like: boolean) => {\n conversationRef.current?.sendFeedback(like);\n },\n getId: () => {\n return conversationRef.current?.getId();\n },\n sendContextualUpdate: (text: string) => {\n conversationRef.current?.sendContextualUpdate(text);\n },\n sendUserMessage: (text: string) => {\n conversationRef.current?.sendUserMessage(text);\n },\n sendUserActivity: () => {\n conversationRef.current?.sendUserActivity();\n },\n sendMCPToolApprovalResult: (toolCallId: string, isApproved: boolean) => {\n conversationRef.current?.sendMCPToolApprovalResult(\n toolCallId,\n isApproved\n );\n },\n changeInputDevice: async (\n config: DeviceFormatConfig & DeviceInputConfig\n ) => {\n if (\n conversationRef.current &&\n \"changeInputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeInputDevice: (config: any) => Promise<any>;\n }\n ).changeInputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n changeOutputDevice: async (config: DeviceFormatConfig) => {\n if (\n conversationRef.current &&\n \"changeOutputDevice\" in conversationRef.current\n ) {\n return await (\n conversationRef.current as unknown as {\n changeOutputDevice: (config: any) => Promise<any>;\n }\n ).changeOutputDevice(config);\n }\n throw new Error(\n \"Device switching is only available for voice conversations\"\n );\n },\n status,\n canSendFeedback,\n micMuted,\n isSpeaking: mode === \"speaking\",\n };\n}\n\n// const con = useConversation({agentId: \"\"})\n","// This file is auto-generated during build\nexport const PACKAGE_VERSION = \"0.10.0\";\n","import { useEffect, useRef, useState, useCallback } from \"react\";\nimport { Scribe, RealtimeEvents } from \"@elevenlabs/client\";\nimport type {\n RealtimeConnection,\n AudioOptions,\n MicrophoneOptions,\n AudioFormat,\n CommitStrategy,\n PartialTranscriptMessage,\n CommittedTranscriptMessage,\n CommittedTranscriptWithTimestampsMessage,\n ScribeErrorMessage,\n ScribeAuthErrorMessage,\n} from \"@elevenlabs/client\";\n\n// ============= Types =============\n\nexport type ScribeStatus =\n | \"disconnected\"\n | \"connecting\"\n | \"connected\"\n | \"transcribing\"\n | \"error\";\n\nexport interface TranscriptSegment {\n id: string;\n text: string;\n timestamp: number;\n isFinal: boolean;\n}\n\nexport interface ScribeCallbacks {\n onSessionStarted?: () => void;\n onPartialTranscript?: (data: { text: string }) => void;\n onCommittedTranscript?: (data: { text: string }) => void;\n onCommittedTranscriptWithTimestamps?: (data: {\n text: string;\n timestamps?: { start: number; end: number }[];\n }) => void;\n onError?: (error: Error | Event) => void;\n onAuthError?: (data: { error: string }) => void;\n onConnect?: () => void;\n onDisconnect?: () => void;\n}\n\nexport interface ScribeHookOptions extends ScribeCallbacks {\n // Connection options\n token?: string;\n modelId?: string;\n baseUri?: string;\n\n // VAD options\n commitStrategy?: CommitStrategy;\n vadSilenceThresholdSecs?: number;\n vadThreshold?: number;\n minSpeechDurationMs?: number;\n minSilenceDurationMs?: number;\n languageCode?: string;\n\n // Microphone options (for automatic microphone mode)\n microphone?: {\n deviceId?: string;\n echoCancellation?: boolean;\n noiseSuppression?: boolean;\n autoGainControl?: boolean;\n channelCount?: number;\n };\n\n // Manual audio options\n audioFormat?: AudioFormat;\n sampleRate?: number;\n\n // Auto-connect on mount\n autoConnect?: boolean;\n}\n\nexport interface UseScribeReturn {\n // State\n status: ScribeStatus;\n isConnected: boolean;\n isTranscribing: boolean;\n partialTranscript: string;\n committedTranscripts: TranscriptSegment[];\n error: string | null;\n\n // Connection methods\n connect: (options?: Partial<ScribeHookOptions>) => Promise<void>;\n disconnect: () => void;\n\n // Audio methods (for manual mode)\n sendAudio: (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => void;\n commit: () => void;\n\n // Utility methods\n clearTranscripts: () => void;\n getConnection: () => RealtimeConnection | null;\n}\n\n// ============= Hook Implementation =============\n\nexport function useScribe(options: ScribeHookOptions = {}): UseScribeReturn {\n const {\n // Callbacks\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n\n // Connection options\n token: defaultToken,\n modelId: defaultModelId,\n baseUri: defaultBaseUri,\n commitStrategy: defaultCommitStrategy,\n vadSilenceThresholdSecs: defaultVadSilenceThresholdSecs,\n vadThreshold: defaultVadThreshold,\n minSpeechDurationMs: defaultMinSpeechDurationMs,\n minSilenceDurationMs: defaultMinSilenceDurationMs,\n languageCode: defaultLanguageCode,\n\n // Mode options\n microphone: defaultMicrophone,\n audioFormat: defaultAudioFormat,\n sampleRate: defaultSampleRate,\n\n // Auto-connect\n autoConnect = false,\n } = options;\n\n const connectionRef = useRef<RealtimeConnection | null>(null);\n\n const [status, setStatus] = useState<ScribeStatus>(\"disconnected\");\n const [partialTranscript, setPartialTranscript] = useState<string>(\"\");\n const [committedTranscripts, setCommittedTranscripts] = useState<\n TranscriptSegment[]\n >([]);\n const [error, setError] = useState<string | null>(null);\n\n // Cleanup on unmount\n useEffect(() => {\n return () => {\n connectionRef.current?.close();\n };\n }, []);\n\n const connect = useCallback(\n async (runtimeOptions: Partial<ScribeHookOptions> = {}) => {\n if (connectionRef.current) {\n console.warn(\"Already connected\");\n return;\n }\n\n try {\n setStatus(\"connecting\");\n setError(null);\n\n // Merge default options with runtime options\n const token = runtimeOptions.token || defaultToken;\n const modelId = runtimeOptions.modelId || defaultModelId;\n\n if (!token) {\n throw new Error(\"Token is required\");\n }\n if (!modelId) {\n throw new Error(\"Model ID is required\");\n }\n\n // Determine mode: microphone or manual\n const microphone = runtimeOptions.microphone || defaultMicrophone;\n const audioFormat = runtimeOptions.audioFormat || defaultAudioFormat;\n const sampleRate = runtimeOptions.sampleRate || defaultSampleRate;\n\n let connection: RealtimeConnection;\n\n if (microphone) {\n // Microphone mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n microphone,\n } as MicrophoneOptions);\n } else if (audioFormat && sampleRate) {\n // Manual audio mode\n connection = Scribe.connect({\n token,\n modelId,\n baseUri: runtimeOptions.baseUri || defaultBaseUri,\n commitStrategy:\n runtimeOptions.commitStrategy || defaultCommitStrategy,\n vadSilenceThresholdSecs:\n runtimeOptions.vadSilenceThresholdSecs ||\n defaultVadSilenceThresholdSecs,\n vadThreshold: runtimeOptions.vadThreshold || defaultVadThreshold,\n minSpeechDurationMs:\n runtimeOptions.minSpeechDurationMs || defaultMinSpeechDurationMs,\n minSilenceDurationMs:\n runtimeOptions.minSilenceDurationMs ||\n defaultMinSilenceDurationMs,\n languageCode: runtimeOptions.languageCode || defaultLanguageCode,\n audioFormat,\n sampleRate,\n } as AudioOptions);\n } else {\n throw new Error(\n \"Either microphone options or (audioFormat + sampleRate) must be provided\"\n );\n }\n\n connectionRef.current = connection;\n\n // Set up event listeners\n connection.on(RealtimeEvents.SESSION_STARTED, () => {\n setStatus(\"connected\");\n onSessionStarted?.();\n });\n\n connection.on(RealtimeEvents.PARTIAL_TRANSCRIPT, (data: unknown) => {\n const message = data as PartialTranscriptMessage;\n setPartialTranscript(message.text);\n setStatus(\"transcribing\");\n onPartialTranscript?.(message);\n });\n\n connection.on(RealtimeEvents.COMMITTED_TRANSCRIPT, (data: unknown) => {\n const message = data as CommittedTranscriptMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscript?.(message);\n });\n\n connection.on(\n RealtimeEvents.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,\n (data: unknown) => {\n const message = data as CommittedTranscriptWithTimestampsMessage;\n const segment: TranscriptSegment = {\n id: `${Date.now()}-${Math.random()}`,\n text: message.text,\n timestamp: Date.now(),\n isFinal: true,\n };\n setCommittedTranscripts(prev => [...prev, segment]);\n setPartialTranscript(\"\");\n onCommittedTranscriptWithTimestamps?.(message);\n }\n );\n\n connection.on(RealtimeEvents.ERROR, (err: unknown) => {\n const message = err as ScribeErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onError?.(new Error(message.error));\n });\n\n connection.on(RealtimeEvents.AUTH_ERROR, (data: unknown) => {\n const message = data as ScribeAuthErrorMessage;\n setError(message.error);\n setStatus(\"error\");\n onAuthError?.(message);\n });\n\n connection.on(RealtimeEvents.OPEN, () => {\n onConnect?.();\n });\n\n connection.on(RealtimeEvents.CLOSE, () => {\n setStatus(\"disconnected\");\n connectionRef.current = null;\n onDisconnect?.();\n });\n } catch (err) {\n const errorMessage =\n err instanceof Error ? err.message : \"Failed to connect\";\n setError(errorMessage);\n setStatus(\"error\");\n throw err;\n }\n },\n [\n defaultToken,\n defaultModelId,\n defaultBaseUri,\n defaultCommitStrategy,\n defaultVadSilenceThresholdSecs,\n defaultVadThreshold,\n defaultMinSpeechDurationMs,\n defaultMinSilenceDurationMs,\n defaultLanguageCode,\n defaultMicrophone,\n defaultAudioFormat,\n defaultSampleRate,\n onSessionStarted,\n onPartialTranscript,\n onCommittedTranscript,\n onCommittedTranscriptWithTimestamps,\n onError,\n onAuthError,\n onConnect,\n onDisconnect,\n ]\n );\n\n const disconnect = useCallback(() => {\n connectionRef.current?.close();\n connectionRef.current = null;\n setStatus(\"disconnected\");\n }, []);\n\n const sendAudio = useCallback(\n (\n audioBase64: string,\n options?: { commit?: boolean; sampleRate?: number }\n ) => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.send({ audioBase64, ...options });\n },\n []\n );\n\n const commit = useCallback(() => {\n if (!connectionRef.current) {\n throw new Error(\"Not connected to Scribe\");\n }\n connectionRef.current.commit();\n }, []);\n\n const clearTranscripts = useCallback(() => {\n setCommittedTranscripts([]);\n setPartialTranscript(\"\");\n }, []);\n\n const getConnection = useCallback(() => {\n return connectionRef.current;\n }, []);\n\n // Auto-connect if enabled\n useEffect(() => {\n if (autoConnect) {\n connect();\n }\n }, [autoConnect, connect]);\n\n return {\n // State\n status,\n isConnected: status === \"connected\" || status === \"transcribing\",\n isTranscribing: status === \"transcribing\",\n partialTranscript,\n committedTranscripts,\n error,\n\n // Methods\n connect,\n disconnect,\n sendAudio,\n commit,\n clearTranscripts,\n getConnection,\n };\n}\n\n// Export types and enums from client for convenience\nexport {\n AudioFormat,\n CommitStrategy,\n RealtimeEvents,\n} from \"@elevenlabs/client\";\nexport type { RealtimeConnection } from \"@elevenlabs/client\";\n"],"names":["parseLocation","location","console","warn","getOriginForLocation","us","global","getLivekitUrlForLocation","props","micMuted","volume","serverLocation","defaultOptions","_objectWithoutPropertiesLoose","_excluded","conversationRef","useRef","lockRef","_useState","useState","status","setStatus","_useState2","canSendFeedback","setCanSendFeedback","_useState3","mode","setMode","micMutedRef","volumeRef","current","useEffect","_conversationRef$curr","undefined","setMicMuted","_conversationRef$curr2","setVolume","_conversationRef$curr3","endSession","startSession","options","_conversationRef$curr4","_exit","_temp2","_result","origin","resolvedServerLocation","livekitUrl","Conversation","_extends","overrides","_defaultOptions$overr","_options$overrides","client","_defaultOptions$overr2","_defaultOptions$overr3","_options$overrides$cl","_options$overrides2","source","_options$overrides3","_defaultOptions$overr4","version","_options$overrides4","_defaultOptions$overr5","onConnect","onDisconnect","onError","onMessage","onAudio","onDebug","onUnhandledClientToolCall","onVadScore","onInterruption","onAgentToolResponse","onConversationMetadata","onMCPToolCall","onMCPConnectionStatus","onAsrInitiationMetadata","onAgentChatResponsePart","onModeChange","_ref","_ref2","onStatusChange","_ref3","_ref4","onCanSendFeedbackChange","_ref5","_ref6","Promise","resolve","then","_lockRef$current","getId","_finallyRethrows","_wasThrown","_result2","isOpen","_temp","conversation","_conversation$getId","e","reject","_ref7","_conversationRef$curr5","getInputByteFrequencyData","_conversationRef$curr6","getOutputByteFrequencyData","_conversationRef$curr7","getInputVolume","_conversationRef$curr8","_conversationRef$curr9","getOutputVolume","_conversationRef$curr0","_conversationRef$curr1","sendFeedback","like","_conversationRef$curr10","_conversationRef$curr11","sendContextualUpdate","text","_conversationRef$curr12","sendUserMessage","_conversationRef$curr13","sendUserActivity","_conversationRef$curr14","sendMCPToolApprovalResult","toolCallId","isApproved","_conversationRef$curr15","changeInputDevice","config","_temp4","_exit2","_result3","Error","_temp3","_await$conversationRe","changeOutputDevice","_temp6","_exit3","_result4","_temp5","_await$conversationRe2","isSpeaking","onSessionStarted","onPartialTranscript","onCommittedTranscript","onCommittedTranscriptWithTimestamps","onAuthError","defaultToken","token","defaultModelId","modelId","defaultBaseUri","baseUri","defaultCommitStrategy","commitStrategy","defaultVadSilenceThresholdSecs","vadSilenceThresholdSecs","defaultVadThreshold","vadThreshold","defaultMinSpeechDurationMs","minSpeechDurationMs","defaultMinSilenceDurationMs","minSilenceDurationMs","defaultLanguageCode","languageCode","defaultMicrophone","microphone","defaultAudioFormat","audioFormat","defaultSampleRate","sampleRate","_options$autoConnect","autoConnect","connectionRef","partialTranscript","setPartialTranscript","committedTranscripts","setCommittedTranscripts","_useState4","error","setError","_connectionRef$curren","close","connect","useCallback","runtimeOptions","connection","Scribe","on","RealtimeEvents","SESSION_STARTED","PARTIAL_TRANSCRIPT","data","message","COMMITTED_TRANSCRIPT","segment","id","Date","now","Math","random","timestamp","isFinal","prev","concat","COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS","ERROR","err","AUTH_ERROR","OPEN","CLOSE","errorMessage","disconnect","_connectionRef$curren2","sendAudio","audioBase64","send","commit","clearTranscripts","getConnection","isConnected","isTranscribing"],"mappings":"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"}
|
package/dist/lib.modern.js
CHANGED
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function
|
|
1
|
+
import{useRef as n,useState as e,useEffect as o,useCallback as r}from"react";import{Scribe as t,RealtimeEvents as l,Conversation as i}from"@elevenlabs/client";export{AudioFormat,CommitStrategy,RealtimeEvents,postOverallFeedback}from"@elevenlabs/client";function u(){return u=Object.assign?Object.assign.bind():function(n){for(var e=1;e<arguments.length;e++){var o=arguments[e];for(var r in o)({}).hasOwnProperty.call(o,r)&&(n[r]=o[r])}return n},u.apply(null,arguments)}function a(i={}){const{onSessionStarted:a,onPartialTranscript:c,onCommittedTranscript:s,onCommittedTranscriptWithTimestamps:d,onError:v,onAuthError:m,onConnect:g,onDisconnect:h,token:p,modelId:C,baseUri:S,commitStrategy:M,vadSilenceThresholdSecs:T,vadThreshold:b,minSpeechDurationMs:w,minSilenceDurationMs:y,languageCode:D,microphone:f,audioFormat:I,sampleRate:A,autoConnect:R=!1}=i,E=n(null),[k,F]=e("disconnected"),[O,P]=e(""),[U,V]=e([]),[x,_]=e(null);o(()=>()=>{var n;null==(n=E.current)||n.close()},[]);const N=r(async(n={})=>{if(E.current)console.warn("Already connected");else try{F("connecting"),_(null);const e=n.token||p,o=n.modelId||C;if(!e)throw new Error("Token is required");if(!o)throw new Error("Model ID is required");const r=n.microphone||f,i=n.audioFormat||I,u=n.sampleRate||A;let R;if(r)R=t.connect({token:e,modelId:o,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||T,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||w,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||D,microphone:r});else{if(!i||!u)throw new Error("Either microphone options or (audioFormat + sampleRate) must be provided");R=t.connect({token:e,modelId:o,baseUri:n.baseUri||S,commitStrategy:n.commitStrategy||M,vadSilenceThresholdSecs:n.vadSilenceThresholdSecs||T,vadThreshold:n.vadThreshold||b,minSpeechDurationMs:n.minSpeechDurationMs||w,minSilenceDurationMs:n.minSilenceDurationMs||y,languageCode:n.languageCode||D,audioFormat:i,sampleRate:u})}E.current=R,R.on(l.SESSION_STARTED,()=>{F("connected"),null==a||a()}),R.on(l.PARTIAL_TRANSCRIPT,n=>{const e=n;P(e.text),F("transcribing"),null==c||c(e)}),R.on(l.COMMITTED_TRANSCRIPT,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),P(""),null==s||s(e)}),R.on(l.COMMITTED_TRANSCRIPT_WITH_TIMESTAMPS,n=>{const e=n,o={id:`${Date.now()}-${Math.random()}`,text:e.text,timestamp:Date.now(),isFinal:!0};V(n=>[...n,o]),P(""),null==d||d(e)}),R.on(l.ERROR,n=>{const e=n;_(e.error),F("error"),null==v||v(new Error(e.error))}),R.on(l.AUTH_ERROR,n=>{const e=n;_(e.error),F("error"),null==m||m(e)}),R.on(l.OPEN,()=>{null==g||g()}),R.on(l.CLOSE,()=>{F("disconnected"),E.current=null,null==h||h()})}catch(n){const e=n instanceof Error?n.message:"Failed to connect";throw _(e),F("error"),n}},[p,C,S,M,T,b,w,y,D,f,I,A,a,c,s,d,v,m,g,h]),q=r(()=>{var n;null==(n=E.current)||n.close(),E.current=null,F("disconnected")},[]),B=r((n,e)=>{if(!E.current)throw new Error("Not connected to Scribe");E.current.send(u({audioBase64:n},e))},[]),L=r(()=>{if(!E.current)throw new Error("Not connected to Scribe");E.current.commit()},[]),$=r(()=>{V([]),P("")},[]),j=r(()=>E.current,[]);return o(()=>{R&&N()},[R,N]),{status:k,isConnected:"connected"===k||"transcribing"===k,isTranscribing:"transcribing"===k,partialTranscript:O,committedTranscripts:U,error:x,connect:N,disconnect:q,sendAudio:B,commit:L,clearTranscripts:$,getConnection:j}}const c=["micMuted","volume","serverLocation"];function s(n="us"){switch(n){case"eu-residency":case"in-residency":case"us":case"global":return n;default:return console.warn(`[ConversationalAI] Invalid server-location: ${n}. Defaulting to "us"`),"us"}}function d(n){return{us:"wss://api.elevenlabs.io","eu-residency":"wss://api.eu.residency.elevenlabs.io","in-residency":"wss://api.in.residency.elevenlabs.io",global:"wss://api.elevenlabs.io"}[n]}function v(n){return{us:"wss://livekit.rtc.elevenlabs.io","eu-residency":"wss://livekit.rtc.eu.residency.elevenlabs.io","in-residency":"wss://livekit.rtc.in.residency.elevenlabs.io",global:"wss://livekit.rtc.elevenlabs.io"}[n]}function m(r={}){const{micMuted:t,volume:l,serverLocation:a}=r,m=function(n,e){if(null==n)return{};var o={};for(var r in n)if({}.hasOwnProperty.call(n,r)){if(-1!==e.indexOf(r))continue;o[r]=n[r]}return o}(r,c),g=n(null),h=n(null),[p,C]=e("disconnected"),[S,M]=e(!1),[T,b]=e("listening"),w=n(t),y=n(l);return w.current=t,y.current=l,o(()=>{var n;void 0!==t&&(null==g||null==(n=g.current)||n.setMicMuted(t))},[t]),o(()=>{var n;void 0!==l&&(null==g||null==(n=g.current)||n.setVolume({volume:l}))},[l]),o(()=>()=>{var n;null==(n=g.current)||n.endSession()},[]),{startSession:async n=>{var e;if(null!=(e=g.current)&&e.isOpen())return g.current.getId();if(h.current)return(await h.current).getId();try{var o,r,t,l,c,p,S,T,D,f;const e=s((null==n?void 0:n.serverLocation)||a),I=d(e),A=v(e);return h.current=i.startSession(u({},null!=m?m:{},null!=n?n:{},{origin:I,livekitUrl:A,overrides:u({},null!=(o=null==m?void 0:m.overrides)?o:{},null!=(r=null==n?void 0:n.overrides)?r:{},{client:u({},null!=(t=null==m||null==(l=m.overrides)?void 0:l.client)?t:{},null!=(c=null==n||null==(p=n.overrides)?void 0:p.client)?c:{},{source:(null==n||null==(S=n.overrides)||null==(S=S.client)?void 0:S.source)||(null==m||null==(T=m.overrides)||null==(T=T.client)?void 0:T.source)||"react_sdk",version:(null==n||null==(D=n.overrides)||null==(D=D.client)?void 0:D.version)||(null==m||null==(f=m.overrides)||null==(f=f.client)?void 0:f.version)||"0.10.0"})}),onConnect:(null==n?void 0:n.onConnect)||(null==m?void 0:m.onConnect),onDisconnect:(null==n?void 0:n.onDisconnect)||(null==m?void 0:m.onDisconnect),onError:(null==n?void 0:n.onError)||(null==m?void 0:m.onError),onMessage:(null==n?void 0:n.onMessage)||(null==m?void 0:m.onMessage),onAudio:(null==n?void 0:n.onAudio)||(null==m?void 0:m.onAudio),onDebug:(null==n?void 0:n.onDebug)||(null==m?void 0:m.onDebug),onUnhandledClientToolCall:(null==n?void 0:n.onUnhandledClientToolCall)||(null==m?void 0:m.onUnhandledClientToolCall),onVadScore:(null==n?void 0:n.onVadScore)||(null==m?void 0:m.onVadScore),onInterruption:(null==n?void 0:n.onInterruption)||(null==m?void 0:m.onInterruption),onAgentToolResponse:(null==n?void 0:n.onAgentToolResponse)||(null==m?void 0:m.onAgentToolResponse),onConversationMetadata:(null==n?void 0:n.onConversationMetadata)||(null==m?void 0:m.onConversationMetadata),onMCPToolCall:(null==n?void 0:n.onMCPToolCall)||(null==m?void 0:m.onMCPToolCall),onMCPConnectionStatus:(null==n?void 0:n.onMCPConnectionStatus)||(null==m?void 0:m.onMCPConnectionStatus),onAsrInitiationMetadata:(null==n?void 0:n.onAsrInitiationMetadata)||(null==m?void 0:m.onAsrInitiationMetadata),onAgentChatResponsePart:(null==n?void 0:n.onAgentChatResponsePart)||(null==m?void 0:m.onAgentChatResponsePart),onModeChange:({mode:e})=>{var o;b(e),null==(o=(null==n?void 0:n.onModeChange)||(null==m?void 0:m.onModeChange))||o({mode:e})},onStatusChange:({status:e})=>{var o;C(e),null==(o=(null==n?void 0:n.onStatusChange)||(null==m?void 0:m.onStatusChange))||o({status:e})},onCanSendFeedbackChange:({canSendFeedback:e})=>{var o;M(e),null==(o=(null==n?void 0:n.onCanSendFeedbackChange)||(null==m?void 0:m.onCanSendFeedbackChange))||o({canSendFeedback:e})}})),g.current=await h.current,void 0!==w.current&&g.current.setMicMuted(w.current),void 0!==y.current&&g.current.setVolume({volume:y.current}),g.current.getId()}finally{h.current=null}},endSession:async()=>{const n=g.current;g.current=null,await(null==n?void 0:n.endSession())},setVolume:({volume:n})=>{var e;null==(e=g.current)||e.setVolume({volume:n})},getInputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getInputByteFrequencyData()},getOutputByteFrequencyData:()=>{var n;return null==(n=g.current)?void 0:n.getOutputByteFrequencyData()},getInputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getInputVolume())?n:0},getOutputVolume:()=>{var n,e;return null!=(n=null==(e=g.current)?void 0:e.getOutputVolume())?n:0},sendFeedback:n=>{var e;null==(e=g.current)||e.sendFeedback(n)},getId:()=>{var n;return null==(n=g.current)?void 0:n.getId()},sendContextualUpdate:n=>{var e;null==(e=g.current)||e.sendContextualUpdate(n)},sendUserMessage:n=>{var e;null==(e=g.current)||e.sendUserMessage(n)},sendUserActivity:()=>{var n;null==(n=g.current)||n.sendUserActivity()},sendMCPToolApprovalResult:(n,e)=>{var o;null==(o=g.current)||o.sendMCPToolApprovalResult(n,e)},changeInputDevice:async n=>{if(g.current&&"changeInputDevice"in g.current)return await g.current.changeInputDevice(n);throw new Error("Device switching is only available for voice conversations")},changeOutputDevice:async n=>{if(g.current&&"changeOutputDevice"in g.current)return await g.current.changeOutputDevice(n);throw new Error("Device switching is only available for voice conversations")},status:p,canSendFeedback:S,micMuted:t,isSpeaking:"speaking"===T}}export{v as getLivekitUrlForLocation,d as getOriginForLocation,s as parseLocation,m as useConversation,a as useScribe};
|
|
2
2
|
//# sourceMappingURL=lib.modern.js.map
|