@d-id/client-sdk 1.1.0-beta.7 → 1.1.0-beta.9
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 +648 -695
- package/dist/index.umd.cjs +1 -1
- package/dist/src/api/agents.d.ts +0 -1
- package/dist/src/api/apiClient.d.ts +2 -3
- package/dist/src/types/entities/agents/agent.d.ts +0 -1
- package/dist/src/types/entities/agents/chat.d.ts +1 -1
- package/dist/src/types/entities/agents/manager.d.ts +0 -4
- package/dist/src/types/stream/api/clip.d.ts +0 -1
- package/dist/src/types/stream/api/talk.d.ts +0 -1
- package/dist/src/types/stream/stream.d.ts +0 -2
- package/package.json +1 -1
package/dist/index.umd.cjs
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
(function(m,P){typeof exports=="object"&&typeof module<"u"?P(exports):typeof define=="function"&&define.amd?define(["exports"],P):(m=typeof globalThis<"u"?globalThis:m||self,P(m.index={}))})(this,function(m){"use strict";var yt=Object.defineProperty;var pt=(m,P,N)=>P in m?yt(m,P,{enumerable:!0,configurable:!0,writable:!0,value:N}):m[P]=N;var Q=(m,P,N)=>(pt(m,typeof P!="symbol"?P+"":P,N),N);class P extends Error{constructor({kind:r,description:a,error:s}){super(JSON.stringify({kind:r,description:a}));Q(this,"kind");Q(this,"description");Q(this,"error");this.kind=r,this.description=a,this.error=s}}class N extends P{constructor(t,r){super({kind:"ChatCreationFailed",description:`Failed to create ${r?"persistent":""} chat, mode: ${t}`})}}class ae extends P{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class H extends P{constructor(r,a){super({kind:"ValidationError",description:r});Q(this,"key");this.key=a}}class ie extends P{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||{}),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||{}),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||{}),x=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(x||{}),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 C=(e=>(e.Start="START",e.Stop="STOP",e))(C||{}),q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(q||{}),V=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(V||{});const O={"stream/started":"START","stream/done":"STOP"};var X=(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))(X||{}),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||{}),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 je=45*1e3,Pe="X-Playground-Chat",Y="https://api.d-id.com",be="wss://notifications.d-id.com",$e="79f81a83a67430be2bc0fd61042b8faa",we=e=>new Promise(t=>setTimeout(t,e)),G=()=>Math.random().toString(16).slice(2),Le=e=>[I.TextOnly,I.Playground,I.Maintenance].includes(e);function Ae(e,t){let r;return{promise:new Promise((s,i)=>{r=setTimeout(()=>i(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 s=1;s<=r.limit;s++)try{if(!r.timeout)return await e();const{promise:i,clear:n}=Ae(r.timeout,r.timeoutErrorMessage),o=e().finally(n);return await Promise.race([o,i])}catch(i){if(a=i,!r.shouldRetryFn(i)||s>=r.limit)throw i;await we(r.delayMs),r.onRetry(i)}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 ze=e=>ee(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function te(e,t=Y,r){const a=async(s,i)=>{const{skipErrorHandler:n,...o}=i||{},c=await ze(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...o,headers:{...o.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 f=new Error(l);throw r&&!n&&r(f,{url:s,options:o,headers:c.headers}),f}return c.json()};return{get(s,i){return a(s,{...i,method:"GET"})},post(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"POST"})},put(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"PUT"})},delete(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,n){return a(s,{...n,body:JSON.stringify(i),method:"PATCH"})}}}function ve(e,t=Y,r){const a=te(e,`${t}/agents`,r);return{joinChat(s,i,n,o){return console.info("joinChat",{userId:s,externalId:i,chatId:n,options:o}),a.put(`/chats/${n}`,{user_id:s,external_id:i},o)},create(s,i){return a.post("/",s,i)},getAgents(s,i){return a.get(`/${s?`?tag=${s}`:""}`,i).then(n=>n??[])},getById(s,i){return a.get(`/${s}`,i)},delete(s,i){return a.delete(`/${s}`,void 0,i)},update(s,i,n){return a.patch(`/${s}`,i,n)},newChat(s,i,n){return a.post(`/${s}/chat`,i,n)},chat(s,i,n,o){return a.post(`/${s}/chat/${i}`,n,o)},createRating(s,i,n,o){return a.post(`/${s}/chat/${i}/ratings`,n,o)},updateRating(s,i,n,o,c){return a.patch(`/${s}/chat/${i}/ratings/${n}`,o,c)},deleteRating(s,i,n,o){return a.delete(`/${s}/chat/${i}/ratings/${n}`,o)},getSTTToken(s,i){return a.get(`/${s}/stt-token`,i)}}}const Ce=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Fe(e){var s,i,n,o;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:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(o=(n=e.presenter)==null?void 0:n.voice)==null?void 0:o.type}}}const Ne=e=>e.reduce((t,r)=>t+r,0),Je=e=>Ne(e)/e.length;function Ue(e,t,r){var c,l,f;const{event:a,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:n}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(l=s==null?void 0:s.script)==null?void 0:l.provider,language:n}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(f=t==null?void 0:t.presenter)==null?void 0:f.stitch:void 0,...r}}let ne={};const We="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ke(e){var i,n,o,c,l,f;const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk",r=e.agent.presenter,a=(i=e.agent.llm)==null?void 0:i.prompt_customization,s={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:(o=e.agent.llm)==null?void 0:o.instructions},temperature:(c=e.agent.llm)==null?void 0:c.temperature,knowledgeSource:a==null?void 0:a.knowledge_source,starterQuestionsCount:(f=(l=e.agent.knowledge)==null?void 0:l.starter_message)==null?void 0:f.length,topicsToAvoid:a==null?void 0:a.topics_to_avoid,maxResponseLength:a==null?void 0:a.max_response_length};return{...s,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:()=>Math.random().toString(16).slice(2),enrich(g){const R={};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")&&(R[p]=g[p]);this.additionalProperties={...this.additionalProperties,...R}},async track(g,R){if(!this.isEnabled)return Promise.resolve();const{audioPath:p,...y}=R||{},S={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:g,properties:{...this.additionalProperties,...y,...s,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(We,S).then(B=>B.json())}catch(B){return console.error(B)}},linkTrack(g,R,p,y){ne[g]||(ne[g]={events:{},resolvedDependencies:[]}),y.includes(p)||y.push(p);const S=ne[g];if(S.events[p]={props:R},S.resolvedDependencies.push(p),y.every(M=>S.resolvedDependencies.includes(M))){const M=y.reduce(($,d)=>S.events[d]?{...$,...S.events[d].props}:$,{});this.track(g,M),S.resolvedDependencies=S.resolvedDependencies.filter($=>!y.includes($)),y.forEach($=>{delete S.events[$]})}}}}function He(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const U=He();function ke(e){return e===I.Playground?{headers:{[Pe]:"true"}}:{}}async function De(e,t,r,a,s=!1,i){try{return!i&&a!==I.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},ke(a)),r.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:a})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??a}}catch(n){try{const o=JSON.parse(n.message);if((o==null?void 0:o.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(o){console.error("Error parsing the error message:",o)}throw new Error("Cannot create new chat")}}function xe(e){return e&&e.length>0?e:[]}function qe(e){return new Promise((t,r)=>{const{callbacks:a,host:s,auth:i}=e,{onMessage:n=null,onOpen:o=null,onClose:c=null,onError:l=null}=a||{},f=new WebSocket(`${s}?authorization=${pe(i)}`);f.onmessage=n,f.onclose=c,f.onerror=g=>{console.error(g),l==null||l("Websocket failed to connect",g),r(g)},f.onopen=g=>{o==null||o(g),t(f)}})}async function Ve(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 qe(e)}catch(s){if(a===t)throw s;await we(a*500)}return r}async function Xe(e,t,r){const a=r!=null&&r.onMessage?[r.onMessage]:[],s=await Ve({auth:e,host:t,callbacks:{onError:i=>{var n;return(n=r.onError)==null?void 0:n.call(r,new ie(i))},onMessage(i){console.log("onMessage",i);const n=JSON.parse(i.data);a.forEach(o=>o(n.event,n))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>a.push(i)}}function Ye(e){if(e.answer!==void 0)return e.answer;let t=0,r="";for(;t in e;)r+=e[t++];return r}function Qe(e,t,r,a,s){const i=a.messages[a.messages.length-1];if(!(e===x.Partial||e===x.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:n,sequence:o}=t;e===x.Partial?r[o]=n:r.answer=n;const c=Ye(r);(i.content!==c||e===x.Answer)&&(i.content=c,s==null||s([...a.messages],e))}function Ge(e,t,r,a,s){let i={};return{clearQueue:()=>i={},onMessage:(n,o)=>{var c,l;if("content"in o)Qe(n,o,i,t,r.callbacks.onNewMessage),n===x.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const f=X,g=[f.StreamVideoDone,f.StreamVideoError,f.StreamVideoRejected],R=[f.StreamFailed,f.StreamVideoError,f.StreamVideoRejected],p=Ue(o,a,{mode:t.chatMode});if(n=n,n===f.StreamVideoCreated)e.linkTrack("agent-video",p,f.StreamVideoCreated,["start"]);else if(g.includes(n)){const y=n.split("/")[1];R.includes(n)?e.track("agent-video",{...p,event:y}):e.linkTrack("agent-video",{...p,event:y},n,["done"])}R.includes(n)&&((l=(c=r.callbacks).onError)==null||l.call(c,new Error(`Stream failed with event ${n}`),{data:o})),o.event===f.StreamDone&&s()}}}}function Ze(e,t,r,a){const s=te(e,`${t}/agents/${r}`,a);return{createStream(i){return console.log("createClipApi",{options:i}),s.post("/streams",{output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent,conn_id:i.conn_id})},startConnection(i,n,o){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n})},addIceCandidate(i,n,o){return s.post(`/streams/${i}/ice`,{session_id:o,...n})},sendStreamRequest(i,n,o){return s.post(`/streams/${i}`,{session_id:n,...o})},close(i,n){return s.delete(`/streams/${i}`,{session_id:n})}}}function Oe(e,t,r,a){const s=te(e,`${t}/agents/${r}`,a);return{createStream(i,n){return s.post("/streams",{driver_url:i.driver_url,face:i.face,config:i.config,output_resolution:i.output_resolution,compatibility_mode:i.compatibility_mode,stream_warmup:i.stream_warmup,session_timeout:i.session_timeout,fluent:i.fluent,conn_id:i.conn_id},n)},startConnection(i,n,o,c){return s.post(`/streams/${i}/sdp`,{session_id:o,answer:n},c)},addIceCandidate(i,n,o,c){return s.post(`/streams/${i}/ice`,{session_id:o,...n},c)},sendStreamRequest(i,n,o,c){return s.post(`/streams/${i}`,{session_id:n,...o},c)},close(i,n,o){return s.delete(`/streams/${i}`,{session_id:n},o)}}}function et(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 tt(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:r,...a}=t,s=[];return t.freezeCount>0&&s.push("freeze"),t.framesPerSecond<21&&s.push("low fps"),t.framesDropped>0&&s.push("frames dropped"),t.packetsLost>0&&s.push("packet loss"),{...a,causes:s}})}function nt(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 rt(e,t,r){const a=e.map((o,c)=>c===0?r?{timestamp:o.timestamp,duration:0,bytesReceived:o.bytesReceived-r.bytesReceived,bitrate:(o.bytesReceived-r.bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-r.packetsReceived,packetsLost:o.packetsLost-r.packetsLost,framesDropped:o.framesDropped-r.framesDropped,framesDecoded:o.framesDecoded-r.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-r.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-r.jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-r.jitterBufferDelay)/(o.jitterBufferEmittedCount-r.jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-r.freezeCount,freezeDuration:o.freezeDuration-r.freezeDuration}:{timestamp:o.timestamp,duration:0,bytesReceived:o.bytesReceived,bitrate:o.bytesReceived*8/(t/1e3),packetsReceived:o.packetsReceived,packetsLost:o.packetsLost,framesDropped:o.framesDropped,framesDecoded:o.framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount,avgJitterDelayInInterval:o.jitterBufferDelay/o.jitterBufferEmittedCount,framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount,freezeDuration:o.freezeDuration}:{timestamp:o.timestamp,duration:t*c/1e3,bytesReceived:o.bytesReceived-e[c-1].bytesReceived,bitrate:(o.bytesReceived-e[c-1].bytesReceived)*8/(t/1e3),packetsReceived:o.packetsReceived-e[c-1].packetsReceived,packetsLost:o.packetsLost-e[c-1].packetsLost,framesDropped:o.framesDropped-e[c-1].framesDropped,framesDecoded:o.framesDecoded-e[c-1].framesDecoded,jitter:o.jitter,jitterBufferDelay:o.jitterBufferDelay-e[c-1].jitterBufferDelay,jitterBufferEmittedCount:o.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(o.jitterBufferDelay-e[c-1].jitterBufferDelay)/(o.jitterBufferEmittedCount-e[c-1].jitterBufferEmittedCount),framesPerSecond:o.framesPerSecond,freezeCount:o.freezeCount-e[c-1].freezeCount,freezeDuration:o.freezeDuration-e[c-1].freezeDuration}),s=tt(a),i=s.reduce((o,c)=>o+(c.causes.includes("low fps")?1:0),0),n=a.map(o=>o.avgJitterDelayInInterval);return{webRTCStats:{anomalies:s,aggregateReport:et(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...n),maxJitterDelayInInterval:Math.max(...n),avgJitterDelayInInterval:Je(n)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const re=100,at=Math.max(Math.ceil(400/re),1),it=.25,ot=.28;function st(){let e=0,t,r,a=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const n=i.jitterBufferDelay,o=i.jitterBufferEmittedCount;if(r&&o>r){const f=n-t,g=o-r;a=f/g}t=n,r=o;const c=i.framesDecoded,l=c-e>0;return e=c,{isReceiving:l,avgJitterDelayInInterval:a,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:a}}}function ct(e,t,r,a,s,i=!1){let n=[],o,c=0,l=!1,f=q.Unknown,g=q.Unknown,R=0,p=0;const y=st();return setInterval(async()=>{const S=await e.getStats(),{isReceiving:B,avgJitterDelayInInterval:M,freezeCount:$}=y(S),d=nt(S);if(B)c=0,R=$-p,g=M<it?q.Strong:M>ot&&R>1?q.Weak:f,g!==f&&(s==null||s(g),f=g,p+=R,R=0),l||(a==null||a(C.Start),o=n[n.length-1],n=[],l=!0),n.push(d);else if(l&&(c++,c>=at)){const w=rt(n,re,o);a==null||a(C.Stop,w),t()||r(),l=!1}},re)}let Re=!1;const W=(e,t)=>Re&&console.log(e,t),dt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function Se(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 lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:a}){e===C.Start&&t===C.Start?r==null||r(C.Start):e===C.Stop&&t===C.Stop&&(r==null||r(C.Stop,a))}function ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:s}){e===C.Start?r==null||r(C.Start):e===C.Stop&&(r==null||r(C.Stop,s)),t===C.Start?a==null||a(V.Talking):t===C.Stop&&(a==null||a(V.Idle))}function _e({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,streamType:s,report:i}){s===J.Legacy?lt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,report:i}):s===J.Fluent&&ut({statsSignal:e,dataChannelSignal:t,onVideoStateChange:r,onAgentActivityStateChange:a,report:i})}async function ft(e,t,{debug:r=!1,callbacks:a,auth:s,baseURL:i=Y,analytics:n}){Re=r;let o=!1,c=!1,l=C.Stop,f=C.Stop,g=q.Unknown;console.log("OFEK TEST");const{startConnection:R,sendStreamRequest:p,close:y,createStream:S,addIceCandidate:B}=t.videoType===Z.Clip?Ze(s,i,e,a.onError):Oe(s,i,e,a.onError),{id:M,offer:$,ice_servers:d,session_id:w,fluent:D}=await S(t),h=new dt({iceServers:d}),T=h.createDataChannel("JanusDataChannel");if(!w)throw new Error("Could not create session_id");const v=D?J.Fluent:J.Legacy;n.enrich({"stream-type":v});const j=t.stream_warmup&&!D,L=()=>o,z=()=>{var u;o=!0,c&&((u=a.onConnectionStateChange)==null||u.call(a,E.Connected))},_=ct(h,L,z,(u,k)=>_e({statsSignal:f=u,dataChannelSignal:v===J.Legacy?l:void 0,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,report:k,streamType:v}),u=>{var k;return(k=a.onConnectivityStateChange)==null?void 0:k.call(a,g)},j);h.onicecandidate=u=>{var k;W("peerConnection.onicecandidate",u);try{u.candidate&&u.candidate.sdpMid&&u.candidate.sdpMLineIndex!==null?B(M,{candidate:u.candidate.candidate,sdpMid:u.candidate.sdpMid,sdpMLineIndex:u.candidate.sdpMLineIndex},w):B(M,{candidate:null},w)}catch(A){(k=a.onError)==null||k.call(a,A,{streamId:M})}},T.onopen=()=>{c=!0,(!j||o)&&z()},T.onmessage=u=>{u.data in O&&(l=O[u.data],_e({statsSignal:v===J.Legacy?f:void 0,dataChannelSignal:l,onVideoStateChange:a.onVideoStateChange,onAgentActivityStateChange:a.onAgentActivityStateChange,streamType:v}))},h.oniceconnectionstatechange=()=>{var k;W("peerConnection.oniceconnectionstatechange => "+h.iceConnectionState);const u=Se(h.iceConnectionState);u!==E.Connected&&((k=a.onConnectionStateChange)==null||k.call(a,u))},h.ontrack=u=>{var k;W("peerConnection.ontrack",u),(k=a.onSrcObjectReady)==null||k.call(a,u.streams[0])},await h.setRemoteDescription($),W("set remote description OK");const b=await h.createAnswer();return W("create answer OK"),await h.setLocalDescription(b),W("set local description OK"),await R(M,b,w),W("start connection OK"),{speak(u){return p(M,w,u)},async disconnect(){var u,k,A;if(M){const F=Se(h.iceConnectionState);if(h){if(F===E.New){(u=a.onVideoStateChange)==null||u.call(a,C.Stop),clearInterval(_);return}h.close(),h.oniceconnectionstatechange=null,h.onnegotiationneeded=null,h.onicecandidate=null,h.ontrack=null}try{F===E.Connected&&await y(M,w).catch(K=>{})}catch(K){W("Error on close stream connection",K)}(k=a.onVideoStateChange)==null||k.call(a,C.Stop),(A=a.onAgentActivityStateChange)==null||A.call(a,V.Idle),clearInterval(_)}},sessionId:w,streamId:M,streamType:v}}function mt(e,t){const{streamOptions:r}=t??{},s=new URLSearchParams(window.location.search).get("conn_id")||void 0;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,conn_id:s}}function Ee(e,t,r,a,s){U.get()>0&&(e===C.Start?a.linkTrack("agent-video",{event:"start",latency:U.get(!0),"stream-type":s},"start",[X.StreamVideoCreated]):e===C.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":s,...r},"done",[X.StreamVideoDone]))}function Me(e,t,r){return U.reset(),new Promise(async(a,s)=>{try{const i=await ft(e.id,mt(e,t),{...t,analytics:r,callbacks:{...t.callbacks,onConnectionStateChange:n=>{var o,c;(c=(o=t.callbacks).onConnectionStateChange)==null||c.call(o,n),n===E.Connected&&a(i)},onVideoStateChange:(n,o)=>{var c,l;(l=(c=t.callbacks).onVideoStateChange)==null||l.call(c,n),Ee(n,e,o,r,i.streamType)},onAgentActivityStateChange:n=>{var o,c;(c=(o=t.callbacks).onAgentActivityStateChange)==null||c.call(o,n),Ee(n===V.Talking?C.Start:C.Stop,e,void 0,r,i.streamType)}}})}catch(i){s(i)}})}async function gt(e,t,r,a,s){var l,f,g,R;const i=new URLSearchParams(window.location.search),n=i.get("conn_id")||void 0,o=i.get("external_chat_id")||void 0,c=i.get("external_owner_id")||void 0;if(o&&c&&n){console.log("join chat",{connId:n,externalChatId:o,userId:c});const p=await r.joinChat(c,n,o),y=await Me(e,t,a);return{chat:p,streamingManager:y}}else{const{chat:p,chatMode:y}=await De(e,r,a,t.mode,t.persistentChat,s);if(y&&y!==t.mode&&(t.mode=y,(f=(l=t.callbacks).onModeChange)==null||f.call(l,y),y===I.TextOnly))return(R=(g=t.callbacks).onError)==null||R.call(g,new ae(y)),{chat:p};const S=await Me(e,t,a);return{chat:p,streamingManager:S}}}async function ht(e,t){var B,M,$;let r=!0;const a=t.mixpanelKey||$e,s=t.wsURL||be,i=t.baseURL||Y,n={messages:[],chatMode:t.mode||I.Functional},o=ve(t.auth,i,t.callbacks.onError),c=await o.getById(e),l=Ke({token:a,agent:c,isEnabled:t.enableAnalitics,distinctId:t.distinctId}),{onMessage:f,clearQueue:g}=Ge(l,n,t,c,()=>{var d;return(d=n.socketManager)==null?void 0:d.disconnect()});n.messages=xe(t.initialMessages),(M=(B=t.callbacks).onNewMessage)==null||M.call(B,[...n.messages],"answer");function R(){var T,v,j;const d=(T=n.streamingManager)==null?void 0:T.streamId,w=(v=n.chat)==null?void 0:v.owner_id,D=(j=n.chat)==null?void 0:j.id,h=window.location+`?conn_id=${d}&external_chat_id=${D}&external_owner_id=${w}`;return console.info(h),h}l.track("agent-sdk",{event:"loaded",...Fe(c)});async function p(d){var j,L,z,_,b,u,k;(L=(j=t.callbacks).onConnectionStateChange)==null||L.call(j,E.Connecting),U.reset(),d&&!r&&(delete n.chat,(_=(z=t.callbacks).onNewMessage)==null||_.call(z,[...n.messages],"answer"));const w=t.mode===I.DirectPlayback?Promise.resolve(void 0):Xe(t.auth,s,{onMessage:f,onError:t.callbacks.onError}),D=ee(()=>gt(c,t,o,l,n.chat),{limit:3,timeout:je,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:A=>(A==null?void 0:A.message)!=="Could not connect"&&A.status!==429,delayMs:1e3}).catch(A=>{var F,K;throw S(I.Maintenance),(K=(F=t.callbacks).onConnectionStateChange)==null||K.call(F,E.Fail),A}),[h,{streamingManager:T,chat:v}]=await Promise.all([w,D]);v&&v.id!==((b=n.chat)==null?void 0:b.id)&&((k=(u=t.callbacks).onNewChat)==null||k.call(u,v.id)),n.streamingManager=T,n.socketManager=h,n.chat=v,r=!1,S((v==null?void 0:v.chat_mode)??t.mode??I.Functional)}async function y(){var d,w,D,h;(d=n.socketManager)==null||d.disconnect(),await((w=n.streamingManager)==null?void 0:w.disconnect()),delete n.streamingManager,delete n.socketManager,(h=(D=t.callbacks).onConnectionStateChange)==null||h.call(D,E.Disconnected)}async function S(d){var w,D;d!==n.chatMode&&(l.track("agent-mode-change",{mode:d}),n.chatMode=d,n.chatMode!==I.Functional&&await y(),(D=(w=t.callbacks).onModeChange)==null||D.call(w,d))}return{agent:c,getInviteLink:R,getStreamType:()=>{var d;return(d=n.streamingManager)==null?void 0:d.streamType},starterMessages:(($=c.knowledge)==null?void 0:$.starter_message)||[],getSTTToken:()=>o.getSTTToken(c.id),changeMode:S,enrichAnalytics:l.enrich,async connect(){var d;await p(!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 y(),await p(!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 y(),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 T,v,j,L,z;const w=()=>{if(t.mode===I.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===I.Maintenance)throw new H("Chat is in maintenance mode");if(![I.TextOnly,I.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")}},D=async()=>{var _,b;if(!n.chat){console.info("create new chat");const u=await De(c,o,l,n.chatMode,t.persistentChat);if(!u.chat)throw new N(n.chatMode,!!t.persistentChat);n.chat=u.chat,(b=(_=t.callbacks).onNewChat)==null||b.call(_,n.chat.id)}return n.chat.id},h=async(_,b)=>ee(()=>{var u,k;return o.chat(c.id,b,{chatMode:n.chatMode,streamId:(u=n.streamingManager)==null?void 0:u.streamId,sessionId:(k=n.streamingManager)==null?void 0:k.sessionId,messages:_.map(({matches:A,...F})=>F)},{...ke(n.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:u=>{var F,K,Ie,Te;const k=(F=u==null?void 0:u.message)==null?void 0:F.includes("missing or invalid session_id");return!((K=u==null?void 0:u.message)==null?void 0:K.includes("Stream Error"))&&!k?((Te=(Ie=t.callbacks).onError)==null||Te.call(Ie,u),!1):!0},onRetry:async()=>{await y(),await p(!1)}});try{g(),w(),n.messages.push({id:G(),role:"user",content:d,created_at:new Date(U.update()).toISOString()}),(v=(T=t.callbacks).onNewMessage)==null||v.call(T,[...n.messages],"user");const _=await D(),b=await h([...n.messages],_);return n.messages.push({id:G(),role:"assistant",content:b.result||"",created_at:new Date().toISOString(),context:b.context,matches:b.matches}),l.track("agent-message-send",{event:"success",mode:n.chatMode,messages:n.messages.length+1}),b.result&&((L=(j=t.callbacks).onNewMessage)==null||L.call(j,[...n.messages],"answer"),l.track("agent-message-received",{latency:U.get(!0),mode:n.chatMode,messages:n.messages.length})),b}catch(_){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}),_}},rate(d,w,D){var v,j,L,z;const h=n.messages.find(_=>_.id===d);if(n.chat){if(!h)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const T=((v=h.matches)==null?void 0:v.map(_=>[_.document_id,_.id]))??[];return l.track("agent-rate",{event:D?"update":"create",thumb:w===1?"up":"down",knowledge_id:((j=c.knowledge)==null?void 0:j.id)??"",mode:n.chatMode,matches:T,score:w}),D?o.updateRating(c.id,n.chat.id,D,{knowledge_id:((L=c.knowledge)==null?void 0:L.id)??"",message_id:d,matches:T,score:w}):o.createRating(c.id,n.chat.id,{knowledge_id:((z=c.knowledge)==null?void 0:z.id)??"",message_id:d,matches:T,score:w})},deleteRate(d){var w;if(!n.chat)throw new Error("Chat is not initialized");return l.track("agent-rate-delete",{type:"text",chat_id:(w=n.chat)==null?void 0:w.id,id:d,mode:n.chatMode}),o.deleteRating(c.id,n.chat.id,d)},async speak(d){var T,v,j,L;if(!n.streamingManager)throw new Error("Please connect to the agent first");function w(){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 D=w();l.track("agent-speak",D),U.update(),(T=n.chat)!=null&&T.id&&D.type==="text"&&(n.messages.push({id:G(),role:"assistant",content:D.input,created_at:new Date(U.get(!0)).toISOString()}),(j=(v=t.callbacks).onNewMessage)==null||j.call(v,[...n.messages],"answer"));const h=Le(n.chatMode);return n.chat&&h?{duration:0,status:"success"}:n.streamingManager.speak({script:D,metadata:{chat_id:(L=n.chat)==null?void 0:L.id,agent_id:c.id}})}}}function wt(e,t,r){const{getById:a}=ve(t,r||Y);return a(e)}m.AgentActivityState=V,m.AgentStatus=ce,m.ChatCreationFailed=N,m.ChatMode=I,m.ChatModeDowngraded=ae,m.ChatProgress=x,m.ConnectionState=E,m.ConnectivityState=q,m.DataChannelSignalMap=O,m.DocumentType=fe,m.KnowledgeType=ue,m.PlanGroup=se,m.Providers=ge,m.RateState=de,m.StreamEvents=X,m.StreamType=J,m.StreamingState=C,m.Subject=le,m.UserPlan=oe,m.ValidationError=H,m.VideoType=Z,m.VoiceAccess=he,m.WsError=ie,m.createAgentManager=ht,m.getAgent=wt,m.mapVideoType=me,Object.defineProperty(m,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"})});
|
package/dist/src/api/agents.d.ts
CHANGED
|
@@ -1,7 +1,6 @@
|
|
|
1
1
|
import { Agent, AgentPayload, Auth, Chat, ChatPayload, ChatResponse, RatingEntity, RatingPayload, STTTokenResponse } from '../types/index';
|
|
2
2
|
import { RequestOptions } from './apiClient';
|
|
3
3
|
export declare function createAgentsApi(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
|
|
4
|
-
joinChat(userId: string, externalId: string, chatId: string, options?: RequestOptions): Promise<Chat>;
|
|
5
4
|
create(payload: AgentPayload, options?: RequestOptions): Promise<Agent>;
|
|
6
5
|
getAgents(tag?: string, options?: RequestOptions): Promise<Agent[]>;
|
|
7
6
|
getById(id: string, options?: RequestOptions): Promise<Agent>;
|
|
@@ -5,7 +5,6 @@ export type RequestOptions = RequestInit & {
|
|
|
5
5
|
export declare function createClient(auth: Auth, host?: string, onError?: (error: Error, errorData: object) => void): {
|
|
6
6
|
get<T = any>(url: string, options?: RequestOptions): Promise<T>;
|
|
7
7
|
post<T_1 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_1>;
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
patch<T_4 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_4>;
|
|
8
|
+
delete<T_2 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_2>;
|
|
9
|
+
patch<T_3 = any>(url: string, body?: any, options?: RequestOptions): Promise<T_3>;
|
|
11
10
|
};
|
|
@@ -60,5 +60,4 @@ export interface AgentsAPI {
|
|
|
60
60
|
persist: boolean;
|
|
61
61
|
}, options?: RequestInit): Promise<Chat>;
|
|
62
62
|
chat(agentId: string, chatId: string, payload: ChatPayload, options?: RequestInit): Promise<ChatResponse>;
|
|
63
|
-
joinChat(userId: string, externalId: string, chatId: string, options?: RequestInit): Promise<Chat>;
|
|
64
63
|
}
|
|
@@ -20,7 +20,7 @@ export interface RatingEntity {
|
|
|
20
20
|
export type RatingPayload = Omit<RatingEntity, 'owner_id' | 'id' | 'created_at' | 'modified_at' | 'created_by' | 'external_id' | 'agent_id' | 'chat_id'>;
|
|
21
21
|
export interface Message {
|
|
22
22
|
id: string;
|
|
23
|
-
role?: 'system' | 'assistant' | 'user' | 'function' | 'tool'
|
|
23
|
+
role?: 'system' | 'assistant' | 'user' | 'function' | 'tool';
|
|
24
24
|
content: string;
|
|
25
25
|
created_at?: string;
|
|
26
26
|
matches?: ChatResponse['matches'];
|
|
@@ -111,7 +111,6 @@ interface StreamOptions {
|
|
|
111
111
|
* @maximum 1080
|
|
112
112
|
*/
|
|
113
113
|
outputResolution?: number;
|
|
114
|
-
conn_id?: string;
|
|
115
114
|
/**
|
|
116
115
|
* Whether to request fluent stream.
|
|
117
116
|
* @default false
|
|
@@ -134,8 +133,6 @@ export interface AgentManagerOptions {
|
|
|
134
133
|
streamOptions?: StreamOptions;
|
|
135
134
|
initialMessages?: Message[];
|
|
136
135
|
persistentChat?: boolean;
|
|
137
|
-
chatId?: string;
|
|
138
|
-
conn_id?: string;
|
|
139
136
|
}
|
|
140
137
|
export interface AgentManager {
|
|
141
138
|
/**
|
|
@@ -200,6 +197,5 @@ export interface AgentManager {
|
|
|
200
197
|
* @param properties flat json object with properties that will be added to analytics events fired from the sdk
|
|
201
198
|
*/
|
|
202
199
|
enrichAnalytics: (properties: Record<string, any>) => void;
|
|
203
|
-
getInviteLink: () => string;
|
|
204
200
|
}
|
|
205
201
|
export {};
|
|
@@ -62,7 +62,6 @@ export interface TalkStreamOptions extends CreateTalkStreamRequest {
|
|
|
62
62
|
export interface ClipStreamOptions extends CreateClipStreamRequest {
|
|
63
63
|
videoType: VideoType.Clip;
|
|
64
64
|
fluent?: boolean;
|
|
65
|
-
conn_id?: string;
|
|
66
65
|
}
|
|
67
66
|
export type CreateStreamOptions = TalkStreamOptions | ClipStreamOptions;
|
|
68
67
|
export type PayloadType<T> = T extends TalkStreamOptions ? SendTalkStreamPayload : T extends ClipStreamOptions ? SendClipStreamPayload : never;
|
|
@@ -79,7 +78,6 @@ export interface StreamingManagerOptions {
|
|
|
79
78
|
debug?: boolean;
|
|
80
79
|
auth: Auth;
|
|
81
80
|
analytics: Analytics;
|
|
82
|
-
conn_id?: string;
|
|
83
81
|
}
|
|
84
82
|
export interface SlimRTCStatsReport {
|
|
85
83
|
index: number;
|