@serenity-star/sdk 2.2.1 → 2.3.0
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.d.mts +124 -9
- package/dist/index.d.ts +124 -9
- package/dist/index.js +2 -2
- package/dist/index.js.map +1 -1
- package/dist/index.mjs +2 -2
- package/dist/index.mjs.map +1 -1
- package/package.json +1 -1
- package/readme.md +384 -2
package/dist/index.d.mts
CHANGED
|
@@ -291,12 +291,36 @@ type BaseErrorBody = {
|
|
|
291
291
|
};
|
|
292
292
|
type ValidationErrorBody = BaseErrorBody & {
|
|
293
293
|
errors: {
|
|
294
|
-
[key: string]: string;
|
|
294
|
+
[key: string]: string | string[];
|
|
295
295
|
};
|
|
296
296
|
};
|
|
297
297
|
type RateLimitErrorBody = BaseErrorBody & {
|
|
298
298
|
retryAfter: number;
|
|
299
299
|
};
|
|
300
|
+
type FileError = {
|
|
301
|
+
file?: File;
|
|
302
|
+
error: Error;
|
|
303
|
+
};
|
|
304
|
+
type VolatileKnowledgeUploadRes = {
|
|
305
|
+
success: true;
|
|
306
|
+
id: string;
|
|
307
|
+
expirationDate: string;
|
|
308
|
+
status: string;
|
|
309
|
+
fileName: string;
|
|
310
|
+
fileSize: number;
|
|
311
|
+
} | {
|
|
312
|
+
success: false;
|
|
313
|
+
error: FileError;
|
|
314
|
+
};
|
|
315
|
+
type VolatileKnowledgeUploadOptions = {
|
|
316
|
+
processEmbeddings?: boolean;
|
|
317
|
+
noExpiration?: boolean;
|
|
318
|
+
expirationDays?: number;
|
|
319
|
+
useVision?: boolean;
|
|
320
|
+
locale?: {
|
|
321
|
+
uploadFileErrorMessage?: string;
|
|
322
|
+
};
|
|
323
|
+
};
|
|
300
324
|
|
|
301
325
|
type MessageAdditionalInfo = {
|
|
302
326
|
inputParameters?: {
|
|
@@ -458,13 +482,6 @@ type SpeechGenerationResult = {
|
|
|
458
482
|
finish_reason?: string;
|
|
459
483
|
usage?: object;
|
|
460
484
|
};
|
|
461
|
-
type VolatileKnowledgeUploadRes = {
|
|
462
|
-
id: string;
|
|
463
|
-
expirationDate: string;
|
|
464
|
-
status: string;
|
|
465
|
-
fileName: string;
|
|
466
|
-
fileSize: number;
|
|
467
|
-
};
|
|
468
485
|
type AttachedVolatileKnowledge = {
|
|
469
486
|
id: string;
|
|
470
487
|
expirationDate: string;
|
|
@@ -582,6 +599,78 @@ type ConnectorStatusResult = {
|
|
|
582
599
|
isConnected: boolean;
|
|
583
600
|
};
|
|
584
601
|
|
|
602
|
+
/**
|
|
603
|
+
* Manages volatile knowledge files for agent instances.
|
|
604
|
+
* Provides methods to upload, remove, and clear files.
|
|
605
|
+
*/
|
|
606
|
+
declare class VolatileKnowledgeManager {
|
|
607
|
+
private readonly baseUrl;
|
|
608
|
+
private readonly apiKey;
|
|
609
|
+
private ids;
|
|
610
|
+
constructor(baseUrl: string, apiKey: string);
|
|
611
|
+
/**
|
|
612
|
+
* Upload a file to be used as volatile knowledge in the next agent execution.
|
|
613
|
+
* The file will be automatically included in subsequent messages/executions until cleared.
|
|
614
|
+
*
|
|
615
|
+
* @param file - The file to upload
|
|
616
|
+
* @param options - Optional configuration for file processing
|
|
617
|
+
* @returns Upload result with file details or errors
|
|
618
|
+
*
|
|
619
|
+
* @example
|
|
620
|
+
* ```typescript
|
|
621
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
622
|
+
*
|
|
623
|
+
* if (uploadResult.success) {
|
|
624
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
625
|
+
* } else {
|
|
626
|
+
* console.error('Upload failed:', uploadResult.error);
|
|
627
|
+
* }
|
|
628
|
+
* ```
|
|
629
|
+
*/
|
|
630
|
+
upload(file: File, options?: VolatileKnowledgeUploadOptions): Promise<VolatileKnowledgeUploadRes>;
|
|
631
|
+
/**
|
|
632
|
+
* Remove a specific volatile knowledge file by its ID.
|
|
633
|
+
*
|
|
634
|
+
* @param fileId - The ID of the file to remove
|
|
635
|
+
* @returns True if the file was removed, false otherwise
|
|
636
|
+
*
|
|
637
|
+
* @example
|
|
638
|
+
* ```typescript
|
|
639
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
640
|
+
*
|
|
641
|
+
* if (uploadResult.success) {
|
|
642
|
+
* // Remove the file from the queue
|
|
643
|
+
* conversation.volatileKnowledge.removeById(uploadResult.id);
|
|
644
|
+
* }
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
removeById(fileId: string): boolean;
|
|
648
|
+
/**
|
|
649
|
+
* Clear all volatile knowledge files from the queue.
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```typescript
|
|
653
|
+
* await conversation.volatileKnowledge.upload(file1);
|
|
654
|
+
* await conversation.volatileKnowledge.upload(file2);
|
|
655
|
+
*
|
|
656
|
+
* // Clear all files from the queue
|
|
657
|
+
* conversation.volatileKnowledge.clear();
|
|
658
|
+
* ```
|
|
659
|
+
*/
|
|
660
|
+
clear(): void;
|
|
661
|
+
/**
|
|
662
|
+
* Get all volatile knowledge file IDs currently in the queue.
|
|
663
|
+
* @internal
|
|
664
|
+
*/
|
|
665
|
+
getIds(): string[];
|
|
666
|
+
/**
|
|
667
|
+
* Fetch details of a volatile knowledge file by its ID.
|
|
668
|
+
* @param fileId - The ID of the file to fetch
|
|
669
|
+
* @returns The file details or an error
|
|
670
|
+
*/
|
|
671
|
+
getById(fileId: string): Promise<VolatileKnowledgeUploadRes>;
|
|
672
|
+
}
|
|
673
|
+
|
|
585
674
|
declare class Conversation extends EventEmitter<SSEStreamEvents> {
|
|
586
675
|
#private;
|
|
587
676
|
private agentCode;
|
|
@@ -593,6 +682,19 @@ declare class Conversation extends EventEmitter<SSEStreamEvents> {
|
|
|
593
682
|
private inputParameters?;
|
|
594
683
|
conversationId?: string;
|
|
595
684
|
info: ConversationInfoResult | null;
|
|
685
|
+
/**
|
|
686
|
+
* Volatile knowledge manager for uploading and managing temporary files.
|
|
687
|
+
* Files uploaded through this manager will be included in the next message/execution.
|
|
688
|
+
*
|
|
689
|
+
* @example
|
|
690
|
+
* ```typescript
|
|
691
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
692
|
+
* if (uploadResult.success) {
|
|
693
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
694
|
+
* }
|
|
695
|
+
* ```
|
|
696
|
+
*/
|
|
697
|
+
readonly volatileKnowledge: VolatileKnowledgeManager;
|
|
596
698
|
private constructor();
|
|
597
699
|
private static create;
|
|
598
700
|
private static createWithoutInfo;
|
|
@@ -769,6 +871,19 @@ declare abstract class SystemAgent<T extends keyof SystemAgentExecutionOptionsMa
|
|
|
769
871
|
protected readonly apiKey: string;
|
|
770
872
|
protected readonly baseUrl: string;
|
|
771
873
|
protected readonly options?: SystemAgentExecutionOptionsMap[T] | undefined;
|
|
874
|
+
/**
|
|
875
|
+
* Volatile knowledge manager for uploading and managing temporary files.
|
|
876
|
+
* Files uploaded through this manager will be included in the next execution.
|
|
877
|
+
*
|
|
878
|
+
* @example
|
|
879
|
+
* ```typescript
|
|
880
|
+
* const uploadResult = await activity.volatileKnowledge.upload(file);
|
|
881
|
+
* if (uploadResult.success) {
|
|
882
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
883
|
+
* }
|
|
884
|
+
* ```
|
|
885
|
+
*/
|
|
886
|
+
readonly volatileKnowledge: VolatileKnowledgeManager;
|
|
772
887
|
protected constructor(agentCode: string, apiKey: string, baseUrl: string, options?: SystemAgentExecutionOptionsMap[T] | undefined);
|
|
773
888
|
stream(): Promise<AgentResult>;
|
|
774
889
|
protected execute(): Promise<AgentResult>;
|
|
@@ -1105,4 +1220,4 @@ declare class ExternalErrorHelper {
|
|
|
1105
1220
|
private static isBaseErrorBody;
|
|
1106
1221
|
}
|
|
1107
1222
|
|
|
1108
|
-
export { type AgentResult, type BaseErrorBody, type ChatWidgetRes, type ConnectorStatusResult, Conversation, type ConversationInfoResult, type ConversationRes, ExternalErrorHelper as ErrorHelper, type GetConnectorStatusOptions, type Message, type PendingAction, type RateLimitErrorBody, RealtimeSession, type RemoveFeedbackOptions, type RemoveFeedbackResult, SerenityClient, type SubmitFeedbackOptions, type SubmitFeedbackResult, type ValidationErrorBody };
|
|
1223
|
+
export { type AgentResult, type BaseErrorBody, type ChatWidgetRes, type ConnectorStatusResult, Conversation, type ConversationInfoResult, type ConversationRes, ExternalErrorHelper as ErrorHelper, type FileError, type GetConnectorStatusOptions, type Message, type PendingAction, type RateLimitErrorBody, RealtimeSession, type RemoveFeedbackOptions, type RemoveFeedbackResult, SerenityClient, type SubmitFeedbackOptions, type SubmitFeedbackResult, type ValidationErrorBody, VolatileKnowledgeManager, type VolatileKnowledgeUploadOptions, type VolatileKnowledgeUploadRes };
|
package/dist/index.d.ts
CHANGED
|
@@ -291,12 +291,36 @@ type BaseErrorBody = {
|
|
|
291
291
|
};
|
|
292
292
|
type ValidationErrorBody = BaseErrorBody & {
|
|
293
293
|
errors: {
|
|
294
|
-
[key: string]: string;
|
|
294
|
+
[key: string]: string | string[];
|
|
295
295
|
};
|
|
296
296
|
};
|
|
297
297
|
type RateLimitErrorBody = BaseErrorBody & {
|
|
298
298
|
retryAfter: number;
|
|
299
299
|
};
|
|
300
|
+
type FileError = {
|
|
301
|
+
file?: File;
|
|
302
|
+
error: Error;
|
|
303
|
+
};
|
|
304
|
+
type VolatileKnowledgeUploadRes = {
|
|
305
|
+
success: true;
|
|
306
|
+
id: string;
|
|
307
|
+
expirationDate: string;
|
|
308
|
+
status: string;
|
|
309
|
+
fileName: string;
|
|
310
|
+
fileSize: number;
|
|
311
|
+
} | {
|
|
312
|
+
success: false;
|
|
313
|
+
error: FileError;
|
|
314
|
+
};
|
|
315
|
+
type VolatileKnowledgeUploadOptions = {
|
|
316
|
+
processEmbeddings?: boolean;
|
|
317
|
+
noExpiration?: boolean;
|
|
318
|
+
expirationDays?: number;
|
|
319
|
+
useVision?: boolean;
|
|
320
|
+
locale?: {
|
|
321
|
+
uploadFileErrorMessage?: string;
|
|
322
|
+
};
|
|
323
|
+
};
|
|
300
324
|
|
|
301
325
|
type MessageAdditionalInfo = {
|
|
302
326
|
inputParameters?: {
|
|
@@ -458,13 +482,6 @@ type SpeechGenerationResult = {
|
|
|
458
482
|
finish_reason?: string;
|
|
459
483
|
usage?: object;
|
|
460
484
|
};
|
|
461
|
-
type VolatileKnowledgeUploadRes = {
|
|
462
|
-
id: string;
|
|
463
|
-
expirationDate: string;
|
|
464
|
-
status: string;
|
|
465
|
-
fileName: string;
|
|
466
|
-
fileSize: number;
|
|
467
|
-
};
|
|
468
485
|
type AttachedVolatileKnowledge = {
|
|
469
486
|
id: string;
|
|
470
487
|
expirationDate: string;
|
|
@@ -582,6 +599,78 @@ type ConnectorStatusResult = {
|
|
|
582
599
|
isConnected: boolean;
|
|
583
600
|
};
|
|
584
601
|
|
|
602
|
+
/**
|
|
603
|
+
* Manages volatile knowledge files for agent instances.
|
|
604
|
+
* Provides methods to upload, remove, and clear files.
|
|
605
|
+
*/
|
|
606
|
+
declare class VolatileKnowledgeManager {
|
|
607
|
+
private readonly baseUrl;
|
|
608
|
+
private readonly apiKey;
|
|
609
|
+
private ids;
|
|
610
|
+
constructor(baseUrl: string, apiKey: string);
|
|
611
|
+
/**
|
|
612
|
+
* Upload a file to be used as volatile knowledge in the next agent execution.
|
|
613
|
+
* The file will be automatically included in subsequent messages/executions until cleared.
|
|
614
|
+
*
|
|
615
|
+
* @param file - The file to upload
|
|
616
|
+
* @param options - Optional configuration for file processing
|
|
617
|
+
* @returns Upload result with file details or errors
|
|
618
|
+
*
|
|
619
|
+
* @example
|
|
620
|
+
* ```typescript
|
|
621
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
622
|
+
*
|
|
623
|
+
* if (uploadResult.success) {
|
|
624
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
625
|
+
* } else {
|
|
626
|
+
* console.error('Upload failed:', uploadResult.error);
|
|
627
|
+
* }
|
|
628
|
+
* ```
|
|
629
|
+
*/
|
|
630
|
+
upload(file: File, options?: VolatileKnowledgeUploadOptions): Promise<VolatileKnowledgeUploadRes>;
|
|
631
|
+
/**
|
|
632
|
+
* Remove a specific volatile knowledge file by its ID.
|
|
633
|
+
*
|
|
634
|
+
* @param fileId - The ID of the file to remove
|
|
635
|
+
* @returns True if the file was removed, false otherwise
|
|
636
|
+
*
|
|
637
|
+
* @example
|
|
638
|
+
* ```typescript
|
|
639
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
640
|
+
*
|
|
641
|
+
* if (uploadResult.success) {
|
|
642
|
+
* // Remove the file from the queue
|
|
643
|
+
* conversation.volatileKnowledge.removeById(uploadResult.id);
|
|
644
|
+
* }
|
|
645
|
+
* ```
|
|
646
|
+
*/
|
|
647
|
+
removeById(fileId: string): boolean;
|
|
648
|
+
/**
|
|
649
|
+
* Clear all volatile knowledge files from the queue.
|
|
650
|
+
*
|
|
651
|
+
* @example
|
|
652
|
+
* ```typescript
|
|
653
|
+
* await conversation.volatileKnowledge.upload(file1);
|
|
654
|
+
* await conversation.volatileKnowledge.upload(file2);
|
|
655
|
+
*
|
|
656
|
+
* // Clear all files from the queue
|
|
657
|
+
* conversation.volatileKnowledge.clear();
|
|
658
|
+
* ```
|
|
659
|
+
*/
|
|
660
|
+
clear(): void;
|
|
661
|
+
/**
|
|
662
|
+
* Get all volatile knowledge file IDs currently in the queue.
|
|
663
|
+
* @internal
|
|
664
|
+
*/
|
|
665
|
+
getIds(): string[];
|
|
666
|
+
/**
|
|
667
|
+
* Fetch details of a volatile knowledge file by its ID.
|
|
668
|
+
* @param fileId - The ID of the file to fetch
|
|
669
|
+
* @returns The file details or an error
|
|
670
|
+
*/
|
|
671
|
+
getById(fileId: string): Promise<VolatileKnowledgeUploadRes>;
|
|
672
|
+
}
|
|
673
|
+
|
|
585
674
|
declare class Conversation extends EventEmitter<SSEStreamEvents> {
|
|
586
675
|
#private;
|
|
587
676
|
private agentCode;
|
|
@@ -593,6 +682,19 @@ declare class Conversation extends EventEmitter<SSEStreamEvents> {
|
|
|
593
682
|
private inputParameters?;
|
|
594
683
|
conversationId?: string;
|
|
595
684
|
info: ConversationInfoResult | null;
|
|
685
|
+
/**
|
|
686
|
+
* Volatile knowledge manager for uploading and managing temporary files.
|
|
687
|
+
* Files uploaded through this manager will be included in the next message/execution.
|
|
688
|
+
*
|
|
689
|
+
* @example
|
|
690
|
+
* ```typescript
|
|
691
|
+
* const uploadResult = await conversation.volatileKnowledge.upload(file);
|
|
692
|
+
* if (uploadResult.success) {
|
|
693
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
694
|
+
* }
|
|
695
|
+
* ```
|
|
696
|
+
*/
|
|
697
|
+
readonly volatileKnowledge: VolatileKnowledgeManager;
|
|
596
698
|
private constructor();
|
|
597
699
|
private static create;
|
|
598
700
|
private static createWithoutInfo;
|
|
@@ -769,6 +871,19 @@ declare abstract class SystemAgent<T extends keyof SystemAgentExecutionOptionsMa
|
|
|
769
871
|
protected readonly apiKey: string;
|
|
770
872
|
protected readonly baseUrl: string;
|
|
771
873
|
protected readonly options?: SystemAgentExecutionOptionsMap[T] | undefined;
|
|
874
|
+
/**
|
|
875
|
+
* Volatile knowledge manager for uploading and managing temporary files.
|
|
876
|
+
* Files uploaded through this manager will be included in the next execution.
|
|
877
|
+
*
|
|
878
|
+
* @example
|
|
879
|
+
* ```typescript
|
|
880
|
+
* const uploadResult = await activity.volatileKnowledge.upload(file);
|
|
881
|
+
* if (uploadResult.success) {
|
|
882
|
+
* console.log('File uploaded:', uploadResult.id);
|
|
883
|
+
* }
|
|
884
|
+
* ```
|
|
885
|
+
*/
|
|
886
|
+
readonly volatileKnowledge: VolatileKnowledgeManager;
|
|
772
887
|
protected constructor(agentCode: string, apiKey: string, baseUrl: string, options?: SystemAgentExecutionOptionsMap[T] | undefined);
|
|
773
888
|
stream(): Promise<AgentResult>;
|
|
774
889
|
protected execute(): Promise<AgentResult>;
|
|
@@ -1105,4 +1220,4 @@ declare class ExternalErrorHelper {
|
|
|
1105
1220
|
private static isBaseErrorBody;
|
|
1106
1221
|
}
|
|
1107
1222
|
|
|
1108
|
-
export { type AgentResult, type BaseErrorBody, type ChatWidgetRes, type ConnectorStatusResult, Conversation, type ConversationInfoResult, type ConversationRes, ExternalErrorHelper as ErrorHelper, type GetConnectorStatusOptions, type Message, type PendingAction, type RateLimitErrorBody, RealtimeSession, type RemoveFeedbackOptions, type RemoveFeedbackResult, SerenityClient, type SubmitFeedbackOptions, type SubmitFeedbackResult, type ValidationErrorBody };
|
|
1223
|
+
export { type AgentResult, type BaseErrorBody, type ChatWidgetRes, type ConnectorStatusResult, Conversation, type ConversationInfoResult, type ConversationRes, ExternalErrorHelper as ErrorHelper, type FileError, type GetConnectorStatusOptions, type Message, type PendingAction, type RateLimitErrorBody, RealtimeSession, type RemoveFeedbackOptions, type RemoveFeedbackResult, SerenityClient, type SubmitFeedbackOptions, type SubmitFeedbackResult, type ValidationErrorBody, VolatileKnowledgeManager, type VolatileKnowledgeUploadOptions, type VolatileKnowledgeUploadRes };
|
package/dist/index.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
"use strict";var
|
|
1
|
+
"use strict";var N=Object.defineProperty;var le=Object.getOwnPropertyDescriptor;var ge=Object.getOwnPropertyNames,q=Object.getOwnPropertySymbols;var X=Object.prototype.hasOwnProperty,he=Object.prototype.propertyIsEnumerable;var Y=i=>{throw TypeError(i)};var W=(i,t,e)=>t in i?N(i,t,{enumerable:!0,configurable:!0,writable:!0,value:e}):i[t]=e,O=(i,t)=>{for(var e in t||(t={}))X.call(t,e)&&W(i,e,t[e]);if(q)for(var e of q(t))he.call(t,e)&&W(i,e,t[e]);return i};var me=(i,t)=>{for(var e in t)N(i,e,{get:t[e],enumerable:!0})},ye=(i,t,e,s)=>{if(t&&typeof t=="object"||typeof t=="function")for(let n of ge(t))!X.call(i,n)&&n!==e&&N(i,n,{get:()=>t[n],enumerable:!(s=le(t,n))||s.enumerable});return i};var fe=i=>ye(N({},"__esModule",{value:!0}),i);var z=(i,t,e)=>t.has(i)||Y("Cannot "+e);var G=(i,t,e)=>(z(i,t,"read from private field"),e?e.call(i):t.get(i)),b=(i,t,e)=>t.has(i)?Y("Cannot add the same private member more than once"):t instanceof WeakSet?t.add(i):t.set(i,e);var l=(i,t,e)=>(z(i,t,"access private method"),e);var c=(i,t,e)=>new Promise((s,n)=>{var r=p=>{try{a(e.next(p))}catch(u){n(u)}},o=p=>{try{a(e.throw(p))}catch(u){n(u)}},a=p=>p.done?s(p.value):Promise.resolve(p.value).then(r,o);a((e=e.apply(i,t)).next())});var ve={};me(ve,{ErrorHelper:()=>L,RealtimeSession:()=>R,SerenityClient:()=>F,VolatileKnowledgeManager:()=>C});module.exports=fe(ve);var H,Q,Z,ee,te;if(typeof process!="undefined"&&((te=process.versions)!=null&&te.node)){let i=require("undici");H=i.fetch,Q=i.Headers,Z=i.Request,ee=i.Response,globalThis.fetch||(globalThis.fetch=H,globalThis.Headers=Q,globalThis.Request=Z,globalThis.Response=ee)}var S=class{constructor(){this.listeners={}}on(t,e){return this.listeners[t]||(this.listeners[t]=[]),this.listeners[t].push(e),this}emit(t,...e){var s;(s=this.listeners[t])==null||s.forEach(n=>n(...e))}};var d,A,se,ne,re,ie,oe,ae,J,ce,R=class extends S{constructor(e,s,n,r){super();b(this,d);this.timeout=12e4;this.apiKey=s,this.agentCode=e,this.baseUrl=n,this.agentVersion=r==null?void 0:r.agentVersion,this.inputParameters=r==null?void 0:r.inputParameters,this.userIdentifier=r==null?void 0:r.userIdentifier,this.channel=r==null?void 0:r.channel}start(){return c(this,null,function*(){try{l(this,d,se).call(this)}catch(e){throw new Error("Error starting the session")}})}stop(){l(this,d,A).call(this)}muteMicrophone(){if(this.localStream){let e=this.localStream.getAudioTracks()[0];e&&(e.enabled=!1)}}unmuteMicrophone(){if(this.localStream){let e=this.localStream.getAudioTracks()[0];e&&(e.enabled=!0)}}};d=new WeakSet,A=function(e,s){if(this.socket&&this.socket.readyState===WebSocket.OPEN)try{this.socket.close(1e3,"Client closed the session")}catch(n){console.error("Error closing WebSocket connection:",n)}this.localStream&&(this.localStream.getTracks().forEach(n=>n.stop()),this.localStream=void 0),this.peerConnection&&this.peerConnection.close(),this.socket=void 0,this.dataChannel=void 0,this.peerConnection=void 0,this.emit("session.stopped",e,s),clearTimeout(this.inactivityTimeout)},se=function(){let e=`${this.baseUrl}/v2/agent/${this.agentCode}/realtime`;this.agentVersion&&(e+=`/${this.agentVersion}`),this.socket=new WebSocket(e,["X-API-KEY",this.apiKey]),this.socket.onopen=()=>{let s={type:"serenity.session.create",input_parameters:this.inputParameters,user_identifier:this.userIdentifier,channel:this.channel};this.socket.send(JSON.stringify(s))},this.socket.onclose=()=>{l(this,d,A).call(this)},this.socket.onerror=s=>{this.emit("error","Error connecting to the server"),l(this,d,A).call(this)},this.socket.onmessage=s=>{l(this,d,ne).call(this,s.data)}},ne=function(e){return c(this,null,function*(){let s=JSON.parse(e);switch(s.type){case"serenity.session.created":{let n=s;this.sessionConfiguration={url:n.url,headers:n.headers},l(this,d,ie).call(this),l(this,d,re).call(this),yield l(this,d,ae).call(this);break}case"serenity.session.close":{let n=s,r=l(this,d,ce).call(this,n);this.emit("error",r),l(this,d,A).call(this,n.reason,r);break}case"serenity.response.processed":{let n=s;this.emit("response.processed",n.result);break}default:{let n=s.type.startsWith("serenity");this.dataChannel&&!n&&this.dataChannel.send(JSON.stringify(s))}}})},re=function(){if(!this.peerConnection)throw new Error("Could not add listeners: WebRTC connection not initialized");let e=new Date().toISOString().replace(/T/,"-").replace(/:/g,"-").replace(/\..+/,""),s=`data-channel-${this.agentCode}-${e}`;this.dataChannel=this.peerConnection.createDataChannel(s),this.dataChannel.addEventListener("message",n=>{l(this,d,J).call(this);let r=JSON.parse(n.data);try{switch(r.type){case"input_audio_buffer.speech_started":{this.emit("speech.started");break}case"input_audio_buffer.speech_stopped":{this.emit("speech.stopped");break}case"response.done":{this.emit("response.done");break}case"error":{this.emit("error","There was an error processing your request");break}}}catch(o){this.emit("error","Error processing incoming messages from vendor")}finally{this.socket&&this.socket.send(JSON.stringify(r))}})},ie=function(){this.peerConnection=new RTCPeerConnection;let e=document.createElement("audio");e.autoplay=!0,this.peerConnection.ontrack=s=>{s.streams&&s.streams[0]&&(e.srcObject=s.streams[0])}},oe=function(){return c(this,null,function*(){if(!this.peerConnection)throw new Error("Could not start the session: WebRTC connection not initialized");this.localStream=yield navigator.mediaDevices.getUserMedia({audio:!0});let e=this.localStream.getTracks()[0];this.peerConnection.addTrack(e,this.localStream)})},ae=function(){return c(this,null,function*(){if(!this.peerConnection)throw new Error("Could not start the session: WebRTC connection not initialized");if(!this.sessionConfiguration)throw new Error("Could not start the session: Session configuration not available");try{yield l(this,d,oe).call(this);let e=yield this.peerConnection.createOffer();yield this.peerConnection.setLocalDescription(e);let s=yield fetch(`${this.sessionConfiguration.url}`,{method:"POST",body:e.sdp,headers:this.sessionConfiguration.headers});if(!s.ok)throw new Error("Error starting the session");let n={type:"answer",sdp:yield s.text()};yield this.peerConnection.setRemoteDescription(n),this.emit("session.created"),l(this,d,J).call(this)}catch(e){this.emit("error","Error starting the session"),l(this,d,A).call(this)}})},J=function(){clearTimeout(this.inactivityTimeout),this.inactivityTimeout=setTimeout(()=>{l(this,d,A).call(this)},this.timeout)},ce=function(e){switch(e.reason){case"Exception":return e.message;case"ValidationException":return e.errors?Object.values(e.errors).join(". "):e.message;default:return e.message}};var P=class{constructor(){this.buffer="";this.eventListeners={start:[t=>{}],stop:[t=>{this.stop()}],error:[t=>{this.stop()}]},this.active=!1}start(t,e){return c(this,null,function*(){this.active=!0;try{let s=yield fetch(t,e);if(!s.ok)throw s;if(s.headers.get("Content-Type")!=="text/event-stream")return s;let r=s.body.getReader(),o=new TextDecoder("utf-8");for(this.buffer="";this.active;){let{done:a,value:p}=yield r.read();if(a)break;this.buffer+=o.decode(p,{stream:!0}),this.processEvents()}return s}catch(s){throw this.active=!1,s}})}processEvents(){let t,e=this.buffer.includes(`\r
|
|
2
2
|
`)?`\r
|
|
3
3
|
`:`
|
|
4
|
-
`,t=e+e;for(;(s=this.buffer.indexOf(t))!==-1;){let n=this.buffer.slice(0,s).trim();this.buffer=this.buffer.slice(s+t.length);let r=n.split(e),o={};for(let a of r)a.startsWith("data:")?o.data=a.slice(5).trim():a.startsWith("event:")&&(o.event=a.slice(6).trim());this.trigger(o.event||"message",o.data)}}on(s,e){this.eventListeners[s]||(this.eventListeners[s]=[]),this.eventListeners[s].push(e)}off(s,e){let t=this.eventListeners[s];t&&(this.eventListeners[s]=t.filter(n=>n!==e))}trigger(s,e){let t=this.eventListeners[s];t&&t.forEach(n=>n(e))}stop(){this.active=!1}};var A=class{};A.mapAgentResultToSnakeCase=s=>({content:s.content,instance_id:s.instanceId,action_results:s.actionResults,completion_usage:s.completionUsage,executor_task_logs:s.executorTaskLogs,json_content:s.jsonContent,meta_analysis:s.metaAnalysis,time_to_first_token:s.timeToFirstToken});var y=class{static process(s,e){return c(this,null,function*(){try{if(s instanceof Response)switch(s.status){case 400:{let t=yield s.json();return{message:t.message||"Validation error",statusCode:400,errors:t.errors||{}}}case 429:return{message:"Rate limit exceeded",statusCode:429,retryAfter:parseInt(s.headers.get("Retry-After")||"60")};default:return{message:(yield s.json()).message||e||"An error occurred while processing your request.",statusCode:s.status}}return s instanceof Error?{message:s.message||e||"An error occurred while processing your request.",statusCode:500}:{message:e||"An unknown error occurred.",statusCode:500}}catch(t){return{message:e||"An error occurred while processing your request.",statusCode:500}}})}},N=class{static determineErrorType(s){return this.isRateLimitErrorBody(s)?{type:"RateLimitError",error:s}:this.isValidationErrorBody(s)?{type:"ValidationError",error:s}:this.isBaseErrorBody(s)?{type:"BaseError",error:s}:{type:"UnknownError",error:s}}static isRateLimitErrorBody(s){return typeof s=="object"&&s!==null&&"message"in s&&"statusCode"in s&&"retryAfter"in s&&typeof s.retryAfter=="number"}static isValidationErrorBody(s){return typeof s=="object"&&s!==null&&"message"in s&&"statusCode"in s&&"errors"in s&&typeof s.errors=="object"&&s.errors!==null}static isBaseErrorBody(s){return typeof s=="object"&&s!==null&&"message"in s&&"statusCode"in s&&typeof s.message=="string"&&typeof s.statusCode=="number"}};var l,j,re,ie,_,oe,$=class $ extends E{constructor(e,t,n,r){super();K(this,l);this.info=null;this.apiKey=t,this.agentCode=e,this.baseUrl=n,this.agentVersion=r==null?void 0:r.agentVersion,this.userIdentifier=r==null?void 0:r.userIdentifier,this.channel=r==null?void 0:r.channel,this.inputParameters=r==null?void 0:r.inputParameters}static create(e,t,n,r){return c(this,null,function*(){let o=new $(e,t,n,r);return yield o.getInfo(),o})}static createWithoutInfo(e,t,n){return new $(e,t,n)}streamMessage(e,t){return c(this,null,function*(){let n=this.agentVersion?`/${this.agentVersion}`:"",r=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${n}`,o=d(this,l,j).call(this,{message:e,stream:!0,additionalInfo:t,isNewConversation:!this.conversationId}),a=new b,u;return u=new Promise((h,w)=>c(this,null,function*(){a.on("start",()=>{this.emit("start")}),a.on("error",g=>{let f=JSON.parse(g);this.emit("error",f),w(f)}),a.on("content",g=>{let f=JSON.parse(g);this.emit("content",f.text)}),a.on("stop",g=>{let f=JSON.parse(g);this.conversationId||(this.conversationId=f.result.instance_id),this.emit("stop",f.result),h(f.result)});let m={method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(o)};try{yield a.start(r,m)}catch(g){let f=yield y.process(g,"Failed to send message");w(f)}})),u})}sendMessage(e,t){return c(this,null,function*(){let n=this.agentVersion?`/${this.agentVersion}`:"",r=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${n}`,o=d(this,l,j).call(this,{message:e,stream:!1,additionalInfo:t,isNewConversation:!this.conversationId}),a=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(o)});if(a.status!==200)throw yield y.process(a,"Failed to send message");let u=yield a.json(),h=A.mapAgentResultToSnakeCase(u);return this.conversationId||(this.conversationId=h.instance_id),h})}getConversationById(n){return c(this,arguments,function*(e,t={showExecutorTaskLogs:!1}){let r=`${this.baseUrl}/v2/agent/${this.agentCode}/conversation/${e}`,o=new URLSearchParams;t.showExecutorTaskLogs&&o.append("showExecutorTaskLogs","true"),o.toString()&&(r+=`?${o.toString()}`);let a=yield fetch(r,{method:"GET",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"}});if(a.status!==200)throw yield y.process(a,"Failed to get conversation by id");let u=yield a.json();if(u.messagesJson&&typeof u.messagesJson=="string")try{u.messages=JSON.parse(u.messagesJson),delete u.messagesJson}catch(h){throw new Error("Failed to parse messagesJson: "+h)}return u})}getInfo(){return c(this,null,function*(){let e=`${this.baseUrl}/v2/agent/${this.agentCode}`;this.agentVersion&&(e+=`/${this.agentVersion}`),e+="/conversation/info";let t={};this.channel&&(t.channel=this.channel),this.inputParameters&&(t.inputParameters=[],d(this,l,_).call(this,t.inputParameters,this.inputParameters)),this.userIdentifier&&(t.userIdentifier=this.userIdentifier);let n=yield fetch(e,{method:"POST",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify(t)});if(n.status!==200)throw yield y.process(n,"Failed to get conversation initial info");let r=yield n.json();return this.info=r,this.info})}submitFeedback(e){return c(this,null,function*(){if(!this.conversationId)throw new Error("Conversation ID is not set. Please send a message first to initialize the conversation.");let t=`${this.baseUrl}/agent/${this.agentCode}/conversation/${this.conversationId}/message/${e.agentMessageId}/feedback`;return(yield fetch(t,{method:"POST",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({feedback:e.feedback})})).status!==200?{success:!1}:{success:!0}})}removeFeedback(e){return c(this,null,function*(){if(!this.conversationId)throw new Error("Conversation ID is not set. Please send a message first to initialize the conversation.");let t=`${this.baseUrl}/agent/${this.agentCode}/conversation/${this.conversationId}/message/${e.agentMessageId}/feedback`;return(yield fetch(t,{method:"DELETE",headers:{"X-API-KEY":this.apiKey}})).status!==200?{success:!1}:{success:!0}})}getConnectorStatus(e){return c(this,null,function*(){let t=`${this.baseUrl}/connection/agentInstance/${e.agentInstanceId}/connector/${e.connectorId}/status`,n=yield fetch(t,{method:"GET",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"}});if(n.status!==200)throw yield y.process(n,"Failed to get connector status");return yield n.json()})}};l=new WeakSet,j=function(e){var n,r,o,a;let t=[{Key:"message",Value:e.message},{Key:"stream",Value:e.stream.toString()}];return e.isNewConversation?d(this,l,re).call(this,t):t.push({Key:"chatId",Value:this.conversationId}),d(this,l,_).call(this,t,L(L({},(r=(n=e.additionalInfo)==null?void 0:n.inputParameters)!=null?r:{}),(o=this.inputParameters)!=null?o:{})),d(this,l,oe).call(this,t,(a=e.additionalInfo)==null?void 0:a.volatileKnowledgeIds),d(this,l,ie).call(this,t),t},re=function(e){this.userIdentifier&&e.push({Key:"userIdentifier",Value:this.userIdentifier})},ie=function(e){this.channel&&e.push({Key:"channel",Value:this.channel})},_=function(e,t={}){if(!(!t||Object.keys(t).length===0))for(let[n,r]of Object.entries(t))e.push({Key:n,Value:r})},oe=function(e,t){!t||t.length===0||e.push({Key:"volatileKnowledgeIds",Value:t})};var P=$;var R=class{constructor(s,e,t,n){this.agentCode=s;this.apiKey=e;this.baseUrl=t;this.options=n}createRealtimeSession(s,e,t,n){return new I(s,e,t,n)}createConversation(s,e,t,n){return c(this,null,function*(){return P.create(s,e,t,n)})}createConversationWithoutInfo(s,e,t){return P.createWithoutInfo(s,e,t)}};var v=class i extends R{constructor(s,e,t,n){super(s,e,t,n)}static create(s,e,t,n){return new i(s,e,t,n)}};var k=class i extends R{constructor(s,e,t,n){super(s,e,t,n)}static create(s,e,t,n){return new i(s,e,t,n)}};var S=class extends E{constructor(e,t,n,r){super();this.agentCode=e;this.apiKey=t;this.baseUrl=n;this.options=r}stream(){return c(this,null,function*(){var a;let e=(a=this.options)!=null&&a.agentVersion?`/${this.options.agentVersion}`:"",t=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${e}`,n=this.createExecuteBody(!0),r=new b,o;return o=new Promise((u,h)=>c(this,null,function*(){r.on("start",()=>{this.emit("start")}),r.on("error",m=>{let g=JSON.parse(m);this.emit("error",g),h(g)}),r.on("content",m=>{let g=JSON.parse(m);this.emit("content",g.text)}),r.on("stop",m=>{let g=JSON.parse(m);this.emit("stop",g.result),u(g.result)});let w={method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(n)};try{yield r.start(t,w)}catch(m){let g=yield y.process(m,"Failed to send message");h(g)}})),o})}execute(){return c(this,null,function*(){var a;let e=(a=this.options)!=null&&a.agentVersion?`/${this.options.agentVersion}`:"",t=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${e}`,n=this.createExecuteBody(!1),r=yield fetch(t,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(n)});if(r.status!==200)throw yield y.process(r,"Failed to send message");let o=yield r.json();return A.mapAgentResultToSnakeCase(o)})}createExecuteBody(e){let t=[{Key:"stream",Value:e.toString()}];return this.appendVolatileKnowledgeIdsIfNeeded(t),this.appendUserIdentifierIfNeeded(t),this.appendChannelIfNeeded(t),t}appendUserIdentifierIfNeeded(e){var t;(t=this.options)!=null&&t.userIdentifier&&e.push({Key:"userIdentifier",Value:this.options.userIdentifier})}appendVolatileKnowledgeIdsIfNeeded(e){var t;!((t=this.options)!=null&&t.volatileKnowledgeIds)||this.options.volatileKnowledgeIds.length===0||e.push({Key:"volatileKnowledgeIds",Value:this.options.volatileKnowledgeIds})}appendChannelIfNeeded(e){var t;(t=this.options)!=null&&t.channel&&e.push({Key:"channel",Value:this.options.channel})}};var O=class i extends S{constructor(s,e,t,n){super(s,e,t,n)}static create(s,e,t,n){return new i(s,e,t,n)}static createAndExecute(s,e,t,n){return new i(s,e,t,n).execute()}createExecuteBody(s){let e=super.createExecuteBody(s);return this.appendInputParametersIfNeeded(e),e}appendInputParametersIfNeeded(s){var e;if(!(!((e=this.options)!=null&&e.inputParameters)||Object.keys(this.options.inputParameters).length===0))for(let[t,n]of Object.entries(this.options.inputParameters))s.push({Key:t,Value:n})}};var T=class i extends S{constructor(s,e,t,n){super(s,e,t,n)}static create(s,e,t,n){return new i(s,e,t,n)}static createAndExecute(s,e,t,n){return new i(s,e,t,n).execute()}createExecuteBody(s){let e=super.createExecuteBody(s);return this.appendMessagesIfNeeded(e),this.appendMessageIfNeeded(e),this.appendInputParametersIfNeeded(e),e}appendMessagesIfNeeded(s){var e;!((e=this.options)!=null&&e.messages)||this.options.messages.length===0||s.push({Key:"messages",Value:JSON.stringify(this.options.messages)})}appendMessageIfNeeded(s){var e;(e=this.options)!=null&&e.message&&s.push({Key:"message",Value:this.options.message})}appendInputParametersIfNeeded(s){var e;if(!(!((e=this.options)!=null&&e.inputParameters)||Object.keys(this.options.inputParameters).length===0))for(let[t,n]of Object.entries(this.options.inputParameters))s.push({Key:t,Value:n})}};var B=class i extends S{constructor(s,e,t,n){super(s,e,t,n)}static create(s,e,t,n){return new i(s,e,t,n)}static createAndExecute(s,e,t,n){return new i(s,e,t,n).execute()}createExecuteBody(s){let e=this.options;return{model:e.model,messages:e.messages,frequency_penalty:e.frequency_penalty,max_tokens:e.max_tokens,presence_penalty:e.presence_penalty,temperature:e.temperature,top_p:e.top_p,top_k:e.top_k,vendor:e.vendor,userIdentifier:e.userIdentifier,groupIdentifier:e.groupIdentifier,useVision:e.useVision,stream:s}}};var C=class{static createAgent(s,e,t){switch(s){case"assistant":return{createConversation:(n,r)=>c(this,null,function*(){return yield v.create(n,e,t,r).createConversation(n,e,t,r)}),getConversationById:(a,u,...h)=>c(this,[a,u,...h],function*(n,r,o={showExecutorTaskLogs:!1}){return yield(yield v.create(n,e,t).createConversationWithoutInfo(n,e,t)).getConversationById(r,o)}),getInfoByCode:(n,r)=>c(this,null,function*(){return(yield v.create(n,e,t,r).createConversation(n,e,t,r)).info}),createRealtimeSession:(n,r)=>v.create(n,e,t,r).createRealtimeSession(n,e,t,r)};case"copilot":return{createConversation:(n,r)=>c(this,null,function*(){return yield k.create(n,e,t,r).createConversation(n,e,t,r)}),getConversationById:(a,u,...h)=>c(this,[a,u,...h],function*(n,r,o={showExecutorTaskLogs:!1}){return yield(yield v.create(n,e,t).createConversationWithoutInfo(n,e,t)).getConversationById(r,o)}),getInfoByCode:(n,r)=>c(this,null,function*(){return(yield v.create(n,e,t,r).createConversation(n,e,t,r)).info}),createRealtimeSession:(n,r)=>k.create(n,e,t,r).createRealtimeSession(n,e,t,r)};case"activity":return{execute:(n,r)=>O.createAndExecute(n,e,t,r),create:(n,r)=>O.create(n,e,t,r)};case"chat-completion":return{execute:(n,r)=>T.createAndExecute(n,e,t,r),create:(n,r)=>T.create(n,e,t,r)};case"proxy":return{execute:(n,r)=>B.createAndExecute(n,e,t,r),create:(n,r)=>B.create(n,e,t,r)};default:throw new Error(`Agent type ${s} not supported`)}}};var M=class{constructor(s){this.baseUrl="https://api.serenitystar.ai/api";if(!s.apiKey)throw new Error("The API key is required");this.apiKey=s.apiKey,this.baseUrl=s.baseUrl||this.baseUrl,this.agents={assistants:C.createAgent("assistant",this.apiKey,this.baseUrl),copilots:C.createAgent("copilot",this.apiKey,this.baseUrl),activities:C.createAgent("activity",this.apiKey,this.baseUrl),chatCompletions:C.createAgent("chat-completion",this.apiKey,this.baseUrl),proxies:C.createAgent("proxy",this.apiKey,this.baseUrl)}}};0&&(module.exports={ErrorHelper,RealtimeSession,SerenityClient});
|
|
4
|
+
`,s=e+e;for(;(t=this.buffer.indexOf(s))!==-1;){let n=this.buffer.slice(0,t).trim();this.buffer=this.buffer.slice(t+s.length);let r=n.split(e),o={};for(let a of r)a.startsWith("data:")?o.data=a.slice(5).trim():a.startsWith("event:")&&(o.event=a.slice(6).trim());this.trigger(o.event||"message",o.data)}}on(t,e){this.eventListeners[t]||(this.eventListeners[t]=[]),this.eventListeners[t].push(e)}off(t,e){let s=this.eventListeners[t];s&&(this.eventListeners[t]=s.filter(n=>n!==e))}trigger(t,e){let s=this.eventListeners[t];s&&s.forEach(n=>n(e))}stop(){this.active=!1}};var I=class{};I.mapAgentResultToSnakeCase=t=>({content:t.content,instance_id:t.instanceId,action_results:t.actionResults,completion_usage:t.completionUsage,executor_task_logs:t.executorTaskLogs,json_content:t.jsonContent,meta_analysis:t.metaAnalysis,time_to_first_token:t.timeToFirstToken});var j,T=class T{static process(t,e){return c(this,null,function*(){try{if(t instanceof Response)switch(t.status){case 400:{let s=yield t.json();return{message:s.message||"Validation error",statusCode:400,errors:s.errors||{}}}case 429:return{message:"Rate limit exceeded",statusCode:429,retryAfter:parseInt(t.headers.get("Retry-After")||"60")};default:return{message:(yield t.json()).message||e||"An error occurred while processing your request.",statusCode:t.status}}return t instanceof Error?{message:t.message||e||"An error occurred while processing your request.",statusCode:500}:{message:e||"An unknown error occurred.",statusCode:500}}catch(s){return{message:e||"An error occurred while processing your request.",statusCode:500}}})}};j=new WeakMap,T.processFile=(t,e,s,n)=>{var r;switch(t){case 401:{let o=s;return`${e.name}: ${o.message}`}case 400:{let o=s;return`${e.name}: ${G(r=T,j).call(r,o)}`}case 413:{let o=s;return`${e.name}: ${o.message}`}default:return`${e.name}: ${n||"An unknown error occurred while uploading the file."}`}},b(T,j,t=>t.errors&&t.errors.File?Array.isArray(t.errors.File)?t.errors.File.join(", "):t.errors.File:Object.values(t.errors).flat().join(", "));var m=T,L=class{static determineErrorType(t){return this.isRateLimitErrorBody(t)?{type:"RateLimitError",error:t}:this.isValidationErrorBody(t)?{type:"ValidationError",error:t}:this.isBaseErrorBody(t)?{type:"BaseError",error:t}:{type:"UnknownError",error:t}}static isRateLimitErrorBody(t){return typeof t=="object"&&t!==null&&"message"in t&&"statusCode"in t&&"retryAfter"in t&&typeof t.retryAfter=="number"}static isValidationErrorBody(t){return typeof t=="object"&&t!==null&&"message"in t&&"statusCode"in t&&"errors"in t&&typeof t.errors=="object"&&t.errors!==null}static isBaseErrorBody(t){return typeof t=="object"&&t!==null&&"message"in t&&"statusCode"in t&&typeof t.message=="string"&&typeof t.statusCode=="number"}};var C=class{constructor(t,e){this.baseUrl=t;this.apiKey=e;this.ids=[]}upload(s){return c(this,arguments,function*(t,e={useVision:!1,processEmbeddings:!1}){var a,p;let n=`${this.baseUrl}/v2/volatileKnowledge`,r=new FormData;r.append("file",t);let o=new URLSearchParams;e!=null&&e.processEmbeddings||t.type.startsWith("image/")&&o.append("processEmbeddings",(!e.useVision).toString());try{let u=yield fetch(`${n}?${o.toString()}`,{method:"POST",body:r,headers:{contentType:"multipart/form-data","X-API-KEY":this.apiKey}}),h=yield u.json();return u.ok?(this.ids.includes(h.id)||this.ids.push(h.id),{success:!0,id:h.id,expirationDate:h.expirationDate,status:h.status,fileName:t.name,fileSize:h.fileSize}):{success:!1,error:{file:t,error:new Error(m.processFile(u.status,t,h,(a=e.locale)==null?void 0:a.uploadFileErrorMessage))}}}catch(u){return{success:!1,error:{file:t,error:new Error(m.processFile(500,t,{},(p=e.locale)==null?void 0:p.uploadFileErrorMessage))}}}})}removeById(t){let e=this.ids.indexOf(t);return e>-1?(this.ids.splice(e,1),!0):!1}clear(){this.ids=[]}getIds(){return[...this.ids]}getById(t){return c(this,null,function*(){let e=`${this.baseUrl}/v2/volatileKnowledge/${t}`,s=yield fetch(e,{method:"GET",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey}}),n=yield s.json();return s.ok?O({success:!0},n):{success:!1,error:{error:new Error(n.message||"Failed to fetch volatile knowledge file.")}}})}};var y,_,pe,de,D,ue,U=class U extends S{constructor(e,s,n,r){super();b(this,y);this.info=null;this.apiKey=s,this.agentCode=e,this.baseUrl=n,this.volatileKnowledge=new C(n,s),this.agentVersion=r==null?void 0:r.agentVersion,this.userIdentifier=r==null?void 0:r.userIdentifier,this.channel=r==null?void 0:r.channel,this.inputParameters=r==null?void 0:r.inputParameters}static create(e,s,n,r){return c(this,null,function*(){let o=new U(e,s,n,r);return yield o.getInfo(),o})}static createWithoutInfo(e,s,n){return new U(e,s,n)}streamMessage(e,s){return c(this,null,function*(){let n=this.agentVersion?`/${this.agentVersion}`:"",r=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${n}`,o=l(this,y,_).call(this,{message:e,stream:!0,additionalInfo:s,isNewConversation:!this.conversationId}),a=new P,p;return p=new Promise((u,h)=>c(this,null,function*(){a.on("start",()=>{this.emit("start")}),a.on("error",g=>{let v=JSON.parse(g);this.emit("error",v),h(v)}),a.on("content",g=>{let v=JSON.parse(g);this.emit("content",v.text)}),a.on("stop",g=>{let v=JSON.parse(g);this.conversationId||(this.conversationId=v.result.instance_id),this.volatileKnowledge.clear(),this.emit("stop",v.result),u(v.result)});let f={method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(o)};try{yield a.start(r,f)}catch(g){let v=yield m.process(g,"Failed to send message");h(v)}})),p})}sendMessage(e,s){return c(this,null,function*(){let n=this.agentVersion?`/${this.agentVersion}`:"",r=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${n}`,o=l(this,y,_).call(this,{message:e,stream:!1,additionalInfo:s,isNewConversation:!this.conversationId}),a=yield fetch(r,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(o)});if(a.status!==200)throw yield m.process(a,"Failed to send message");let p=yield a.json(),u=I.mapAgentResultToSnakeCase(p);return this.conversationId||(this.conversationId=u.instance_id),this.volatileKnowledge.clear(),u})}getConversationById(n){return c(this,arguments,function*(e,s={showExecutorTaskLogs:!1}){let r=`${this.baseUrl}/v2/agent/${this.agentCode}/conversation/${e}`,o=new URLSearchParams;s.showExecutorTaskLogs&&o.append("showExecutorTaskLogs","true"),o.toString()&&(r+=`?${o.toString()}`);let a=yield fetch(r,{method:"GET",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"}});if(a.status!==200)throw yield m.process(a,"Failed to get conversation by id");let p=yield a.json();if(p.messagesJson&&typeof p.messagesJson=="string")try{p.messages=JSON.parse(p.messagesJson),delete p.messagesJson}catch(u){throw new Error("Failed to parse messagesJson: "+u)}return p})}getInfo(){return c(this,null,function*(){let e=`${this.baseUrl}/v2/agent/${this.agentCode}`;this.agentVersion&&(e+=`/${this.agentVersion}`),e+="/conversation/info";let s={};this.channel&&(s.channel=this.channel),this.inputParameters&&(s.inputParameters=[],l(this,y,D).call(this,s.inputParameters,this.inputParameters)),this.userIdentifier&&(s.userIdentifier=this.userIdentifier);let n=yield fetch(e,{method:"POST",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify(s)});if(n.status!==200)throw yield m.process(n,"Failed to get conversation initial info");let r=yield n.json();return this.info=r,this.info})}submitFeedback(e){return c(this,null,function*(){if(!this.conversationId)throw new Error("Conversation ID is not set. Please send a message first to initialize the conversation.");let s=`${this.baseUrl}/agent/${this.agentCode}/conversation/${this.conversationId}/message/${e.agentMessageId}/feedback`;return(yield fetch(s,{method:"POST",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify({feedback:e.feedback})})).status!==200?{success:!1}:{success:!0}})}removeFeedback(e){return c(this,null,function*(){if(!this.conversationId)throw new Error("Conversation ID is not set. Please send a message first to initialize the conversation.");let s=`${this.baseUrl}/agent/${this.agentCode}/conversation/${this.conversationId}/message/${e.agentMessageId}/feedback`;return(yield fetch(s,{method:"DELETE",headers:{"X-API-KEY":this.apiKey}})).status!==200?{success:!1}:{success:!0}})}getConnectorStatus(e){return c(this,null,function*(){let s=`${this.baseUrl}/connection/agentInstance/${e.agentInstanceId}/connector/${e.connectorId}/status`,n=yield fetch(s,{method:"GET",headers:{"X-API-KEY":this.apiKey,"Content-Type":"application/json"}});if(n.status!==200)throw yield m.process(n,"Failed to get connector status");return yield n.json()})}};y=new WeakSet,_=function(e){var r,o,a,p,u;let s=[{Key:"message",Value:e.message},{Key:"stream",Value:e.stream.toString()}];e.isNewConversation?l(this,y,pe).call(this,s):s.push({Key:"chatId",Value:this.conversationId}),l(this,y,D).call(this,s,O(O({},(o=(r=e.additionalInfo)==null?void 0:r.inputParameters)!=null?o:{}),(a=this.inputParameters)!=null?a:{}));let n=Array.from(new Set([...(u=(p=e.additionalInfo)==null?void 0:p.volatileKnowledgeIds)!=null?u:[],...this.volatileKnowledge.getIds()]));return l(this,y,ue).call(this,s,n.length>0?n:void 0),l(this,y,de).call(this,s),s},pe=function(e){this.userIdentifier&&e.push({Key:"userIdentifier",Value:this.userIdentifier})},de=function(e){this.channel&&e.push({Key:"channel",Value:this.channel})},D=function(e,s={}){if(!(!s||Object.keys(s).length===0))for(let[n,r]of Object.entries(s))e.push({Key:n,Value:r})},ue=function(e,s){!s||s.length===0||e.push({Key:"volatileKnowledgeIds",Value:s})};var B=U;var k=class{constructor(t,e,s,n){this.agentCode=t;this.apiKey=e;this.baseUrl=s;this.options=n}createRealtimeSession(t,e,s,n){return new R(t,e,s,n)}createConversation(t,e,s,n){return c(this,null,function*(){return B.create(t,e,s,n)})}createConversationWithoutInfo(t,e,s){return B.createWithoutInfo(t,e,s)}};var E=class i extends k{constructor(t,e,s,n){super(t,e,s,n)}static create(t,e,s,n){return new i(t,e,s,n)}};var K=class i extends k{constructor(t,e,s,n){super(t,e,s,n)}static create(t,e,s,n){return new i(t,e,s,n)}};var w=class extends S{constructor(e,s,n,r){super();this.agentCode=e;this.apiKey=s;this.baseUrl=n;this.options=r;this.volatileKnowledge=new C(n,s)}stream(){return c(this,null,function*(){var a;let e=(a=this.options)!=null&&a.agentVersion?`/${this.options.agentVersion}`:"",s=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${e}`,n=this.createExecuteBody(!0),r=new P,o;return o=new Promise((p,u)=>c(this,null,function*(){r.on("start",()=>{this.emit("start")}),r.on("error",f=>{let g=JSON.parse(f);this.emit("error",g),u(g)}),r.on("content",f=>{let g=JSON.parse(f);this.emit("content",g.text)}),r.on("stop",f=>{let g=JSON.parse(f);this.volatileKnowledge.clear(),this.emit("stop",g.result),p(g.result)});let h={method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(n)};try{yield r.start(s,h)}catch(f){let g=yield m.process(f,"Failed to send message");u(g)}})),o})}execute(){return c(this,null,function*(){var p;let e=(p=this.options)!=null&&p.agentVersion?`/${this.options.agentVersion}`:"",s=`${this.baseUrl}/v2/agent/${this.agentCode}/execute${e}`,n=this.createExecuteBody(!1),r=yield fetch(s,{method:"POST",headers:{"Content-Type":"application/json","X-API-KEY":this.apiKey},body:JSON.stringify(n)});if(r.status!==200)throw yield m.process(r,"Failed to send message");let o=yield r.json(),a=I.mapAgentResultToSnakeCase(o);return this.volatileKnowledge.clear(),a})}createExecuteBody(e){let s=[{Key:"stream",Value:e.toString()}];return this.appendVolatileKnowledgeIdsIfNeeded(s),this.appendUserIdentifierIfNeeded(s),this.appendChannelIfNeeded(s),s}appendUserIdentifierIfNeeded(e){var s;(s=this.options)!=null&&s.userIdentifier&&e.push({Key:"userIdentifier",Value:this.options.userIdentifier})}appendVolatileKnowledgeIdsIfNeeded(e){var n,r;let s=Array.from(new Set([...(r=(n=this.options)==null?void 0:n.volatileKnowledgeIds)!=null?r:[],...this.volatileKnowledge.getIds()]));s.length!==0&&e.push({Key:"volatileKnowledgeIds",Value:s})}appendChannelIfNeeded(e){var s;(s=this.options)!=null&&s.channel&&e.push({Key:"channel",Value:this.options.channel})}};var V=class i extends w{constructor(t,e,s,n){super(t,e,s,n)}static create(t,e,s,n){return new i(t,e,s,n)}static createAndExecute(t,e,s,n){return new i(t,e,s,n).execute()}createExecuteBody(t){let e=super.createExecuteBody(t);return this.appendInputParametersIfNeeded(e),e}appendInputParametersIfNeeded(t){var e;if(!(!((e=this.options)!=null&&e.inputParameters)||Object.keys(this.options.inputParameters).length===0))for(let[s,n]of Object.entries(this.options.inputParameters))t.push({Key:s,Value:n})}};var M=class i extends w{constructor(t,e,s,n){super(t,e,s,n)}static create(t,e,s,n){return new i(t,e,s,n)}static createAndExecute(t,e,s,n){return new i(t,e,s,n).execute()}createExecuteBody(t){let e=super.createExecuteBody(t);return this.appendMessagesIfNeeded(e),this.appendMessageIfNeeded(e),this.appendInputParametersIfNeeded(e),e}appendMessagesIfNeeded(t){var e;!((e=this.options)!=null&&e.messages)||this.options.messages.length===0||t.push({Key:"messages",Value:JSON.stringify(this.options.messages)})}appendMessageIfNeeded(t){var e;(e=this.options)!=null&&e.message&&t.push({Key:"message",Value:this.options.message})}appendInputParametersIfNeeded(t){var e;if(!(!((e=this.options)!=null&&e.inputParameters)||Object.keys(this.options.inputParameters).length===0))for(let[s,n]of Object.entries(this.options.inputParameters))t.push({Key:s,Value:n})}};var $=class i extends w{constructor(t,e,s,n){super(t,e,s,n)}static create(t,e,s,n){return new i(t,e,s,n)}static createAndExecute(t,e,s,n){return new i(t,e,s,n).execute()}createExecuteBody(t){let e=this.options;return{model:e.model,messages:e.messages,frequency_penalty:e.frequency_penalty,max_tokens:e.max_tokens,presence_penalty:e.presence_penalty,temperature:e.temperature,top_p:e.top_p,top_k:e.top_k,vendor:e.vendor,userIdentifier:e.userIdentifier,groupIdentifier:e.groupIdentifier,useVision:e.useVision,stream:t}}};var x=class{static createAgent(t,e,s){switch(t){case"assistant":return{createConversation:(n,r)=>c(this,null,function*(){return yield E.create(n,e,s,r).createConversation(n,e,s,r)}),getConversationById:(a,p,...u)=>c(this,[a,p,...u],function*(n,r,o={showExecutorTaskLogs:!1}){return yield(yield E.create(n,e,s).createConversationWithoutInfo(n,e,s)).getConversationById(r,o)}),getInfoByCode:(n,r)=>c(this,null,function*(){return(yield E.create(n,e,s,r).createConversation(n,e,s,r)).info}),createRealtimeSession:(n,r)=>E.create(n,e,s,r).createRealtimeSession(n,e,s,r)};case"copilot":return{createConversation:(n,r)=>c(this,null,function*(){return yield K.create(n,e,s,r).createConversation(n,e,s,r)}),getConversationById:(a,p,...u)=>c(this,[a,p,...u],function*(n,r,o={showExecutorTaskLogs:!1}){return yield(yield E.create(n,e,s).createConversationWithoutInfo(n,e,s)).getConversationById(r,o)}),getInfoByCode:(n,r)=>c(this,null,function*(){return(yield E.create(n,e,s,r).createConversation(n,e,s,r)).info}),createRealtimeSession:(n,r)=>K.create(n,e,s,r).createRealtimeSession(n,e,s,r)};case"activity":return{execute:(n,r)=>V.createAndExecute(n,e,s,r),create:(n,r)=>V.create(n,e,s,r)};case"chat-completion":return{execute:(n,r)=>M.createAndExecute(n,e,s,r),create:(n,r)=>M.create(n,e,s,r)};case"proxy":return{execute:(n,r)=>$.createAndExecute(n,e,s,r),create:(n,r)=>$.create(n,e,s,r)};default:throw new Error(`Agent type ${t} not supported`)}}};var F=class{constructor(t){this.baseUrl="https://api.serenitystar.ai/api";if(!t.apiKey)throw new Error("The API key is required");this.apiKey=t.apiKey,this.baseUrl=t.baseUrl||this.baseUrl,this.agents={assistants:x.createAgent("assistant",this.apiKey,this.baseUrl),copilots:x.createAgent("copilot",this.apiKey,this.baseUrl),activities:x.createAgent("activity",this.apiKey,this.baseUrl),chatCompletions:x.createAgent("chat-completion",this.apiKey,this.baseUrl),proxies:x.createAgent("proxy",this.apiKey,this.baseUrl)}}};0&&(module.exports={ErrorHelper,RealtimeSession,SerenityClient,VolatileKnowledgeManager});
|
|
5
5
|
//# sourceMappingURL=index.js.map
|