@epam/statgpt-dial-toolkit 0.8.0 → 0.8.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.
Files changed (3) hide show
  1. package/index.cjs +2 -2
  2. package/index.mjs +7 -12
  3. package/package.json +2 -2
package/index.cjs CHANGED
@@ -1,3 +1,3 @@
1
- Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@epam/statgpt-shared-toolkit");var t=`v1`,n=`/${t}/ops/resource/share`,r={VERSION:`/${t}`,BUCKET:`/${t}/bucket`,CONVERSATIONS:`/${t}/metadata/conversations`,CONVERSATION_BY_ID:e=>`/${t}/metadata/conversations/${e}`,CHAT:e=>`/openai/deployments/${e}/chat/completions`,MODELS:`/openai/models`,CONFIGURATION:e=>`/${t}/deployments/${e}/configuration`,DATASETS_METADATA:e=>`/v1/deployments/${e}/route/metadata/datasets`,PYTHON_ATTACHMENT:e=>`/v1/deployments/${e}/route/python-attachment`,SHARE_CONVERSATION:`${n}/create`,SHARE_CONVERSATION_ACCEPT:e=>`/${t}/invitations/${e}?accept=true`,SHARE_CONVERSATION_DETAILS:e=>`/${t}/invitations/${e}`,SHARE_CONVERSATION_LIST:`${n}/list`,SHARE_CONVERSATION_DISCARD:`${n}/discard`,SHARE_CONVERSATION_REVOKE:`${n}/revoke`,RATE:e=>`/${t}/${e}/rate`,RENAME:`/${t}/ops/resource/move`},i={LENGTH:`length`,STOP:`stop`},a={MINUTE:`minute`,DAILY:`daily`,WEEKLY:`weekly`,MONTHLY:`monthly`},o={CONTENT_FILTER:`content_filter`,500:`500`},s={RUNTIME_ERROR:`runtime_error`,RATE_LIMIT_EXCEEDED:`rate_limit_exceeded`},c=[a.MINUTE,a.DAILY,a.WEEKLY,a.MONTHLY],l=`statgpt`,u={RATE_LIMIT:`rate_limit`,UNKNOWN:`unknown`},d=function(e){return e.CONVERSATION=`CONVERSATION`,e}({}),f=function(e){return e.ME=`me`,e.OTHERS=`others`,e}({}),p=function(e){return e.CSV=`text/csv`,e.TABLE=`application/dial-ttyd-table`,e.PLOTLY=`application/vnd.plotly.v1+json`,e.MARKDOWN=`text/markdown`,e.JSON=`application/json`,e.JPEG=`image/jpeg`,e.PNG=`image/png`,e.CROSS_DATASET_GRID=`cross_dataset_grid`,e.CUSTOM_DATA_GRID=`custom_data_grid`,e.CUSTOM_CHART=`custom_chart`,e.CUSTOM_CODE_SAMPLE=`custom_code_sample`,e}({}),m=function(e){return e.LINK=`link`,e}({}),h=e=>e.content?(console.info(`Using direct content format: ${e.content}`),e.content):e.choices?.[0]?.delta?.content?(console.info(`Using OpenAI delta format: ${e.choices[0].delta.content}`),e.choices[0].delta.content):e.choices?.[0]?.message?.content?(console.info(`Using complete message format: ${e.choices[0].message.content}`),e.choices[0].message.content):(console.info(`Unknown SSE data format:`,e),null),g=(e,t,n)=>{if(t?.(e),n){let t=h(e);t&&n(t)}},_=(e,t)=>e.error||e.message||`${t.status} ${t.statusText}`,v=(e,t)=>{let n=e?.reduce((e,t)=>(e[t.index]=t,e),{});return t.forEach(e=>{n[e.index]?(e.attachments&&(n[e.index].attachments=(n[e.index].attachments||[]).concat(e.attachments)),e.content&&(n[e.index].content=(n[e.index].content||``)+e.content),e.name&&(n[e.index].name=(n[e.index].name||``)+e.name),e.status&&(n[e.index].status=e.status)):n[e.index]=e}),Object.values(n)},y=(e,t)=>{let n=structuredClone(e);return t.forEach(e=>{e.errorMessage&&(n.errorMessage=e.errorMessage),e.role&&(n.role=e.role),e.responseId&&(n.responseId=e.responseId),e.content&&b(n,e),e.custom_content&&(n.custom_content||={},e.custom_content.attachments&&(n.custom_content.attachments||(n.custom_content.attachments=[]),n.custom_content.attachments=n.custom_content.attachments.concat(e.custom_content.attachments)),e.custom_content.stages&&(n.custom_content.stages||(n.custom_content.stages=[]),n.custom_content.stages=v(n.custom_content.stages,e.custom_content.stages)),e.custom_content.state&&(n.custom_content.state=e.custom_content.state),e.custom_content.form_schema&&(n.custom_content.form_schema=e.custom_content.form_schema),e.custom_content.form_value&&(n.custom_content.form_value=e.custom_content.form_value))}),n};function b(e,t){if(t.content){let n=x(t.content);n==null?e.content=`${e.content||``}${t.content}`:e.content=e.content.slice(0,-n)}}function x(e){let t=e.match(/delete_chars\((\d+)\)/);return t==null?null:parseInt(t[1],10)}var S=e=>{let t=e.name?.split(`__`)||[],n=t.length>1?t.slice(1).join(`__`):e.name;return{modelId:t[0],conversationName:n}},C=t=>{let n=Date.now(),r=(0,e.getClearedConversationName)(t.name);return`${t.folderId}/${r}-${n}`},w=e=>({resourceTypes:[d.CONVERSATION],with:e}),T=async(e,t,n)=>{let r=n?.body===void 0?void 0:n?.isFormData?n.body:JSON.stringify(n.body);return await fetch(e,{method:n.method||`GET`,headers:t,body:r,signal:n?.signal})};function E(e){return e.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}function D(e){return e.split(`/`).map(e=>decodeURIComponent(e)).join(`/`)}function O(e){if(e?.kind!==u.RATE_LIMIT||typeof e.retryAfterSeconds!=`number`)return null;let t=new Date(e.occurredAt).getTime();return Number.isNaN(t)?null:new Date(t+e.retryAfterSeconds*1e3)}function k(e,t=Date.now()){let n=O(e);return n?n.getTime()>t:!1}function A(e,t=`en-GB`){return{date:e.toLocaleDateString(t),time:e.toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})}}var j=class{constructor(){this.decoder=new TextDecoder}async streamChat(e,t,n={},r){let{onMessage:i,onError:a,onComplete:o,signal:s}=n;try{let n=await this.initializeStreamRequest(e,t,s,r);await this.processStreamData(n,i),o?.()}catch(e){this.handleStreamError(e,a)}}async initializeStreamRequest(t,n,r,i){let a=await T(t,{Accept:`text/event-stream`,...(0,e.getHeaders)(void 0,{jwt:i})},{method:`POST`,body:n,signal:r});if(!a.ok){let t=await a.text(),n={};try{n=JSON.parse(t)}catch{n.error=`Failed to parse error body`}throw new e.HttpError({status:a.status,message:n.error??`No response body`})}if(!a.body)throw new e.HttpError({message:`No response body`,status:a.status});return a.body.getReader()}async processStreamData(e,t){let n=``;try{for(;;){let{done:r,value:i}=await e.read();if(r){n.trim()&&this.parseSSEDataLine(n,t);break}let a=this.decoder.decode(i,{stream:!0});n+=a;let o=n.split(`
2
- `);n=o.pop()||``;for(let e of o)this.parseSSEDataLine(e,t)}}finally{e.releaseLock()}}handleStreamError(e,t){let n=e instanceof Error?e:Error(String(e));throw t?.(n),n}parseSSEDataLine(e,t){let n=e.trim();if(!(!n||n.startsWith(`:`))&&n.startsWith(`data: `)){let e=n.slice(6);if(e===`[DONE]`){console.info(`SSE: Stream completed`);return}let r;try{r=JSON.parse(e)}catch(t){console.error(`Failed to parse SSE data: ${e} ${t}`)}t?.(r)}}},M=new j,N=async(t,n,r,i,a)=>{let{onMessage:o,onToken:s,onComplete:c,onError:l,model:u,signal:d}=r,f={conversationId:t,messages:n,model:u,custom_fields:a};await M.streamChat(e.API_ROUTES.CHAT,f,{onMessage:e=>g(e,o,s),onComplete:c,onError:l,signal:d},i)},P=e=>e instanceof Error&&e.message.includes(`404`),F=e=>`/v1/conversations/${E(e)}`;function I(e){console.warn(`[ConversationApi] suppressed error, returning empty result`,e)}var L=class{constructor(e){this.client=e}async getConversations(e,t,n){let i=`${t?n?`${t}/${n}`:`${t}`:``}`,a=`${r.CONVERSATIONS}/${i}`;try{return(await this.client.getRequest(a+`/?limit=1000&recursive=false`,e).then(e=>e.items||[])).map(e=>{let{conversationName:t,modelId:n}=S(e);return{id:e.url?.replace(`conversations/`,``)||e.name,name:t,folderId:i,createdAt:e.createdAt,updatedAt:e.updatedAt,model:{id:n,name:n}}})}catch(e){if(P(e))return I({endpoint:a,error:e}),[];throw e}}async getConversation(e,t){try{return await this.client.getRequest(F(e),t)}catch(t){if(P(t))return I({endpoint:F(e),error:t}),null;throw t}}async getFile(e,t){try{let n=`${r.VERSION}/${E(e)}`;return await this.client.getRequest(n,t)}catch(t){if(P(t))return I({filePath:e,error:t}),null;throw t}}async putOnboardingFile(t,n,i,a){try{let o=`${r.VERSION}/${E(n)}`,s=`----NodeMultipartBoundary`,c=[`--${s}`,`Content-Disposition: form-data; name="file"; filename="${t}"`,`Content-Type: application/json`,``,JSON.stringify(i),`--${s}--`,``].join(`\r
1
+ Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});let e=require("@epam/statgpt-shared-toolkit");var t=`v1`,n=`/${t}/ops/resource/share`,r={VERSION:`/${t}`,BUCKET:`/${t}/bucket`,CONVERSATIONS:`/${t}/metadata/conversations`,CONVERSATION_BY_ID:e=>`/${t}/metadata/conversations/${e}`,CHAT:e=>`/openai/deployments/${e}/chat/completions`,MODELS:`/openai/models`,CONFIGURATION:e=>`/${t}/deployments/${e}/configuration`,DATASETS_METADATA:e=>`/v1/deployments/${e}/route/metadata/datasets`,PYTHON_ATTACHMENT:e=>`/v1/deployments/${e}/route/python-attachment`,SHARE_CONVERSATION:`${n}/create`,SHARE_CONVERSATION_ACCEPT:e=>`/${t}/invitations/${e}?accept=true`,SHARE_CONVERSATION_DETAILS:e=>`/${t}/invitations/${e}`,SHARE_CONVERSATION_LIST:`${n}/list`,SHARE_CONVERSATION_DISCARD:`${n}/discard`,SHARE_CONVERSATION_REVOKE:`${n}/revoke`,RATE:e=>`/${t}/${e}/rate`,RENAME:`/${t}/ops/resource/move`},i={LENGTH:`length`,STOP:`stop`},a={MINUTE:`minute`,DAILY:`daily`,WEEKLY:`weekly`,MONTHLY:`monthly`},o={CONTENT_FILTER:`content_filter`,500:`500`},s={RUNTIME_ERROR:`runtime_error`,RATE_LIMIT_EXCEEDED:`rate_limit_exceeded`},c=[a.MINUTE,a.DAILY,a.WEEKLY,a.MONTHLY],l=`statgpt`,u={RATE_LIMIT:`rate_limit`,UNKNOWN:`unknown`},d=function(e){return e.CONVERSATION=`CONVERSATION`,e}({}),f=function(e){return e.ME=`me`,e.OTHERS=`others`,e}({}),p=function(e){return e.CSV=`text/csv`,e.TABLE=`application/dial-ttyd-table`,e.PLOTLY=`application/vnd.plotly.v1+json`,e.MARKDOWN=`text/markdown`,e.JSON=`application/json`,e.JPEG=`image/jpeg`,e.PNG=`image/png`,e.CROSS_DATASET_GRID=`cross_dataset_grid`,e.CUSTOM_DATA_GRID=`custom_data_grid`,e.CUSTOM_CHART=`custom_chart`,e.CUSTOM_CODE_SAMPLE=`custom_code_sample`,e}({}),m=function(e){return e.LINK=`link`,e}({}),h=e=>e.content?(console.info(`Using direct content format: ${e.content}`),e.content):e.choices?.[0]?.delta?.content?(console.info(`Using OpenAI delta format: ${e.choices[0].delta.content}`),e.choices[0].delta.content):e.choices?.[0]?.message?.content?(console.info(`Using complete message format: ${e.choices[0].message.content}`),e.choices[0].message.content):(console.info(`Unknown SSE data format:`,e),null),g=(e,t,n)=>{if(t?.(e),n){let t=h(e);t&&n(t)}},_=(e,t)=>e.error||e.message||`${t.status} ${t.statusText}`,v=(e,t)=>{let n=e?.reduce((e,t)=>(e[t.index]=t,e),{});return t.forEach(e=>{n[e.index]?(e.attachments&&(n[e.index].attachments=(n[e.index].attachments||[]).concat(e.attachments)),e.content&&(n[e.index].content=(n[e.index].content||``)+e.content),e.name&&(n[e.index].name=(n[e.index].name||``)+e.name),e.status&&(n[e.index].status=e.status)):n[e.index]=e}),Object.values(n)},y=(e,t)=>{let n=structuredClone(e);return t.forEach(e=>{e.errorMessage&&(n.errorMessage=e.errorMessage),e.role&&(n.role=e.role),e.responseId&&(n.responseId=e.responseId),e.content&&b(n,e),e.custom_content&&(n.custom_content||={},e.custom_content.attachments&&(n.custom_content.attachments||(n.custom_content.attachments=[]),n.custom_content.attachments=n.custom_content.attachments.concat(e.custom_content.attachments)),e.custom_content.stages&&(n.custom_content.stages||(n.custom_content.stages=[]),n.custom_content.stages=v(n.custom_content.stages,e.custom_content.stages)),e.custom_content.state&&(n.custom_content.state=e.custom_content.state),e.custom_content.form_schema&&(n.custom_content.form_schema=e.custom_content.form_schema),e.custom_content.form_value&&(n.custom_content.form_value=e.custom_content.form_value))}),n};function b(e,t){if(t.content){let n=x(t.content);e.content=n==null?`${e.content||``}${t.content}`:e.content.slice(0,-n)}}function x(e){let t=e.match(/delete_chars\((\d+)\)/);return t==null?null:parseInt(t[1],10)}var S=e=>{let t=e.name?.split(`__`)||[],n=t.length>1?t.slice(1).join(`__`):e.name;return{modelId:t[0],conversationName:n}},C=t=>{let n=Date.now(),r=(0,e.getClearedConversationName)(t.name);return`${t.folderId}/${r}-${n}`},w=e=>({resourceTypes:[d.CONVERSATION],with:e}),T=async(e,t,n)=>{let r=n?.body===void 0?void 0:n?.isFormData?n.body:JSON.stringify(n.body);return await fetch(e,{method:n.method||`GET`,headers:t,body:r,signal:n?.signal})};function E(e){return e.split(`/`).map(e=>encodeURIComponent(e)).join(`/`)}function D(e){return e.split(`/`).map(e=>decodeURIComponent(e)).join(`/`)}function O(e){if(e?.kind!==u.RATE_LIMIT||typeof e.retryAfterSeconds!=`number`)return null;let t=new Date(e.occurredAt).getTime();return Number.isNaN(t)?null:new Date(t+e.retryAfterSeconds*1e3)}function k(e,t=Date.now()){let n=O(e);return n?n.getTime()>t:!1}function A(e,t=`en-GB`){return{date:e.toLocaleDateString(t),time:e.toLocaleTimeString(t,{hour:`2-digit`,minute:`2-digit`})}}var j=class{constructor(){this.decoder=new TextDecoder}async streamChat(e,t,n={},r){let{onMessage:i,onError:a,onComplete:o,signal:s}=n;try{let n=await this.initializeStreamRequest(e,t,s,r);await this.processStreamData(n,i),o?.()}catch(e){this.handleStreamError(e,a)}}async initializeStreamRequest(t,n,r,i){let a=await T(t,{Accept:`text/event-stream`,...(0,e.getHeaders)(void 0,{jwt:i})},{method:`POST`,body:n,signal:r});if(!a.ok){let t=await a.text(),n={};try{n=JSON.parse(t)}catch{n.error=`Failed to parse error body`}throw new e.HttpError({status:a.status,message:n.error??`No response body`})}if(!a.body)throw new e.HttpError({message:`No response body`,status:a.status});return a.body.getReader()}async processStreamData(e,t){let n=``;try{for(;;){let{done:r,value:i}=await e.read();if(r){n.trim()&&this.parseSSEDataLine(n,t);break}let a=this.decoder.decode(i,{stream:!0});n+=a;let o=n.split(`
2
+ `);n=o.pop()||``;for(let e of o)this.parseSSEDataLine(e,t)}}finally{e.releaseLock()}}handleStreamError(e,t){let n=e instanceof Error?e:Error(String(e));throw t?.(n),n}parseSSEDataLine(e,t){let n=e.trim();if(n&&!n.startsWith(`:`)&&n.startsWith(`data: `)){let e=n.slice(6);if(e===`[DONE]`){console.info(`SSE: Stream completed`);return}let r;try{r=JSON.parse(e)}catch(t){console.error(`Failed to parse SSE data: ${e} ${t}`)}t?.(r)}}},M=new j,N=async(t,n,r,i,a)=>{let{onMessage:o,onToken:s,onComplete:c,onError:l,model:u,signal:d}=r,f={conversationId:t,messages:n,model:u,custom_fields:a};await M.streamChat(e.API_ROUTES.CHAT,f,{onMessage:e=>g(e,o,s),onComplete:c,onError:l,signal:d},i)},P=e=>e instanceof Error&&e.message.includes(`404`),F=e=>`/v1/conversations/${E(e)}`;function I(e){console.warn(`[ConversationApi] suppressed error, returning empty result`,e)}var L=class{constructor(e){this.client=e}async getConversations(e,t,n){let i=`${t?n?`${t}/${n}`:`${t}`:``}`,a=`${r.CONVERSATIONS}/${i}`;try{return(await this.client.getRequest(a+`/?limit=1000&recursive=false`,e).then(e=>e.items||[])).map(e=>{let{conversationName:t,modelId:n}=S(e);return{id:e.url?.replace(`conversations/`,``)||e.name,name:t,folderId:i,createdAt:e.createdAt,updatedAt:e.updatedAt,model:{id:n,name:n}}})}catch(e){if(P(e))return I({endpoint:a,error:e}),[];throw e}}async getConversation(e,t){try{return await this.client.getRequest(F(e),t)}catch(t){if(P(t))return I({endpoint:F(e),error:t}),null;throw t}}async getFile(e,t){try{let n=`${r.VERSION}/${E(e)}`;return await this.client.getRequest(n,t)}catch(t){if(P(t))return I({filePath:e,error:t}),null;throw t}}async putOnboardingFile(t,n,i,a){try{let o=`${r.VERSION}/${E(n)}`,s=`----NodeMultipartBoundary`,c=[`--${s}`,`Content-Disposition: form-data; name="file"; filename="${t}"`,`Content-Type: application/json`,``,JSON.stringify(i),`--${s}--`,``].join(`\r
3
3
  `);return await this.client.request(o,a,{method:`PUT`,body:c,headers:(0,e.getMultipartHeaders)(s),isFormData:!0})}catch(e){if(P(e))return I({filePath:n,error:e}),null;throw e}}async getOnboardingFile(e,t){try{let n=`${r.VERSION}/${E(e)}`;return await this.client.getRequest(n,t)}catch(t){if(P(t))return I({filePath:e,error:t}),null;throw t}}async getFileBlob(e,t){try{let n=`${r.VERSION}/${E(e)}`;return await this.client.requestBlob(n,t,{method:`GET`})}catch(t){if(P(t))return I({filePath:e,error:t}),null;throw t}}async deleteFile(e,t){try{let n=`${r.VERSION}/${E(e)}`;await this.client.request(n,t,{method:`DELETE`})}catch(t){if(P(t)){I({filePath:e,error:t});return}throw t}}async putFile(e,t,n){try{let i=`${r.VERSION}/${E(e)}`,a=new FormData,o=decodeURIComponent(e.split(`/`).at(-1)??`file`);a.append(`attachment`,t,o),await this.client.request(i,n,{method:`PUT`,body:a,isFormData:!0})}catch(t){if(P(t)){I({filePath:e,error:t});return}throw t}}async createConversation(e,t){let n=e?.id||C(e),{name:r,folderId:i,model:a,messages:o,custom_fields:s}=e,c={id:n,name:r,folderId:i,model:a,messages:o||[],selectedAddons:e.selectedAddons||[],prompt:e.prompt||``,temperature:e.temperature||.7,createdAt:Date.now(),updatedAt:Date.now(),custom_fields:s};return await this.client.request(F(n),t,{method:`PUT`,body:c}),{id:n,name:r,folderId:i,model:a,createdAt:c.createdAt,updatedAt:c.updatedAt}}async generateConversationLink(e,t){return await this.client.postRequest(r.SHARE_CONVERSATION,e,{body:t})}async getSharedConversations(e,t){return await this.client.postRequest(r.SHARE_CONVERSATION_LIST,e,{body:t})}async revokeSharedConversations(e,t){await this.client.postRequest(r.SHARE_CONVERSATION_REVOKE,e,{body:t})}async updateConversation(e,t,n){let r=await this.getConversation(e,n);if(!r)throw Error(`Conversation with id ${e} not found`);let i={...r,...t,updatedAt:Date.now()};return await this.client.request(F(e),n,{method:`PUT`,body:i})}async deleteConversation(e,t,n){t?.isShared?await this.client.postRequest(r.SHARE_CONVERSATION_DISCARD,n,{body:{resources:[{url:t?.url}]}}):await this.client.request(F(decodeURI(e)),n,{method:`DELETE`})}async streamChat(e,t){let n=e.model.id,i=encodeURIComponent(n),a=`${r.CHAT(i)}?api-version=${this.client.config.version}`,o={messages:e.messages,stream:!0,temperature:.7,max_tokens:4096,custom_fields:e.custom_fields};return await this.client.stream(a,t,{method:`POST`,body:o,chatReference:e.conversationId})}async rateResponse(e,t,n,i){return await this.client.postRequest(r.RATE(e),i,{body:{responseId:t,rate:n}})}async renameConversation(e,t,n){return await this.client.postRequest(r.RENAME,n,{body:{sourceUrl:e,destinationUrl:t,overwrite:!0}})}},R=class{constructor(e){this.config=e,console.info(`DialApiClient initialized`,{host:e.host||`NOT SET`,hasApiKey:!!e.apiKey,version:e.version})}async getRequest(e,t,n){return this.request(e,t,{...n,method:`GET`})}async postRequest(e,t,n){return this.request(e,t,{...n,method:`POST`})}async requestBlob(t,n,r){let i=`${this.config.host}${t}`,a={...(0,e.getHeaders)(this.config.apiKey,{jwt:n,chatReference:r.chatReference,contentType:r.isFormData?null:void 0}),...r.headers};try{return(await T(i,a,r)).blob()}catch(e){throw console.error(`API Request Exception`,{method:r.method,url:i,error:e instanceof Error?e.message:String(e)}),e}}async request(t,n,r){let i=Date.now(),a=`${this.config.host}${t}`,o={...(0,e.getHeaders)(this.config.apiKey,{jwt:n,chatReference:r.chatReference,contentType:r.isFormData?null:void 0}),...r.headers};this.addInfoRequestLog(`API Request`,a,r,o);try{let e=await T(a,o,r),t=Date.now()-i,n,s=await e.text();try{n=s?JSON.parse(s):{}}catch{if(this.addErrorRequestParsing(a,r,e,t,s),!e.ok)throw Error(`API request failed: ${e.status} ${e.statusText} - ${s.substring(0,100)}`);n={data:s}}if(!e.ok){this.addErrorRequestLog(a,r,e,t,n);let i=_(n,e);throw Error(`API request failed: ${i}`)}return n}catch(e){let t=Date.now()-i;throw console.error(`API Request Exception`,{method:r.method,url:a,duration:`${t}ms`,error:e instanceof Error?e.message:String(e)}),e}}async stream(t,n,r){let i=`${this.config.host}${t}`,a=(0,e.getHeaders)(this.config.apiKey,{jwt:n,chatReference:r.chatReference,contentType:r.isFormData?null:void 0},r.headers);this.addInfoRequestLog(`Stream Request`,i,r,a);let o=await T(i,a,r);if(!o.ok)throw console.error(`Stream Request Failed`,{method:r.method||`POST`,url:i,status:o.status,statusText:o.statusText}),Error(`Stream request failed: ${o.status} ${o.statusText}`);if(!o.body)throw Error(`No response body for stream`);return o.body}addInfoRequestLog(t,n,r,i){let a={method:r.method||`GET`,url:n,headers:(0,e.sanitizeHeaders)(i)};r.body&&(a.body=r.body),console.info(t,a)}addErrorRequestLog(e,t,n,r,i){console.error(`API Request Failed`,{method:t.method,url:e,status:n.status,statusText:n.statusText,duration:`${r}ms`,response:i})}addErrorRequestParsing(e,t,n,r,i){console.error(`API Response Parse Error`,{method:t.method,url:e,status:n.status,statusText:n.statusText,duration:`${r}ms`,responseText:i.substring(0,200),error:`Response is not valid JSON`})}};exports.AttachmentType=p,exports.COMPLETION_FINISH_REASON=i,exports.CUSTOM_VIEW_STATE_KEY=l,exports.ChatStreamSSEClient=j,exports.ConversationApi=L,exports.DIAL_API_ROUTES=r,exports.DIAL_ERROR_CODES=o,exports.DIAL_ERROR_TYPES=s,exports.DialApiClient=R,exports.ERROR_CONTEXT_KIND=u,exports.EXCEEDED_LIMIT=a,exports.EXCEEDED_LIMIT_ORDER=c,exports.InvitationType=m,exports.ResourceTypes=d,exports.ShareTarget=f,exports.chatStreamSSEClient=M,exports.decodeApiUrl=D,exports.encodeApiUrl=E,exports.formatDateTime=A,exports.generateConversationId=C,exports.getErrorMessage=_,exports.getRateLimitRestoreDate=O,exports.getSharedConversationsRequest=w,exports.handleStreamMessage=g,exports.isRateLimitStillActive=k,exports.mergeMessages=y,exports.parseConversationName=S,exports.sendRequest=T,exports.streamChatResponse=N;
