@d-id/client-sdk 1.1.0-beta.11 → 1.1.0-beta.12
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 +586 -554
- package/dist/index.umd.cjs +1 -1
- package/dist/src/types/stream/stream.d.ts +0 -1
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(m,T){typeof exports=="object"&&typeof module<"u"?T(exports):typeof define=="function"&&define.amd?define(["exports"],T):(m=typeof globalThis<"u"?globalThis:m||self,T(m.index={}))})(this,function(m){"use strict";var vt=Object.defineProperty;var kt=(m,T,N)=>T in m?vt(m,T,{enumerable:!0,configurable:!0,writable:!0,value:N}):m[T]=N;var Q=(m,T,N)=>(kt(m,typeof T!="symbol"?T+"":T,N),N);class T extends Error{constructor({kind:a,description:n,error:o}){super(JSON.stringify({kind:a,description:n}));Q(this,"kind");Q(this,"description");Q(this,"error");this.kind=a,this.description=n,this.error=o}}class N extends T{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ne extends T{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class W extends T{constructor(a,n){super({kind:"ValidationError",description:a});Q(this,"key");this.key=n}}class ae extends T{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||{}),I=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(I||{}),U=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(U||{}),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||{}),x=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(x||{}),q=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(q||{});const Z={"stream/started":"START","stream/done":"STOP"};var K=(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))(K||{}),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||{}),F=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(F||{}),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",be="wss://notifications.d-id.com",je="79f81a83a67430be2bc0fd61042b8faa",he=e=>new Promise(t=>setTimeout(t,e)),V=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},Pe=e=>[I.TextOnly,I.Playground,I.Maintenance].includes(e);function Ae(e,t){let a;return{promise:new Promise((o,s)=>{a=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(a)}}async function O(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}=Ae(a.timeout,a.timeoutErrorMessage),c=e().finally(r);return await Promise.race([c,s])}catch(s){if(n=s,!a.shouldRetryFn(s)||o>=a.limit)throw s;await he(a.delayMs),a.onRetry(s)}throw n}function we(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=V();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Be=V();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()}_${Be}`;throw new Error(`Unknown auth type: ${e}`)}const $e=e=>O(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ee(e,t=X,a){const n=async(o,s)=>{const{skipErrorHandler:r,...c}=s||{},i=await $e(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...c,headers:{...c.headers,Authorization:ye(e),"Content-Type":"application/json"}}));if(!i.ok){let d=await i.text().catch(()=>`Failed to fetch with status ${i.status}`);const f=new Error(d);throw a&&!r&&a(f,{url:o,options:c,headers:i.headers}),f}return i.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 pe(e,t=X,a){const n=ee(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,c){return n.post(`/${o}/chat/${s}`,r,c)},createRating(o,s,r,c){return n.post(`/${o}/chat/${s}/ratings`,r,c)},updateRating(o,s,r,c,i){return n.patch(`/${o}/chat/${s}/ratings/${r}`,c,i)},deleteRating(o,s,r,c){return n.delete(`/${o}/chat/${s}/ratings/${r}`,c)},getSTTToken(o,s){return n.get(`/${o}/stt-token`,s)}}}const ve=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Le(e){var o,s,r,c;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"},n=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:ve(n),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(c=(r=e.presenter)==null?void 0:r.voice)==null?void 0:c.type}}}const ze=e=>e.reduce((t,a)=>t+a,0),ke=e=>ze(e)/e.length;function Fe(e,t,a){var i,d,f;const{event:n,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:r}=((i=t==null?void 0:t.presenter)==null?void 0:i.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(d=o==null?void 0:o.script)==null?void 0:d.provider,language:r}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(f=t==null?void 0:t.presenter)==null?void 0:f.stitch:void 0,...a}}let te={};const Ne="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Je(e){var s,r,c,i,d,f;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||we(),agentId:e.agent.id,agentType:ve(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:(c=e.agent.llm)==null?void 0:c.instructions},temperature:(i=e.agent.llm)==null?void 0:i.temperature,knowledgeSource:n==null?void 0:n.knowledge_source,starterQuestionsCount:(f=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:f.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:V,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($=>S.resolvedDependencies.includes($))){const $=R.reduce((l,h)=>S.events[h]?{...l,...S.events[h].props}:l,{});this.track(g,$),S.resolvedDependencies=S.resolvedDependencies.filter(l=>!R.includes(l)),R.forEach(l=>{delete S.events[l]})}}}}function We(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const z=We();function Ce(e){return e===I.Playground?{headers:{[Te]:"true"}}:{}}async function De(e,t,a,n,o=!1,s){try{return!s&&n!==I.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},Ce(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 c=JSON.parse(r.message);if((c==null?void 0:c.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(c){console.error("Error parsing the error message:",c)}throw new Error("Cannot create new chat")}}function Ue(e){return e&&e.length>0?e:[]}function Ke(e){return new Promise((t,a)=>{const{callbacks:n,host:o,auth:s}=e,{onMessage:r=null,onOpen:c=null,onClose:i=null,onError:d=null}=n||{},f=new WebSocket(`${o}?authorization=${ye(s)}`);f.onmessage=r,f.onclose=i,f.onerror=g=>{console.error(g),d==null||d("Websocket failed to connect",g),a(g)},f.onopen=g=>{c==null||c(g),t(f)}})}async function He(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 he(n*500)}return a}async function xe(e,t,a){const n=a!=null&&a.onMessage?[a.onMessage]:[],o=await He({auth:e,host:t,callbacks:{onError:s=>{var r;return(r=a.onError)==null?void 0:r.call(a,new ae(s))},onMessage(s){const r=JSON.parse(s.data);n.forEach(c=>c(r.event,r))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>n.push(s)}}function qe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function Ve(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:c}=t;e===U.Partial?a[c]=r:a.answer=r;const i=qe(a);(s.content!==i||e===U.Answer)&&(s.content=i,o==null||o([...n.messages],e))}function Xe(e,t,a,n,o){let s={};return{clearQueue:()=>s={},onMessage:(r,c)=>{var i,d;if("content"in c)Ve(r,c,s,t,a.callbacks.onNewMessage),r===U.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const f=K,g=[f.StreamVideoDone,f.StreamVideoError,f.StreamVideoRejected],D=[f.StreamFailed,f.StreamVideoError,f.StreamVideoRejected],p=Fe(c,n,{mode:t.chatMode});if(r=r,r===f.StreamVideoCreated)e.linkTrack("agent-video",p,f.StreamVideoCreated,["start"]);else if(g.includes(r)){const R=r.split("/")[1];D.includes(r)?e.track("agent-video",{...p,event:R}):e.linkTrack("agent-video",{...p,event:R},r,["done"])}D.includes(r)&&((d=(i=a.callbacks).onError)==null||d.call(i,new Error(`Stream failed with event ${r}`),{data:c})),c.event===f.StreamDone&&o()}}}}function Ye(e,t,a,n){const o=ee(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,fluent:s.fluent})},startConnection(s,r,c){return o.post(`/streams/${s}/sdp`,{session_id:c,answer:r})},addIceCandidate(s,r,c){return o.post(`/streams/${s}/ice`,{session_id:c,...r})},sendStreamRequest(s,r,c){return o.post(`/streams/${s}`,{session_id:r,...c})},close(s,r){return o.delete(`/streams/${s}`,{session_id:r})}}}function Qe(e,t,a,n){const o=ee(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,fluent:s.fluent},r)},startConnection(s,r,c,i){return o.post(`/streams/${s}/sdp`,{session_id:c,answer:r},i)},addIceCandidate(s,r,c,i){return o.post(`/streams/${s}/ice`,{session_id:c,...r},i)},sendStreamRequest(s,r,c,i){return o.post(`/streams/${s}`,{session_id:r,...c},i)},close(s,r,c){return o.delete(`/streams/${s}`,{session_id:r},c)}}}function Ge(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 Ze(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 Oe(e){let t="",a=0;for(const n of e.values())if(n&&n.type==="codec"&&n.mimeType.startsWith("video")&&(t=n.mimeType.split("/")[1]),n&&n.type==="candidate-pair"&&(a=n.currentRoundTripTime),n&&n.type==="inbound-rtp"&&n.kind==="video")return{codec:t,rtt:a,timestamp:n.timestamp,bytesReceived:n.bytesReceived,packetsReceived:n.packetsReceived,packetsLost:n.packetsLost,framesDropped:n.framesDropped,framesDecoded:n.framesDecoded,jitter:n.jitter,jitterBufferDelay:n.jitterBufferDelay,jitterBufferEmittedCount:n.jitterBufferEmittedCount,avgJitterDelayInInterval:n.jitterBufferDelay/n.jitterBufferEmittedCount,frameWidth:n.frameWidth,frameHeight:n.frameHeight,framesPerSecond:n.framesPerSecond,freezeCount:n.freezeCount,freezeDuration:n.totalFreezesDuration};return{}}function et(e,t,a){const n=e.map((i,d)=>d===0?a?{timestamp:i.timestamp,duration:0,rtt:i.rtt,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,rtt:i.rtt,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*d/1e3,rtt:i.rtt,bytesReceived:i.bytesReceived-e[d-1].bytesReceived,bitrate:(i.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[d-1].packetsReceived,packetsLost:i.packetsLost-e[d-1].packetsLost,framesDropped:i.framesDropped-e[d-1].framesDropped,framesDecoded:i.framesDecoded-e[d-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[d-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[d-1].freezeCount,freezeDuration:i.freezeDuration-e[d-1].freezeDuration}),o=Ze(n),s=o.reduce((i,d)=>i+(d.causes.includes("low fps")?1:0),0),r=n.filter(i=>!!i.avgJitterDelayInInterval).map(i=>i.avgJitterDelayInInterval),c=n.filter(i=>!!i.rtt).map(i=>i.rtt);return{webRTCStats:{anomalies:o,minRtt:Math.min(...c),avgRtt:ke(c),maxRtt:Math.max(...c),aggregateReport:Ge(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...r),maxJitterDelayInInterval:Math.max(...r),avgJitterDelayInInterval:ke(r)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const re=100,tt=Math.max(Math.ceil(400/re),1),rt=.25,nt=.28;function at(){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,c=s.jitterBufferEmittedCount;if(a&&c>a){const f=r-t,g=c-a;n=f/g}t=r,a=c;const i=s.framesDecoded,d=i-e>0;return e=i,{isReceiving:d,avgJitterDelayInInterval:n,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:n}}}function it(e,t,a,n,o,s=!1){let r=[],c,i=0,d=!1,f=x.Unknown,g=x.Unknown,D=0,p=0;const R=at();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:_,avgJitterDelayInInterval:$,freezeCount:l}=R(S),h=Oe(S);if(_)i=0,D=l-p,g=$<rt?x.Strong:$>nt&&D>1?x.Weak:f,g!==f&&(o==null||o(g),f=g,p+=D,D=0),d||(n==null||n(y.Start),c=r[r.length-1],r=[],d=!0),r.push(h);else if(d&&(i++,i>=tt)){const k=et(r,re,c);n==null||n(y.Stop,k),t()||a(),p=l,d=!1}},re)}let Re=!1;const J=(e,t)=>Re&&console.log(e,t),st=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Se(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:a,report:n}){e===y.Start&&t===y.Start?a==null||a(y.Start):e===y.Stop&&t===y.Stop&&(a==null||a(y.Stop,n))}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:o}){e===y.Start?a==null||a(y.Start):e===y.Stop&&(a==null||a(y.Stop,o)),t===y.Start?n==null||n(q.Talking):t===y.Stop&&(n==null||n(q.Idle))}function Ee({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,streamType:o,report:s}){o===F.Legacy?ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:s}):o===F.Fluent&&ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:n,report:s})}async function dt(e,t,{debug:a=!1,callbacks:n,auth:o,baseURL:s=X,analytics:r}){Re=a;let c=!1,i=!1,d=y.Stop,f=y.Stop;const{startConnection:g,sendStreamRequest:D,close:p,createStream:R,addIceCandidate:S}=t.videoType===G.Clip?Ye(o,s,e,n.onError):Qe(o,s,e,n.onError),{id:_,offer:$,ice_servers:l,session_id:h,fluent:k}=await R(t),w=new st({iceServers:l}),j=w.createDataChannel("JanusDataChannel");if(!h)throw new Error("Could not create session_id");const C=k?F.Fluent:F.Legacy;r.enrich({"stream-type":C});const P=t.stream_warmup&&!k,A=()=>c,L=()=>{var u;c=!0,i&&((u=n.onConnectionStateChange)==null||u.call(n,M.Connected))},E=it(w,A,L,(u,v)=>Ee({statsSignal:f=u,dataChannelSignal:C===F.Legacy?d:void 0,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,report:v,streamType:C}),u=>{var v;return(v=n.onConnectivityStateChange)==null?void 0:v.call(n,u)},P);w.onicecandidate=u=>{var v;J("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(B){(v=n.onError)==null||v.call(n,B,{streamId:_})}},j.onopen=()=>{i=!0,(!P||c)&&L()},j.onmessage=u=>{u.data in Z&&(d=Z[u.data],Ee({statsSignal:C===F.Legacy?f:void 0,dataChannelSignal:d,onVideoStateChange:n.onVideoStateChange,onAgentActivityStateChange:n.onAgentActivityStateChange,streamType:C}))},w.oniceconnectionstatechange=()=>{var v;J("peerConnection.oniceconnectionstatechange => "+w.iceConnectionState);const u=Se(w.iceConnectionState);u!==M.Connected&&((v=n.onConnectionStateChange)==null||v.call(n,u))},w.ontrack=u=>{var v;J("peerConnection.ontrack",u),(v=n.onSrcObjectReady)==null||v.call(n,u.streams[0])},await w.setRemoteDescription($),J("set remote description OK");const b=await w.createAnswer();return J("create answer OK"),await w.setLocalDescription(b),J("set local description OK"),await g(_,b,h),J("start connection OK"),{speak(u){return D(_,h,u)},async disconnect(){var u;if(_){const v=Se(w.iceConnectionState);if(w){if(v===M.New){clearInterval(E);return}w.close(),w.oniceconnectionstatechange=null,w.onnegotiationneeded=null,w.onicecandidate=null,w.ontrack=null}try{v===M.Connected&&await p(_,h).catch(B=>{})}catch(B){J("Error on close stream connection",B)}(u=n.onAgentActivityStateChange)==null||u.call(n,q.Idle),clearInterval(E)}},sessionId:h,streamId:_,streamType:C}}function lt(e,t){const{streamOptions:a}=t??{};return{videoType:fe(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function ut(e,t,a,n,o){o===F.Fluent?ft(e,t,a,n,o):gt(e,t,a,n,o)}function ft(e,t,a,n,o){e===y.Start?n.track("stream-session",{event:"start","stream-type":o}):e===y.Stop&&n.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":o,...a})}function mt(e,t,a,n){z.get()<=0||(e===y.Start?a.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":n},"start",[K.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":n},"done",[K.StreamVideoDone]))}function gt(e,t,a,n,o){z.get()<=0||(e===y.Start?n.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":o},"start",[K.StreamVideoCreated]):e===y.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,"stream-type":o,...a},"done",[K.StreamVideoDone]))}function ht(e,t,a){return z.reset(),new Promise(async(n,o)=>{try{const s=await dt(e.id,lt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:r=>{var c,i;(i=(c=t.callbacks).onConnectionStateChange)==null||i.call(c,r),r===M.Connected&&n(s)},onVideoStateChange:(r,c)=>{var i,d;(d=(i=t.callbacks).onVideoStateChange)==null||d.call(i,r),ut(r,e,c,a,s.streamType)},onAgentActivityStateChange:r=>{var c,i;(i=(c=t.callbacks).onAgentActivityStateChange)==null||i.call(c,r),mt(r===q.Talking?y.Start:y.Stop,e,a,s.streamType)}}})}catch(s){o(s)}})}async function wt(e,t,a,n,o){var i,d,f,g;const{chat:s,chatMode:r}=await De(e,a,n,t.mode,t.persistentChat,o);if(r&&r!==t.mode&&(t.mode=r,(d=(i=t.callbacks).onModeChange)==null||d.call(i,r),r===I.TextOnly))return(g=(f=t.callbacks).onError)==null||g.call(f,new ne(r)),{chat:s};const c=await ht(e,t,n);return{chat:s,streamingManager:c}}async function yt(e,t){var S,_,$;let a=!0;const n=t.mixpanelKey||je,o=t.wsURL||be,s=t.baseURL||X,r={messages:[],chatMode:t.mode||I.Functional},c=pe(t.auth,s,t.callbacks.onError),i=await c.getById(e),d=Je({token:n,agent:i,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:f,clearQueue:g}=Xe(d,r,t,i,()=>{var l;return(l=r.socketManager)==null?void 0:l.disconnect()});r.messages=Ue(t.initialMessages),(_=(S=t.callbacks).onNewMessage)==null||_.call(S,[...r.messages],"answer"),d.track("agent-sdk",{event:"loaded",...Le(i)});async function D(l){var P,A,L,E,b,u,v;(A=(P=t.callbacks).onConnectionStateChange)==null||A.call(P,M.Connecting),z.reset(),l&&!a&&(delete r.chat,(E=(L=t.callbacks).onNewMessage)==null||E.call(L,[...r.messages],"answer"));const h=t.mode===I.DirectPlayback?Promise.resolve(void 0):xe(t.auth,o,{onMessage:f,onError:t.callbacks.onError}),k=O(()=>wt(i,t,c,d,r.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:B=>(B==null?void 0:B.message)!=="Could not connect"&&B.status!==429,delayMs:1e3}).catch(B=>{var H,Y;throw R(I.Maintenance),(Y=(H=t.callbacks).onConnectionStateChange)==null||Y.call(H,M.Fail),B}),[w,{streamingManager:j,chat:C}]=await Promise.all([h,k]);C&&C.id!==((b=r.chat)==null?void 0:b.id)&&((v=(u=t.callbacks).onNewChat)==null||v.call(u,C.id)),r.streamingManager=j,r.socketManager=w,r.chat=C,a=!1,R((C==null?void 0:C.chat_mode)??t.mode??I.Functional)}async function p(){var l,h,k,w;(l=r.socketManager)==null||l.disconnect(),await((h=r.streamingManager)==null?void 0:h.disconnect()),delete r.streamingManager,delete r.socketManager,(w=(k=t.callbacks).onConnectionStateChange)==null||w.call(k,M.Disconnected)}async function R(l){var h,k;l!==r.chatMode&&(d.track("agent-mode-change",{mode:l}),r.chatMode=l,r.chatMode!==I.Functional&&await p(),(k=(h=t.callbacks).onModeChange)==null||k.call(h,l))}return{agent:i,getStreamType:()=>{var l;return(l=r.streamingManager)==null?void 0:l.streamType},starterMessages:(($=i.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>c.getSTTToken(i.id),changeMode:R,enrichAnalytics:d.enrich,async connect(){var l;await D(!0),d.track("agent-chat",{event:"connect",chatId:(l=r.chat)==null?void 0:l.id,agentId:i.id,mode:r.chatMode})},async reconnect(){var l;await p(),await D(!1),d.track("agent-chat",{event:"reconnect",chatId:(l=r.chat)==null?void 0:l.id,agentId:i.id,mode:r.chatMode})},async disconnect(){var l;await p(),d.track("agent-chat",{event:"disconnect",chatId:(l=r.chat)==null?void 0:l.id,agentId:i.id,mode:r.chatMode})},async chat(l){var j,C,P,A,L;const h=()=>{if(t.mode===I.DirectPlayback)throw new W("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new W("Message cannot be more than 800 characters");if(l.length===0)throw new W("Message cannot be empty");if(r.chatMode===I.Maintenance)throw new W("Chat is in maintenance mode");if(![I.TextOnly,I.Playground].includes(r.chatMode)){if(!r.streamingManager)throw new W("Streaming manager is not initialized");if(!r.chat)throw new W("Chat is not initialized")}},k=async()=>{var E,b;if(!r.chat){const u=await De(i,c,d,r.chatMode,t.persistentChat);if(!u.chat)throw new N(r.chatMode,!!t.persistentChat);r.chat=u.chat,(b=(E=t.callbacks).onNewChat)==null||b.call(E,r.chat.id)}return r.chat.id},w=async(E,b)=>O(()=>{var u,v;return c.chat(i.id,b,{chatMode:r.chatMode,streamId:(u=r.streamingManager)==null?void 0:u.streamId,sessionId:(v=r.streamingManager)==null?void 0:v.sessionId,messages:E.map(({matches:B,...H})=>H)},{...Ce(r.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var H,Y,Me,_e;const v=(H=u==null?void 0:u.message)==null?void 0:H.includes("missing or invalid session_id");return!((Y=u==null?void 0:u.message)==null?void 0:Y.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(),r.messages.push({id:V(),role:"user",content:l,created_at:new Date(z.update()).toISOString()}),(C=(j=t.callbacks).onNewMessage)==null||C.call(j,[...r.messages],"user");const E=await k(),b=await w([...r.messages],E);return r.messages.push({id:V(),role:"assistant",content:b.result||"",created_at:new Date().toISOString(),context:b.context,matches:b.matches}),d.track("agent-message-send",{event:"success",mode:r.chatMode,messages:r.messages.length+1}),b.result&&((A=(P=t.callbacks).onNewMessage)==null||A.call(P,[...r.messages],"answer"),d.track("agent-message-received",{latency:z.get(!0),mode:r.chatMode,messages:r.messages.length})),b}catch(E){throw((L=r.messages[r.messages.length-1])==null?void 0:L.role)==="assistant"&&r.messages.pop(),d.track("agent-message-send",{event:"error",mode:r.chatMode,messages:r.messages.length}),E}},rate(l,h,k){var C,P,A,L;const w=r.messages.find(E=>E.id===l);if(r.chat){if(!w)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const j=((C=w.matches)==null?void 0:C.map(E=>[E.document_id,E.id]))??[];return d.track("agent-rate",{event:k?"update":"create",thumb:h===1?"up":"down",knowledge_id:((P=i.knowledge)==null?void 0:P.id)??"",mode:r.chatMode,matches:j,score:h}),k?c.updateRating(i.id,r.chat.id,k,{knowledge_id:((A=i.knowledge)==null?void 0:A.id)??"",message_id:l,matches:j,score:h}):c.createRating(i.id,r.chat.id,{knowledge_id:((L=i.knowledge)==null?void 0:L.id)??"",message_id:l,matches:j,score:h})},deleteRate(l){var h;if(!r.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text",chat_id:(h=r.chat)==null?void 0:h.id,id:l,mode:r.chatMode}),c.deleteRating(i.id,r.chat.id,l)},async speak(l){var j,C,P,A;if(!r.streamingManager)throw new Error("Please connect to the agent first");function h(){if(typeof l=="string"){if(!i.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:i.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!i.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:i.presenter.voice,input:l.input,ssml:l.ssml}}return l}const k=h();d.track("agent-speak",k),z.update(),(j=r.chat)!=null&&j.id&&k.type==="text"&&(r.messages.push({id:V(),role:"assistant",content:k.input,created_at:new Date(z.get(!0)).toISOString()}),(P=(C=t.callbacks).onNewMessage)==null||P.call(C,[...r.messages],"answer"));const w=Pe(r.chatMode);return r.chat&&w?{duration:0,status:"success"}:r.streamingManager.speak({script:k,metadata:{chat_id:(A=r.chat)==null?void 0:A.id,agent_id:i.id}})}}}function pt(e,t,a){const{getById:n}=pe(t,a||X);return n(e)}m.AgentActivityState=q,m.AgentStatus=oe,m.ChatCreationFailed=N,m.ChatMode=I,m.ChatModeDowngraded=ne,m.ChatProgress=U,m.ConnectionState=M,m.ConnectivityState=x,m.DataChannelSignalMap=Z,m.DocumentType=ue,m.KnowledgeType=le,m.PlanGroup=se,m.Providers=me,m.RateState=ce,m.StreamEvents=K,m.StreamType=F,m.StreamingState=y,m.Subject=de,m.UserPlan=ie,m.ValidationError=W,m.VideoType=G,m.VoiceAccess=ge,m.WsError=ae,m.createAgentManager=yt,m.getAgent=pt,m.mapVideoType=fe,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
|
|
1
|
+
(function(m,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(m=typeof globalThis<"u"?globalThis:m||self,b(m.index={}))})(this,function(m){"use strict";var vt=Object.defineProperty;var kt=(m,b,H)=>b in m?vt(m,b,{enumerable:!0,configurable:!0,writable:!0,value:H}):m[b]=H;var Z=(m,b,H)=>(kt(m,typeof b!="symbol"?b+"":b,H),H);class b extends Error{constructor({kind:a,description:r,error:o}){super(JSON.stringify({kind:a,description:r}));Z(this,"kind");Z(this,"description");Z(this,"error");this.kind=a,this.description=r,this.error=o}}class H extends b{constructor(t,a){super({kind:"ChatCreationFailed",description:`Failed to create ${a?"persistent":""} chat, mode: ${t}`})}}class ae extends b{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class x extends b{constructor(a,r){super({kind:"ValidationError",description:a});Z(this,"key");this.key=r}}class ie extends b{constructor(t){super({kind:"WSError",description:t})}}var se=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(se||{}),oe=(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))(oe||{}),ce=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(ce||{}),de=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(de||{}),I=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(I||{}),q=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(q||{}),le=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(le||{}),ue=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(ue||{}),fe=(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))(fe||{}),O=(e=>(e.Clip="clip",e.Talk="talk",e))(O||{});const me=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var p=(e=>(e.Start="START",e.Stop="STOP",e))(p||{}),V=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(V||{}),X=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(X||{}),L=(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))(L||{}),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||{}),K=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(K||{}),ge=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ge||{}),he=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(he||{});const _e=45*1e3,Ie="X-Playground-Chat",Q="https://api.d-id.com",Te="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",we=e=>new Promise(t=>setTimeout(t,e)),Y=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,a=>a.toString(16).padStart(2,"0")).join("").slice(0,13)},je=e=>[I.TextOnly,I.Playground,I.Maintenance].includes(e);function Pe(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 r;for(let o=1;o<=a.limit;o++)try{if(!a.timeout)return await e();const{promise:s,clear:n}=Pe(a.timeout,a.timeoutErrorMessage),c=e().finally(n);return await Promise.race([c,s])}catch(s){if(r=s,!a.shouldRetryFn(s)||o>=a.limit)throw s;await we(a.delayMs),a.onRetry(s)}throw r}function ye(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=Y();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Ae=Y();function pe(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}.${ye()}_${Ae}`;throw new Error(`Unknown auth type: ${e}`)}const Be=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=Q,a){const r=async(o,s)=>{const{skipErrorHandler:n,...c}=s||{},i=await Be(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...c,headers:{...c.headers,Authorization:pe(e),"Content-Type":"application/json"}}));if(!i.ok){let d=await i.text().catch(()=>`Failed to fetch with status ${i.status}`);const u=new Error(d);throw a&&!n&&a(u,{url:o,options:c,headers:i.headers}),u}return i.json()};return{get(o,s){return r(o,{...s,method:"GET"})},post(o,s,n){return r(o,{...n,body:JSON.stringify(s),method:"POST"})},delete(o,s,n){return r(o,{...n,body:JSON.stringify(s),method:"DELETE"})},patch(o,s,n){return r(o,{...n,body:JSON.stringify(s),method:"PATCH"})}}}function ve(e,t=Q,a){const r=te(e,`${t}/agents`,a);return{create(o,s){return r.post("/",o,s)},getAgents(o,s){return r.get(`/${o?`?tag=${o}`:""}`,s).then(n=>n??[])},getById(o,s){return r.get(`/${o}`,s)},delete(o,s){return r.delete(`/${o}`,void 0,s)},update(o,s,n){return r.patch(`/${o}`,s,n)},newChat(o,s,n){return r.post(`/${o}/chat`,s,n)},chat(o,s,n,c){return r.post(`/${o}/chat/${s}`,n,c)},createRating(o,s,n,c){return r.post(`/${o}/chat/${s}/ratings`,n,c)},updateRating(o,s,n,c,i){return r.patch(`/${o}/chat/${s}/ratings/${n}`,c,i)},deleteRating(o,s,n,c){return r.delete(`/${o}/chat/${s}/ratings/${n}`,c)},getSTTToken(o,s){return r.get(`/${o}/stt-token`,s)}}}const ke=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function $e(e){var o,s,n,c;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",a=()=>{const i=navigator.platform;return i.toLowerCase().includes("win")?"Windows":i.toLowerCase().includes("mac")?"Mac OS X":i.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${a()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:ke(r),agentVoice:{voiceId:(s=(o=e.presenter)==null?void 0:o.voice)==null?void 0:s.voice_id,provider:(c=(n=e.presenter)==null?void 0:n.voice)==null?void 0:c.type}}}const Le=e=>e.reduce((t,a)=>t+a,0),Ce=e=>Le(e)/e.length;function ze(e,t,a){var i,d,u;const{event:r,...o}=e,{template:s}=(t==null?void 0:t.llm)||{},{language:n}=((i=t==null?void 0:t.presenter)==null?void 0:i.voice)||{};return{...o,llm:{...o.llm,template:s},script:{...o.script,provider:{...(d=o==null?void 0:o.script)==null?void 0:d.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...a}}let re={};const Fe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ne(e){var s,n,c,i,d,u;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",a=e.agent.presenter,r=(s=e.agent.llm)==null?void 0:s.prompt_customization,o={token:e.token||"testKey",distinct_id:e.distinctId||ye(),agentId:e.agent.id,agentType:ke(a),owner_id:e.agent.owner_id??"",promptVersion:(n=e.agent.llm)==null?void 0:n.prompt_version,behavior:{role:r==null?void 0:r.role,personality:r==null?void 0:r.personality,instructions:(c=e.agent.llm)==null?void 0:c.instructions},temperature:(i=e.agent.llm)==null?void 0:i.temperature,knowledgeSource:r==null?void 0:r.knowledge_source,starterQuestionsCount:(u=(d=e.agent.knowledge)==null?void 0:d.starter_message)==null?void 0:u.length,topicsToAvoid:r==null?void 0:r.topics_to_avoid,maxResponseLength:r==null?void 0:r.max_response_length};return{...o,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:Y,enrich(w){this.additionalProperties={...this.additionalProperties,...w}},async track(w,T){if(!this.isEnabled)return Promise.resolve();const{audioPath:C,...D}=T||{},R={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:w,properties:{...this.additionalProperties,...D,...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(Fe,R).then(M=>M.json())}catch(M){return console.error(M)}},linkTrack(w,T,C,D){re[w]||(re[w]={events:{},resolvedDependencies:[]}),D.includes(C)||D.push(C);const R=re[w];if(R.events[C]={props:T},R.resolvedDependencies.push(C),D.every(z=>R.resolvedDependencies.includes(z))){const z=D.reduce((l,g)=>R.events[g]?{...l,...R.events[g].props}:l,{});this.track(w,z),R.resolvedDependencies=R.resolvedDependencies.filter(l=>!D.includes(l)),D.forEach(l=>{delete R.events[l]})}}}}function Je(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const W=Je();function De(e){return e===I.Playground?{headers:{[Ie]:"true"}}:{}}async function Re(e,t,a,r,o=!1,s){try{return!s&&r!==I.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},De(r)),a.track("agent-chat",{event:"created",chat_id:s.id,agent_id:e.id,mode:r})),{chat:s,chatMode:(s==null?void 0:s.chat_mode)??r}}catch(n){try{const c=JSON.parse(n.message);if((c==null?void 0:c.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(c){console.error("Error parsing the error message:",c)}throw new Error("Cannot create new chat")}}function We(e){return e&&e.length>0?e:[]}function Ue(e){return new Promise((t,a)=>{const{callbacks:r,host:o,auth:s}=e,{onMessage:n=null,onOpen:c=null,onClose:i=null,onError:d=null}=r||{},u=new WebSocket(`${o}?authorization=${pe(s)}`);u.onmessage=n,u.onclose=i,u.onerror=w=>{console.error(w),d==null||d("Websocket failed to connect",w),a(w)},u.onopen=w=>{c==null||c(w),t(u)}})}async function Ke(e){const{retries:t=1}=e;let a=null;for(let r=0;(a==null?void 0:a.readyState)!==WebSocket.OPEN;r++)try{a=await Ue(e)}catch(o){if(r===t)throw o;await we(r*500)}return a}async function He(e,t,a){const r=a!=null&&a.onMessage?[a.onMessage]:[],o=await Ke({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=a.onError)==null?void 0:n.call(a,new ie(s))},onMessage(s){const n=JSON.parse(s.data);r.forEach(c=>c(n.event,n))}}});return{socket:o,disconnect:()=>o.close(),subscribeToEvents:s=>r.push(s)}}function xe(e){if(e.answer!==void 0)return e.answer;let t=0,a="";for(;t in e;)a+=e[t++];return a}function qe(e,t,a,r,o){const s=r.messages[r.messages.length-1];if(!(e===q.Partial||e===q.Answer)||(s==null?void 0:s.role)!=="assistant")return;const{content:n,sequence:c}=t;e===q.Partial?a[c]=n:a.answer=n;const i=xe(a);(s.content!==i||e===q.Answer)&&(s.content=i,o==null||o([...r.messages],e))}function Ve(e,t,a,r,o){let s={};return{clearQueue:()=>s={},onMessage:(n,c)=>{var i,d;if("content"in c)qe(n,c,s,t,a.callbacks.onNewMessage),n===q.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=L,w=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],T=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],C=ze(c,r,{mode:t.chatMode});if(n=n,n===u.StreamVideoCreated)e.linkTrack("agent-video",C,u.StreamVideoCreated,["start"]);else if(w.includes(n)){const D=n.split("/")[1];T.includes(n)?e.track("agent-video",{...C,event:D}):e.linkTrack("agent-video",{...C,event:D},n,["done"])}T.includes(n)&&((d=(i=a.callbacks).onError)==null||d.call(i,new Error(`Stream failed with event ${n}`),{data:c})),c.event===u.StreamDone&&o()}}}}function Xe(e,t,a,r){const o=te(e,`${t}/agents/${a}`,r);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,c){return o.post(`/streams/${s}/sdp`,{session_id:c,answer:n})},addIceCandidate(s,n,c){return o.post(`/streams/${s}/ice`,{session_id:c,...n})},sendStreamRequest(s,n,c){return o.post(`/streams/${s}`,{session_id:n,...c})},close(s,n){return o.delete(`/streams/${s}`,{session_id:n})}}}function Ye(e,t,a,r){const o=te(e,`${t}/agents/${a}`,r);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,c,i){return o.post(`/streams/${s}/sdp`,{session_id:c,answer:n},i)},addIceCandidate(s,n,c,i){return o.post(`/streams/${s}/ice`,{session_id:c,...n},i)},sendStreamRequest(s,n,c,i){return o.post(`/streams/${s}`,{session_id:n,...c},i)},close(s,n,c){return o.delete(`/streams/${s}`,{session_id:n},c)}}}function Qe(e,t,a){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),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)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:a}}function Ge(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:a,...r}=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"),{...r,causes:o}})}function Ze(e){let t="",a=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(a=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:a,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 Oe(e,t,a){const r=e.map((i,d)=>d===0?a?{timestamp:i.timestamp,duration:0,rtt:i.rtt,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,rtt:i.rtt,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*d/1e3,rtt:i.rtt,bytesReceived:i.bytesReceived-e[d-1].bytesReceived,bitrate:(i.bytesReceived-e[d-1].bytesReceived)*8/(t/1e3),packetsReceived:i.packetsReceived-e[d-1].packetsReceived,packetsLost:i.packetsLost-e[d-1].packetsLost,framesDropped:i.framesDropped-e[d-1].framesDropped,framesDecoded:i.framesDecoded-e[d-1].framesDecoded,jitter:i.jitter,jitterBufferDelay:i.jitterBufferDelay-e[d-1].jitterBufferDelay,jitterBufferEmittedCount:i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(i.jitterBufferDelay-e[d-1].jitterBufferDelay)/(i.jitterBufferEmittedCount-e[d-1].jitterBufferEmittedCount),framesPerSecond:i.framesPerSecond,freezeCount:i.freezeCount-e[d-1].freezeCount,freezeDuration:i.freezeDuration-e[d-1].freezeDuration}),o=Ge(r),s=o.reduce((i,d)=>i+(d.causes.includes("low fps")?1:0),0),n=r.filter(i=>!!i.avgJitterDelayInInterval).map(i=>i.avgJitterDelayInInterval),c=r.filter(i=>!!i.rtt).map(i=>i.rtt);return{webRTCStats:{anomalies:o,minRtt:Math.min(...c),avgRtt:Ce(c),maxRtt:Math.max(...c),aggregateReport:Qe(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:Ce(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const ne=100,et=Math.max(Math.ceil(400/ne),1),tt=.25,rt=.28;function nt(){let e=0,t,a,r=0;return o=>{for(const s of o.values())if(s&&s.type==="inbound-rtp"&&s.kind==="video"){const n=s.jitterBufferDelay,c=s.jitterBufferEmittedCount;if(a&&c>a){const u=n-t,w=c-a;r=u/w}t=n,a=c;const i=s.framesDecoded,d=i-e>0;return e=i,{isReceiving:d,avgJitterDelayInInterval:r,freezeCount:s.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function at(e,t,a,r,o,s=!1){let n=[],c,i=0,d=!1,u=V.Unknown,w=V.Unknown,T=0,C=0;const D=nt();return setInterval(async()=>{const R=await e.getStats(),{isReceiving:M,avgJitterDelayInInterval:z,freezeCount:l}=D(R),g=Ze(R);if(M)i=0,T=l-C,w=z<tt?V.Strong:z>rt&&T>1?V.Weak:u,w!==u&&(o==null||o(w),u=w,C+=T,T=0),d||(r==null||r(p.Start),c=n[n.length-1],n=[],d=!0),n.push(g);else if(d&&(i++,i>=et)){const v=Oe(n,ne,c);r==null||r(p.Stop,v),t()||a(),C=l,d=!1}},ne)}let Se=!1;const U=(e,t)=>Se&&console.log(e,t),it=(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 st(e){const[t,a=""]=e.split(/:(.+)/);try{const r=JSON.parse(a);return U("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return U("Failed to parse data channel message, returning data as string",{subject:t,rawData:a,error:r}),{subject:t,data:a}}}function ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:r}){e===p.Start&&t===p.Start?a==null||a(p.Start):e===p.Stop&&t===p.Stop&&(a==null||a(p.Stop,r))}function ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:o}){e===p.Start?a==null||a(p.Start):e===p.Stop&&(a==null||a(p.Stop,o)),t===p.Start?r==null||r(X.Talking):t===p.Stop&&(r==null||r(X.Idle))}function Me({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,streamType:o,report:s}){o===K.Legacy?ot({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,report:s}):o===K.Fluent&&ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:a,onAgentActivityStateChange:r,report:s})}async function dt(e,t,{debug:a=!1,callbacks:r,auth:o,baseURL:s=Q,analytics:n}){Se=a;let c=!1,i=!1,d=p.Stop,u=p.Stop;const{startConnection:w,sendStreamRequest:T,close:C,createStream:D,addIceCandidate:R}=t.videoType===O.Clip?Xe(o,s,e,r.onError):Ye(o,s,e,r.onError),{id:M,offer:z,ice_servers:l,session_id:g,fluent:v}=await D(t),y=new it({iceServers:l}),P=y.createDataChannel("JanusDataChannel");if(!g)throw new Error("Could not create session_id");const k=v?K.Fluent:K.Legacy;n.enrich({"stream-type":k});const A=t.stream_warmup&&!v,B=()=>c,F=()=>{var f;c=!0,i&&((f=r.onConnectionStateChange)==null||f.call(r,E.Connected))},S=at(y,B,F,(f,h)=>Me({statsSignal:u=f,dataChannelSignal:k===K.Legacy?d:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:h,streamType:k}),f=>{var h;return(h=r.onConnectivityStateChange)==null?void 0:h.call(r,f)},A);y.onicecandidate=f=>{var h;U("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?R(M,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},g):R(M,{candidate:null},g)}catch($){(h=r.onError)==null||h.call(r,$,{streamId:M})}},P.onopen=()=>{i=!0,(!A||c)&&F()};function j(f){d=f===L.StreamStarted?p.Start:p.Stop,Me({statsSignal:k===K.Legacy?u:void 0,dataChannelSignal:d,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:k})}function _(f,h){const $=typeof h=="string"?h:h==null?void 0:h.metadata;$&&n.enrich({streamMetadata:$}),n.track("agent-chat",{event:"ready"})}const N={[L.StreamStarted]:j,[L.StreamDone]:j,[L.StreamReady]:_};P.onmessage=f=>{var G;const{subject:h,data:$}=st(f.data);(G=N[h])==null||G.call(N,h,$)},y.oniceconnectionstatechange=()=>{var h;U("peerConnection.oniceconnectionstatechange => "+y.iceConnectionState);const f=Ee(y.iceConnectionState);f!==E.Connected&&((h=r.onConnectionStateChange)==null||h.call(r,f))},y.ontrack=f=>{var h;U("peerConnection.ontrack",f),(h=r.onSrcObjectReady)==null||h.call(r,f.streams[0])},await y.setRemoteDescription(z),U("set remote description OK");const J=await y.createAnswer();return U("create answer OK"),await y.setLocalDescription(J),U("set local description OK"),await w(M,J,g),U("start connection OK"),{speak(f){return T(M,g,f)},async disconnect(){var f;if(M){const h=Ee(y.iceConnectionState);if(y){if(h===E.New){clearInterval(S);return}y.close(),y.oniceconnectionstatechange=null,y.onnegotiationneeded=null,y.onicecandidate=null,y.ontrack=null}try{h===E.Connected&&await C(M,g).catch($=>{})}catch($){U("Error on close stream connection",$)}(f=r.onAgentActivityStateChange)==null||f.call(r,X.Idle),clearInterval(S)}},sessionId:g,streamId:M,streamType:k}}function lt(e,t){const{streamOptions:a}=t??{};return{videoType:me(e.presenter.type),output_resolution:a==null?void 0:a.outputResolution,session_timeout:a==null?void 0:a.sessionTimeout,stream_warmup:a==null?void 0:a.streamWarmup,compatibility_mode:a==null?void 0:a.compatibilityMode,fluent:a==null?void 0:a.fluent}}function ut(e,t,a,r,o){o===K.Fluent?ft(e,t,a,r,o):gt(e,t,a,r,o)}function ft(e,t,a,r,o){e===p.Start?r.track("stream-session",{event:"start","stream-type":o}):e===p.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":o,...a})}function mt(e,t,a,r){W.get()<=0||(e===p.Start?a.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":r},"start",[L.StreamVideoCreated]):e===p.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":r},"done",[L.StreamVideoDone]))}function gt(e,t,a,r,o){W.get()<=0||(e===p.Start?r.linkTrack("agent-video",{event:"start",latency:W.get(!0),"stream-type":o},"start",[L.StreamVideoCreated]):e===p.Stop&&r.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,...a},"done",[L.StreamVideoDone]))}function ht(e,t,a){return W.reset(),new Promise(async(r,o)=>{try{const s=await dt(e.id,lt(e,t),{...t,analytics:a,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var c,i;(i=(c=t.callbacks).onConnectionStateChange)==null||i.call(c,n),n===E.Connected&&r(s)},onVideoStateChange:(n,c)=>{var i,d;(d=(i=t.callbacks).onVideoStateChange)==null||d.call(i,n),ut(n,e,c,a,s.streamType)},onAgentActivityStateChange:n=>{var c,i;(i=(c=t.callbacks).onAgentActivityStateChange)==null||i.call(c,n),mt(n===X.Talking?p.Start:p.Stop,e,a,s.streamType)}}})}catch(s){o(s)}})}async function wt(e,t,a,r,o){var i,d,u,w;const{chat:s,chatMode:n}=await Re(e,a,r,t.mode,t.persistentChat,o);if(n&&n!==t.mode&&(t.mode=n,(d=(i=t.callbacks).onModeChange)==null||d.call(i,n),n===I.TextOnly))return(w=(u=t.callbacks).onError)==null||w.call(u,new ae(n)),{chat:s};const c=await ht(e,t,r);return{chat:s,streamingManager:c}}async function yt(e,t){var R,M,z;let a=!0;const r=t.mixpanelKey||be,o=t.wsURL||Te,s=t.baseURL||Q,n={messages:[],chatMode:t.mode||I.Functional},c=ve(t.auth,s,t.callbacks.onError),i=await c.getById(e),d=Ne({token:r,agent:i,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:u,clearQueue:w}=Ve(d,n,t,i,()=>{var l;return(l=n.socketManager)==null?void 0:l.disconnect()});n.messages=We(t.initialMessages),(M=(R=t.callbacks).onNewMessage)==null||M.call(R,[...n.messages],"answer"),d.track("agent-sdk",{event:"loaded",...$e(i)});async function T(l){var A,B,F,S,j,_,N;(B=(A=t.callbacks).onConnectionStateChange)==null||B.call(A,E.Connecting),W.reset(),l&&!a&&(delete n.chat,(S=(F=t.callbacks).onNewMessage)==null||S.call(F,[...n.messages],"answer"));const g=t.mode===I.DirectPlayback?Promise.resolve(void 0):He(t.auth,o,{onMessage:u,onError:t.callbacks.onError}),v=ee(()=>wt(i,t,c,d,n.chat),{limit:3,timeout:_e,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:J=>(J==null?void 0:J.message)!=="Could not connect"&&J.status!==429,delayMs:1e3}).catch(J=>{var f,h;throw D(I.Maintenance),(h=(f=t.callbacks).onConnectionStateChange)==null||h.call(f,E.Fail),J}),[y,{streamingManager:P,chat:k}]=await Promise.all([g,v]);k&&k.id!==((j=n.chat)==null?void 0:j.id)&&((N=(_=t.callbacks).onNewChat)==null||N.call(_,k.id)),n.streamingManager=P,n.socketManager=y,n.chat=k,a=!1,D((k==null?void 0:k.chat_mode)??t.mode??I.Functional)}async function C(){var l,g,v,y;(l=n.socketManager)==null||l.disconnect(),await((g=n.streamingManager)==null?void 0:g.disconnect()),delete n.streamingManager,delete n.socketManager,(y=(v=t.callbacks).onConnectionStateChange)==null||y.call(v,E.Disconnected)}async function D(l){var g,v;l!==n.chatMode&&(d.track("agent-mode-change",{mode:l}),n.chatMode=l,n.chatMode!==I.Functional&&await C(),(v=(g=t.callbacks).onModeChange)==null||v.call(g,l))}return{agent:i,getStreamType:()=>{var l;return(l=n.streamingManager)==null?void 0:l.streamType},starterMessages:((z=i.knowledge)==null?void 0:z.starter_message)||[],getSTTToken:()=>c.getSTTToken(i.id),changeMode:D,enrichAnalytics:d.enrich,async connect(){var l;await T(!0),d.track("agent-chat",{event:"connect",chatId:(l=n.chat)==null?void 0:l.id,agentId:i.id,mode:n.chatMode})},async reconnect(){var l;await C(),await T(!1),d.track("agent-chat",{event:"reconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:i.id,mode:n.chatMode})},async disconnect(){var l;await C(),d.track("agent-chat",{event:"disconnect",chatId:(l=n.chat)==null?void 0:l.id,agentId:i.id,mode:n.chatMode})},async chat(l){var P,k,A,B,F;const g=()=>{if(t.mode===I.DirectPlayback)throw new x("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new x("Message cannot be more than 800 characters");if(l.length===0)throw new x("Message cannot be empty");if(n.chatMode===I.Maintenance)throw new x("Chat is in maintenance mode");if(![I.TextOnly,I.Playground].includes(n.chatMode)){if(!n.streamingManager)throw new x("Streaming manager is not initialized");if(!n.chat)throw new x("Chat is not initialized")}},v=async()=>{var S,j;if(!n.chat){const _=await Re(i,c,d,n.chatMode,t.persistentChat);if(!_.chat)throw new H(n.chatMode,!!t.persistentChat);n.chat=_.chat,(j=(S=t.callbacks).onNewChat)==null||j.call(S,n.chat.id)}return n.chat.id},y=async(S,j)=>ee(()=>{var _,N;return c.chat(i.id,j,{chatMode:n.chatMode,streamId:(_=n.streamingManager)==null?void 0:_.streamId,sessionId:(N=n.streamingManager)==null?void 0:N.sessionId,messages:S.map(({matches:J,...f})=>f)},{...De(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:_=>{var f,h,$,G;const N=(f=_==null?void 0:_.message)==null?void 0:f.includes("missing or invalid session_id");return!((h=_==null?void 0:_.message)==null?void 0:h.includes("Stream Error"))&&!N?((G=($=t.callbacks).onError)==null||G.call($,_),!1):!0},onRetry:async()=>{await C(),await T(!1)}});try{w(),g(),n.messages.push({id:Y(),role:"user",content:l,created_at:new Date(W.update()).toISOString()}),(k=(P=t.callbacks).onNewMessage)==null||k.call(P,[...n.messages],"user");const S=await v(),j=await y([...n.messages],S);return n.messages.push({id:Y(),role:"assistant",content:j.result||"",created_at:new Date().toISOString(),context:j.context,matches:j.matches}),d.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),j.result&&((B=(A=t.callbacks).onNewMessage)==null||B.call(A,[...n.messages],"answer"),d.track("agent-message-received",{latency:W.get(!0),mode:n.chatMode,messages:n.messages.length})),j}catch(S){throw((F=n.messages[n.messages.length-1])==null?void 0:F.role)==="assistant"&&n.messages.pop(),d.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),S}},rate(l,g,v){var k,A,B,F;const y=n.messages.find(S=>S.id===l);if(n.chat){if(!y)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const P=((k=y.matches)==null?void 0:k.map(S=>[S.document_id,S.id]))??[];return d.track("agent-rate",{event:v?"update":"create",thumb:g===1?"up":"down",knowledge_id:((A=i.knowledge)==null?void 0:A.id)??"",mode:n.chatMode,matches:P,score:g}),v?c.updateRating(i.id,n.chat.id,v,{knowledge_id:((B=i.knowledge)==null?void 0:B.id)??"",message_id:l,matches:P,score:g}):c.createRating(i.id,n.chat.id,{knowledge_id:((F=i.knowledge)==null?void 0:F.id)??"",message_id:l,matches:P,score:g})},deleteRate(l){var g;if(!n.chat)throw new Error("Chat is not initialized");return d.track("agent-rate-delete",{type:"text",chat_id:(g=n.chat)==null?void 0:g.id,id:l,mode:n.chatMode}),c.deleteRating(i.id,n.chat.id,l)},async speak(l){var P,k,A,B;if(!n.streamingManager)throw new Error("Please connect to the agent first");function g(){if(typeof l=="string"){if(!i.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:i.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!i.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:i.presenter.voice,input:l.input,ssml:l.ssml}}return l}const v=g();d.track("agent-speak",v),W.update(),(P=n.chat)!=null&&P.id&&v.type==="text"&&(n.messages.push({id:Y(),role:"assistant",content:v.input,created_at:new Date(W.get(!0)).toISOString()}),(A=(k=t.callbacks).onNewMessage)==null||A.call(k,[...n.messages],"answer"));const y=je(n.chatMode);return n.chat&&y?{duration:0,status:"success"}:n.streamingManager.speak({script:v,metadata:{chat_id:(B=n.chat)==null?void 0:B.id,agent_id:i.id}})}}}function pt(e,t,a){const{getById:r}=ve(t,a||Q);return r(e)}m.AgentActivityState=X,m.AgentStatus=ce,m.ChatCreationFailed=H,m.ChatMode=I,m.ChatModeDowngraded=ae,m.ChatProgress=q,m.ConnectionState=E,m.ConnectivityState=V,m.DocumentType=fe,m.KnowledgeType=ue,m.PlanGroup=oe,m.Providers=ge,m.RateState=de,m.StreamEvents=L,m.StreamType=K,m.StreamingState=p,m.Subject=le,m.UserPlan=se,m.ValidationError=x,m.VideoType=O,m.VoiceAccess=he,m.WsError=ie,m.createAgentManager=yt,m.getAgent=pt,m.mapVideoType=me,Object.defineProperty(m,Symbol.toStringTag,{value:"Module"})});
|
|
@@ -18,7 +18,6 @@ export declare enum AgentActivityState {
|
|
|
18
18
|
Idle = "IDLE",
|
|
19
19
|
Talking = "TALKING"
|
|
20
20
|
}
|
|
21
|
-
export declare const DataChannelSignalMap: Record<string, StreamingState>;
|
|
22
21
|
export declare enum StreamEvents {
|
|
23
22
|
ChatAnswer = "chat/answer",
|
|
24
23
|
ChatPartial = "chat/partial",
|