@d-id/client-sdk 1.1.0-beta.4 → 1.1.0-beta.6
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 +524 -515
- 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/index.d.ts +1 -1
- 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/dist/src/utils/chat.d.ts +2 -0
- 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,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(f=typeof globalThis<"u"?globalThis:f||self,b(f.index={}))})(this,function(f){"use strict";var wt=Object.defineProperty;var yt=(f,b,F)=>b in f?wt(f,b,{enumerable:!0,configurable:!0,writable:!0,value:F}):f[b]=F;var Q=(f,b,F)=>(yt(f,typeof b!="symbol"?b+"":b,F),F);class b extends Error{constructor({kind:r,description:a,error:o}){super(JSON.stringify({kind:r,description:a}));Q(this,"kind");Q(this,"description");Q(this,"error");this.kind=r,this.description=a,this.error=o}}class F extends b{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class ae extends b{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends b{constructor(r,a){super({kind:"ValidationError",description:r});Q(this,"key");this.key=a}}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||{}),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||{}),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||{}),Z=(e=>(e.Clip="clip",e.Talk="talk",e))(Z||{});const me=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var v=(e=>(e.Start="START",e.Stop="STOP",e))(v||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),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||{}),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||{}),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 Ie=45*1e3,Te="X-Playground-Chat",X="https://api.d-id.com",je="wss://notifications.d-id.com",be="79f81a83a67430be2bc0fd61042b8faa",we=e=>new Promise(t=>setTimeout(t,e)),G=()=>Math.random().toString(16).slice(2),Pe=e=>[j.TextOnly,j.Playground,j.Maintenance].includes(e);function Ae(e,t){let r;return{promise:new Promise((o,s)=>{r=setTimeout(()=>s(new Error(t)),e)}),clear:()=>clearTimeout(r)}}async function ee(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}=Ae(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 we(r.delayMs),r.onRetry(s)}throw a}function ye(){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 Be=G();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()}_${Be}`;throw new Error(`Unknown auth type: ${e}`)}const $e=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=X,r){const a=async(o,s)=>{const{skipErrorHandler:n,...i}=s||{},c=await $e(()=>fetch(t+(o!=null&&o.startsWith("/")?o:`/${o}`),{...i,headers:{...i.headers,Authorization:pe(e),"Content-Type":"application/json"}}));if(!c.ok){let l=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const u=new Error(l);throw r&&!n&&r(u,{url:o,options:i,headers:c.headers}),u}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 ve(e,t=X,r){const a=te(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 Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Le(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:Ce(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 ze=e=>e.reduce((t,r)=>t+r,0),Fe=e=>ze(e)/e.length;function Ne(e,t,r){var c,l,u;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"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...r}}let ne={};const Je="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function We(e){var s,n,i,c,l,u;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||ye(),agentId:e.agent.id,agentType:Ce(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:(u=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:u.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(m){const k={};if(m&&typeof m!="object")throw new Error("properties must be a flat json object");for(let C in m)(typeof m[C]=="string"||typeof m[C]=="number")&&(k[C]=m[C]);this.additionalProperties={...this.additionalProperties,...k}},async track(m,k){if(!this.isEnabled)return Promise.resolve();const{audioPath:C,...D}=k||{},_={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:m,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(Je,_).then($=>$.json())}catch($){return console.error($)}},linkTrack(m,k,C,D){ne[m]||(ne[m]={events:{},resolvedDependencies:[]}),D.includes(C)||D.push(C);const _=ne[m];if(_.events[C]={props:k},_.resolvedDependencies.push(C),D.every(I=>_.resolvedDependencies.includes(I))){const I=D.reduce((d,y)=>_.events[y]?{...d,..._.events[y].props}:d,{});this.track(m,I),_.resolvedDependencies=_.resolvedDependencies.filter(d=>!D.includes(d)),D.forEach(d=>{delete _.events[d]})}}}}function Ue(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const J=Ue();function ke(e){return e===j.Playground?{headers:{[Te]:"true"}}:{}}async function De(e,t,r,a,o=!1,s){try{return!s&&a!==j.DirectPlayback&&(s=await t.newChat(e.id,{persist:o},ke(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 He(e){return e&&e.length>0?e:[]}function Ke(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||{},u=new WebSocket(`${o}?authorization=${pe(s)}`);u.onmessage=n,u.onclose=c,u.onerror=m=>{console.error(m),l==null||l("Websocket failed to connect",m),r(m)},u.onopen=m=>{i==null||i(m),t(u)}})}async function qe(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 Ke(e)}catch(o){if(a===t)throw o;await we(a*500)}return r}async function xe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],o=await qe({auth:e,host:t,callbacks:{onError:s=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ie(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 Ve(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Xe(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=Ve(r);(s.content!==c||e===K.Answer)&&(s.content=c,o==null||o([...a.messages],e))}function Ye(e,t,r,a,o){let s={};return{clearQueue:()=>s={},onMessage:(n,i)=>{var c,l;if("content"in i)Xe(n,i,s,t,r.callbacks.onNewMessage),n===K.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=V,m=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],k=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],C=Ne(i,a,{mode:t.chatMode});if(n=n,n===u.StreamVideoCreated)e.linkTrack("agent-video",C,u.StreamVideoCreated,["start"]);else if(m.includes(n)){const D=n.split("/")[1];k.includes(n)?e.track("agent-video",{...C,event:D}):e.linkTrack("agent-video",{...C,event:D},n,["done"])}k.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:i})),i.event===u.StreamDone&&o()}}}}function Qe(e,t,r,a){const o=te(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 Ge(e,t,r,a){const o=te(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 Ze(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 Oe(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 et(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 tt(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=Oe(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:Ze(e[0],e[e.length-1],s),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:Fe(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const re=100,nt=Math.max(Math.ceil(400/re),1),rt=.25,at=.28;function it(){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 u=n-t,m=i-r;a=u/m}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 st(e,t,r,a,o,s=!1){let n=[],i,c=0,l=!1,u=q.Unknown,m=q.Unknown,k=0,C=0;const D=it();return setInterval(async()=>{const _=await e.getStats(),{isReceiving:$,avgJitterDelayInInterval:I,freezeCount:d}=D(_),y=et(_);if($)c=0,k=d-C,m=I<rt?q.Strong:I>at&&k>1?q.Weak:u,m!==u&&(o==null||o(m),u=m,C+=k,k=0),l||(a==null||a(v.Start),i=n[n.length-1],n=[],l=!0),n.push(y);else if(l&&(c++,c>=nt)){const w=tt(n,re,i);a==null||a(v.Stop,w),t()||r(),l=!1}},re)}let Re=!1;const W=(e,t)=>Re&&console.log(e,t),ot=(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 ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===v.Start&&t===v.Start?r==null||r(v.Start):e===v.Stop&&t===v.Stop&&(r==null||r(v.Stop,a))}function dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:o}){e===v.Start?r==null||r(v.Start):e===v.Stop&&(r==null||r(v.Stop,o)),t===v.Start?a==null||a(x.Talking):t===v.Stop&&(a==null||a(x.Idle))}function Ee({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:o,report:s}){o===N.Legacy?ct({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:s}):o===N.Fluent&&dt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s})}async function lt(e,t,{debug:r=!1,callbacks:a,auth:o,baseURL:s=X,analytics:n}){Re=r;let i=!1,c=!1,l=v.Stop,u=v.Stop,m=q.Unknown;const{startConnection:k,sendStreamRequest:C,close:D,createStream:_,addIceCandidate:$}=t.videoType===Z.Clip?Qe(o,s,e,a.onError):Ge(o,s,e,a.onError),{id:I,offer:d,ice_servers:y,session_id:w,fluent:A}=await _(t),h=new ot({iceServers:y}),R=h.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const T=A?N.Fluent:N.Legacy;n.enrich({"stream-type":T});const B=t.stream_warmup&&!A,z=()=>i,S=()=>{var g;i=!0,c&&((g=a.onConnectionStateChange)==null||g.call(a,M.Connected))},P=st(h,z,S,(g,p)=>Ee({statsSignal:u=g,dataChannelSignal:T===N.Legacy?l:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:p,streamType:T}),g=>{var p;return(p=a.onConnectivityStateChange)==null?void 0:p.call(a,m)},B);h.onicecandidate=g=>{var p;W("peerConnection.onicecandidate",g);try{g.candidate&&g.candidate.sdpMid&&g.candidate.sdpMLineIndex!==null?$(I,{candidate:g.candidate.candidate,sdpMid:g.candidate.sdpMid,sdpMLineIndex:g.candidate.sdpMLineIndex},w):$(I,{candidate:null},w)}catch(L){(p=a.onError)==null||p.call(a,L,{streamId:I})}},R.onopen=()=>{c=!0,(!B||i)&&S()},R.onmessage=g=>{g.data in O&&(l=O[g.data],Ee({statsSignal:T===N.Legacy?u:void 0,dataChannelSignal:l,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:T}))},h.oniceconnectionstatechange=()=>{var p;W("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const g=Se(h.iceConnectionState);g!==M.Connected&&((p=a.onConnectionStateChange)==null||p.call(a,g))},h.ontrack=g=>{var p;W("peerConnection.ontrack",g),(p=a.onSrcObjectReady)==null||p.call(a,g.streams[0])},await h.setRemoteDescription(d),W("set remote description OK");const E=await h.createAnswer();return W("create answer OK"),await h.setLocalDescription(E),W("set local description OK"),await k(I,E,w),W("start connection OK"),{speak(g){return C(I,w,g)},async disconnect(){var g,p,L;if(I){const U=Se(h.iceConnectionState);if(h){if(U===M.New){(g=a.onVideoStateChange)==null||g.call(a,v.Stop),clearInterval(P);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{U===M.Connected&&await D(I,w).catch(Y=>{})}catch(Y){W("Error on close stream connection",Y)}(p=a.onVideoStateChange)==null||p.call(a,v.Stop),(L=a.onAgentActivityStateChange)==null||L.call(a,x.Idle),clearInterval(P)}},sessionId:w,streamId:I,streamType:T}}function ut(e,t){const{streamOptions:r}=t??{};return{videoType:me(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 Me(e,t,r,a,o){J.get()>0&&(e===v.Start?a.linkTrack("agent-video",{event:"start",latency:J.get(!0),"stream-type":o},"start",[V.StreamVideoCreated]):e===v.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 ft(e,t,r){return J.reset(),new Promise(async(a,o)=>{try{const s=await lt(e.id,ut(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),Me(n,e,i,r,s.streamType)},onAgentActivityStateChange:n=>{var i,c;(c=(i=t.callbacks).onAgentActivityStateChange)==null||c.call(i,n),Me(n===x.Talking?v.Start:v.Stop,e,void 0,r,s.streamType)}}})}catch(s){o(s)}})}async function mt(e,t,r,a,o){var c,l,u,m;const{chat:s,chatMode:n}=await De(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(m=(u=t.callbacks).onError)==null||m.call(u,new ae(n)),{chat:s};const i=await ft(e,t,a);return{chat:s,streamingManager:i}}async function gt(e,t){var _,$,I;let r=!0;const a=t.mixpanelKey||be,o=t.wsURL||je,s=t.baseURL||X,n={messages:[],chatMode:t.mode||j.Functional},i=ve(t.auth,s,t.callbacks.onError),c=await i.getById(e),l=We({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:u,clearQueue:m}=Ye(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=He(t.initialMessages),($=(_=t.callbacks).onNewMessage)==null||$.call(_,[...n.messages],"answer"),l.track("agent-sdk",{event:"loaded",...Le(c)});async function k(d){var T,B,z,S,P,E,g;(B=(T=t.callbacks).onConnectionStateChange)==null||B.call(T,M.Connecting),J.reset(),d&&!r&&(delete n.chat,(S=(z=t.callbacks).onNewMessage)==null||S.call(z,[...n.messages],"answer"));const y=t.mode===j.DirectPlayback?Promise.resolve(void 0):xe(t.auth,o,{onMessage:u,onError:t.callbacks.onError}),w=ee(()=>mt(c,t,i,l,n.chat),{limit:3,timeout:Ie,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:p=>(p==null?void 0:p.message)!=="Could not connect"&&p.status!==429,delayMs:1e3}).catch(p=>{var L,U;throw D(j.Maintenance),(U=(L=t.callbacks).onConnectionStateChange)==null||U.call(L,M.Fail),p}),[A,{streamingManager:h,chat:R}]=await Promise.all([y,w]);R&&R.id!==((P=n.chat)==null?void 0:P.id)&&((g=(E=t.callbacks).onNewChat)==null||g.call(E,R.id)),n.streamingManager=h,n.socketManager=A,n.chat=R,r=!1,D((R==null?void 0:R.chat_mode)??t.mode??j.Functional)}async function C(){var d,y,w,A;(d=n.socketManager)==null||d.disconnect(),await((y=n.streamingManager)==null?void 0:y.disconnect()),delete n.streamingManager,delete n.socketManager,(A=(w=t.callbacks).onConnectionStateChange)==null||A.call(w,M.Disconnected)}async function D(d){var y,w;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==j.Functional&&await C(),(w=(y=t.callbacks).onModeChange)==null||w.call(y,d))}return{agent:c,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:((I=c.knowledge)==null?void 0:I.starter_message)||[],getSTTToken:()=>i.getSTTToken(c.id),changeMode:D,enrichAnalytics:l.enrich,async connect(){var d;await k(!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 C(),await k(!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 C(),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 h,R,T,B,z;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(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")}},w=async()=>{var S,P;if(!n.chat){const E=await De(c,i,l,n.chatMode,t.persistentChat);if(!E.chat)throw new F(n.chatMode,!!t.persistentChat);n.chat=E.chat,(P=(S=t.callbacks).onNewChat)==null||P.call(S,n.chat.id)}return n.chat.id},A=async(S,P)=>ee(()=>{var E,g;return i.chat(c.id,P,{chatMode:n.chatMode,streamId:(E=n.streamingManager)==null?void 0:E.streamId,sessionId:(g=n.streamingManager)==null?void 0:g.sessionId,messages:S.map(({matches:p,...L})=>L)},{...ke(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:E=>{var L,U,Y,_e;const g=(L=E==null?void 0:E.message)==null?void 0:L.includes("missing or invalid session_id");return!((U=E==null?void 0:E.message)==null?void 0:U.includes("Stream Error"))&&!g?((_e=(Y=t.callbacks).onError)==null||_e.call(Y,E),!1):!0},onRetry:async()=>{await C(),await k(!1)}});try{m(),y(),n.messages.push({id:G(),role:"user",content:d,created_at:new Date(J.update()).toISOString()}),(R=(h=t.callbacks).onNewMessage)==null||R.call(h,[...n.messages],"user");const S=await w(),P=await A([...n.messages],S);return n.messages.push({id:G(),role:"assistant",content:P.result||"",created_at:new Date().toISOString(),context:P.context,matches:P.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),P.result&&((B=(T=t.callbacks).onNewMessage)==null||B.call(T,[...n.messages],"answer"),l.track("agent-message-received",{latency:J.get(!0),mode:n.chatMode,messages:n.messages.length})),P}catch(S){throw((z=n.messages[n.messages.length-1])==null?void 0:z.role)==="assistant"&&n.messages.pop(),l.track("agent-message-send",{event:"error",mode:n.chatMode,messages:n.messages.length}),S}},rate(d,y,w){var R,T,B,z;const A=n.messages.find(S=>S.id===d);if(n.chat){if(!A)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const h=((R=A.matches)==null?void 0:R.map(S=>[S.document_id,S.id]))??[];return l.track("agent-rate",{event:w?"update":"create",thumb:y===1?"up":"down",knowledge_id:((T=c.knowledge)==null?void 0:T.id)??"",mode:n.chatMode,matches:h,score:y}),w?i.updateRating(c.id,n.chat.id,w,{knowledge_id:((B=c.knowledge)==null?void 0:B.id)??"",message_id:d,matches:h,score:y}):i.createRating(c.id,n.chat.id,{knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",message_id:d,matches:h,score:y})},deleteRate(d){var y;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(y=n.chat)==null?void 0:y.id,id:d,mode:n.chatMode}),i.deleteRating(c.id,n.chat.id,d)},async speak(d){var h,R,T,B;if(!n.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 w=y();l.track("agent-speak",w),J.update(),(h=n.chat)!=null&&h.id&&w.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:w.input,created_at:new Date(J.get(!0)).toISOString()}),(T=(R=t.callbacks).onNewMessage)==null||T.call(R,[...n.messages],"answer"));const A=Pe(n.chatMode);return n.chat&&A?{duration:0,status:"success"}:n.streamingManager.speak({script:w,metadata:{chat_id:(B=n.chat)==null?void 0:B.id,agent_id:c.id}})}}}function ht(e,t,r){const{getById:a}=ve(t,r||X);return a(e)}f.AgentActivityState=x,f.AgentStatus=ce,f.ChatCreationFailed=F,f.ChatMode=j,f.ChatModeDowngraded=ae,f.ChatProgress=K,f.ConnectionState=M,f.ConnectivityState=q,f.DataChannelSignalMap=O,f.DocumentType=fe,f.KnowledgeType=ue,f.PlanGroup=oe,f.Providers=ge,f.RateState=de,f.StreamEvents=V,f.StreamType=N,f.StreamingState=v,f.Subject=le,f.UserPlan=se,f.ValidationError=H,f.VideoType=Z,f.VoiceAccess=he,f.WsError=ie,f.createAgentManager=gt,f.getAgent=ht,f.mapVideoType=me,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,5 +1,5 @@
|
|
|
1
1
|
import { CreateStreamOptions, PayloadType, StreamType, StreamingManagerOptions } from '../../types/index';
|
|
2
|
-
export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL }: StreamingManagerOptions): Promise<{
|
|
2
|
+
export declare function createStreamingManager<T extends CreateStreamOptions>(agentId: string, agent: T, { debug, callbacks, auth, baseURL, analytics }: StreamingManagerOptions): Promise<{
|
|
3
3
|
/**
|
|
4
4
|
* Method to send request to server to get clip or talk depend on you payload
|
|
5
5
|
* @param payload
|
|
@@ -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;
|