From 5cf0b0fc2c8ffd6c7e74835ad2670dd4535cc068 Mon Sep 17 00:00:00 2001 From: John Robinson Date: Thu, 20 Mar 2025 22:49:46 -0400 Subject: [PATCH 1/3] feat: add optional id to Content type --- src/types/content.ts | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/types/content.ts b/src/types/content.ts index d7b8a94d..b4e9eacf 100644 --- a/src/types/content.ts +++ b/src/types/content.ts @@ -315,6 +315,8 @@ export declare interface Content { parts: Part[]; /** The producer of the content. */ role: string; + /** The unique id if the content */ + id?: string; } /** From 8a2719dc5804341ea2a45f581e4d0425cdfa6c96 Mon Sep 17 00:00:00 2001 From: John Robinson Date: Thu, 20 Mar 2025 22:50:29 -0400 Subject: [PATCH 2/3] feat: add unique id to chat history content items --- src/models/chat_session.ts | 43 ++++++++++++++++++++++++++------------ 1 file changed, 30 insertions(+), 13 deletions(-) diff --git a/src/models/chat_session.ts b/src/models/chat_session.ts index 431f9ee4..767fb943 100644 --- a/src/models/chat_session.ts +++ b/src/models/chat_session.ts @@ -126,8 +126,10 @@ export class ChatSession { async sendMessage( request: string | Array ): Promise { - const newContent: Content[] = - formulateNewContentFromSendMessageRequest(request); + const newContent: Content[] = formulateNewContentFromSendMessageRequest( + request, + this.historyInternal + ); const generateContentRequest: GenerateContentRequest = { contents: this.historyInternal.concat(newContent), safetySettings: this.safetySettings, @@ -211,8 +213,10 @@ export class ChatSession { async sendMessageStream( request: string | Array ): Promise { - const newContent: Content[] = - formulateNewContentFromSendMessageRequest(request); + const newContent: Content[] = formulateNewContentFromSendMessageRequest( + request, + this.historyInternal + ); const generateContentrequest: GenerateContentRequest = { contents: this.historyInternal.concat(newContent), safetySettings: this.safetySettings, @@ -337,8 +341,10 @@ export class ChatSessionPreview { async sendMessage( request: string | Array ): Promise { - const newContent: Content[] = - formulateNewContentFromSendMessageRequest(request); + const newContent: Content[] = formulateNewContentFromSendMessageRequest( + request, + this.historyInternal + ); const generateContentRequest: GenerateContentRequest = { contents: this.historyInternal.concat(newContent), safetySettings: this.safetySettings, @@ -424,8 +430,10 @@ export class ChatSessionPreview { async sendMessageStream( request: string | Array ): Promise { - const newContent: Content[] = - formulateNewContentFromSendMessageRequest(request); + const newContent: Content[] = formulateNewContentFromSendMessageRequest( + request, + this.historyInternal + ); const generateContentRequest: GenerateContentRequest = { contents: this.historyInternal.concat(newContent), safetySettings: this.safetySettings, @@ -464,7 +472,8 @@ export class ChatSessionPreview { } function formulateNewContentFromSendMessageRequest( - request: string | Array + request: string | Array, + historyInternal: Content[] ): Content[] { let newParts: Part[] = []; @@ -480,7 +489,10 @@ function formulateNewContentFromSendMessageRequest( } } - return assignRoleToPartsAndValidateSendMessageRequest(newParts); + return assignRoleToPartsAndValidateSendMessageRequest( + newParts, + historyInternal + ); } /** @@ -492,10 +504,15 @@ function formulateNewContentFromSendMessageRequest( * @returns Array of content items */ function assignRoleToPartsAndValidateSendMessageRequest( - parts: Array + parts: Array, + historyInternal: Content[] ): Content[] { - const userContent: Content = {role: constants.USER_ROLE, parts: []}; - const functionContent: Content = {role: constants.USER_ROLE, parts: []}; + let id: string = crypto.randomUUID(); + while (historyInternal.some(content => content.id === id)) { + id = crypto.randomUUID(); + } + const userContent: Content = {id, role: constants.USER_ROLE, parts: []}; + const functionContent: Content = {id, role: constants.USER_ROLE, parts: []}; let hasUserContent = false; let hasFunctionContent = false; for (const part of parts) { From c4344489c172734309c065a01ac72cc1f1bfaef7 Mon Sep 17 00:00:00 2001 From: John Robinson Date: Thu, 20 Mar 2025 22:56:02 -0400 Subject: [PATCH 3/3] chore: fix typo --- src/types/content.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/types/content.ts b/src/types/content.ts index b4e9eacf..f73ba24f 100644 --- a/src/types/content.ts +++ b/src/types/content.ts @@ -315,7 +315,7 @@ export declare interface Content { parts: Part[]; /** The producer of the content. */ role: string; - /** The unique id if the content */ + /** The unique id of the content */ id?: string; }