package/index.mjs CHANGED
@@ -1,5 +1,5 @@
1
1
  import { API_ROUTES as e, HttpError as t, getClearedConversationName as n, getHeaders as r, getMultipartHeaders as i, sanitizeHeaders as a } from "@epam/statgpt-shared-toolkit";
2
- //#region libs/dial-toolkit/src/constants/api-urls.ts
2
+ // libs/dial-toolkit/src/constants/api-urls.ts
3
3
  var o = "v1", s = `/${o}/ops/resource/share`, c = {
4
4
  VERSION: `/${o}`,
5
5
  BUCKET: `/${o}/bucket`,
@@ -67,15 +67,14 @@ var o = "v1", s = `/${o}/ops/resource/share`, c = {
67
67
  function T(e, t) {
68
68
  if (t.content) {
69
69
  let n = E(t.content);
70
- n == null ? e.content = `${e.content || ""}${t.content}` : e.content = e.content.slice(0, -n);
70
+ e.content = n == null ? `${e.content || ""}${t.content}` : e.content.slice(0, -n);
71
71
  }
72
72
  }
73
73
  function E(e) {
74
74
  let t = e.match(/delete_chars\((\d+)\)/);
75
75
  return t == null ? null : parseInt(t[1], 10);
76
76
  }
77
- //#endregion
78
- //#region libs/dial-toolkit/src/utils/parse-conversation-name.ts
77
+ // libs/dial-toolkit/src/utils/parse-conversation-name.ts
79
78
  var D = (e) => {
80
79
  let t = e.name?.split("__") || [], n = t.length > 1 ? t.slice(1).join("__") : e.name;
81
80
  return {
@@ -97,16 +96,14 @@ var D = (e) => {
97
96
  signal: n?.signal
98
97
  });
99
98
  };
100
- //#endregion
101
- //#region libs/dial-toolkit/src/utils/url.ts
99
+ // libs/dial-toolkit/src/utils/url.ts
102
100
  function j(e) {
103
101
  return e.split("/").map((e) => encodeURIComponent(e)).join("/");
104
102
  }
105
103
  function M(e) {
106
104
  return e.split("/").map((e) => decodeURIComponent(e)).join("/");
107
105
  }
108
- //#endregion
109
- //#region libs/dial-toolkit/src/utils/rate-limits.ts
106
+ // libs/dial-toolkit/src/utils/rate-limits.ts
110
107
  function N(e) {
111
108
  if (e?.kind !== h.RATE_LIMIT || typeof e.retryAfterSeconds != "number") return null;
112
109
  let t = new Date(e.occurredAt).getTime();
@@ -125,8 +122,7 @@ function F(e, t = "en-GB") {
125
122
  })
126
123
  };
127
124
  }
