@d-id/client-sdk 1.1.0-beta.4 → 1.1.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.js +517 -518
- package/dist/index.umd.cjs +1 -1
- package/dist/src/services/agent-manager/connect-to-manager.d.ts +1 -1
- package/dist/src/services/chat/intial-messages.d.ts +2 -3
- package/dist/src/services/streaming-manager/stats/poll.d.ts +2 -2
- package/dist/src/types/entities/agents/manager.d.ts +3 -3
- package/dist/src/types/stream/stream.d.ts +2 -2
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(f,_){typeof exports=="object"&&typeof module<"u"?_(exports):typeof define=="function"&&define.amd?define(["exports"],_):(f=typeof globalThis<"u"?globalThis:f||self,_(f.index={}))})(this,function(f){"use strict";var yt=Object.defineProperty;var pt=(f,_,N)=>_ in f?yt(f,_,{enumerable:!0,configurable:!0,writable:!0,value:N}):f[_]=N;var G=(f,_,N)=>(pt(f,typeof _!="symbol"?_+"":_,N),N);class _ extends Error{constructor({kind:a,description:n,error:o}){super(JSON.stringify({kind:a,description:n}));G(this,"kind");G(this,"description");G(this,"error");this.kind=a,this.description=n,this.error=o}}class N extends _{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ie extends _{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends _{constructor(a,n){super({kind:"ValidationError",description:a});G(this,"key");this.key=n}}class se extends _{constructor(t){super({kind:"WSError",description:t})}}var oe=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(oe||{}),ce=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(ce||{}),de=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(de||{}),le=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(le||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),U=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(U||{}),ue=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(ue||{}),fe=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(fe||{}),me=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(me||{}),Z=(e=>(e.Clip="clip",e.Talk="talk",e))(Z||{});const ge=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var C=(e=>(e.Start="START",e.Stop="STOP",e))(C||{}),K=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(K||{}),x=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(x||{});const O={"stream/started":"START","stream/done":"STOP"};var V=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(V||{}),E=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(E||{}),J=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(J||{}),he=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(he||{}),we=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(we||{});const Te=45*1e3,je="X-Playground-Chat",X="https://api.d-id.com",Pe="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",ye=e=>new Promise(t=>setTimeout(t,e)),Q=()=>Math.random().toString(16).slice(2);function Be(e,t){let a;return{promise:new Promise((o,s)=>{a=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function ee(e,t){const a={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let n;for(let o=1;o<=a.limit;o++)try{if(!a.timeout)return await e();const{promise:s,clear:r}=Be(a.timeout,a.timeoutErrorMessage),i=e().finally(r);return await Promise.race([i,s])}catch(s){if(n=s,!a.shouldRetryFn(s)||o>=a.limit)throw s;await ye(a.delayMs),a.onRetry(s)}throw n}function pe(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let $e=Q();function ve(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${pe()}_${$e}`;throw new Error(`Unknown auth type: ${e}`)}const Le=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=X,a){const n=async(o,s)=>{const{skipErrorHandler:r,...i}=s||{},c=await Le(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:ve(e),"Content-Type":"application/json"}}));if(!c.ok){let g=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const l=new Error(g);throw a&&!r&&a(l,{url:o,options:i,headers:c.headers}),l}return c.json()};return{get(o,s){return n(o,{...s,method:"GET"})},post(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"POST"})},delete(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,r){return n(o,{...r,body:JSON.stringify(s),method:"PATCH"})}}}function Ce(e,t=X,a){const n=te(e,`${t}/agents`,a);return{create(o,s){return n.post("/",o,s)},getAgents(o,s){return n.get(`/${o?`?tag=${o}`:""}`,s).then(r=>r??[])},getById(o,s){return n.get(`/${o}`,s)},delete(o,s){return n.delete(`/${o}`,void 0,s)},update(o,s,r){return n.patch(`/${o}`,s,r)},newChat(o,s,r){return n.post(`/${o}/chat`,s,r)},chat(o,s,r,i){return n.post(`/${o}/chat/${s}`,r,i)},createRating(o,s,r,i){return n.post(`/${o}/chat/${s}/ratings`,r,i)},updateRating(o,s,r,i,c){return n.patch(`/${o}/chat/${s}/ratings/${r}`,i,c)},deleteRating(o,s,r,i){return n.delete(`/${o}/chat/${s}/ratings/${r}`,i)},getSTTToken(o,s){return n.get(`/${o}/stt-token`,s)}}}const re=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ae(e){var o,s,r,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},n=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:re(n),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(r=e.presenter)==null?void 0:r.voice)==null?void 0:i.type}}}const ze=e=>e.reduce((t,a)=>t+a,0),Fe=e=>ze(e)/e.length;function Ne(e,t,a){var c,g,l;const{event:n,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:r}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(g=o==null?void 0:o.script)==null?void 0:g.provider,language:r}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(l=t==null?void 0:t.presenter)==null?void 0:l.stitch:void 0,...a}}let ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var s,r,i,c,g,l;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,n=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||pe(),agentId:e.agent.id,agentType:re(a),owner_id:e.agent.owner_id??"",promptVersion:(r=e.agent.llm)==null?void 0:r.prompt_version,behavior:{role:n==null?void 0:n.role,personality:n==null?void 0:n.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:n==null?void 0:n.knowledge_source,starterQuestionsCount:(l=(g=e.agent.knowledge)==null?void 0:g.starter_message)==null?void 0:l.length,topicsToAvoid:n==null?void 0:n.topics_to_avoid,maxResponseLength:n==null?void 0:n.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(h){const k={};if(h&&typeof h!="object")throw new Error("properties must be a flat json object");for(let p in h)(typeof h[p]=="string"||typeof h[p]=="number")&&(k[p]=h[p]);this.additionalProperties={...this.additionalProperties,...k}},async track(h,k){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...v}=k||{},D={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:h,properties:{...this.additionalProperties,...v,...o,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Je,D).then(R=>R.json())}catch(R){return console.error(R)}},linkTrack(h,k,p,v){ne[h]||(ne[h]={events:{},resolvedDependencies:[]}),v.includes(p)||v.push(p);const D=ne[h];if(D.events[p]={props:k},D.resolvedDependencies.push(p),v.every(A=>D.resolvedDependencies.includes(A))){const A=v.reduce((P,d)=>D.events[d]?{...P,...D.events[d].props}:P,{});this.track(h,A),D.resolvedDependencies=D.resolvedDependencies.filter(P=>!v.includes(P)),v.forEach(P=>{delete D.events[P]})}}}}function He(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const q=He();function De(e){return e===j.Playground?{headers:{[je]:"true"}}:{}}async function ke(e,t,a,n,o=!1,s){try{return!s&&n!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},De(n)),a.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:n})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??n}}catch(r){try{const i=JSON.parse(r.message);if((i==null?void 0:i.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(i){console.error("Error parsing the error message:",i)}throw new Error("Cannot create new chat")}}function Ue(e){var a;const t=((a=e.greetings)==null?void 0:a.filter(n=>n.length>0))??[];return t.length>0?t[Math.floor(Math.random()*t.length)]:`Hi! I'm ${e.preview_name||"My Agent"}. How can I help you?`}function Re(e,t){return t&&t.length>0?t:[{content:e,id:Q(),role:"assistant",created_at:new Date().toISOString()}]}function Ke(e){return new Promise((t,a)=>{const{callbacks:n,host:o,auth:s}=e,{onMessage:r=null,onOpen:i=null,onClose:c=null,onError:g=null}=n||{},l=new WebSocket(`${o}?authorization=${ve(s)}`);l.onmessage=r,l.onclose=c,l.onerror=h=>{console.error(h),g==null||g("Websocket failed to connect",h),a(h)},l.onopen=h=>{i==null||i(h),t(l)}})}async function qe(e){const{retries:t=1}=e;let a=null;for(let n=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;n++)try{a=await Ke(e)}catch(o){if(n===t)throw o;await ye(n*500)}return a}async function xe(e,t,a){const n=a!=null&&a.onMessage?[a.onMessage]:[],o=await qe({auth:e,host:t,callbacks:{onError:s=>{var r;return(r=a.onError)==null?void 0:r.call(a,new se(s))},onMessage(s){const r=JSON.parse(s.data);n.forEach(i=>i(r.event,r))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>n.push(s)}}function Ve(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Xe(e,t,a,n,o){const s=n.messages[n.messages.length-1];if(!(e===U.Partial||e===U.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:r,sequence:i}=t;e===U.Partial?a[i]=r:a.answer=r;const c=Ve(a);(s.content!==c||e===U.Answer)&&(s.content=c,o==null||o([...n.messages],e))}function Ye(e,t,a,n,o){let s={};return{clearQueue:()=>s={},onMessage:(r,i)=>{var c,g;if("content"in i)Xe(r,i,s,t,a.callbacks.onNewMessage),r===U.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const l=V,h=[l.StreamVideoDone,l.StreamVideoError,l.StreamVideoRejected],k=[l.StreamFailed,l.StreamVideoError,l.StreamVideoRejected],p=Ne(i,n,{mode:t.chatMode});if(r=r,r===l.StreamVideoCreated)e.linkTrack("agent-video",p,l.StreamVideoCreated,["start"]);else if(h.includes(r)){const v=r.split("/")[1];k.includes(r)?e.track("agent-video",{...p,event:v}):e.linkTrack("agent-video",{...p,event:v},r,["done"])}k.includes(r)&&((g=(c=a.callbacks).onError)==null||g.call(c,new Error(`Stream failed with event ${r}`),{data:i})),i.event===l.StreamDone&&o()}}}}function Ge(e,t,a,n){const o=te(e,`${t}/agents/${a}`,n);return{createStream(s){return o.post("/streams",{output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,stream_greeting:s.stream_greeting})},startConnection(s,r,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:r})},addIceCandidate(s,r,i){return o.post(`/streams/${s}/ice`,{session_id:i,...r})},sendStreamRequest(s,r,i){return o.post(`/streams/${s}`,{session_id:r,...i})},close(s,r){return o.delete(`/streams/${s}`,{session_id:r})}}}function Qe(e,t,a,n){const o=te(e,`${t}/agents/${a}`,n);return{createStream(s,r){return o.post("/streams",{driver_url:s.driver_url,face:s.face,config:s.config,output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,stream_greeting:s.stream_greeting},r)},startConnection(s,r,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:r},c)},addIceCandidate(s,r,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...r},c)},sendStreamRequest(s,r,i,c){return o.post(`/streams/${s}`,{session_id:r,...i},c)},close(s,r,i){return o.delete(`/streams/${s}`,{session_id:r},i)}}}function Ze(e,t,a){const n=(t.timestamp-e.timestamp)/1e3;return{duration:n,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/n),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/n,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function Oe(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...n}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...n,causes:o}})}function et(e){let t="";for(const a of e.values())if(a&&a.type==="codec"&&a.mimeType.startsWith("video")&&(t=a.mimeType.split("/")[1]),a&&a.type==="inbound-rtp"&&a.kind==="video")return{codec:t,timestamp:a.timestamp,bytesReceived:a.bytesReceived,packetsReceived:a.packetsReceived,packetsLost:a.packetsLost,framesDropped:a.framesDropped,framesDecoded:a.framesDecoded,jitter:a.jitter,jitterBufferDelay:a.jitterBufferDelay,jitterBufferEmittedCount:a.jitterBufferEmittedCount,avgJitterDelayInInterval:a.jitterBufferDelay/a.jitterBufferEmittedCount,frameWidth:a.frameWidth,frameHeight:a.frameHeight,framesPerSecond:a.framesPerSecond,freezeCount:a.freezeCount,freezeDuration:a.totalFreezesDuration};return{}}function tt(e,t,a){const n=e.map((i,c)=>c===0?a?{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived-a.bytesReceived,bitrate:(i.bytesReceived-a.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-a.packetsReceived,packetsLost:i.packetsLost-a.packetsLost,framesDropped:i.framesDropped-a.framesDropped,framesDecoded:i.framesDecoded-a.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-a.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-a.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-a.jitterBufferDelay)/(i.jitterBufferEmittedCount-a.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-a.freezeCount,freezeDuration:i.freezeDuration-a.freezeDuration}:{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived,bitrate:i.bytesReceived*8/(t/1e3),packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.freezeDuration}:{timestamp:i.timestamp,duration:t*c/1e3,bytesReceived:i.bytesReceived-e[c-1].bytesReceived,bitrate:(i.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[c-1].packetsReceived,packetsLost:i.packetsLost-e[c-1].packetsLost,framesDropped:i.framesDropped-e[c-1].framesDropped,framesDecoded:i.framesDecoded-e[c-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[c-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[c-1].freezeCount,freezeDuration:i.freezeDuration-e[c-1].freezeDuration}),o=Oe(n),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),r=n.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ze(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...r),maxJitterDelayInInterval:Math.max(...r),avgJitterDelayInInterval:Fe(r)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ae=100,rt=Math.max(Math.ceil(400/ae),1),nt=.25,at=.28;function it(){let e=0,t,a,n=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const r=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(a&&i>a){const l=r-t,h=i-a;n=l/h}t=r,a=i;const c=s.framesDecoded,g=c-e>0;return e=c,{isReceiving:g,avgJitterDelayInInterval:n,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:n}}}function st(e,t,a,n,o,s=!1,r=!1){const i=s?1:0;let c=[],g,l=0,h=!1,k=0,p=K.Unknown,v=K.Unknown,D=0,R=0;const A=it();return setInterval(async()=>{const P=await e.getStats(),{isReceiving:d,avgJitterDelayInInterval:y,freezeCount:m}=A(P),M=et(P);if(d)l=0,D=m-R,v=y<nt?K.Strong:y>at&&D>1?K.Weak:p,v!==p&&(o==null||o(v),p=v,R+=D,D=0),h||(n==null||n(C.Start),r&&k>=i&&!t()&&a(),g=c[c.length-1],c=[],k++,h=!0),c.push(M);else if(h&&(l++,l>=rt)){const I=tt(c,ae,g);n==null||n(C.Stop,I),!r&&!t()&&a(),h=!1}},ae)}let Se=!1;const W=(e,t)=>Se&&console.log(e,t),ot=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Ee(e){switch(e){case"connected":return E.Connected;case"checking":return E.Connecting;case"failed":return E.Fail;case"new":return E.New;case"closed":return E.Closed;case"disconnected":return E.Disconnected;case"completed":return E.Completed;default:return E.New}}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:n}){e===C.Start&&t===C.Start?a==null||a(C.Start):e===C.Stop&&t===C.Stop&&(a==null||a(C.Stop,n))}function dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:o}){e===C.Start?a==null||a(C.Start):e===C.Stop&&(a==null||a(C.Stop,o)),t===C.Start?n==null||n(x.Talking):t===C.Stop&&(n==null||n(x.Idle))}function Me({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,streamType:o,report:s}){o===J.Legacy?ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:s}):o===J.Fluent&&dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:s})}async function lt(e,t,{debug:a=!1,callbacks:n,auth:o,baseURL:s=X}){Se=a;let r=!1,i=!1,c=C.Stop,g=C.Stop,l=K.Unknown;const{startConnection:h,sendStreamRequest:k,close:p,createStream:v,addIceCandidate:D}=t.videoType===Z.Clip?Ge(o,s,e,n.onError):Qe(o,s,e,n.onError),{id:R,offer:A,ice_servers:P,session_id:d,fluent:y}=await v(t),m=new ot({iceServers:P}),M=m.createDataChannel("JanusDataChannel");if(!d)throw new Error("Could not create session_id");const I=y?J.Fluent:J.Legacy,T=t.stream_warmup&&!y,z=()=>r,B=()=>{var u;r=!0,i&&((u=n.onConnectionStateChange)==null||u.call(n,E.Connected))},$=st(m,z,B,(u,w)=>Me({statsSignal:g=u,dataChannelSignal:I===J.Legacy?c:void 0,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,report:w,streamType:I}),u=>{var w;return(w=n.onConnectivityStateChange)==null?void 0:w.call(n,l)},T,!!t.stream_greeting);m.onicecandidate=u=>{var w;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?D(R,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},d):D(R,{candidate:null},d)}catch(b){(w=n.onError)==null||w.call(n,b,{streamId:R})}},M.onopen=()=>{i=!0,(!T&&!t.stream_greeting||r)&&B()},M.onmessage=u=>{u.data in O&&(c=O[u.data],Me({statsSignal:I===J.Legacy?g:void 0,dataChannelSignal:c,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,streamType:I}))},m.oniceconnectionstatechange=()=>{var w;W("peerConnection.oniceconnectionstatechange => "+m.iceConnectionState);const u=Ee(m.iceConnectionState);u!==E.Connected&&((w=n.onConnectionStateChange)==null||w.call(n,u))},m.ontrack=u=>{var w;W("peerConnection.ontrack",u),(w=n.onSrcObjectReady)==null||w.call(n,u.streams[0])},await m.setRemoteDescription(A),W("set remote description OK");const S=await m.createAnswer();return W("create answer OK"),await m.setLocalDescription(S),W("set local description OK"),await h(R,S,d),W("start connection OK"),{speak(u){return k(R,d,u)},async disconnect(){var u,w,b;if(R){const L=Ee(m.iceConnectionState);if(m){if(L===E.New){(u=n.onVideoStateChange)==null||u.call(n,C.Stop),clearInterval($);return}m.close(),m.oniceconnectionstatechange=null,m.onnegotiationneeded=null,m.onicecandidate=null,m.ontrack=null}try{L===E.Connected&&await p(R,d).catch(F=>{})}catch(F){W("Error on close stream connection",F)}(w=n.onVideoStateChange)==null||w.call(n,C.Stop),(b=n.onAgentActivityStateChange)==null||b.call(n,x.Idle),clearInterval($)}},sessionId:d,streamId:R,streamType:I}}function ut(e,t,a){var o;const{streamOptions:n}=t??{};return{videoType:ge(e.presenter.type),output_resolution:n==null?void 0:n.outputResolution,session_timeout:n==null?void 0:n.sessionTimeout,stream_warmup:n==null?void 0:n.streamWarmup,compatibility_mode:n==null?void 0:n.compatibilityMode,stream_greeting:re(e.presenter)!=="clip"&&((o=t==null?void 0:t.streamOptions)!=null&&o.streamGreeting)?a:void 0}}function ft(e,t,a,n){q.get()>0&&(e===C.Start?n.linkTrack("agent-video",{event:"start",latency:q.get(!0)},"start",[V.StreamVideoCreated]):e===C.Stop&&n.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,...a},"done",[V.StreamVideoDone]))}function mt(e,t,a,n){return q.reset(),new Promise(async(o,s)=>{try{const r=await lt(e.id,ut(e,t,n),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:i=>{var c,g;(g=(c=t.callbacks).onConnectionStateChange)==null||g.call(c,i),i===E.Connected&&o(r)},onVideoStateChange:(i,c)=>{var g,l;(l=(g=t.callbacks).onVideoStateChange)==null||l.call(g,i),ft(i,e,c,a)}}})}catch(r){s(r)}})}async function gt(e,t,a,n,o,s){var g,l,h,k;const{chat:r,chatMode:i}=await ke(e,a,n,t.mode,t.persistentChat,o);if(i&&i!==t.mode&&(t.mode=i,(l=(g=t.callbacks).onModeChange)==null||l.call(g,i),i===j.TextOnly))return(k=(h=t.callbacks).onError)==null||k.call(h,new ie(i)),{chat:r};const c=await mt(e,t,n,s);return{chat:r,streamingManager:c}}async function ht(e,t){var R,A,P;let a=!0;const n=t.mixpanelKey||be,o=t.wsURL||Pe,s=t.baseURL||X,r={messages:[],chatMode:t.mode||j.Functional},i=Ce(t.auth,s,t.callbacks.onError),c=await i.getById(e),g=Ue(c),l=We({token:n,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:h,clearQueue:k}=Ye(l,r,t,c,()=>{var d;return(d=r.socketManager)==null?void 0:d.disconnect()});r.messages=Re(g,t.initialMessages),(A=(R=t.callbacks).onNewMessage)==null||A.call(R,[...r.messages],"answer"),l.track("agent-sdk",{event:"loaded",...Ae(c)});async function p(d){var z,B,$,S,u,w,b;(B=(z=t.callbacks).onConnectionStateChange)==null||B.call(z,E.Connecting),q.reset(),d&&!a&&(delete r.chat,r.messages=Re(g),(S=($=t.callbacks).onNewMessage)==null||S.call($,[...r.messages],"answer"));const y=t.mode===j.DirectPlayback?Promise.resolve(void 0):xe(t.auth,o,{onMessage:h,onError:t.callbacks.onError}),m=ee(()=>gt(c,t,i,l,r.chat,d?g:void 0),{limit:3,timeout:Te,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:L=>(L==null?void 0:L.message)!=="Could not connect"&&L.status!==429,delayMs:1e3}).catch(L=>{var F,Y;throw D(j.Maintenance),(Y=(F=t.callbacks).onConnectionStateChange)==null||Y.call(F,E.Fail),L}),[M,{streamingManager:I,chat:T}]=await Promise.all([y,m]);T&&T.id!==((u=r.chat)==null?void 0:u.id)&&((b=(w=t.callbacks).onNewChat)==null||b.call(w,T.id)),r.streamingManager=I,r.socketManager=M,r.chat=T,a=!1,D((T==null?void 0:T.chat_mode)??t.mode??j.Functional)}async function v(){var d,y,m,M;(d=r.socketManager)==null||d.disconnect(),await((y=r.streamingManager)==null?void 0:y.disconnect()),delete r.streamingManager,delete r.socketManager,(M=(m=t.callbacks).onConnectionStateChange)==null||M.call(m,E.Disconnected)}async function D(d){var y,m;d!==r.chatMode&&(l.track("agent-mode-change",{mode:d}),r.chatMode=d,r.chatMode!==j.Functional&&await v(),(m=(y=t.callbacks).onModeChange)==null||m.call(y,d))}return{agent:c,getStreamType:()=>{var d;return(d=r.streamingManager)==null?void 0:d.streamType},starterMessages:((P=c.knowledge)==null?void 0:P.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:D,enrichAnalytics:l.enrich,async connect(){var d;await p(!0),l.track("agent-chat",{event:"connect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async reconnect(){var d;await v(),await p(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async disconnect(){var d;await v(),l.track("agent-chat",{event:"disconnect",chatId:(d=r.chat)==null?void 0:d.id,agentId:c.id,mode:r.chatMode})},async chat(d){var I,T,z,B,$;const y=()=>{if(t.mode===j.DirectPlayback)throw new H("Direct playback is enabled, chat is disabled");if(d.length>=800)throw new H("Message cannot be more than 800 characters");if(d.length===0)throw new H("Message cannot be empty");if(r.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(r.chatMode)){if(!r.streamingManager)throw new H("Streaming manager is not initialized");if(!r.chat)throw new H("Chat is not initialized")}},m=async()=>{var S,u;if(!r.chat){const w=await ke(c,i,l,r.chatMode,t.persistentChat);if(!w.chat)throw new N(r.chatMode,!!t.persistentChat);r.chat=w.chat,(u=(S=t.callbacks).onNewChat)==null||u.call(S,r.chat.id)}return r.chat.id},M=async(S,u)=>ee(()=>{var w,b;return i.chat(c.id,u,{chatMode:r.chatMode,streamId:(w=r.streamingManager)==null?void 0:w.streamId,sessionId:(b=r.streamingManager)==null?void 0:b.sessionId,messages:S.map(({matches:L,...F})=>F)},{...De(r.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:w=>{var F,Y,_e,Ie;const b=(F=w==null?void 0:w.message)==null?void 0:F.includes("missing or invalid session_id");return!((Y=w==null?void 0:w.message)==null?void 0:Y.includes("Stream Error"))&&!b?((Ie=(_e=t.callbacks).onError)==null||Ie.call(_e,w),!1):!0},onRetry:async()=>{await v(),await p(!1)}});try{k(),y(),r.messages.push({id:Q(),role:"user",content:d,created_at:new Date(q.update()).toISOString()}),(T=(I=t.callbacks).onNewMessage)==null||T.call(I,[...r.messages],"user");const S=await m(),u=await M([...r.messages],S);return r.messages.push({id:Q(),role:"assistant",content:u.result||"",created_at:new Date().toISOString(),context:u.context,matches:u.matches}),l.track("agent-message-send",{event:"success",mode:r.chatMode,messages:r.messages.length+1}),u.result&&((B=(z=t.callbacks).onNewMessage)==null||B.call(z,[...r.messages],"answer"),l.track("agent-message-received",{latency:q.get(!0),mode:r.chatMode,messages:r.messages.length})),u}catch(S){throw(($=r.messages[r.messages.length-1])==null?void 0:$.role)==="assistant"&&r.messages.pop(),l.track("agent-message-send",{event:"error",mode:r.chatMode,messages:r.messages.length}),S}},rate(d,y,m){var T,z,B,$;const M=r.messages.find(S=>S.id===d);if(r.chat){if(!M)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const I=((T=M.matches)==null?void 0:T.map(S=>[S.document_id,S.id]))??[];return l.track("agent-rate",{event:m?"update":"create",thumb:y===1?"up":"down",knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",mode:r.chatMode,matches:I,score:y}),m?i.updateRating(c.id,r.chat.id,m,{knowledge_id:((B=c.knowledge)==null?void 0:B.id)??"",message_id:d,matches:I,score:y}):i.createRating(c.id,r.chat.id,{knowledge_id:(($=c.knowledge)==null?void 0:$.id)??"",message_id:d,matches:I,score:y})},deleteRate(d){var y;if(!r.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(y=r.chat)==null?void 0:y.id,id:d,mode:r.chatMode}),i.deleteRating(c.id,r.chat.id,d)},speak(d){var M;if(!r.streamingManager)throw new Error("Please connect to the agent first");function y(){if(typeof d=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d,ssml:!1}}if(d.type==="text"&&!d.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d.input,ssml:d.ssml}}return d}const m=y();return l.track("agent-speak",m),q.update(),r.streamingManager.speak({script:m,metadata:{chat_id:(M=r.chat)==null?void 0:M.id,agent_id:c.id}})}}}function wt(e,t,a){const{getById:n}=Ce(t,a||X);return n(e)}f.AgentActivityState=x,f.AgentStatus=de,f.ChatCreationFailed=N,f.ChatMode=j,f.ChatModeDowngraded=ie,f.ChatProgress=U,f.ConnectionState=E,f.ConnectivityState=K,f.DataChannelSignalMap=O,f.DocumentType=me,f.KnowledgeType=fe,f.PlanGroup=ce,f.Providers=he,f.RateState=le,f.StreamEvents=V,f.StreamType=J,f.StreamingState=C,f.Subject=ue,f.UserPlan=oe,f.ValidationError=H,f.VideoType=Z,f.VoiceAccess=we,f.WsError=se,f.createAgentManager=ht,f.getAgent=wt,f.mapVideoType=ge,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(f,I){typeof exports=="object"&&typeof module<"u"?I(exports):typeof define=="function"&&define.amd?define(["exports"],I):(f=typeof globalThis<"u"?globalThis:f||self,I(f.index={}))})(this,function(f){"use strict";var ht=Object.defineProperty;var wt=(f,I,F)=>I in f?ht(f,I,{enumerable:!0,configurable:!0,writable:!0,value:F}):f[I]=F;var Y=(f,I,F)=>(wt(f,typeof I!="symbol"?I+"":I,F),F);class I extends Error{constructor({kind:r,description:a,error:o}){super(JSON.stringify({kind:r,description:a}));Y(this,"kind");Y(this,"description");Y(this,"error");this.kind=r,this.description=a,this.error=o}}class F extends I{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class re extends I{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends I{constructor(r,a){super({kind:"ValidationError",description:r});Y(this,"key");this.key=a}}class ae extends I{constructor(t){super({kind:"WSError",description:t})}}var ie=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(ie||{}),se=(e=>(e.TRIAL="deid-trial",e.PRO="deid-pro",e.ENTERPRISE="deid-enterprise",e.LITE="deid-lite",e.ADVANCED="deid-advanced",e.BUILD="deid-api-build",e.LAUNCH="deid-api-launch",e.SCALE="deid-api-scale",e))(se||{}),oe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(oe||{}),ce=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(ce||{}),j=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(j||{}),K=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(K||{}),de=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(de||{}),le=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(le||{}),ue=(e=>(e.Pdf="pdf",e.Text="text",e.Html="html",e.Word="word",e.Json="json",e.Markdown="markdown",e.Csv="csv",e.Excel="excel",e.Powerpoint="powerpoint",e.Archive="archive",e.Image="image",e.Audio="audio",e.Video="video",e))(ue||{}),G=(e=>(e.Clip="clip",e.Talk="talk",e))(G||{});const fe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var y=(e=>(e.Start="START",e.Stop="STOP",e))(y||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),x=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(x||{});const Z={"stream/started":"START","stream/done":"STOP"};var V=(e=>(e.ChatAnswer="chat/answer",e.ChatPartial="chat/partial",e.StreamDone="stream/done",e.StreamStarted="stream/started",e.StreamFailed="stream/error",e.StreamReady="stream/ready",e.StreamCreated="stream/created",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(V||{}),M=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(M||{}),N=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(N||{}),me=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(me||{}),ge=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ge||{});const Ie=45*1e3,Te="X-Playground-Chat",X="https://api.d-id.com",je="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",he=e=>new Promise(t=>setTimeout(t,e)),Q=()=>Math.random().toString(16).slice(2);function Pe(e,t){let r;return{promise:new Promise((o,s)=>{r=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function O(e,t){const r={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let a;for(let o=1;o<=r.limit;o++)try{if(!r.timeout)return await e();const{promise:s,clear:n}=Pe(r.timeout,r.timeoutErrorMessage),i=e().finally(n);return await Promise.race([i,s])}catch(s){if(a=s,!r.shouldRetryFn(s)||o>=r.limit)throw s;await he(r.delayMs),r.onRetry(s)}throw a}function we(){let e=window.localStorage.getItem("did_external_key_id");return e||(e=Math.random().toString(16).slice(2),window.localStorage.setItem("did_external_key_id",e)),e}let Ae=Q();function ye(e){if(e.type==="bearer")return`Bearer ${e.token}`;if(e.type==="basic")return`Basic ${btoa(`${e.username}:${e.password}`)}`;if(e.type==="key")return`Client-Key ${e.clientKey}.${we()}_${Ae}`;throw new Error(`Unknown auth type: ${e}`)}const Be=e=>O(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ee(e,t=X,r){const a=async(o,s)=>{const{skipErrorHandler:n,...i}=s||{},c=await Be(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:ye(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const m=new Error(l);throw r&&!n&&r(m,{url:o,options:i,headers:c.headers}),m}return c.json()};return{get(o,s){return a(o,{...s,method:"GET"})},post(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"POST"})},delete(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,n){return a(o,{...n,body:JSON.stringify(s),method:"PATCH"})}}}function pe(e,t=X,r){const a=ee(e,`${t}/agents`,r);return{create(o,s){return a.post("/",o,s)},getAgents(o,s){return a.get(`/${o?`?tag=${o}`:""}`,s).then(n=>n??[])},getById(o,s){return a.get(`/${o}`,s)},delete(o,s){return a.delete(`/${o}`,void 0,s)},update(o,s,n){return a.patch(`/${o}`,s,n)},newChat(o,s,n){return a.post(`/${o}/chat`,s,n)},chat(o,s,n,i){return a.post(`/${o}/chat/${s}`,n,i)},createRating(o,s,n,i){return a.post(`/${o}/chat/${s}/ratings`,n,i)},updateRating(o,s,n,i,c){return a.patch(`/${o}/chat/${s}/ratings/${n}`,i,c)},deleteRating(o,s,n,i){return a.delete(`/${o}/chat/${s}/ratings/${n}`,i)},getSTTToken(o,s){return a.get(`/${o}/stt-token`,s)}}}const ve=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function $e(e){var o,s,n,i;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",r=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},a=e.presenter;return{$os:`${r()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:ve(a),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(i=(n=e.presenter)==null?void 0:n.voice)==null?void 0:i.type}}}const Le=e=>e.reduce((t,r)=>t+r,0),ze=e=>Le(e)/e.length;function Fe(e,t,r){var c,l,m;const{event:a,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(l=o==null?void 0:o.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(m=t==null?void 0:t.presenter)==null?void 0:m.stitch:void 0,...r}}let te={};const Ne="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Je(e){var s,n,i,c,l,m;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||we(),agentId:e.agent.id,agentType:ve(r),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:a==null?void 0:a.role,personality:a==null?void 0:a.personality,instructions:(i=e.agent.llm)==null?void 0:i.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(m=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:m.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(g){const D={};if(g&&typeof g!="object")throw new Error("properties must be a flat json object");for(let p in g)(typeof g[p]=="string"||typeof g[p]=="number")&&(D[p]=g[p]);this.additionalProperties={...this.additionalProperties,...D}},async track(g,D){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...R}=D||{},S={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...R,...o,source:t,time:Date.now(),$insert_id:this.getRandom(),origin:window.location.href,"Screen Height":window.screen.height||window.innerWidth,"Screen Width":window.screen.width||window.innerHeight,"User Agent":navigator.userAgent}}])})};try{return await fetch(Ne,S).then(_=>_.json())}catch(_){return console.error(_)}},linkTrack(g,D,p,R){te[g]||(te[g]={events:{},resolvedDependencies:[]}),R.includes(p)||R.push(p);const S=te[g];if(S.events[p]={props:D},S.resolvedDependencies.push(p),R.every(B=>S.resolvedDependencies.includes(B))){const B=R.reduce((d,h)=>S.events[h]?{...d,...S.events[h].props}:d,{});this.track(g,B),S.resolvedDependencies=S.resolvedDependencies.filter(d=>!R.includes(d)),R.forEach(d=>{delete S.events[d]})}}}}function We(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const J=We();function Ce(e){return e===j.Playground?{headers:{[Te]:"true"}}:{}}async function ke(e,t,r,a,o=!1,s){try{return!s&&a!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},Ce(a)),r.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:a})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??a}}catch(n){try{const i=JSON.parse(n.message);if((i==null?void 0:i.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(i){console.error("Error parsing the error message:",i)}throw new Error("Cannot create new chat")}}function Ue(e){return e&&e.length>0?e:[]}function He(e){return new Promise((t,r)=>{const{callbacks:a,host:o,auth:s}=e,{onMessage:n=null,onOpen:i=null,onClose:c=null,onError:l=null}=a||{},m=new WebSocket(`${o}?authorization=${ye(s)}`);m.onmessage=n,m.onclose=c,m.onerror=g=>{console.error(g),l==null||l("Websocket failed to connect",g),r(g)},m.onopen=g=>{i==null||i(g),t(m)}})}async function Ke(e){const{retries:t=1}=e;let r=null;for(let a=0;(r==null?void 0:r.readyState)!==WebSocket.OPEN;a++)try{r=await He(e)}catch(o){if(a===t)throw o;await he(a*500)}return r}async function qe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],o=await Ke({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ae(s))},onMessage(s){const n=JSON.parse(s.data);a.forEach(i=>i(n.event,n))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>a.push(s)}}function xe(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Ve(e,t,r,a,o){const s=a.messages[a.messages.length-1];if(!(e===K.Partial||e===K.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:n,sequence:i}=t;e===K.Partial?r[i]=n:r.answer=n;const c=xe(r);(s.content!==c||e===K.Answer)&&(s.content=c,o==null||o([...a.messages],e))}function Xe(e,t,r,a,o){let s={};return{clearQueue:()=>s={},onMessage:(n,i)=>{var c,l;if("content"in i)Ve(n,i,s,t,r.callbacks.onNewMessage),n===K.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const m=V,g=[m.StreamVideoDone,m.StreamVideoError,m.StreamVideoRejected],D=[m.StreamFailed,m.StreamVideoError,m.StreamVideoRejected],p=Fe(i,a,{mode:t.chatMode});if(n=n,n===m.StreamVideoCreated)e.linkTrack("agent-video",p,m.StreamVideoCreated,["start"]);else if(g.includes(n)){const R=n.split("/")[1];D.includes(n)?e.track("agent-video",{...p,event:R}):e.linkTrack("agent-video",{...p,event:R},n,["done"])}D.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:i})),i.event===m.StreamDone&&o()}}}}function Ye(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);return{createStream(s){return o.post("/streams",{output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,fluent:s.fluent})},startConnection(s,n,i){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n})},addIceCandidate(s,n,i){return o.post(`/streams/${s}/ice`,{session_id:i,...n})},sendStreamRequest(s,n,i){return o.post(`/streams/${s}`,{session_id:n,...i})},close(s,n){return o.delete(`/streams/${s}`,{session_id:n})}}}function Qe(e,t,r,a){const o=ee(e,`${t}/agents/${r}`,a);return{createStream(s,n){return o.post("/streams",{driver_url:s.driver_url,face:s.face,config:s.config,output_resolution:s.output_resolution,compatibility_mode:s.compatibility_mode,stream_warmup:s.stream_warmup,session_timeout:s.session_timeout,fluent:s.fluent},n)},startConnection(s,n,i,c){return o.post(`/streams/${s}/sdp`,{session_id:i,answer:n},c)},addIceCandidate(s,n,i,c){return o.post(`/streams/${s}/ice`,{session_id:i,...n},c)},sendStreamRequest(s,n,i,c){return o.post(`/streams/${s}`,{session_id:n,...i},c)},close(s,n,i){return o.delete(`/streams/${s}`,{session_id:n},i)}}}function Ge(e,t,r){const a=(t.timestamp-e.timestamp)/1e3;return{duration:a,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/a),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/a,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:r}}function Ze(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=t,o=[];return t.freezeCount>0&&o.push("freeze"),t.framesPerSecond<21&&o.push("low fps"),t.framesDropped>0&&o.push("frames dropped"),t.packetsLost>0&&o.push("packet loss"),{...a,causes:o}})}function Oe(e){let t="";for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,timestamp:r.timestamp,bytesReceived:r.bytesReceived,packetsReceived:r.packetsReceived,packetsLost:r.packetsLost,framesDropped:r.framesDropped,framesDecoded:r.framesDecoded,jitter:r.jitter,jitterBufferDelay:r.jitterBufferDelay,jitterBufferEmittedCount:r.jitterBufferEmittedCount,avgJitterDelayInInterval:r.jitterBufferDelay/r.jitterBufferEmittedCount,frameWidth:r.frameWidth,frameHeight:r.frameHeight,framesPerSecond:r.framesPerSecond,freezeCount:r.freezeCount,freezeDuration:r.totalFreezesDuration};return{}}function et(e,t,r){const a=e.map((i,c)=>c===0?r?{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived-r.bytesReceived,bitrate:(i.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-r.packetsReceived,packetsLost:i.packetsLost-r.packetsLost,framesDropped:i.framesDropped-r.framesDropped,framesDecoded:i.framesDecoded-r.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-r.jitterBufferDelay)/(i.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-r.freezeCount,freezeDuration:i.freezeDuration-r.freezeDuration}:{timestamp:i.timestamp,duration:0,bytesReceived:i.bytesReceived,bitrate:i.bytesReceived*8/(t/1e3),packetsReceived:i.packetsReceived,packetsLost:i.packetsLost,framesDropped:i.framesDropped,framesDecoded:i.framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount,avgJitterDelayInInterval:i.jitterBufferDelay/i.jitterBufferEmittedCount,framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount,freezeDuration:i.freezeDuration}:{timestamp:i.timestamp,duration:t*c/1e3,bytesReceived:i.bytesReceived-e[c-1].bytesReceived,bitrate:(i.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[c-1].packetsReceived,packetsLost:i.packetsLost-e[c-1].packetsLost,framesDropped:i.framesDropped-e[c-1].framesDropped,framesDecoded:i.framesDecoded-e[c-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[c-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[c-1].freezeCount,freezeDuration:i.freezeDuration-e[c-1].freezeDuration}),o=Ze(a),s=o.reduce((i,c)=>i+(c.causes.includes("low fps")?1:0),0),n=a.map(i=>i.avgJitterDelayInInterval);return{webRTCStats:{anomalies:o,aggregateReport:Ge(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:ze(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ne=100,tt=Math.max(Math.ceil(400/ne),1),nt=.25,rt=.28;function at(){let e=0,t,r,a=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const n=s.jitterBufferDelay,i=s.jitterBufferEmittedCount;if(r&&i>r){const m=n-t,g=i-r;a=m/g}t=n,r=i;const c=s.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function it(e,t,r,a,o,s=!1){let n=[],i,c=0,l=!1,m=q.Unknown,g=q.Unknown,D=0,p=0;const R=at();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:_,avgJitterDelayInInterval:B,freezeCount:d}=R(S),h=Oe(S);if(_)c=0,D=d-p,g=B<nt?q.Strong:B>rt&&D>1?q.Weak:m,g!==m&&(o==null||o(g),m=g,p+=D,D=0),l||(a==null||a(y.Start),i=n[n.length-1],n=[],l=!0),n.push(h);else if(l&&(c++,c>=tt)){const C=et(n,ne,i);a==null||a(y.Stop,C),t()||r(),l=!1}},ne)}let De=!1;const W=(e,t)=>De&&console.log(e,t),st=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Re(e){switch(e){case"connected":return M.Connected;case"checking":return M.Connecting;case"failed":return M.Fail;case"new":return M.New;case"closed":return M.Closed;case"disconnected":return M.Disconnected;case"completed":return M.Completed;default:return M.New}}function ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===y.Start&&t===y.Start?r==null||r(y.Start):e===y.Stop&&t===y.Stop&&(r==null||r(y.Stop,a))}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:o}){e===y.Start?r==null||r(y.Start):e===y.Stop&&(r==null||r(y.Stop,o)),t===y.Start?a==null||a(x.Talking):t===y.Stop&&(a==null||a(x.Idle))}function Se({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:o,report:s}){o===N.Legacy?ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:s}):o===N.Fluent&&ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s})}async function dt(e,t,{debug:r=!1,callbacks:a,auth:o,baseURL:s=X}){De=r;let n=!1,i=!1,c=y.Stop,l=y.Stop,m=q.Unknown;const{startConnection:g,sendStreamRequest:D,close:p,createStream:R,addIceCandidate:S}=t.videoType===G.Clip?Ye(o,s,e,a.onError):Qe(o,s,e,a.onError),{id:_,offer:B,ice_servers:d,session_id:h,fluent:C}=await R(t),w=new st({iceServers:d}),b=w.createDataChannel("JanusDataChannel");if(!h)throw new Error("Could not create session_id");const k=C?N.Fluent:N.Legacy,P=t.stream_warmup&&!C,L=()=>n,$=()=>{var u;n=!0,i&&((u=a.onConnectionStateChange)==null||u.call(a,M.Connected))},E=it(w,L,$,(u,v)=>Se({statsSignal:l=u,dataChannelSignal:k===N.Legacy?c:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:v,streamType:k}),u=>{var v;return(v=a.onConnectivityStateChange)==null?void 0:v.call(a,m)},P);w.onicecandidate=u=>{var v;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?S(_,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},h):S(_,{candidate:null},h)}catch(A){(v=a.onError)==null||v.call(a,A,{streamId:_})}},b.onopen=()=>{i=!0,(!P||n)&&$()},b.onmessage=u=>{u.data in Z&&(c=Z[u.data],Se({statsSignal:k===N.Legacy?l:void 0,dataChannelSignal:c,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:k}))},w.oniceconnectionstatechange=()=>{var v;W("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const u=Re(w.iceConnectionState);u!==M.Connected&&((v=a.onConnectionStateChange)==null||v.call(a,u))},w.ontrack=u=>{var v;W("peerConnection.ontrack",u),(v=a.onSrcObjectReady)==null||v.call(a,u.streams[0])},await w.setRemoteDescription(B),W("set remote description OK");const T=await w.createAnswer();return W("create answer OK"),await w.setLocalDescription(T),W("set local description OK"),await g(_,T,h),W("start connection OK"),{speak(u){return D(_,h,u)},async disconnect(){var u,v,A;if(_){const z=Re(w.iceConnectionState);if(w){if(z===M.New){(u=a.onVideoStateChange)==null||u.call(a,y.Stop),clearInterval(E);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{z===M.Connected&&await p(_,h).catch(U=>{})}catch(U){W("Error on close stream connection",U)}(v=a.onVideoStateChange)==null||v.call(a,y.Stop),(A=a.onAgentActivityStateChange)==null||A.call(a,x.Idle),clearInterval(E)}},sessionId:h,streamId:_,streamType:k}}function lt(e,t){const{streamOptions:r}=t??{};return{videoType:fe(e.presenter.type),output_resolution:r==null?void 0:r.outputResolution,session_timeout:r==null?void 0:r.sessionTimeout,stream_warmup:r==null?void 0:r.streamWarmup,compatibility_mode:r==null?void 0:r.compatibilityMode,fluent:r==null?void 0:r.fluent}}function Ee(e,t,r,a,o){J.get()>0&&(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:J.get(!0),"stream-type":o},"start",[V.StreamVideoCreated]):e===y.Stop&&a.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":o,...r},"done",[V.StreamVideoDone]))}function ut(e,t,r){return J.reset(),new Promise(async(a,o)=>{try{const s=await dt(e.id,lt(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var i,c;(c=(i=t.callbacks).onConnectionStateChange)==null||c.call(i,n),n===M.Connected&&a(s)},onVideoStateChange:(n,i)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Ee(n,e,i,r,s.streamType)},onAgentActivityStateChange:n=>{var i,c;(c=(i=t.callbacks).onAgentActivityStateChange)==null||c.call(i,n),Ee(n===x.Talking?y.Start:y.Stop,e,void 0,r,s.streamType)}}})}catch(s){o(s)}})}async function ft(e,t,r,a,o){var c,l,m,g;const{chat:s,chatMode:n}=await ke(e,r,a,t.mode,t.persistentChat,o);if(n&&n!==t.mode&&(t.mode=n,(l=(c=t.callbacks).onModeChange)==null||l.call(c,n),n===j.TextOnly))return(g=(m=t.callbacks).onError)==null||g.call(m,new re(n)),{chat:s};const i=await ut(e,t,a);return{chat:s,streamingManager:i}}async function mt(e,t){var S,_,B;let r=!0;const a=t.mixpanelKey||be,o=t.wsURL||je,s=t.baseURL||X,n={messages:[],chatMode:t.mode||j.Functional},i=pe(t.auth,s,t.callbacks.onError),c=await i.getById(e),l=Je({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:m,clearQueue:g}=Xe(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=Ue(t.initialMessages),(_=(S=t.callbacks).onNewMessage)==null||_.call(S,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...$e(c)});async function D(d){var P,L,$,E,T,u,v;(L=(P=t.callbacks).onConnectionStateChange)==null||L.call(P,M.Connecting),J.reset(),d&&!r&&(delete n.chat,(E=($=t.callbacks).onNewMessage)==null||E.call($,[...n.messages],"answer"));const h=t.mode===j.DirectPlayback?Promise.resolve(void 0):qe(t.auth,o,{onMessage:m,onError:t.callbacks.onError}),C=O(()=>ft(c,t,i,l,n.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:A=>(A==null?void 0:A.message)!=="Could not connect"&&A.status!==429,delayMs:1e3}).catch(A=>{var z,U;throw R(j.Maintenance),(U=(z=t.callbacks).onConnectionStateChange)==null||U.call(z,M.Fail),A}),[w,{streamingManager:b,chat:k}]=await Promise.all([h,C]);k&&k.id!==((T=n.chat)==null?void 0:T.id)&&((v=(u=t.callbacks).onNewChat)==null||v.call(u,k.id)),n.streamingManager=b,n.socketManager=w,n.chat=k,r=!1,R((k==null?void 0:k.chat_mode)??t.mode??j.Functional)}async function p(){var d,h,C,w;(d=n.socketManager)==null||d.disconnect(),await((h=n.streamingManager)==null?void 0:h.disconnect()),delete n.streamingManager,delete n.socketManager,(w=(C=t.callbacks).onConnectionStateChange)==null||w.call(C,M.Disconnected)}async function R(d){var h,C;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==j.Functional&&await p(),(C=(h=t.callbacks).onModeChange)==null||C.call(h,d))}return{agent:c,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:((B=c.knowledge)==null?void 0:B.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:R,enrichAnalytics:l.enrich,async connect(){var d;await D(!0),l.track("agent-chat",{event:"connect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async reconnect(){var d;await p(),await D(!1),l.track("agent-chat",{event:"reconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async disconnect(){var d;await p(),l.track("agent-chat",{event:"disconnect",chatId:(d=n.chat)==null?void 0:d.id,agentId:c.id,mode:n.chatMode})},async chat(d){var b,k,P,L,$;const h=()=>{if(t.mode===j.DirectPlayback)throw new H("Direct playback is enabled, chat is disabled");if(d.length>=800)throw new H("Message cannot be more than 800 characters");if(d.length===0)throw new H("Message cannot be empty");if(n.chatMode===j.Maintenance)throw new H("Chat is in maintenance mode");if(![j.TextOnly,j.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new H("Streaming manager is not initialized");if(!n.chat)throw new H("Chat is not initialized")}},C=async()=>{var E,T;if(!n.chat){const u=await ke(c,i,l,n.chatMode,t.persistentChat);if(!u.chat)throw new F(n.chatMode,!!t.persistentChat);n.chat=u.chat,(T=(E=t.callbacks).onNewChat)==null||T.call(E,n.chat.id)}return n.chat.id},w=async(E,T)=>O(()=>{var u,v;return i.chat(c.id,T,{chatMode:n.chatMode,streamId:(u=n.streamingManager)==null?void 0:u.streamId,sessionId:(v=n.streamingManager)==null?void 0:v.sessionId,messages:E.map(({matches:A,...z})=>z)},{...Ce(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var z,U,Me,_e;const v=(z=u==null?void 0:u.message)==null?void 0:z.includes("missing or invalid session_id");return!((U=u==null?void 0:u.message)==null?void 0:U.includes("Stream Error"))&&!v?((_e=(Me=t.callbacks).onError)==null||_e.call(Me,u),!1):!0},onRetry:async()=>{await p(),await D(!1)}});try{g(),h(),n.messages.push({id:Q(),role:"user",content:d,created_at:new Date(J.update()).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"user");const E=await C(),T=await w([...n.messages],E);return n.messages.push({id:Q(),role:"assistant",content:T.result||"",created_at:new Date().toISOString(),context:T.context,matches:T.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),T.result&&((L=(P=t.callbacks).onNewMessage)==null||L.call(P,[...n.messages],"answer"),l.track("agent-message-received",{latency:J.get(!0),mode:n.chatMode,messages:n.messages.length})),T}catch(E){throw(($=n.messages[n.messages.length-1])==null?void 0:$.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),E}},rate(d,h,C){var k,P,L,$;const w=n.messages.find(E=>E.id===d);if(n.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const b=((k=w.matches)==null?void 0:k.map(E=>[E.document_id,E.id]))??[];return l.track("agent-rate",{event:C?"update":"create",thumb:h===1?"up":"down",knowledge_id:((P=c.knowledge)==null?void 0:P.id)??"",mode:n.chatMode,matches:b,score:h}),C?i.updateRating(c.id,n.chat.id,C,{knowledge_id:((L=c.knowledge)==null?void 0:L.id)??"",message_id:d,matches:b,score:h}):i.createRating(c.id,n.chat.id,{knowledge_id:(($=c.knowledge)==null?void 0:$.id)??"",message_id:d,matches:b,score:h})},deleteRate(d){var h;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(h=n.chat)==null?void 0:h.id,id:d,mode:n.chatMode}),i.deleteRating(c.id,n.chat.id,d)},speak(d){var w,b,k,P;if(!n.streamingManager)throw new Error("Please connect to the agent first");function h(){if(typeof d=="string"){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d,ssml:!1}}if(d.type==="text"&&!d.provider){if(!c.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:c.presenter.voice,input:d.input,ssml:d.ssml}}return d}const C=h();return l.track("agent-speak",C),J.update(),(w=n.chat)!=null&&w.id&&C.type==="text"&&(n.messages.push({id:Q(),role:"assistant",content:C.input,created_at:new Date(J.get(!0)).toISOString()}),(k=(b=t.callbacks).onNewMessage)==null||k.call(b,[...n.messages],"answer")),n.streamingManager.speak({script:C,metadata:{chat_id:(P=n.chat)==null?void 0:P.id,agent_id:c.id}})}}}function gt(e,t,r){const{getById:a}=pe(t,r||X);return a(e)}f.AgentActivityState=x,f.AgentStatus=oe,f.ChatCreationFailed=F,f.ChatMode=j,f.ChatModeDowngraded=re,f.ChatProgress=K,f.ConnectionState=M,f.ConnectivityState=q,f.DataChannelSignalMap=Z,f.DocumentType=ue,f.KnowledgeType=le,f.PlanGroup=se,f.Providers=me,f.RateState=ce,f.StreamEvents=V,f.StreamType=N,f.StreamingState=y,f.Subject=de,f.UserPlan=ie,f.ValidationError=H,f.VideoType=G,f.VoiceAccess=ge,f.WsError=ae,f.createAgentManager=mt,f.getAgent=gt,f.mapVideoType=fe,Object.defineProperty(f,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
import { StreamingManager } from '../streaming-manager';
|
|
2
2
|
import { Agent, AgentManagerOptions, AgentsAPI, Chat, CreateStreamOptions } from '../../types';
|
|
3
3
|
import { Analytics } from '../analytics/mixpanel';
|
|
4
|
-
export declare function initializeStreamAndChat(agent: Agent, options: AgentManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat
|
|
4
|
+
export declare function initializeStreamAndChat(agent: Agent, options: AgentManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat): Promise<{
|
|
5
5
|
chat?: Chat;
|
|
6
6
|
streamingManager?: StreamingManager<CreateStreamOptions>;
|
|
7
7
|
}>;
|
|
@@ -1,3 +1,2 @@
|
|
|
1
|
-
import {
|
|
2
|
-
export declare function
|
|
3
|
-
export declare function getInitialMessages(content: string, initialMessages?: Message[]): Message[];
|
|
1
|
+
import { Message } from '../../types';
|
|
2
|
+
export declare function getInitialMessages(initialMessages?: Message[]): Message[];
|
|
@@ -1,4 +1,4 @@
|
|
|
1
1
|
/// <reference types="node" />
|
|
2
|
-
import {
|
|
2
|
+
import { ConnectivityState, StreamingState } from '../../../types';
|
|
3
3
|
import { VideoRTCStatsReport } from './report';
|
|
4
|
-
export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, onConnectivityStateChange?: (state: ConnectivityState) => void, warmup?: boolean
|
|
4
|
+
export declare function pollStats(peerConnection: RTCPeerConnection, getIsConnected: () => boolean, onConnected: () => void, onVideoStateChange?: (state: StreamingState, statsReport?: VideoRTCStatsReport) => void, onConnectivityStateChange?: (state: ConnectivityState) => void, warmup?: boolean): NodeJS.Timeout;
|
|
@@ -112,10 +112,10 @@ interface StreamOptions {
|
|
|
112
112
|
*/
|
|
113
113
|
outputResolution?: number;
|
|
114
114
|
/**
|
|
115
|
-
* Whether to
|
|
116
|
-
*
|
|
115
|
+
* Whether to request fluent stream.
|
|
116
|
+
* @default false
|
|
117
117
|
*/
|
|
118
|
-
|
|
118
|
+
fluent?: boolean;
|
|
119
119
|
}
|
|
120
120
|
export interface AgentManagerOptions {
|
|
121
121
|
auth: Auth;
|
|
@@ -57,11 +57,11 @@ export interface ManagerCallbacks {
|
|
|
57
57
|
export type ManagerCallbackKeys = keyof ManagerCallbacks;
|
|
58
58
|
export interface TalkStreamOptions extends CreateTalkStreamRequest {
|
|
59
59
|
videoType: VideoType.Talk;
|
|
60
|
-
|
|
60
|
+
fluent?: boolean;
|
|
61
61
|
}
|
|
62
62
|
export interface ClipStreamOptions extends CreateClipStreamRequest {
|
|
63
63
|
videoType: VideoType.Clip;
|
|
64
|
-
|
|
64
|
+
fluent?: boolean;
|
|
65
65
|
}
|
|
66
66
|
export type CreateStreamOptions = TalkStreamOptions | ClipStreamOptions;
|
|
67
67
|
export type PayloadType<T> = T extends TalkStreamOptions ? SendTalkStreamPayload : T extends ClipStreamOptions ? SendClipStreamPayload : never;
|