From e6368232e7576137100b6b8220cceb6c8d44ee31 Mon Sep 17 00:00:00 2001 From: Christina Holland Date: Wed, 3 Apr 2024 12:57:51 -0700 Subject: [PATCH] Loosen Role type (#74) --- .changeset/plenty-yaks-promise.md | 5 +++++ docs/reference/generative-ai.content.md | 2 +- docs/reference/generative-ai.content.role.md | 2 +- docs/reference/generative-ai.md | 1 - docs/reference/generative-ai.role.md | 15 --------------- packages/main/src/methods/chat-session-helpers.ts | 8 +++++--- packages/main/types/content.ts | 4 +--- packages/main/types/enums.ts | 6 ------ 8 files changed, 13 insertions(+), 30 deletions(-) create mode 100644 .changeset/plenty-yaks-promise.md delete mode 100644 docs/reference/generative-ai.role.md diff --git a/.changeset/plenty-yaks-promise.md b/.changeset/plenty-yaks-promise.md new file mode 100644 index 00000000..57276e4f --- /dev/null +++ b/.changeset/plenty-yaks-promise.md @@ -0,0 +1,5 @@ +--- +"@google/generative-ai": minor +--- + +Loosen role field typing on Content. diff --git a/docs/reference/generative-ai.content.md b/docs/reference/generative-ai.content.md index 83be490d..3f4e66b8 100644 --- a/docs/reference/generative-ai.content.md +++ b/docs/reference/generative-ai.content.md @@ -17,5 +17,5 @@ export interface Content | Property | Modifiers | Type | Description | | --- | --- | --- | --- | | [parts](./generative-ai.content.parts.md) | | [Part](./generative-ai.part.md)\[\] | | -| [role](./generative-ai.content.role.md) | | [Role](./generative-ai.role.md) | | +| [role](./generative-ai.content.role.md) | | string | | diff --git a/docs/reference/generative-ai.content.role.md b/docs/reference/generative-ai.content.role.md index 3a151e46..07763381 100644 --- a/docs/reference/generative-ai.content.role.md +++ b/docs/reference/generative-ai.content.role.md @@ -7,5 +7,5 @@ **Signature:** ```typescript -role: Role; +role: string; ``` diff --git a/docs/reference/generative-ai.md b/docs/reference/generative-ai.md index 59926e91..e92ee919 100644 --- a/docs/reference/generative-ai.md +++ b/docs/reference/generative-ai.md @@ -75,6 +75,5 @@ | Type Alias | Description | | --- | --- | | [Part](./generative-ai.part.md) | Content part - includes text or image part types. | -| [Role](./generative-ai.role.md) | Role is the producer of the content. | | [Tool](./generative-ai.tool.md) | Defines a tool that model can call to access external knowledge. | diff --git a/docs/reference/generative-ai.role.md b/docs/reference/generative-ai.role.md deleted file mode 100644 index 79f8e9a1..00000000 --- a/docs/reference/generative-ai.role.md +++ /dev/null @@ -1,15 +0,0 @@ - - -[Home](./index.md) > [@google/generative-ai](./generative-ai.md) > [Role](./generative-ai.role.md) - -## Role type - -Role is the producer of the content. - -**Signature:** - -```typescript -export type Role = (typeof POSSIBLE_ROLES)[number]; -``` -**References:** [POSSIBLE\_ROLES](./generative-ai.possible_roles.md) - diff --git a/packages/main/src/methods/chat-session-helpers.ts b/packages/main/src/methods/chat-session-helpers.ts index a4dd9027..ed6fa0c7 100644 --- a/packages/main/src/methods/chat-session-helpers.ts +++ b/packages/main/src/methods/chat-session-helpers.ts @@ -15,9 +15,11 @@ * limitations under the License. */ -import { Content, POSSIBLE_ROLES, Part, Role } from "../../types"; +import { Content, POSSIBLE_ROLES, Part } from "../../types"; import { GoogleGenerativeAIError } from "../errors"; +type Role = (typeof POSSIBLE_ROLES)[number]; + // https://ai.google.dev/api/rest/v1beta/Content#part const VALID_PART_FIELDS: Array = [ @@ -42,7 +44,7 @@ const VALID_PREVIOUS_CONTENT_ROLES: { [key in Role]: Role[] } = { export function validateChatHistory(history: Content[]): void { let prevContent: Content; for (const currContent of history) { - const { role, parts } = currContent; + const { role, parts } = currContent as { role: Role; parts: Part[] }; if (!prevContent && role !== "user") { throw new GoogleGenerativeAIError( `First content should be with role 'user', got ${role}`, @@ -93,7 +95,7 @@ export function validateChatHistory(history: Content[]): void { if (prevContent) { const validPreviousContentRoles = VALID_PREVIOUS_CONTENT_ROLES[role]; - if (!validPreviousContentRoles.includes(prevContent.role)) { + if (!validPreviousContentRoles.includes(prevContent.role as Role)) { throw new GoogleGenerativeAIError( `Content with role '${role}' can't follow '${ prevContent.role diff --git a/packages/main/types/content.ts b/packages/main/types/content.ts index 8fb373a4..c5e5b60c 100644 --- a/packages/main/types/content.ts +++ b/packages/main/types/content.ts @@ -15,14 +15,12 @@ * limitations under the License. */ -import { Role } from "./enums"; - /** * Content type for both prompts and response candidates. * @public */ export interface Content { - role: Role; + role: string; parts: Part[]; } diff --git a/packages/main/types/enums.ts b/packages/main/types/enums.ts index d6d67410..2e089607 100644 --- a/packages/main/types/enums.ts +++ b/packages/main/types/enums.ts @@ -15,12 +15,6 @@ * limitations under the License. */ -/** - * Role is the producer of the content. - * @public - */ -export type Role = (typeof POSSIBLE_ROLES)[number]; - /** * Possible roles. * @public