@d-id/client-sdk 1.1.0-beta.7 → 1.1.1-staging.2
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 +934 -809
- 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/services/agent-manager/connect-to-manager.d.ts +7 -1
- package/dist/src/services/analytics/mixpanel.d.ts +2 -3
- package/dist/src/services/analytics/timestamp-tracker.d.ts +6 -1
- package/dist/src/services/interrupt/index.d.ts +4 -0
- package/dist/src/services/streaming-manager/index.d.ts +5 -0
- package/dist/src/services/streaming-manager/stats/report.d.ts +3 -0
- package/dist/src/types/entities/agents/agent.d.ts +0 -1
- package/dist/src/types/entities/agents/chat.d.ts +7 -1
- package/dist/src/types/entities/agents/manager.d.ts +10 -5
- package/dist/src/types/index.d.ts +1 -1
- 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/rtc.d.ts +2 -0
- package/dist/src/types/stream/stream.d.ts +8 -3
- package/dist/src/utils/analytics.d.ts +15 -0
- package/dist/src/utils/index.d.ts +1 -1
- package/package.json +47 -47
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(g,b){typeof exports=="object"&&typeof module<"u"?b(exports):typeof define=="function"&&define.amd?define(["exports"],b):(g=typeof globalThis<"u"?globalThis:g||self,b(g.index={}))})(this,function(g){"use strict";var Et=Object.defineProperty;var Mt=(g,b,U)=>b in g?Et(g,b,{enumerable:!0,configurable:!0,writable:!0,value:U}):g[b]=U;var O=(g,b,U)=>(Mt(g,typeof b!="symbol"?b+"":b,U),U);class b extends Error{constructor({kind:n,description:r,error:s}){super(JSON.stringify({kind:n,description:r}));O(this,"kind");O(this,"description");O(this,"error");this.kind=n,this.description=r,this.error=s}}class U extends b{constructor(t,n){super({kind:"ChatCreationFailed",description:`Failed to create ${n?"persistent":""} chat, mode: ${t}`})}}class ce extends b{constructor(t){super({kind:"ChatModeDowngraded",description:`Chat mode downgraded to ${t}`})}}class q extends b{constructor(n,r){super({kind:"ValidationError",description:n});O(this,"key");this.key=r}}class de extends b{constructor(t){super({kind:"WSError",description:t})}}var le=(e=>(e.TRIAL="trial",e.BASIC="basic",e.ENTERPRISE="enterprise",e.LITE="lite",e.ADVANCED="advanced",e))(le||{}),ue=(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))(ue||{}),fe=(e=>(e.Created="created",e.Started="started",e.Done="done",e.Error="error",e.Rejected="rejected",e.Ready="ready",e))(fe||{}),me=(e=>(e.Unrated="Unrated",e.Positive="Positive",e.Negative="Negative",e))(me||{}),_=(e=>(e.Functional="Functional",e.TextOnly="TextOnly",e.Maintenance="Maintenance",e.Playground="Playground",e.DirectPlayback="DirectPlayback",e))(_||{}),x=(e=>(e.Embed="embed",e.Query="query",e.Partial="partial",e.Answer="answer",e.Complete="done",e))(x||{}),ge=(e=>(e.KnowledgeProcessing="knowledge/processing",e.KnowledgeIndexing="knowledge/indexing",e.KnowledgeFailed="knowledge/error",e.KnowledgeDone="knowledge/done",e))(ge||{}),he=(e=>(e.Knowledge="knowledge",e.Document="document",e.Record="record",e))(he||{}),we=(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))(we||{}),te=(e=>(e.Clip="clip",e.Talk="talk",e))(te||{});const pe=e=>{switch(e){case"clip":return"clip";case"talk":return"talk";default:throw new Error(`Unknown video type: ${e}`)}};var p=(e=>(e.Start="START",e.Stop="STOP",e))(p||{}),Q=(e=>(e.Strong="STRONG",e.Weak="WEAK",e.Unknown="UNKNOWN",e))(Q||{}),V=(e=>(e.Idle="IDLE",e.Talking="TALKING",e))(V||{}),B=(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.StreamInterrupt="stream/interrupt",e.StreamVideoCreated="stream-video/started",e.StreamVideoDone="stream-video/done",e.StreamVideoError="stream-video/error",e.StreamVideoRejected="stream-video/rejected",e))(B||{}),I=(e=>(e.New="new",e.Fail="fail",e.Connected="connected",e.Connecting="connecting",e.Closed="closed",e.Completed="completed",e.Disconnected="disconnected",e))(I||{}),J=(e=>(e.Legacy="legacy",e.Fluent="fluent",e))(J||{}),ye=(e=>(e.Amazon="amazon",e.Microsoft="microsoft",e.Afflorithmics="afflorithmics",e.Elevenlabs="elevenlabs",e))(ye||{}),ve=(e=>(e.Public="public",e.Premium="premium",e.Private="private",e))(ve||{});const Be=45*1e3,$e="X-Playground-Chat",Z="https://api.d-id.com",Le="wss://notifications.d-id.com",ze="79f81a83a67430be2bc0fd61042b8faa",ke=e=>new Promise(t=>setTimeout(t,e)),G=(e=16)=>{const t=new Uint8Array(e);return window.crypto.getRandomValues(t),Array.from(t,n=>n.toString(16).padStart(2,"0")).join("").slice(0,13)},Ne=e=>[_.TextOnly,_.Playground,_.Maintenance].includes(e);function Fe(e,t){let n;return{promise:new Promise((s,i)=>{n=setTimeout(()=>i(new Error(t)),e)}),clear:()=>clearTimeout(n)}}async function re(e,t){const n={limit:(t==null?void 0:t.limit)??3,delayMs:(t==null?void 0:t.delayMs)??0,timeout:(t==null?void 0:t.timeout)??3e4,timeoutErrorMessage:(t==null?void 0:t.timeoutErrorMessage)||"Timeout error",shouldRetryFn:(t==null?void 0:t.shouldRetryFn)??(()=>!0),onRetry:(t==null?void 0:t.onRetry)??(()=>{})};let r;for(let s=1;s<=n.limit;s++)try{if(!n.timeout)return await e();const{promise:i,clear:o}=Fe(n.timeout,n.timeoutErrorMessage),d=e().finally(o);return await Promise.race([d,i])}catch(i){if(r=i,!n.shouldRetryFn(i)||s>=n.limit)throw i;await ke(n.delayMs),n.onRetry(i)}throw r}function De(){let e=window.localStorage.getItem("did_external_key_id");if(!e){let t=G();window.localStorage.setItem("did_external_key_id",t),e=t}return e}let Je=G();function Ce(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}.${De()}_${Je}`;throw new Error(`Unknown auth type: ${e}`)}const We=e=>re(e,{limit:3,delayMs:1e3,timeout:0,shouldRetryFn:t=>t.status===429});function ne(e,t=Z,n){const r=async(s,i)=>{const{skipErrorHandler:o,...d}=i||{},c=await We(()=>fetch(t+(s!=null&&s.startsWith("/")?s:`/${s}`),{...d,headers:{...d.headers,Authorization:Ce(e),"Content-Type":"application/json"}}));if(!c.ok){let a=await c.text().catch(()=>`Failed to fetch with status ${c.status}`);const u=new Error(a);throw n&&!o&&n(u,{url:s,options:d,headers:c.headers}),u}return c.json()};return{get(s,i){return r(s,{...i,method:"GET"})},post(s,i,o){return r(s,{...o,body:JSON.stringify(i),method:"POST"})},delete(s,i,o){return r(s,{...o,body:JSON.stringify(i),method:"DELETE"})},patch(s,i,o){return r(s,{...o,body:JSON.stringify(i),method:"PATCH"})}}}function Se(e,t=Z,n){const r=ne(e,`${t}/agents`,n);return{create(s,i){return r.post("/",s,i)},getAgents(s,i){return r.get(`/${s?`?tag=${s}`:""}`,i).then(o=>o??[])},getById(s,i){return r.get(`/${s}`,i)},delete(s,i){return r.delete(`/${s}`,void 0,i)},update(s,i,o){return r.patch(`/${s}`,i,o)},newChat(s,i,o){return r.post(`/${s}/chat`,i,o)},chat(s,i,o,d){return r.post(`/${s}/chat/${i}`,o,d)},createRating(s,i,o,d){return r.post(`/${s}/chat/${i}/ratings`,o,d)},updateRating(s,i,o,d,c){return r.patch(`/${s}/chat/${i}/ratings/${o}`,d,c)},deleteRating(s,i,o,d){return r.delete(`/${s}/chat/${i}/ratings/${o}`,d)},getSTTToken(s,i){return r.get(`/${s}/stt-token`,i)}}}const Re=e=>e.type==="clip"&&e.presenter_id.startsWith("v2_")?"clip_v2":e.type;function Ue(e){var s,i,o,d;const t=()=>/Mobi|Android/i.test(navigator.userAgent)?"Mobile":"Desktop",n=()=>{const c=navigator.platform;return c.toLowerCase().includes("win")?"Windows":c.toLowerCase().includes("mac")?"Mac OS X":c.toLowerCase().includes("linux")?"Linux":"Unknown"},r=e.presenter;return{$os:`${n()}`,isMobile:`${t()=="Mobile"}`,browser:navigator.userAgent,origin:window.location.origin,agentType:Re(r),agentVoice:{voiceId:(i=(s=e.presenter)==null?void 0:s.voice)==null?void 0:i.voice_id,provider:(d=(o=e.presenter)==null?void 0:o.voice)==null?void 0:d.type}}}function Ke(e){var n,r,s,i,o,d;const t=(n=e.llm)==null?void 0:n.prompt_customization;return{agentType:Re(e.presenter),owner_id:e.owner_id??"",promptVersion:(r=e.llm)==null?void 0:r.prompt_version,behavior:{role:t==null?void 0:t.role,personality:t==null?void 0:t.personality,instructions:(s=e.llm)==null?void 0:s.instructions},temperature:(i=e.llm)==null?void 0:i.temperature,knowledgeSource:t==null?void 0:t.knowledge_source,starterQuestionsCount:(d=(o=e.knowledge)==null?void 0:o.starter_message)==null?void 0:d.length,topicsToAvoid:t==null?void 0:t.topics_to_avoid,maxResponseLength:t==null?void 0:t.max_response_length}}const He=e=>e.reduce((t,n)=>t+n,0),Ie=e=>He(e)/e.length;function qe(e,t,n){var c,a,u;const{event:r,...s}=e,{template:i}=(t==null?void 0:t.llm)||{},{language:o}=((c=t==null?void 0:t.presenter)==null?void 0:c.voice)||{};return{...s,llm:{...s.llm,template:i},script:{...s.script,provider:{...(a=s==null?void 0:s.script)==null?void 0:a.provider,language:o}},stitch:(t==null?void 0:t.presenter.type)==="talk"?(u=t==null?void 0:t.presenter)==null?void 0:u.stitch:void 0,...n}}let ae={};const xe="https://api-js.mixpanel.com/track/?verbose=1&ip=1";function Ve(e){const t=window!=null&&window.hasOwnProperty("DID_AGENTS_API")?"agents-ui":"agents-sdk";return{token:e.token||"testKey",distinct_id:e.distinctId||De(),agentId:e.agentId,additionalProperties:{},isEnabled:e.isEnabled??!0,getRandom:G,enrich(n){this.additionalProperties={...this.additionalProperties,...n}},async track(n,r){if(!this.isEnabled)return Promise.resolve();const{audioPath:s,...i}=r||{},o={method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded"},body:new URLSearchParams({data:JSON.stringify([{event:n,properties:{...this.additionalProperties,...i,agentId:this.agentId,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(xe,o).then(d=>d.json())}catch(d){return console.error(d)}},linkTrack(n,r,s,i){ae[n]||(ae[n]={events:{},resolvedDependencies:[]}),i.includes(s)||i.push(s);const o=ae[n];if(o.events[s]={props:r},o.resolvedDependencies.push(s),i.every(c=>o.resolvedDependencies.includes(c))){const c=i.reduce((a,u)=>o.events[u]?{...a,...o.events[u].props}:a,{});this.track(n,c),o.resolvedDependencies=o.resolvedDependencies.filter(a=>!i.includes(a)),i.forEach(a=>{delete o.events[a]})}}}}function _e(){let e=0;return{reset:()=>e=0,update:()=>e=Date.now(),get:(t=!1)=>t?Date.now()-e:e}}const z=_e(),ie=_e();function Ee(e){return e===_.Playground?{headers:{[$e]:"true"}}:{}}async function Me(e,t,n,r,s=!1,i){try{return!i&&r!==_.DirectPlayback&&(i=await t.newChat(e.id,{persist:s},Ee(r)),n.track("agent-chat",{event:"created",chat_id:i.id,agent_id:e.id,mode:r})),{chat:i,chatMode:(i==null?void 0:i.chat_mode)??r}}catch(o){try{const d=JSON.parse(o.message);if((d==null?void 0:d.kind)==="InsufficientCreditsError")throw new Error("InsufficientCreditsError")}catch(d){console.error("Error parsing the error message:",d)}throw new Error("Cannot create new chat")}}function Xe(e){return e&&e.length>0?e:[]}function Ye(e,t,n,r){if(!e)throw new Error("Please connect to the agent first");if(!e.interruptAvailable)throw new Error("Interrupt is not enabled for this stream");if(t!==J.Fluent)throw new Error("Interrupt only available for Fluent streams");if(!n&&!r)throw new Error("No active video to interrupt")}async function se(e,t){const n={type:B.StreamInterrupt,videoId:t,timestamp:Date.now()};e.sendDataChannelMessage(JSON.stringify(n))}function Qe(e){return new Promise((t,n)=>{const{callbacks:r,host:s,auth:i}=e,{onMessage:o=null,onOpen:d=null,onClose:c=null,onError:a=null}=r||{},u=new WebSocket(`${s}?authorization=${Ce(i)}`);u.onmessage=o,u.onclose=c,u.onerror=y=>{console.error(y),a==null||a("Websocket failed to connect",y),n(y)},u.onopen=y=>{d==null||d(y),t(u)}})}async function Ge(e){const{retries:t=1}=e;let n=null;for(let r=0;(n==null?void 0:n.readyState)!==WebSocket.OPEN;r++)try{n=await Qe(e)}catch(s){if(r===t)throw s;await ke(r*500)}return n}async function Ze(e,t,n){const r=n!=null&&n.onMessage?[n.onMessage]:[],s=await Ge({auth:e,host:t,callbacks:{onError:i=>{var o;return(o=n.onError)==null?void 0:o.call(n,new de(i))},onMessage(i){const o=JSON.parse(i.data);r.forEach(d=>d(o.event,o))}}});return{socket:s,disconnect:()=>s.close(),subscribeToEvents:i=>r.push(i)}}function Oe(e){if(e.answer!==void 0)return e.answer;let t=0,n="";for(;t in e;)n+=e[t++];return n}function et(e,t,n,r,s){const i=r.messages[r.messages.length-1];if(!(e===x.Partial||e===x.Answer)||(i==null?void 0:i.role)!=="assistant")return;const{content:o,sequence:d}=t;e===x.Partial?n[d]=o:n.answer=o;const c=Oe(n);(i.content!==c||e===x.Answer)&&(i.content=c,s==null||s([...r.messages],e))}function tt(e,t,n,r,s){let i={};return{clearQueue:()=>i={},onMessage:(o,d)=>{var c,a;if("content"in d)et(o,d,i,t,n.callbacks.onNewMessage),o===x.Answer&&e.track("agent-message-received",{messages:t.messages.length,mode:t.chatMode});else{const u=B,y=[u.StreamVideoDone,u.StreamVideoError,u.StreamVideoRejected],h=[u.StreamFailed,u.StreamVideoError,u.StreamVideoRejected],N=qe(d,r,{mode:t.chatMode});if(o=o,o===u.StreamVideoCreated)e.linkTrack("agent-video",N,u.StreamVideoCreated,["start"]);else if(y.includes(o)){const K=o.split("/")[1];h.includes(o)?e.track("agent-video",{...N,event:K}):e.linkTrack("agent-video",{...N,event:K},o,["done"])}h.includes(o)&&((a=(c=n.callbacks).onError)==null||a.call(c,new Error(`Stream failed with event ${o}`),{data:d})),d.event===u.StreamDone&&s()}}}}function rt(e,t,n,r){const s=ne(e,`${t}/agents/${n}`,r);return{createStream(i){return 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})},startConnection(i,o,d){return s.post(`/streams/${i}/sdp`,{session_id:d,answer:o})},addIceCandidate(i,o,d){return s.post(`/streams/${i}/ice`,{session_id:d,...o})},sendStreamRequest(i,o,d){return s.post(`/streams/${i}`,{session_id:o,...d})},close(i,o){return s.delete(`/streams/${i}`,{session_id:o})}}}function nt(e,t,n,r){const s=ne(e,`${t}/agents/${n}`,r);return{createStream(i,o){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},o)},startConnection(i,o,d,c){return s.post(`/streams/${i}/sdp`,{session_id:d,answer:o},c)},addIceCandidate(i,o,d,c){return s.post(`/streams/${i}/ice`,{session_id:d,...o},c)},sendStreamRequest(i,o,d,c){return s.post(`/streams/${i}`,{session_id:o,...d},c)},close(i,o,d){return s.delete(`/streams/${i}`,{session_id:o},d)}}}function at(e,t,n){const r=(t.timestamp-e.timestamp)/1e3;return{duration:r,bytesReceived:t.bytesReceived-e.bytesReceived,bitrate:Math.round((t.bytesReceived-e.bytesReceived)*8/r),packetsReceived:t.packetsReceived-e.packetsReceived,packetsLost:t.packetsLost-e.packetsLost,framesDropped:t.framesDropped-e.framesDropped,framesDecoded:t.framesDecoded-e.framesDecoded,jitter:t.jitter,avgJitterDelayInInterval:(t.jitterBufferDelay-e.jitterBufferDelay)/(t.jitterBufferEmittedCount-e.jitterBufferEmittedCount),jitterBufferEmittedCount:t.jitterBufferEmittedCount-e.jitterBufferEmittedCount,jitterBufferDelay:(t.jitterBufferDelay-e.jitterBufferDelay)/r,framesPerSecond:t.framesPerSecond,freezeCount:t.freezeCount-e.freezeCount,freezeDuration:t.freezeDuration-e.freezeDuration,lowFpsCount:n}}function it(e){return e.filter(t=>t.freezeCount>0||t.framesPerSecond<21||t.framesDropped>0||t.packetsLost>0).map(t=>{const{timestamp:n,...r}=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"),{...r,causes:s}})}function st(e){let t="",n=0;for(const r of e.values())if(r&&r.type==="codec"&&r.mimeType.startsWith("video")&&(t=r.mimeType.split("/")[1]),r&&r.type==="candidate-pair"&&(n=r.currentRoundTripTime),r&&r.type==="inbound-rtp"&&r.kind==="video")return{codec:t,rtt:n,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 ot(e,t,n){const r=e.map((c,a)=>a===0?n?{timestamp:c.timestamp,duration:0,rtt:c.rtt,bytesReceived:c.bytesReceived-n.bytesReceived,bitrate:(c.bytesReceived-n.bytesReceived)*8/(t/1e3),packetsReceived:c.packetsReceived-n.packetsReceived,packetsLost:c.packetsLost-n.packetsLost,framesDropped:c.framesDropped-n.framesDropped,framesDecoded:c.framesDecoded-n.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-n.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-n.jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-n.jitterBufferDelay)/(c.jitterBufferEmittedCount-n.jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-n.freezeCount,freezeDuration:c.freezeDuration-n.freezeDuration}:{timestamp:c.timestamp,rtt:c.rtt,duration:0,bytesReceived:c.bytesReceived,bitrate:c.bytesReceived*8/(t/1e3),packetsReceived:c.packetsReceived,packetsLost:c.packetsLost,framesDropped:c.framesDropped,framesDecoded:c.framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount,avgJitterDelayInInterval:c.jitterBufferDelay/c.jitterBufferEmittedCount,framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount,freezeDuration:c.freezeDuration}:{timestamp:c.timestamp,duration:t*a/1e3,rtt:c.rtt,bytesReceived:c.bytesReceived-e[a-1].bytesReceived,bitrate:(c.bytesReceived-e[a-1].bytesReceived)*8/(t/1e3),packetsReceived:c.packetsReceived-e[a-1].packetsReceived,packetsLost:c.packetsLost-e[a-1].packetsLost,framesDropped:c.framesDropped-e[a-1].framesDropped,framesDecoded:c.framesDecoded-e[a-1].framesDecoded,jitter:c.jitter,jitterBufferDelay:c.jitterBufferDelay-e[a-1].jitterBufferDelay,jitterBufferEmittedCount:c.jitterBufferEmittedCount-e[a-1].jitterBufferEmittedCount,avgJitterDelayInInterval:(c.jitterBufferDelay-e[a-1].jitterBufferDelay)/(c.jitterBufferEmittedCount-e[a-1].jitterBufferEmittedCount),framesPerSecond:c.framesPerSecond,freezeCount:c.freezeCount-e[a-1].freezeCount,freezeDuration:c.freezeDuration-e[a-1].freezeDuration}),s=it(r),i=s.reduce((c,a)=>c+(a.causes.includes("low fps")?1:0),0),o=r.filter(c=>!!c.avgJitterDelayInInterval).map(c=>c.avgJitterDelayInInterval),d=r.filter(c=>!!c.rtt).map(c=>c.rtt);return{webRTCStats:{anomalies:s,minRtt:Math.min(...d),avgRtt:Ie(d),maxRtt:Math.max(...d),aggregateReport:at(e[0],e[e.length-1],i),minJitterDelayInInterval:Math.min(...o),maxJitterDelayInInterval:Math.max(...o),avgJitterDelayInInterval:Ie(o)},codec:e[0].codec,resolution:`${e[0].frameWidth}x${e[0].frameHeight}`}}const oe=100,ct=Math.max(Math.ceil(400/oe),1),dt=.25,lt=.28;function ut(){let e=0,t,n,r=0;return s=>{for(const i of s.values())if(i&&i.type==="inbound-rtp"&&i.kind==="video"){const o=i.jitterBufferDelay,d=i.jitterBufferEmittedCount;if(n&&d>n){const u=o-t,y=d-n;r=u/y}t=o,n=d;const c=i.framesDecoded,a=c-e>0;return e=c,{isReceiving:a,avgJitterDelayInInterval:r,freezeCount:i.freezeCount}}return{isReceiving:!1,avgJitterDelayInInterval:r}}}function ft(e,t,n,r,s,i=!1){let o=[],d,c=0,a=!1,u=Q.Unknown,y=Q.Unknown,h=0,N=0;const K=ut();return setInterval(async()=>{const X=await e.getStats(),{isReceiving:j,avgJitterDelayInInterval:W,freezeCount:H}=K(X),L=st(X);if(j)c=0,h=H-N,y=W<dt?Q.Strong:W>lt&&h>1?Q.Weak:u,y!==u&&(s==null||s(y),u=y,N+=h,h=0),a||(r==null||r(p.Start),d=o[o.length-1],o=[],a=!0),o.push(L);else if(a&&(c++,c>=ct)){const Y=ot(o,oe,d);r==null||r(p.Stop,Y),t()||n(),N=H,a=!1}},oe)}let Te=!1;const $=(e,t)=>Te&&console.log(e,t),mt=(window.RTCPeerConnection||window.webkitRTCPeerConnection||window.mozRTCPeerConnection).bind(window);function be(e){switch(e){case"connected":return I.Connected;case"checking":return I.Connecting;case"failed":return I.Fail;case"new":return I.New;case"closed":return I.Closed;case"disconnected":return I.Disconnected;case"completed":return I.Completed;default:return I.New}}function gt(e){const[t,n=""]=e.split(/:(.+)/);try{const r=JSON.parse(n);return $("parsed data channel message",{subject:t,data:r}),{subject:t,data:r}}catch(r){return $("Failed to parse data channel message, returning data as string",{subject:t,rawData:n,error:r}),{subject:t,data:n}}}function ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:r}){e===p.Start&&t===p.Start?n==null||n(p.Start):e===p.Stop&&t===p.Stop&&(n==null||n(p.Stop,r))}function wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:s}){e===p.Start?n==null||n(p.Start):e===p.Stop&&(n==null||n(p.Stop,s)),t===p.Start?r==null||r(V.Talking):t===p.Stop&&(r==null||r(V.Idle))}function je({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,streamType:s,report:i}){s===J.Legacy?ht({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,report:i}):s===J.Fluent&&wt({statsSignal:e,dataChannelSignal:t,onVideoStateChange:n,onAgentActivityStateChange:r,report:i})}async function pt(e,t,{debug:n=!1,callbacks:r,auth:s,baseURL:i=Z,analytics:o}){Te=n;let d=!1,c=!1,a=p.Stop,u=p.Stop;const{startConnection:y,sendStreamRequest:h,close:N,createStream:K,addIceCandidate:X}=t.videoType===te.Clip?rt(s,i,e,r.onError):nt(s,i,e,r.onError),{id:j,offer:W,ice_servers:H,session_id:L,fluent:Y,interrupt_enabled:ee}=await K(t),l=new mt({iceServers:H}),w=l.createDataChannel("JanusDataChannel");if(!L)throw new Error("Could not create session_id");const v=Y?J.Fluent:J.Legacy;o.enrich({"stream-type":v});const A=t.stream_warmup&&!Y,P=()=>d,D=()=>{var f;d=!0,c&&((f=r.onConnectionStateChange)==null||f.call(r,I.Connected))},E=ft(l,P,D,(f,m)=>je({statsSignal:u=f,dataChannelSignal:v===J.Legacy?a:void 0,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,report:m,streamType:v}),f=>{var m;return(m=r.onConnectivityStateChange)==null?void 0:m.call(r,f)},A);l.onicecandidate=f=>{var m;$("peerConnection.onicecandidate",f);try{f.candidate&&f.candidate.sdpMid&&f.candidate.sdpMLineIndex!==null?X(j,{candidate:f.candidate.candidate,sdpMid:f.candidate.sdpMid,sdpMLineIndex:f.candidate.sdpMLineIndex},L):X(j,{candidate:null},L)}catch(C){(m=r.onError)==null||m.call(r,C,{streamId:j})}},w.onopen=()=>{c=!0,(!A||d)&&D()};const M=f=>{var m;(m=r.onVideoIdChange)==null||m.call(r,f)};function T(f,m){if(f===B.StreamStarted&&typeof m=="object"&&"metadata"in m){const C=m.metadata;M(C.videoId)}f===B.StreamDone&&M(null),a=f===B.StreamStarted?p.Start:p.Stop,je({statsSignal:v===J.Legacy?u:void 0,dataChannelSignal:a,onVideoStateChange:r.onVideoStateChange,onAgentActivityStateChange:r.onAgentActivityStateChange,streamType:v})}function k(f,m){const C=typeof m=="string"?m:m==null?void 0:m.metadata;C&&o.enrich({streamMetadata:C}),o.track("agent-chat",{event:"ready"})}const S={[B.StreamStarted]:T,[B.StreamDone]:T,[B.StreamReady]:k};w.onmessage=f=>{var F;const{subject:m,data:C}=gt(f.data);(F=S[m])==null||F.call(S,m,C)},l.oniceconnectionstatechange=()=>{var m;$("peerConnection.oniceconnectionstatechange => "+l.iceConnectionState);const f=be(l.iceConnectionState);f!==I.Connected&&((m=r.onConnectionStateChange)==null||m.call(r,f))},l.ontrack=f=>{var m;$("peerConnection.ontrack",f),(m=r.onSrcObjectReady)==null||m.call(r,f.streams[0])},await l.setRemoteDescription(W),$("set remote description OK");const R=await l.createAnswer();return $("create answer OK"),await l.setLocalDescription(R),$("set local description OK"),await y(j,R,L),$("start connection OK"),{speak(f){return h(j,L,f)},async disconnect(){var f;if(j){const m=be(l.iceConnectionState);if(l){if(m===I.New){clearInterval(E);return}l.close(),l.oniceconnectionstatechange=null,l.onnegotiationneeded=null,l.onicecandidate=null,l.ontrack=null}try{m===I.Connected&&await N(j,L).catch(C=>{})}catch(C){$("Error on close stream connection",C)}(f=r.onAgentActivityStateChange)==null||f.call(r,V.Idle),clearInterval(E)}},sendDataChannelMessage(f){var m,C;if(!d||w.readyState!=="open"){$("Data channel is not ready for sending messages"),(m=r.onError)==null||m.call(r,new Error("Data channel is not ready for sending messages"),{streamId:j});return}try{w.send(f)}catch(F){$("Error sending data channel message",F),(C=r.onError)==null||C.call(r,F,{streamId:j})}},sessionId:L,streamId:j,streamType:v,interruptAvailable:ee}}function yt(e,t){const{streamOptions:n}=t??{};return{videoType:pe(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,fluent:n==null?void 0:n.fluent}}function vt(e,t,n,r,s){s===J.Fluent?kt(e,t,n,r,s):Ct(e,t,n,r,s)}function kt(e,t,n,r,s){e===p.Start?r.track("stream-session",{event:"start","stream-type":s}):e===p.Stop&&r.track("stream-session",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...n})}function Dt(e,t,n,r){z.get()<=0||(e===p.Start?n.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":r},"start",[B.StreamVideoCreated]):e===p.Stop&&n.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":r},"done",[B.StreamVideoDone]))}function Ct(e,t,n,r,s){z.get()<=0||(e===p.Start?r.linkTrack("agent-video",{event:"start",latency:z.get(!0),"stream-type":s},"start",[B.StreamVideoCreated]):e===p.Stop&&r.linkTrack("agent-video",{event:"stop",is_greenscreen:t.presenter.type==="clip"&&t.presenter.is_greenscreen,background:t.presenter.type==="clip"&&t.presenter.background,"stream-type":s,...n},"done",[B.StreamVideoDone]))}function St(e,t,n){return z.reset(),new Promise(async(r,s)=>{try{const i=await pt(e.id,yt(e,t),{...t,analytics:n,callbacks:{...t.callbacks,onConnectionStateChange:o=>{var d,c;(c=(d=t.callbacks).onConnectionStateChange)==null||c.call(d,o),o===I.Connected&&r(i)},onVideoStateChange:(o,d)=>{var c,a;(a=(c=t.callbacks).onVideoStateChange)==null||a.call(c,o),vt(o,e,d,n,i.streamType)},onAgentActivityStateChange:o=>{var d,c;(c=(d=t.callbacks).onAgentActivityStateChange)==null||c.call(d,o),o===V.Talking?ie.update():ie.reset(),Dt(o===V.Talking?p.Start:p.Stop,e,n,i.streamType)}}})}catch(i){s(i)}})}async function Rt(e,t,n,r,s){var c,a,u,y;const{chat:i,chatMode:o}=await Me(e,n,r,t.mode,t.persistentChat,s);if(o&&o!==t.mode&&(t.mode=o,(a=(c=t.callbacks).onModeChange)==null||a.call(c,o),o===_.TextOnly))return(y=(u=t.callbacks).onError)==null||y.call(u,new ce(o)),{chat:i};const d=await St(e,t,r);return{chat:i,streamingManager:d}}async function It(e,t){var L,Y,ee;let n=!0,r=!1,s=!1,i=null;const o=t.mixpanelKey||ze,d=t.wsURL||Le,c=t.baseURL||Z,a={messages:[],chatMode:t.mode||_.Functional},u=Ve({token:o,agentId:e,isEnabled:t.enableAnalitics,distinctId:t.distinctId});u.track("agent-sdk",{event:"init"});const y=Se(t.auth,c,t.callbacks.onError),h=await y.getById(e);u.enrich(Ke(h));const{onMessage:N,clearQueue:K}=tt(u,a,t,h,()=>{var l;return(l=a.socketManager)==null?void 0:l.disconnect()});a.messages=Xe(t.initialMessages),(Y=(L=t.callbacks).onNewMessage)==null||Y.call(L,[...a.messages],"answer");const X=l=>{i=l};u.track("agent-sdk",{event:"loaded",...Ue(h)});async function j(l){var E,M,T,k,S,R,f;(M=(E=t.callbacks).onConnectionStateChange)==null||M.call(E,I.Connecting),z.reset(),r=!1,s=!1,l&&!n&&(delete a.chat,(k=(T=t.callbacks).onNewMessage)==null||k.call(T,[...a.messages],"answer"));const w=t.mode===_.DirectPlayback?Promise.resolve(void 0):Ze(t.auth,d,{onMessage:N,onError:t.callbacks.onError}),v=re(()=>Rt(h,{...t,callbacks:{...t.callbacks,onVideoIdChange:X}},y,u,a.chat),{limit:3,timeout:Be,timeoutErrorMessage:"Timeout initializing the stream",shouldRetryFn:m=>(m==null?void 0:m.message)!=="Could not connect"&&m.status!==429,delayMs:1e3}).catch(m=>{var C,F;throw H(_.Maintenance),(F=(C=t.callbacks).onConnectionStateChange)==null||F.call(C,I.Fail),m}),[A,{streamingManager:P,chat:D}]=await Promise.all([w,v]);D&&D.id!==((S=a.chat)==null?void 0:S.id)&&((f=(R=t.callbacks).onNewChat)==null||f.call(R,D.id)),a.streamingManager=P,a.socketManager=A,a.chat=D,n=!1,H((D==null?void 0:D.chat_mode)??t.mode??_.Functional)}async function W(){var l,w,v,A;(l=a.socketManager)==null||l.disconnect(),await((w=a.streamingManager)==null?void 0:w.disconnect()),r=!1,s=!1,delete a.streamingManager,delete a.socketManager,(A=(v=t.callbacks).onConnectionStateChange)==null||A.call(v,I.Disconnected)}async function H(l){var w,v;l!==a.chatMode&&(u.track("agent-mode-change",{mode:l}),a.chatMode=l,a.chatMode!==_.Functional&&await W(),(v=(w=t.callbacks).onModeChange)==null||v.call(w,l))}return{agent:h,getStreamType:()=>{var l;return(l=a.streamingManager)==null?void 0:l.streamType},getIsInterruptAvailable:()=>{var l;return((l=a.streamingManager)==null?void 0:l.interruptAvailable)??!1},starterMessages:((ee=h.knowledge)==null?void 0:ee.starter_message)||[],getSTTToken:()=>y.getSTTToken(h.id),changeMode:H,enrichAnalytics:u.enrich,async connect(){var l;await j(!0),u.track("agent-chat",{event:"connect",chatId:(l=a.chat)==null?void 0:l.id,agentId:h.id,mode:a.chatMode})},async reconnect(){var l;await W(),await j(!1),u.track("agent-chat",{event:"reconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:h.id,mode:a.chatMode})},async disconnect(){var l;await W(),u.track("agent-chat",{event:"disconnect",chatId:(l=a.chat)==null?void 0:l.id,agentId:h.id,mode:a.chatMode})},async chat(l){var P,D,E,M,T;const w=()=>{if(t.mode===_.DirectPlayback)throw new q("Direct playback is enabled, chat is disabled");if(l.length>=800)throw new q("Message cannot be more than 800 characters");if(l.length===0)throw new q("Message cannot be empty");if(a.chatMode===_.Maintenance)throw new q("Chat is in maintenance mode");if(![_.TextOnly,_.Playground].includes(a.chatMode)){if(!a.streamingManager)throw new q("Streaming manager is not initialized");if(!a.chat)throw new q("Chat is not initialized")}},v=async()=>{var k,S;if(!a.chat){const R=await Me(h,y,u,a.chatMode,t.persistentChat);if(!R.chat)throw new U(a.chatMode,!!t.persistentChat);a.chat=R.chat,(S=(k=t.callbacks).onNewChat)==null||S.call(k,a.chat.id)}return a.chat.id},A=async(k,S)=>re(()=>{var R,f;return y.chat(h.id,S,{chatMode:a.chatMode,streamId:(R=a.streamingManager)==null?void 0:R.streamId,sessionId:(f=a.streamingManager)==null?void 0:f.sessionId,messages:k.map(({matches:m,...C})=>C)},{...Ee(a.chatMode),skipErrorHandler:!0})},{limit:2,shouldRetryFn:R=>{var C,F,Ae,Pe;const f=(C=R==null?void 0:R.message)==null?void 0:C.includes("missing or invalid session_id");return!((F=R==null?void 0:R.message)==null?void 0:F.includes("Stream Error"))&&!f?((Pe=(Ae=t.callbacks).onError)==null||Pe.call(Ae,R),!1):!0},onRetry:async()=>{await W(),await j(!1)}});try{K(),w(),a.messages.push({id:G(),role:"user",content:l,created_at:new Date(z.update()).toISOString()}),(D=(P=t.callbacks).onNewMessage)==null||D.call(P,[...a.messages],"user");const k=await v(),S=await A([...a.messages],k);return a.messages.push({id:G(),role:"assistant",content:S.result||"",created_at:new Date().toISOString(),context:S.context,matches:S.matches,videoId:S.videoId}),r&&S.videoId&&a.streamingManager&&(r=!1,a.messages[a.messages.length-1].interrupted=!0,await se(a.streamingManager,S.videoId)),u.track("agent-message-send",{event:"success",mode:a.chatMode,messages:a.messages.length+1}),S.result&&((M=(E=t.callbacks).onNewMessage)==null||M.call(E,[...a.messages],"answer"),u.track("agent-message-received",{latency:z.get(!0),mode:a.chatMode,messages:a.messages.length})),S}catch(k){throw r=!1,((T=a.messages[a.messages.length-1])==null?void 0:T.role)==="assistant"&&a.messages.pop(),u.track("agent-message-send",{event:"error",mode:a.chatMode,messages:a.messages.length}),k}},rate(l,w,v){var D,E,M,T;const A=a.messages.find(k=>k.id===l);if(a.chat){if(!A)throw new Error("Message not found")}else throw new Error("Chat is not initialized");const P=((D=A.matches)==null?void 0:D.map(k=>[k.document_id,k.id]))??[];return u.track("agent-rate",{event:v?"update":"create",thumb:w===1?"up":"down",knowledge_id:((E=h.knowledge)==null?void 0:E.id)??"",mode:a.chatMode,matches:P,score:w}),v?y.updateRating(h.id,a.chat.id,v,{knowledge_id:((M=h.knowledge)==null?void 0:M.id)??"",message_id:l,matches:P,score:w}):y.createRating(h.id,a.chat.id,{knowledge_id:((T=h.knowledge)==null?void 0:T.id)??"",message_id:l,matches:P,score:w})},deleteRate(l){var w;if(!a.chat)throw new Error("Chat is not initialized");return u.track("agent-rate-delete",{type:"text",chat_id:(w=a.chat)==null?void 0:w.id,id:l,mode:a.chatMode}),y.deleteRating(h.id,a.chat.id,l)},async speak(l){var P,D,E,M,T;function w(){if(typeof l=="string"){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:l,ssml:!1}}if(l.type==="text"&&!l.provider){if(!h.presenter.voice)throw new Error("Presenter voice is not initialized");return{type:"text",provider:h.presenter.voice,input:l.input,ssml:l.ssml}}return l}const v=w();if(u.track("agent-speak",v),z.update(),a.messages&&v.type==="text"&&(a.messages.push({id:G(),role:"assistant",content:v.input,created_at:new Date(z.get(!0)).toISOString()}),(D=(P=t.callbacks).onNewMessage)==null||D.call(P,[...a.messages],"answer")),Ne(a.chatMode))return{duration:0,video_id:"",status:"success"};if(!a.streamingManager)throw new Error("Please connect to the agent first");s=!0;try{const k=await a.streamingManager.speak({script:v,metadata:{chat_id:(E=a.chat)==null?void 0:E.id,agent_id:h.id}});return s=!1,a.messages[a.messages.length-1].videoId=k.video_id,r&&k.video_id&&a.streamingManager&&(r=!1,a.messages[a.messages.length-1].interrupted=!0,await se(a.streamingManager,k.video_id)),(T=(M=t.callbacks).onNewMessage)==null||T.call(M,[...a.messages],"answer"),k}finally{s=!1}},async interrupt({type:l}){var P,D,E,M,T;const w=a.messages[a.messages.length-1],v=(w==null?void 0:w.role)==="user",A=v||s;if(Ye(a.streamingManager,(P=a.streamingManager)==null?void 0:P.streamType,A,!!i),u.track("agent-video-interrupt",{type:l||"click",stream_id:(D=a.streamingManager)==null?void 0:D.streamId,agent_id:h.id,owner_id:h.owner_id,video_duration_to_interrupt:ie.get(!0),message_duration_to_interrupt:z.get(!0),chat_id:(E=a.chat)==null?void 0:E.id,mode:a.chatMode,queued_interrupt:v}),A){r=!0;return}w.interrupted=!0,(T=(M=t.callbacks).onNewMessage)==null||T.call(M,[...a.messages],"answer"),se(a.streamingManager,w.videoId)}}}function _t(e,t,n){const{getById:r}=Se(t,n||Z);return r(e)}g.AgentActivityState=V,g.AgentStatus=fe,g.ChatCreationFailed=U,g.ChatMode=_,g.ChatModeDowngraded=ce,g.ChatProgress=x,g.ConnectionState=I,g.ConnectivityState=Q,g.DocumentType=we,g.KnowledgeType=he,g.PlanGroup=ue,g.Providers=ye,g.RateState=me,g.StreamEvents=B,g.StreamType=J,g.StreamingState=p,g.Subject=ge,g.UserPlan=le,g.ValidationError=q,g.VideoType=te,g.VoiceAccess=ve,g.WsError=de,g.createAgentManager=It,g.getAgent=_t,g.mapVideoType=pe,Object.defineProperty(g,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
|
};
|
|
@@ -1,7 +1,13 @@
|
|
|
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
|
-
|
|
4
|
+
type ConnectToManagerOptions = AgentManagerOptions & {
|
|
5
|
+
callbacks: AgentManagerOptions['callbacks'] & {
|
|
6
|
+
onVideoIdChange?: (videoId: string | null) => void;
|
|
7
|
+
};
|
|
8
|
+
};
|
|
9
|
+
export declare function initializeStreamAndChat(agent: Agent, options: ConnectToManagerOptions, agentsApi: AgentsAPI, analytics: Analytics, chat?: Chat): Promise<{
|
|
5
10
|
chat?: Chat;
|
|
6
11
|
streamingManager?: StreamingManager<CreateStreamOptions>;
|
|
7
12
|
}>;
|
|
13
|
+
export {};
|
|
@@ -1,7 +1,6 @@
|
|
|
1
|
-
import { Agent } from '../../types';
|
|
2
1
|
export interface AnalyticsOptions {
|
|
3
2
|
token: string;
|
|
4
|
-
|
|
3
|
+
agentId: string;
|
|
5
4
|
isEnabled?: boolean;
|
|
6
5
|
distinctId?: string;
|
|
7
6
|
}
|
|
@@ -11,7 +10,7 @@ export interface Analytics {
|
|
|
11
10
|
isEnabled: boolean;
|
|
12
11
|
chatId?: string;
|
|
13
12
|
agentId: string;
|
|
14
|
-
owner_id
|
|
13
|
+
owner_id?: string;
|
|
15
14
|
getRandom(): string;
|
|
16
15
|
track(event: string, props?: Record<string, any>): Promise<any>;
|
|
17
16
|
linkTrack(mixpanelEvent: string, props: Record<string, any>, event: string, dependencies: string[]): any;
|
|
@@ -1,4 +1,9 @@
|
|
|
1
|
-
export declare const
|
|
1
|
+
export declare const latencyTimestampTracker: {
|
|
2
|
+
reset: () => number;
|
|
3
|
+
update: () => number;
|
|
4
|
+
get: (delta?: boolean) => number;
|
|
5
|
+
};
|
|
6
|
+
export declare const interruptTimestampTracker: {
|
|
2
7
|
reset: () => number;
|
|
3
8
|
update: () => number;
|
|
4
9
|
get: (delta?: boolean) => number;
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
import { CreateStreamOptions, StreamType } from '../../types';
|
|
2
|
+
import { StreamingManager } from '../streaming-manager';
|
|
3
|
+
export declare function validateInterrupt(streamingManager: StreamingManager<CreateStreamOptions> | undefined, streamType: StreamType | undefined, hasStreamRequestPending: boolean, hasVideoId: boolean): void;
|
|
4
|
+
export declare function sendInterrupt(streamingManager: StreamingManager<CreateStreamOptions>, videoId: string): Promise<void>;
|
|
@@ -9,6 +9,10 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
|
|
|
9
9
|
* Method to close RTC connection
|
|
10
10
|
*/
|
|
11
11
|
disconnect(): Promise<void>;
|
|
12
|
+
/**
|
|
13
|
+
* Method to send data channel messages to the server
|
|
14
|
+
*/
|
|
15
|
+
sendDataChannelMessage(payload: string): void;
|
|
12
16
|
/**
|
|
13
17
|
* Session identifier information, should be returned in the body of all streaming requests
|
|
14
18
|
*/
|
|
@@ -18,5 +22,6 @@ export declare function createStreamingManager<T extends CreateStreamOptions>(ag
|
|
|
18
22
|
*/
|
|
19
23
|
streamId: string;
|
|
20
24
|
streamType: StreamType;
|
|
25
|
+
interruptAvailable: boolean | undefined;
|
|
21
26
|
}>;
|
|
22
27
|
export type StreamingManager<T extends CreateStreamOptions> = Awaited<ReturnType<typeof createStreamingManager<T>>>;
|
|
@@ -3,6 +3,9 @@ export interface VideoRTCStatsReport {
|
|
|
3
3
|
webRTCStats: {
|
|
4
4
|
anomalies: AnalyticsRTCStatsReport[];
|
|
5
5
|
aggregateReport: AnalyticsRTCStatsReport;
|
|
6
|
+
minRtt: number;
|
|
7
|
+
maxRtt: number;
|
|
8
|
+
avgRtt: number;
|
|
6
9
|
minJitterDelayInInterval: number;
|
|
7
10
|
maxJitterDelayInInterval: number;
|
|
8
11
|
avgJitterDelayInInterval: number;
|
|
@@ -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,11 +20,13 @@ 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'];
|
|
27
27
|
context?: string;
|
|
28
|
+
videoId?: string;
|
|
29
|
+
interrupted?: boolean;
|
|
28
30
|
}
|
|
29
31
|
export interface ChatPayload {
|
|
30
32
|
messages: Message[];
|
|
@@ -53,6 +55,7 @@ export interface ChatResponse {
|
|
|
53
55
|
matches?: IRetrivalMetadata[];
|
|
54
56
|
chatMode?: ChatMode;
|
|
55
57
|
context?: string;
|
|
58
|
+
videoId?: string;
|
|
56
59
|
}
|
|
57
60
|
export interface Chat {
|
|
58
61
|
id: string;
|
|
@@ -65,3 +68,6 @@ export interface Chat {
|
|
|
65
68
|
agent_id__modified_at: string;
|
|
66
69
|
chat_mode?: ChatMode;
|
|
67
70
|
}
|
|
71
|
+
export interface Interrupt {
|
|
72
|
+
type: 'text' | 'audio' | 'click';
|
|
73
|
+
}
|
|
@@ -3,7 +3,7 @@ import { Auth } from '../../auth';
|
|
|
3
3
|
import { AgentActivityState, CompatibilityMode, ConnectionState, ConnectivityState, SendStreamPayloadResponse, StreamEvents, StreamType, StreamingState } from '../../stream';
|
|
4
4
|
import { SupportedStreamScript } from '../../stream-script';
|
|
5
5
|
import { Agent } from './agent';
|
|
6
|
-
import { ChatMode, ChatResponse, Message, RatingEntity } from './chat';
|
|
6
|
+
import { ChatMode, ChatResponse, Interrupt, Message, RatingEntity } from './chat';
|
|
7
7
|
/**
|
|
8
8
|
* Types of events provided in Chat Progress Callback
|
|
9
9
|
*/
|
|
@@ -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
|
/**
|
|
@@ -147,6 +144,10 @@ export interface AgentManager {
|
|
|
147
144
|
* Get the current stream type of the agent
|
|
148
145
|
*/
|
|
149
146
|
getStreamType: () => StreamType | undefined;
|
|
147
|
+
/**
|
|
148
|
+
* Get if the stream supports interrupt
|
|
149
|
+
*/
|
|
150
|
+
getIsInterruptAvailable: () => boolean;
|
|
150
151
|
/**
|
|
151
152
|
* Array of starter messages that will be sent to the agent when the chat starts
|
|
152
153
|
*/
|
|
@@ -200,6 +201,10 @@ export interface AgentManager {
|
|
|
200
201
|
* @param properties flat json object with properties that will be added to analytics events fired from the sdk
|
|
201
202
|
*/
|
|
202
203
|
enrichAnalytics: (properties: Record<string, any>) => void;
|
|
203
|
-
|
|
204
|
+
/**
|
|
205
|
+
* Method to interrupt the current video stream
|
|
206
|
+
* Only available for Fluent streams and when there's an active video to interrupt
|
|
207
|
+
*/
|
|
208
|
+
interrupt: (interrupt: Interrupt) => void;
|
|
204
209
|
}
|
|
205
210
|
export {};
|
|
@@ -34,6 +34,7 @@ export interface ICreateStreamRequestResponse extends StickyRequest {
|
|
|
34
34
|
offer: any;
|
|
35
35
|
ice_servers: IceServer[];
|
|
36
36
|
fluent?: boolean;
|
|
37
|
+
interrupt_enabled?: boolean;
|
|
37
38
|
}
|
|
38
39
|
export interface IceCandidate {
|
|
39
40
|
/**
|
|
@@ -58,5 +59,6 @@ export interface Status {
|
|
|
58
59
|
}
|
|
59
60
|
export interface SendStreamPayloadResponse extends Status, StickyRequest {
|
|
60
61
|
duration: number;
|
|
62
|
+
video_id: string;
|
|
61
63
|
}
|
|
62
64
|
export {};
|
|
@@ -18,7 +18,6 @@ export declare enum AgentActivityState {
|
|
|
18
18
|
Idle = "IDLE",
|
|
19
19
|
Talking = "TALKING"
|
|
20
20
|
}
|
|
21
|
-
export declare const DataChannelSignalMap: Record<string, StreamingState>;
|
|
22
21
|
export declare enum StreamEvents {
|
|
23
22
|
ChatAnswer = "chat/answer",
|
|
24
23
|
ChatPartial = "chat/partial",
|
|
@@ -27,6 +26,7 @@ export declare enum StreamEvents {
|
|
|
27
26
|
StreamFailed = "stream/error",
|
|
28
27
|
StreamReady = "stream/ready",
|
|
29
28
|
StreamCreated = "stream/created",
|
|
29
|
+
StreamInterrupt = "stream/interrupt",
|
|
30
30
|
StreamVideoCreated = "stream-video/started",
|
|
31
31
|
StreamVideoDone = "stream-video/done",
|
|
32
32
|
StreamVideoError = "stream-video/error",
|
|
@@ -53,6 +53,7 @@ export interface ManagerCallbacks {
|
|
|
53
53
|
onError?: (error: Error, errorData: object) => void;
|
|
54
54
|
onConnectivityStateChange?: (state: ConnectivityState) => void;
|
|
55
55
|
onAgentActivityStateChange?: (state: AgentActivityState) => void;
|
|
56
|
+
onVideoIdChange?: (videoId: string | null) => void;
|
|
56
57
|
}
|
|
57
58
|
export type ManagerCallbackKeys = keyof ManagerCallbacks;
|
|
58
59
|
export interface TalkStreamOptions extends CreateTalkStreamRequest {
|
|
@@ -62,7 +63,6 @@ export interface TalkStreamOptions extends CreateTalkStreamRequest {
|
|
|
62
63
|
export interface ClipStreamOptions extends CreateClipStreamRequest {
|
|
63
64
|
videoType: VideoType.Clip;
|
|
64
65
|
fluent?: boolean;
|
|
65
|
-
conn_id?: string;
|
|
66
66
|
}
|
|
67
67
|
export type CreateStreamOptions = TalkStreamOptions | ClipStreamOptions;
|
|
68
68
|
export type PayloadType<T> = T extends TalkStreamOptions ? SendTalkStreamPayload : T extends ClipStreamOptions ? SendClipStreamPayload : never;
|
|
@@ -79,11 +79,11 @@ export interface StreamingManagerOptions {
|
|
|
79
79
|
debug?: boolean;
|
|
80
80
|
auth: Auth;
|
|
81
81
|
analytics: Analytics;
|
|
82
|
-
conn_id?: string;
|
|
83
82
|
}
|
|
84
83
|
export interface SlimRTCStatsReport {
|
|
85
84
|
index: number;
|
|
86
85
|
codec: string;
|
|
86
|
+
rtt: number;
|
|
87
87
|
duration?: number;
|
|
88
88
|
bitrate?: number;
|
|
89
89
|
timestamp: any;
|
|
@@ -121,3 +121,8 @@ export interface AnalyticsRTCStatsReport {
|
|
|
121
121
|
lowFpsCount?: number;
|
|
122
122
|
causes?: string[];
|
|
123
123
|
}
|
|
124
|
+
export interface StreamInterruptPayload {
|
|
125
|
+
type: StreamEvents.StreamInterrupt;
|
|
126
|
+
videoId: string;
|
|
127
|
+
timestamp: number;
|
|
128
|
+
}
|
|
@@ -10,6 +10,21 @@ export declare function getAnalyticsInfo(agent: Agent): {
|
|
|
10
10
|
provider: import('../types/index').Providers | undefined;
|
|
11
11
|
};
|
|
12
12
|
};
|
|
13
|
+
export declare function getAgentInfo(agent: Agent): {
|
|
14
|
+
agentType: "talk" | "clip" | "clip_v2";
|
|
15
|
+
owner_id: string;
|
|
16
|
+
promptVersion: "v1" | "v2" | null | undefined;
|
|
17
|
+
behavior: {
|
|
18
|
+
role: string | undefined;
|
|
19
|
+
personality: string | undefined;
|
|
20
|
+
instructions: string | undefined;
|
|
21
|
+
};
|
|
22
|
+
temperature: number | undefined;
|
|
23
|
+
knowledgeSource: "base_knowledge" | "documents" | null | undefined;
|
|
24
|
+
starterQuestionsCount: number | undefined;
|
|
25
|
+
topicsToAvoid: string[] | undefined;
|
|
26
|
+
maxResponseLength: number | undefined;
|
|
27
|
+
};
|
|
13
28
|
export declare const sumFunc: (numbers: number[]) => number;
|
|
14
29
|
export declare const average: (numbers: number[]) => number;
|
|
15
30
|
export declare function getStreamAnalyticsProps(data: any, agent: Agent, additionalProps: Record<string, any>): any;
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
export declare const sleep: (ms: number) => Promise<unknown>;
|
|
2
|
-
export declare const getRandom: () => string;
|
|
2
|
+
export declare const getRandom: (length?: number) => string;
|
package/package.json
CHANGED
|
@@ -1,48 +1,48 @@
|
|
|
1
1
|
{
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
}
|
|
2
|
+
"name": "@d-id/client-sdk",
|
|
3
|
+
"private": false,
|
|
4
|
+
"version": "1.1.1-staging.2",
|
|
5
|
+
"type": "module",
|
|
6
|
+
"description": "d-id client sdk",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "https://github.com/de-id/agents-sdk"
|
|
10
|
+
},
|
|
11
|
+
"keywords": [
|
|
12
|
+
"d-id",
|
|
13
|
+
"sdk",
|
|
14
|
+
"client-sdk"
|
|
15
|
+
],
|
|
16
|
+
"license": "MIT",
|
|
17
|
+
"author": "d-id",
|
|
18
|
+
"files": [
|
|
19
|
+
"dist/*"
|
|
20
|
+
],
|
|
21
|
+
"main": "./dist/index.umd.cjs",
|
|
22
|
+
"module": "./dist/index.js",
|
|
23
|
+
"types": "./dist/src/index.d.ts",
|
|
24
|
+
"scripts": {
|
|
25
|
+
"dev": "vite",
|
|
26
|
+
"build": "node ./infra/build.js -m production",
|
|
27
|
+
"build:dev": "node ./infra/build.js -m development",
|
|
28
|
+
"dev:prod": "export NODE_ENV=production && vite --mode production",
|
|
29
|
+
"deploy:prod": "node ./infra/deploy.js --version beta",
|
|
30
|
+
"preview": "vite preview",
|
|
31
|
+
"test-build": "node .infra/build.js -m development",
|
|
32
|
+
"build:docs": "typedoc"
|
|
33
|
+
},
|
|
34
|
+
"devDependencies": {
|
|
35
|
+
"@preact/preset-vite": "^2.8.1",
|
|
36
|
+
"@trivago/prettier-plugin-sort-imports": "^4.3.0",
|
|
37
|
+
"@types/node": "^22.15.0",
|
|
38
|
+
"commander": "^11.1.0",
|
|
39
|
+
"glob": "^10.3.10",
|
|
40
|
+
"preact": "^10.19.6",
|
|
41
|
+
"prettier": "^3.2.5",
|
|
42
|
+
"prettier-plugin-organize-imports": "^3.2.4",
|
|
43
|
+
"typedoc": "^0.25.7",
|
|
44
|
+
"typescript": "^5.3.3",
|
|
45
|
+
"vite": "^5.1.4",
|
|
46
|
+
"vite-plugin-dts": "^3.7.3"
|
|
47
|
+
}
|
|
48
|
+
}
|