128
- //#endregion
129
- //#region libs/dial-toolkit/src/api/chat-streaming-api.ts
125
+ // libs/dial-toolkit/src/api/chat-streaming-api.ts
130
126
  var I = class {
131
127
  constructor() {
132
128
  this.decoder = new TextDecoder();
@@ -192,7 +188,7 @@ var I = class {
192
188
  }
193
189
  parseSSEDataLine(e, t) {
194
190
  let n = e.trim();
195
- if (!(!n || n.startsWith(":")) && n.startsWith("data: ")) {
191
+ if (n && !n.startsWith(":") && n.startsWith("data: ")) {
196
192
  let e = n.slice(6);
197
193
  if (e === "[DONE]") {
198
194
  console.info("SSE: Stream completed");
@@ -557,5 +553,4 @@ var H = class {
557
553
  });
558
554
  }
559
555
  };
560
- //#endregion
561
556
  export { v as AttachmentType, l as COMPLETION_FINISH_REASON, m as CUSTOM_VIEW_STATE_KEY, I as ChatStreamSSEClient, H as ConversationApi, c as DIAL_API_ROUTES, d as DIAL_ERROR_CODES, f as DIAL_ERROR_TYPES, U as DialApiClient, h as ERROR_CONTEXT_KIND, u as EXCEEDED_LIMIT, p as EXCEEDED_LIMIT_ORDER, y as InvitationType, g as ResourceTypes, _ as ShareTarget, L as chatStreamSSEClient, M as decodeApiUrl, j as encodeApiUrl, F as formatDateTime, O as generateConversationId, S as getErrorMessage, N as getRateLimitRestoreDate, k as getSharedConversationsRequest, x as handleStreamMessage, P as isRateLimitStillActive, w as mergeMessages, D as parseConversationName, A as sendRequest, R as streamChatResponse };
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@epam/statgpt-dial-toolkit",
3
- "version": "0.8.0",
3
+ "version": "0.8.2",
4
4
  "license": "MIT",
5
5
  "repository": {
6
6
  "type": "git",
@@ -19,7 +19,7 @@
19
19
  "module": "./index.mjs",
20
20
  "types": "./index.d.ts",
21
21
  "dependencies": {
22
- "@epam/statgpt-shared-toolkit": "0.8.0"
22
+ "@epam/statgpt-shared-toolkit": "0.8.2"
23
23
  },
24
24
  "peerDependencies": {
25
25
  "@epam/ai-dial-shared": "^0.43.3"