From 171530248a1daae27cce1060a8531c98daad5546 Mon Sep 17 00:00:00 2001 From: krisantrobus <55083528+krisantrobus@users.noreply.github.com> Date: Wed, 22 Jan 2025 03:51:50 -0600 Subject: [PATCH] fix(ci): update supabase and OpenAI version (#4213) * fix(ci): update supabase version * fix(ci): debug actions * fix(ci): debug actions * fix(ci): update gen schema * chore(ci): remove debug step * chore(ci): update OpenAI version * fix(docs): change assitant types from new package * fix(docs): change assitant types from new package * fix(docs): change assitant types from new package * fix(docs-ai): create thread on submit * fix(docs-ai): create thread on submit * fix(docs-ai): use latest model * chore(ci): cleanup * chore(icons-docs): add icon docs * chore(icons-docs): rever add icon docs * fix(ci): sitemap --- .github/workflows/on_pull_request_open.yml | 3 - apps/backend/package.json | 2 +- .../20230928013336_initial_schema.sql | 2 +- apps/backend/supabase/schema.gen.ts | 136 +++++++++++++++++- cypress/integration/sitemap-vrt/constants.ts | 6 +- packages/paste-website/package.json | 2 +- .../src/components/assistant/Assistant.tsx | 28 ++-- .../assistant/AssistantComposer.tsx | 4 +- .../components/assistant/AssistantMessage.tsx | 4 +- .../src/components/assistant/UserMessage.tsx | 4 +- .../src/pages/api/paste-assistant-message.ts | 4 +- .../api/paste-assistant-messages/[tid].ts | 2 +- .../src/stores/assistantMessagesStore.ts | 6 +- yarn.lock | 76 +++------- 14 files changed, 188 insertions(+), 91 deletions(-) diff --git a/.github/workflows/on_pull_request_open.yml b/.github/workflows/on_pull_request_open.yml index 6c7c415904..b98077c9e4 100644 --- a/.github/workflows/on_pull_request_open.yml +++ b/.github/workflows/on_pull_request_open.yml @@ -20,9 +20,6 @@ jobs: # List of all teams for dsys team: "[Design Systems PD,design-systems,Design Systems Eng,Design Systems Eng Leads]" - - name: Debug in group - run: echo "${{ github.actor }} is team member ${{ steps.teamAffiliation.outputs.isTeamMember }}" - - name: Auto contribution labeler if: ${{ steps.teamAffiliation.outputs.isTeamMember == 'false' }} uses: actions/labeler@v5 diff --git a/apps/backend/package.json b/apps/backend/package.json index 7ed6989204..ef7b193cbc 100644 --- a/apps/backend/package.json +++ b/apps/backend/package.json @@ -9,6 +9,6 @@ "db:reset": "yarn supabase db reset" }, "devDependencies": { - "supabase": "^1.204.3" + "supabase": "^2.6.8" } } diff --git a/apps/backend/supabase/migrations/20230928013336_initial_schema.sql b/apps/backend/supabase/migrations/20230928013336_initial_schema.sql index 855cae57ff..17db7677c3 100644 --- a/apps/backend/supabase/migrations/20230928013336_initial_schema.sql +++ b/apps/backend/supabase/migrations/20230928013336_initial_schema.sql @@ -1,4 +1,4 @@ -create extension if not exists "vector" with schema "public" version '0.5.0'; +create extension if not exists "vector" with schema "public"; create sequence "public"."page_id_seq"; diff --git a/apps/backend/supabase/schema.gen.ts b/apps/backend/supabase/schema.gen.ts index c37ce9b7c5..d7c0e7c109 100644 --- a/apps/backend/supabase/schema.gen.ts +++ b/apps/backend/supabase/schema.gen.ts @@ -225,6 +225,19 @@ export type Database = { [_ in never]: never } Functions: { + binary_quantize: + | { + Args: { + "": string + } + Returns: unknown + } + | { + Args: { + "": unknown + } + Returns: unknown + } get_page_parents: { Args: { page_id: number @@ -236,18 +249,104 @@ export type Database = { meta: Json }[] } + halfvec_avg: { + Args: { + "": number[] + } + Returns: unknown + } + halfvec_out: { + Args: { + "": unknown + } + Returns: unknown + } + halfvec_send: { + Args: { + "": unknown + } + Returns: string + } + halfvec_typmod_in: { + Args: { + "": unknown[] + } + Returns: number + } + hnsw_bit_support: { + Args: { + "": unknown + } + Returns: unknown + } + hnsw_halfvec_support: { + Args: { + "": unknown + } + Returns: unknown + } + hnsw_sparsevec_support: { + Args: { + "": unknown + } + Returns: unknown + } hnswhandler: { Args: { "": unknown } Returns: unknown } + ivfflat_bit_support: { + Args: { + "": unknown + } + Returns: unknown + } + ivfflat_halfvec_support: { + Args: { + "": unknown + } + Returns: unknown + } ivfflathandler: { Args: { "": unknown } Returns: unknown } + l2_norm: + | { + Args: { + "": unknown + } + Returns: number + } + | { + Args: { + "": unknown + } + Returns: number + } + l2_normalize: + | { + Args: { + "": string + } + Returns: string + } + | { + Args: { + "": unknown + } + Returns: unknown + } + | { + Args: { + "": unknown + } + Returns: unknown + } match_discussions: { Args: { embedding: string @@ -320,6 +419,24 @@ export type Database = { count: number }[] } + sparsevec_out: { + Args: { + "": unknown + } + Returns: unknown + } + sparsevec_send: { + Args: { + "": unknown + } + Returns: string + } + sparsevec_typmod_in: { + Args: { + "": unknown[] + } + Returns: number + } upsert_story_and_create_story_render: { Args: { _storybook_id: string @@ -338,12 +455,19 @@ export type Database = { } Returns: string } - vector_dims: { - Args: { - "": string - } - Returns: number - } + vector_dims: + | { + Args: { + "": string + } + Returns: number + } + | { + Args: { + "": unknown + } + Returns: number + } vector_norm: { Args: { "": string diff --git a/cypress/integration/sitemap-vrt/constants.ts b/cypress/integration/sitemap-vrt/constants.ts index da5a760981..76217bf1a9 100644 --- a/cypress/integration/sitemap-vrt/constants.ts +++ b/cypress/integration/sitemap-vrt/constants.ts @@ -138,9 +138,9 @@ export const SITEMAP = [ "/components/input/", "/components/input/api", "/components/input/changelog", - "components/keyboard-key", - "components/keyboard-key/api", - "components/keyboard-key/changelog", + "/components/keyboard-key", + "/components/keyboard-key/api", + "/components/keyboard-key/changelog", "/components/label/", "/components/label/api", "/components/label/changelog", diff --git a/packages/paste-website/package.json b/packages/paste-website/package.json index bfa168268b..1c6ab6f097 100644 --- a/packages/paste-website/package.json +++ b/packages/paste-website/package.json @@ -175,7 +175,7 @@ "micromark-extension-mdxjs": "^2.0.0", "minimist": "^1.2.8", "next": "^14.0.0", - "openai": "^4.20.1", + "openai": "^4.79.1", "pretty-format": "^28.1.0", "prism-react-renderer": "^1.3.5", "react": "^18.0.0", diff --git a/packages/paste-website/src/components/assistant/Assistant.tsx b/packages/paste-website/src/components/assistant/Assistant.tsx index 83282a9ed9..8cef8e2073 100644 --- a/packages/paste-website/src/components/assistant/Assistant.tsx +++ b/packages/paste-website/src/components/assistant/Assistant.tsx @@ -1,5 +1,5 @@ /* eslint-disable camelcase */ -import type { ThreadMessage } from "openai/resources/beta/threads/messages/messages"; +import type { Message } from "openai/resources/beta/threads/messages"; import * as React from "react"; import { @@ -19,14 +19,14 @@ import { AsssistantLayout } from "./AssistantLayout"; import { AssistantThreads } from "./AssistantThreads"; import { AssistantHeader } from "./AsststantHeader"; -const getMockMessage = ({ message }: { message: string }): ThreadMessage => { +const getMockMessage = ({ message, threadId }: { message: string; threadId: string }): Message => { const date = new Date(); return { id: "", object: "thread.message", created_at: Math.floor(date.getTime() / 1000), - thread_id: "xxxx", + thread_id: threadId, role: "user", content: [ { @@ -37,10 +37,14 @@ const getMockMessage = ({ message }: { message: string }): ThreadMessage => { }, }, ], - file_ids: [], assistant_id: null, run_id: null, metadata: {}, + attachments: null, + completed_at: null, + incomplete_at: null, + incomplete_details: null, + status: "incomplete", }; }; @@ -58,7 +62,7 @@ export const Assistant: React.FC = () => { const handleMessageCreation = (message: string, threadId: string): void => { // add the new user message to the store to optimistically render it whilst we wait for openAI to do its thing - addMessage(getMockMessage({ message })); + addMessage(getMockMessage({ message, threadId })); // Create a new "assistant run" on the thread so that openAI processes the new message and updates the thread with a response createAssistantRun.mutate( @@ -105,7 +109,7 @@ export const Assistant: React.FC = () => { * * @param {string} message */ - const handleCannedThreadCreation = (message: string): void => { + const handleThreadCreationWithMessage = (message: string): void => { createThreadMutation.mutate( {}, { @@ -130,11 +134,19 @@ export const Assistant: React.FC = () => { {threadsStore.selectedThreadID == null && ( - + )} {threadsStore.selectedThreadID != null && } - + { + if (!threadId) { + handleThreadCreationWithMessage(message); + } else { + handleMessageCreation(message, threadId); + } + }} + /> diff --git a/packages/paste-website/src/components/assistant/AssistantComposer.tsx b/packages/paste-website/src/components/assistant/AssistantComposer.tsx index 767fb2046d..3e1ad0b75d 100644 --- a/packages/paste-website/src/components/assistant/AssistantComposer.tsx +++ b/packages/paste-website/src/components/assistant/AssistantComposer.tsx @@ -14,7 +14,7 @@ import { useAssistantThreadsStore } from "../../stores/assistantThreadsStore"; import useStoreWithLocalStorage from "../../stores/useStore"; import { EnterKeySubmitPlugin } from "./EnterKeySubmitPlugin"; -export const AssistantComposer: React.FC<{ onMessageCreation: (message: string, selectedThread: string) => void }> = ({ +export const AssistantComposer: React.FC<{ onMessageCreation: (message: string, selectedThread?: string) => void }> = ({ onMessageCreation, }) => { const [message, setMessage] = React.useState(""); @@ -31,7 +31,7 @@ export const AssistantComposer: React.FC<{ onMessageCreation: (message: string, }; const submitMessage = (): void => { - if (message === "" || selectedThread == null) return; + if (message === "") return; onMessageCreation(message, selectedThread); }; diff --git a/packages/paste-website/src/components/assistant/AssistantMessage.tsx b/packages/paste-website/src/components/assistant/AssistantMessage.tsx index 5b22f59a9e..22861fac43 100644 --- a/packages/paste-website/src/components/assistant/AssistantMessage.tsx +++ b/packages/paste-website/src/components/assistant/AssistantMessage.tsx @@ -1,11 +1,11 @@ import { AIChatMessage, AIChatMessageAuthor, AIChatMessageBody } from "@twilio-paste/ai-chat-log"; -import { type ThreadMessage } from "openai/resources/beta/threads/messages"; +import { type Message } from "openai/resources/beta/threads/messages"; import * as React from "react"; import { formatTimestamp } from "../../utils/formatTimestamp"; import { AssistantMarkdown } from "./AssistantMarkdown"; -export const AssistantMessage: React.FC<{ threadMessage: ThreadMessage }> = ({ threadMessage }) => { +export const AssistantMessage: React.FC<{ threadMessage: Message }> = ({ threadMessage }) => { return ( diff --git a/packages/paste-website/src/components/assistant/UserMessage.tsx b/packages/paste-website/src/components/assistant/UserMessage.tsx index 21477ca2d4..c994f610f6 100644 --- a/packages/paste-website/src/components/assistant/UserMessage.tsx +++ b/packages/paste-website/src/components/assistant/UserMessage.tsx @@ -1,12 +1,12 @@ import { AIChatMessage, AIChatMessageAuthor, AIChatMessageBody } from "@twilio-paste/ai-chat-log"; import { UserIcon } from "@twilio-paste/icons/esm/UserIcon"; -import { type ThreadMessage } from "openai/resources/beta/threads/messages"; +import { type Message } from "openai/resources/beta/threads/messages"; import * as React from "react"; import { formatTimestamp } from "../../utils/formatTimestamp"; import { AssistantMarkdown } from "./AssistantMarkdown"; -export const UserMessage: React.FC<{ threadMessage: ThreadMessage }> = ({ threadMessage }) => { +export const UserMessage: React.FC<{ threadMessage: Message }> = ({ threadMessage }) => { return ( { +}: { threadId: string; message: string }): Promise { return openai.beta.threads.messages.create(threadId, { role: "user", content: message }); } @@ -182,7 +182,7 @@ export default async function handler(req: NextApiRequest, res: NextApiResponse) /** * perform run on the assistant to process the newly added user message */ - let run = await openai.beta.threads.runs.create(threadId, { assistant_id: assistantID }); + let run = await openai.beta.threads.runs.create(threadId, { assistant_id: assistantID, model: "gpt-4o" }); /** * poll the run to see if it's complete or if the assistant need to call some "Functions" find it's status diff --git a/packages/paste-website/src/pages/api/paste-assistant-messages/[tid].ts b/packages/paste-website/src/pages/api/paste-assistant-messages/[tid].ts index 8aab8567ea..02f7d0844c 100644 --- a/packages/paste-website/src/pages/api/paste-assistant-messages/[tid].ts +++ b/packages/paste-website/src/pages/api/paste-assistant-messages/[tid].ts @@ -22,7 +22,7 @@ const LOG_PREFIX = "[/api/paste-assistant-messages/:tid]:"; async function getThreadMessages({ threadId, -}: { threadId: OpenAI.Beta.Thread["id"] }): Promise { +}: { threadId: OpenAI.Beta.Thread["id"] }): Promise { return openai.beta.threads.messages.list(threadId, { order: "asc" }); } diff --git a/packages/paste-website/src/stores/assistantMessagesStore.ts b/packages/paste-website/src/stores/assistantMessagesStore.ts index 5dea7727b2..43c64e0c88 100644 --- a/packages/paste-website/src/stores/assistantMessagesStore.ts +++ b/packages/paste-website/src/stores/assistantMessagesStore.ts @@ -1,12 +1,12 @@ -import { type ThreadMessage, type ThreadMessagesPage } from "openai/resources/beta/threads/messages"; +import { type Message, type MessagesPage } from "openai/resources/beta/threads/messages"; import { create } from "zustand"; import { devtools } from "zustand/middleware"; -export type AssistantThreadMessages = ThreadMessagesPage["data"]; +export type AssistantThreadMessages = MessagesPage["data"]; type State = { messages: AssistantThreadMessages }; type Actions = { setMessages: (newMessages: AssistantThreadMessages) => void; - addMessage: (newMessage: ThreadMessage) => void; + addMessage: (newMessage: Message) => void; resetMessages: () => void; }; diff --git a/yarn.lock b/yarn.lock index 0a006a6d53..d15d830b31 100644 --- a/yarn.lock +++ b/yarn.lock @@ -11533,7 +11533,7 @@ __metadata: version: 0.0.0-use.local resolution: "@twilio-paste/backend@workspace:apps/backend" dependencies: - supabase: ^1.204.3 + supabase: ^2.6.8 languageName: unknown linkType: soft @@ -16269,7 +16269,7 @@ __metadata: micromark-extension-mdxjs: ^2.0.0 minimist: ^1.2.8 next: ^14.0.0 - openai: ^4.20.1 + openai: ^4.79.1 pretty-format: ^28.1.0 prism-react-renderer: ^1.3.5 react: ^18.0.0 @@ -20183,13 +20183,6 @@ __metadata: languageName: node linkType: hard -"base-64@npm:^0.1.0": - version: 0.1.0 - resolution: "base-64@npm:0.1.0" - checksum: 5a42938f82372ab5392cbacc85a5a78115cbbd9dbef9f7540fa47d78763a3a8bd7d598475f0d92341f66285afd377509851a9bb5c67bbecb89686e9255d5b3eb - languageName: node - linkType: hard - "base64-js@npm:0.0.8": version: 0.0.8 resolution: "base64-js@npm:0.0.8" @@ -21261,13 +21254,6 @@ __metadata: languageName: node linkType: hard -"charenc@npm:0.0.2": - version: 0.0.2 - resolution: "charenc@npm:0.0.2" - checksum: 81dcadbe57e861d527faf6dd3855dc857395a1c4d6781f4847288ab23cffb7b3ee80d57c15bba7252ffe3e5e8019db767757ee7975663ad2ca0939bb8fcaf2e5 - languageName: node - linkType: hard - "check-more-types@npm:2.24.0, check-more-types@npm:^2.24.0": version: 2.24.0 resolution: "check-more-types@npm:2.24.0" @@ -22581,13 +22567,6 @@ __metadata: languageName: node linkType: hard -"crypt@npm:0.0.2": - version: 0.0.2 - resolution: "crypt@npm:0.0.2" - checksum: baf4c7bbe05df656ec230018af8cf7dbe8c14b36b98726939cef008d473f6fe7a4fad906cfea4062c93af516f1550a3f43ceb4d6615329612c6511378ed9fe34 - languageName: node - linkType: hard - "crypto-random-string@npm:^2.0.0": version: 2.0.0 resolution: "crypto-random-string@npm:2.0.0" @@ -23845,16 +23824,6 @@ __metadata: languageName: node linkType: hard -"digest-fetch@npm:^1.3.0": - version: 1.3.0 - resolution: "digest-fetch@npm:1.3.0" - dependencies: - base-64: ^0.1.0 - md5: ^2.3.0 - checksum: 8ebdb4b9ef02b1ac0da532d25c7d08388f2552813dfadabfe7c4630e944bb4a48093b997fc926440a10e1ccf4912f2ce9adcf2d6687b0518dab8480e08f22f9d - languageName: node - linkType: hard - "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -29585,7 +29554,7 @@ fsevents@^1.2.7: languageName: node linkType: hard -"is-buffer@npm:^1.0.2, is-buffer@npm:^1.1.5, is-buffer@npm:~1.1.6": +"is-buffer@npm:^1.0.2, is-buffer@npm:^1.1.5": version: 1.1.6 resolution: "is-buffer@npm:1.1.6" checksum: 4a186d995d8bbf9153b4bd9ff9fd04ae75068fe695d29025d25e592d9488911eeece84eefbd8fa41b8ddcc0711058a71d4c466dcf6f1f6e1d83830052d8ca707 @@ -33634,17 +33603,6 @@ fsevents@^1.2.7: languageName: node linkType: hard -"md5@npm:^2.3.0": - version: 2.3.0 - resolution: "md5@npm:2.3.0" - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: ~1.1.6 - checksum: a63cacf4018dc9dee08c36e6f924a64ced735b37826116c905717c41cebeb41a522f7a526ba6ad578f9c80f02cb365033ccd67fe186ffbcc1a1faeb75daa9b6e - languageName: node - linkType: hard - "mdast-squeeze-paragraphs@npm:^4.0.0": version: 4.0.0 resolution: "mdast-squeeze-paragraphs@npm:4.0.0" @@ -36598,22 +36556,28 @@ fsevents@^1.2.7: languageName: node linkType: hard -"openai@npm:^4.20.1": - version: 4.20.1 - resolution: "openai@npm:4.20.1" +"openai@npm:^4.79.1": + version: 4.79.1 + resolution: "openai@npm:4.79.1" dependencies: "@types/node": ^18.11.18 "@types/node-fetch": ^2.6.4 abort-controller: ^3.0.0 agentkeepalive: ^4.2.1 - digest-fetch: ^1.3.0 form-data-encoder: 1.7.2 formdata-node: ^4.3.2 node-fetch: ^2.6.7 - web-streams-polyfill: ^3.2.1 + peerDependencies: + ws: ^8.18.0 + zod: ^3.23.8 + peerDependenciesMeta: + ws: + optional: true + zod: + optional: true bin: openai: bin/cli - checksum: 01d2aeaf9c1a0e93159cd49207d86188edf43a6276aeb1a4aab8614727f64591452bbe19baa344f799d0a94314ff386e39c019b62f305543952606759a3927f1 + checksum: 24b4a8d00add042ef1d16768bd5db09f69f8a9f5a60cef5a2af70877e21b003566ec89d4e96e9fffb3f828090864058bee204691ea59b173e186652c9c14c007 languageName: node linkType: hard @@ -43221,9 +43185,9 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"supabase@npm:^1.204.3": - version: 1.226.4 - resolution: "supabase@npm:1.226.4" +"supabase@npm:^2.6.8": + version: 2.8.1 + resolution: "supabase@npm:2.8.1" dependencies: bin-links: ^5.0.0 https-proxy-agent: ^7.0.2 @@ -43231,7 +43195,7 @@ resolve@^2.0.0-next.3: tar: 7.4.3 bin: supabase: bin/supabase - checksum: 1550cc1d7a912a10097f1c2647e46224349d0e35a71d682c846bb47fec293657a1b325e6ac74be79ad2f172518f00f9a8cea6118ff8b8645a1f3537fb7a00aeb + checksum: 10b240963da4263ad8d03e84b97939504f5690eb894a9ee8ae225d69c0b8f31a890e9e24e9d4b2757c714eb38addb6878f6e531f9f7279c22de50a991b8e7cd4 languageName: node linkType: hard @@ -45800,7 +45764,7 @@ resolve@^2.0.0-next.3: languageName: node linkType: hard -"web-streams-polyfill@npm:^3.0.3, web-streams-polyfill@npm:^3.2.1": +"web-streams-polyfill@npm:^3.0.3": version: 3.2.1 resolution: "web-streams-polyfill@npm:3.2.1" checksum: b119c78574b6d65935e35098c2afdcd752b84268e18746606af149e3c424e15621b6f1ff0b42b2676dc012fc4f0d313f964b41a4b5031e525faa03997457da02