From c9d8b8716bfc13c22c14e3f144944f611b15c601 Mon Sep 17 00:00:00 2001 From: Ilango Date: Fri, 4 Oct 2024 21:14:28 +0530 Subject: [PATCH] Feature: Follow-up Prompts (#3280) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Add migrations - add follow up prompts column to chatflow and chat message * Add configuration tab for follow-up prompts * Add follow up prompts functionality * Pin zod version in components - this was causing a type error with structured outputs * Generate follow up prompts if enabled and return it in stream, response, and save to database * Show follow up prompts after getting response * Add google gen ai for generating follow up prompts and fix issues * Add config for google gen ai and update model options * Update follow-up prompts ui and styles * Release/2.1.0 (#3204) flowise@2.1.0 release * Chore/update flowise embed version to 2.0.0 (#3205) * update flowise-embed version on lock file * add agent messages to share chatbot * Update pnpm-lock.yaml * update flowise-embed version * update flowise-embed to 1.3.9 * update embed version to 2.0 * Bugfix/CodeInterpreter E2B Credential (#3206) * Base changes for ServerSide Events (instead of socket.io) * lint fixes * adding of interface and separate methods for streaming events * lint * first draft, handles both internal and external prediction end points. * lint fixes * additional internal end point for streaming and associated changes * return streamresponse as true to build agent flow * 1) JSON formatting for internal events 2) other fixes * 1) convert internal event to metadata to maintain consistency with external response * fix action and metadata streaming * fix for error when agent flow is aborted * prevent subflows from streaming and other code cleanup * prevent streaming from enclosed tools * add fix for preventing chaintool streaming * update lock file * add open when hidden to sse * Streaming errors * Streaming errors * add fix for showing error message * add code interpreter * add artifacts to view message dialog * Update pnpm-lock.yaml * uncomment e2b credential --------- Co-authored-by: Vinod Paidimarry * Release/2.1.0 (#3207) * flowise@2.1.0 release * update flowise-components@2.1.1 * Bugfix/Add artifacts migration script to other database types (#3210) add artifacts migration script to other database types * Release/2.1.1 (#3213) release @2.1.1 * Bugfix/Add header to allow sse on nginx (#3214) add header to allow sse on nginx * Bugfix/remove invalid markdown (#3219) remove invalid markdown * Correct "as" casing (#3216) * Correct "as" casing * Remove "version" line from docker compose file * Update docker-compose.yml --------- Co-authored-by: Henry Heng * chore: update unstructured API url and doc reference (#3224) chore: udpate unstructured API url and doc reference * Feature/add ability to specify dynamic metadata to jsonlines (#3238) * add ability to specify dynamic metadata to jsonlines * fix additional metadata * Bugfix/Buffer Memory for Anthropic (#3242) fix buffer memory * Added env vars to ui and api URL (#3141) * feat: add environment vars to split application in different deployments for better scalability * update: package.json added start script ui --------- Co-authored-by: patrick * Added 1-click deployment link for Alibaba Cloud. (#3251) * Added a link for Alibaba Cloud Deployment * change service name --------- Co-authored-by: yehan * Chore/Groq Llama3.2 (#3255) * add gemini flash * add gemin flash to vertex * add gemin-1.5-flash-preview to vertex * add azure gpt 4o * add claude 3.5 sonnet * add mistral nemo * add groq llama3.1 * add gpt4o-mini to azure * o1 mini * add groq llama 3.2 * Bugfix/Prevent streaming of chatflow tool and chain tool (#3257) prevent streaming of chatflow tool and chain tool * Bugfix/Enable Custom Tool Optional Input Schema (#3258) * prevent streaming of chatflow tool and chain tool * enable optional input schema * Bugfix/Searxng tool not working (#3263) fix searxng tool not working * LunaryAI automatic Thread and User tracking (#3233) * Lunary Thread/User tracking * Clean console logs * Clean * Remove commented lines * Remove commented line * feat: enable autofocus to the `new chatflow title` to improve usability (#3260) This dialog has only one input and it is the primary one, there is no need for an extra click to be able to set the title * feat: save a new Chatflow when the `ENTER` key is pressed (#3261) This simple event handler improve the usability of the UI by avoiding having to use the mouse or having to tab twice and then hit enter to save a flow * feat: save Chatflow title when the `ENTER` key is pressed or discard upon `ESC` is pressed (#3265) This simple event handler improves the usability of the UI by avoiding having to use the mouse to save or dicard title changes * feat: enable autofocus to the `edit chatflow title` field to improve UI usability (#3264) feat: enable autofocus to the `edit chatflow title` field to improve usability The canvas header has only one input and it is the primary one, there is no need for an extra click to be able to edit the title * feat: add search keyboard shortcut based on the current platform (#3267) * feat: highlight valid/invalid connection between nodes (#3266) Change the inputs background to green/red to hint compatible connections, in adition to the `not-allowed` mouse cursor for incompatible connections * Bugfix/add fixes for search of view header (#3271) add fixes for search of view header * fix: warning when passing a boolean to border property of a Card (#3275) By default MainCard wrappers like NodeCardWrapper and CardWrapper add a a solid border of 1px, but if the `MainCard.border` prop is used (`false`) the border prop was wrongly set to a boolean instead of string * feat: add shortcut text hint to the search field (#3269) * feat: add shortcut text hint to the search field * fix: search box width to fit the shortcut hint text * fix: error when not running on Mac due to an undefined `os` variable * fix: warning when a non-boolean values was used to set `checked` prop of a SwitchInput component (#3276) fix: warning when a non-boolean values was used to set`checked` prop of SwitchInput component The problem was that in the useEffect hook the plain value was used without validation like in useState * Bugfix/Throw error to prevent SSE from retrying (#3281) throw error to prevent SSE from retrying * Pin zod version in components - this was causing a type error with structured outputs * Fix conflicts in pnpm lock * fix ui changes for follow up prompts * Fix button disable state in follow-up prompts configuration * Fix follow-up prompts not showing up for agent flows * Show follow up prompts if last message is apiMessage and follow up prompts are available --------- Co-authored-by: Henry Heng Co-authored-by: Vinod Paidimarry Co-authored-by: Cross Co-authored-by: cragwolfe Co-authored-by: patrickreinan Co-authored-by: patrick Co-authored-by: yehan <34835250+yehanyh@users.noreply.github.com> Co-authored-by: yehan Co-authored-by: Vincelwt Co-authored-by: Humberto Rodríguez A. Co-authored-by: Henry --- packages/components/package.json | 2 +- packages/components/src/Interface.ts | 22 + packages/components/src/followUpPrompts.ts | 113 ++++ packages/components/src/index.ts | 1 + packages/server/src/Interface.ts | 2 + .../server/src/database/entities/ChatFlow.ts | 3 + .../src/database/entities/ChatMessage.ts | 3 + .../1726666318346-AddFollowUpPrompts.ts | 14 + .../src/database/migrations/mariadb/index.ts | 4 +- .../mysql/1726666302024-AddFollowUpPrompts.ts | 15 + .../src/database/migrations/mysql/index.ts | 4 +- .../1726666309552-AddFollowUpPrompts.ts | 13 + .../src/database/migrations/postgres/index.ts | 4 +- .../1726666294213-AddFollowUpPrompts.ts | 13 + .../src/database/migrations/sqlite/index.ts | 4 +- packages/server/src/utils/SSEStreamer.ts | 3 + packages/server/src/utils/buildChatflow.ts | 27 + packages/ui/src/assets/images/anthropic.svg | 1 + .../ui/src/assets/images/azure_openai.svg | 1 + packages/ui/src/assets/images/mistralai.svg | 1 + .../cards/FollowUpPromptsCard.jsx | 45 ++ .../dialog/ChatflowConfigurationDialog.jsx | 6 + .../ui-component/extended/FollowUpPrompts.jsx | 527 ++++++++++++++++++ .../ui/src/views/chatmessage/ChatMessage.jsx | 55 +- pnpm-lock.yaml | 396 ++++++------- 25 files changed, 1076 insertions(+), 203 deletions(-) create mode 100644 packages/components/src/followUpPrompts.ts create mode 100644 packages/server/src/database/migrations/mariadb/1726666318346-AddFollowUpPrompts.ts create mode 100644 packages/server/src/database/migrations/mysql/1726666302024-AddFollowUpPrompts.ts create mode 100644 packages/server/src/database/migrations/postgres/1726666309552-AddFollowUpPrompts.ts create mode 100644 packages/server/src/database/migrations/sqlite/1726666294213-AddFollowUpPrompts.ts create mode 100644 packages/ui/src/assets/images/anthropic.svg create mode 100644 packages/ui/src/assets/images/azure_openai.svg create mode 100644 packages/ui/src/assets/images/mistralai.svg create mode 100644 packages/ui/src/ui-component/cards/FollowUpPromptsCard.jsx create mode 100644 packages/ui/src/ui-component/extended/FollowUpPrompts.jsx diff --git a/packages/components/package.json b/packages/components/package.json index 7ecbcce99..c58d8dcac 100644 --- a/packages/components/package.json +++ b/packages/components/package.json @@ -119,7 +119,7 @@ "weaviate-ts-client": "^1.1.0", "winston": "^3.9.0", "ws": "^8.9.0", - "zod": "^3.22.4", + "zod": "3.22.4", "zod-to-json-schema": "^3.21.4" }, "devDependencies": { diff --git a/packages/components/src/Interface.ts b/packages/components/src/Interface.ts index f8058fe4f..d90a4ebab 100644 --- a/packages/components/src/Interface.ts +++ b/packages/components/src/Interface.ts @@ -419,3 +419,25 @@ export interface IServerSideEventStreamer { streamAbortEvent(chatId: string): void streamEndEvent(chatId: string): void } + +export enum FollowUpPromptProvider { + ANTHROPIC = 'chatAnthropic', + AZURE_OPENAI = 'azureChatOpenAI', + GOOGLE_GENAI = 'chatGoogleGenerativeAI', + MISTRALAI = 'chatMistralAI', + OPENAI = 'chatOpenAI' +} + +export type FollowUpPromptProviderConfig = { + [key in FollowUpPromptProvider]: { + credentialId: string + modelName: string + prompt: string + temperature: string + } +} + +export type FollowUpPromptConfig = { + status: boolean + selectedProvider: FollowUpPromptProvider +} & FollowUpPromptProviderConfig diff --git a/packages/components/src/followUpPrompts.ts b/packages/components/src/followUpPrompts.ts new file mode 100644 index 000000000..2fc2524f4 --- /dev/null +++ b/packages/components/src/followUpPrompts.ts @@ -0,0 +1,113 @@ +import { FollowUpPromptConfig, FollowUpPromptProvider, ICommonObject } from './Interface' +import { getCredentialData } from './utils' +import { ChatAnthropic } from '@langchain/anthropic' +import { ChatGoogleGenerativeAI } from '@langchain/google-genai' +import { ChatMistralAI } from '@langchain/mistralai' +import { ChatOpenAI } from '@langchain/openai' +import { z } from 'zod' +import { PromptTemplate } from '@langchain/core/prompts' +import { StructuredOutputParser } from '@langchain/core/output_parsers' + +const FollowUpPromptType = z + .object({ + questions: z.array(z.string()) + }) + .describe('Generate Follow Up Prompts') + +export const generateFollowUpPrompts = async ( + followUpPromptsConfig: FollowUpPromptConfig, + apiMessageContent: string, + options: ICommonObject +) => { + if (followUpPromptsConfig) { + const providerConfig = followUpPromptsConfig[followUpPromptsConfig.selectedProvider] + const credentialId = providerConfig.credentialId as string + const credentialData = await getCredentialData(credentialId ?? '', options) + const followUpPromptsPrompt = providerConfig.prompt.replace('{history}', apiMessageContent) + + switch (followUpPromptsConfig.selectedProvider) { + case FollowUpPromptProvider.ANTHROPIC: { + const llm = new ChatAnthropic({ + apiKey: credentialData.anthropicApiKey, + model: providerConfig.modelName, + temperature: parseFloat(`${providerConfig.temperature}`) + }) + const structuredLLM = llm.withStructuredOutput(FollowUpPromptType) + const structuredResponse = await structuredLLM.invoke(followUpPromptsPrompt) + return structuredResponse + } + case FollowUpPromptProvider.AZURE_OPENAI: { + const azureOpenAIApiKey = credentialData['azureOpenAIApiKey'] + const azureOpenAIApiInstanceName = credentialData['azureOpenAIApiInstanceName'] + const azureOpenAIApiDeploymentName = credentialData['azureOpenAIApiDeploymentName'] + const azureOpenAIApiVersion = credentialData['azureOpenAIApiVersion'] + + const llm = new ChatOpenAI({ + azureOpenAIApiKey, + azureOpenAIApiInstanceName, + azureOpenAIApiDeploymentName, + azureOpenAIApiVersion, + model: providerConfig.modelName, + temperature: parseFloat(`${providerConfig.temperature}`) + }) + // use structured output parser because withStructuredOutput is not working + const parser = StructuredOutputParser.fromZodSchema(FollowUpPromptType) + const formatInstructions = parser.getFormatInstructions() + const prompt = PromptTemplate.fromTemplate(` + ${providerConfig.prompt} + + {format_instructions} + `) + const chain = prompt.pipe(llm).pipe(parser) + const structuredResponse = await chain.invoke({ + history: apiMessageContent, + format_instructions: formatInstructions + }) + return structuredResponse + } + case FollowUpPromptProvider.GOOGLE_GENAI: { + const llm = new ChatGoogleGenerativeAI({ + apiKey: credentialData.googleGenerativeAPIKey, + model: providerConfig.modelName, + temperature: parseFloat(`${providerConfig.temperature}`) + }) + // use structured output parser because withStructuredOutput is not working + const parser = StructuredOutputParser.fromZodSchema(FollowUpPromptType) + const formatInstructions = parser.getFormatInstructions() + const prompt = PromptTemplate.fromTemplate(` + ${providerConfig.prompt} + + {format_instructions} + `) + const chain = prompt.pipe(llm).pipe(parser) + const structuredResponse = await chain.invoke({ + history: apiMessageContent, + format_instructions: formatInstructions + }) + return structuredResponse + } + case FollowUpPromptProvider.MISTRALAI: { + const model = new ChatMistralAI({ + apiKey: credentialData.mistralAIAPIKey, + model: providerConfig.modelName, + temperature: parseFloat(`${providerConfig.temperature}`) + }) + const structuredLLM = model.withStructuredOutput(FollowUpPromptType) + const structuredResponse = await structuredLLM.invoke(followUpPromptsPrompt) + return structuredResponse + } + case FollowUpPromptProvider.OPENAI: { + const model = new ChatOpenAI({ + apiKey: credentialData.openAIApiKey, + model: providerConfig.modelName, + temperature: parseFloat(`${providerConfig.temperature}`) + }) + const structuredLLM = model.withStructuredOutput(FollowUpPromptType) + const structuredResponse = await structuredLLM.invoke(followUpPromptsPrompt) + return structuredResponse + } + } + } else { + return undefined + } +} diff --git a/packages/components/src/index.ts b/packages/components/src/index.ts index d47075018..ec713bec3 100644 --- a/packages/components/src/index.ts +++ b/packages/components/src/index.ts @@ -9,3 +9,4 @@ export * from './utils' export * from './speechToText' export * from './storageUtils' export * from './handler' +export * from './followUpPrompts' diff --git a/packages/server/src/Interface.ts b/packages/server/src/Interface.ts index a6bb205b7..04ac2519d 100644 --- a/packages/server/src/Interface.ts +++ b/packages/server/src/Interface.ts @@ -27,6 +27,7 @@ export interface IChatFlow { apikeyid?: string analytic?: string chatbotConfig?: string + followUpPrompts?: string apiConfig?: string category?: string type?: ChatflowType @@ -50,6 +51,7 @@ export interface IChatMessage { createdDate: Date leadEmail?: string action?: string | null + followUpPrompts?: string } export interface IChatMessageFeedback { diff --git a/packages/server/src/database/entities/ChatFlow.ts b/packages/server/src/database/entities/ChatFlow.ts index e0d2da502..b3a07b82d 100644 --- a/packages/server/src/database/entities/ChatFlow.ts +++ b/packages/server/src/database/entities/ChatFlow.ts @@ -34,6 +34,9 @@ export class ChatFlow implements IChatFlow { @Column({ nullable: true, type: 'text' }) speechToText?: string + @Column({ nullable: true, type: 'text' }) + followUpPrompts?: string + @Column({ nullable: true, type: 'text' }) category?: string diff --git a/packages/server/src/database/entities/ChatMessage.ts b/packages/server/src/database/entities/ChatMessage.ts index ebd059f36..5ab161afe 100644 --- a/packages/server/src/database/entities/ChatMessage.ts +++ b/packages/server/src/database/entities/ChatMessage.ts @@ -56,4 +56,7 @@ export class ChatMessage implements IChatMessage { @Column({ nullable: true, type: 'text' }) leadEmail?: string + + @Column({ nullable: true, type: 'text' }) + followUpPrompts?: string } diff --git a/packages/server/src/database/migrations/mariadb/1726666318346-AddFollowUpPrompts.ts b/packages/server/src/database/migrations/mariadb/1726666318346-AddFollowUpPrompts.ts new file mode 100644 index 000000000..8f3dae88d --- /dev/null +++ b/packages/server/src/database/migrations/mariadb/1726666318346-AddFollowUpPrompts.ts @@ -0,0 +1,14 @@ +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class AddFollowUpPrompts1726666318346 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + const columnExistsInChatflow = await queryRunner.hasColumn('chat_flow', 'followUpPrompts') + if (!columnExistsInChatflow) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`followUpPrompts\` TEXT;`) + const columnExistsInChatMessage = await queryRunner.hasColumn('chat_flow', 'followUpPrompts') + if (!columnExistsInChatMessage) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`followUpPrompts\` TEXT;`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`followUpPrompts\`;`) + } +} diff --git a/packages/server/src/database/migrations/mariadb/index.ts b/packages/server/src/database/migrations/mariadb/index.ts index a3ee9a8b2..6c0f6274d 100644 --- a/packages/server/src/database/migrations/mariadb/index.ts +++ b/packages/server/src/database/migrations/mariadb/index.ts @@ -25,6 +25,7 @@ import { AddActionToChatMessage1721078251523 } from './1721078251523-AddActionTo import { LongTextColumn1722301395521 } from './1722301395521-LongTextColumn' import { AddCustomTemplate1725629836652 } from './1725629836652-AddCustomTemplate' import { AddArtifactsToChatMessage1726156258465 } from './1726156258465-AddArtifactsToChatMessage' +import { AddFollowUpPrompts1726666318346 } from './1726666318346-AddFollowUpPrompts' export const mariadbMigrations = [ Init1693840429259, @@ -53,5 +54,6 @@ export const mariadbMigrations = [ AddActionToChatMessage1721078251523, LongTextColumn1722301395521, AddCustomTemplate1725629836652, - AddArtifactsToChatMessage1726156258465 + AddArtifactsToChatMessage1726156258465, + AddFollowUpPrompts1726666318346 ] diff --git a/packages/server/src/database/migrations/mysql/1726666302024-AddFollowUpPrompts.ts b/packages/server/src/database/migrations/mysql/1726666302024-AddFollowUpPrompts.ts new file mode 100644 index 000000000..5285068cc --- /dev/null +++ b/packages/server/src/database/migrations/mysql/1726666302024-AddFollowUpPrompts.ts @@ -0,0 +1,15 @@ +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class AddFollowUpPrompts1726666302024 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + const columnExistsInChatflow = await queryRunner.hasColumn('chat_flow', 'followUpPrompts') + if (!columnExistsInChatflow) queryRunner.query(`ALTER TABLE \`chat_flow\` ADD COLUMN \`followUpPrompts\` TEXT;`) + const columnExistsInChatMessage = await queryRunner.hasColumn('chat_message', 'followUpPrompts') + if (!columnExistsInChatMessage) queryRunner.query(`ALTER TABLE \`chat_message\` ADD COLUMN \`followUpPrompts\` TEXT;`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE \`chat_flow\` DROP COLUMN \`followUpPrompts\`;`) + await queryRunner.query(`ALTER TABLE \`chat_message\` DROP COLUMN \`followUpPrompts\`;`) + } +} diff --git a/packages/server/src/database/migrations/mysql/index.ts b/packages/server/src/database/migrations/mysql/index.ts index 107b9e2de..9ac9354ae 100644 --- a/packages/server/src/database/migrations/mysql/index.ts +++ b/packages/server/src/database/migrations/mysql/index.ts @@ -26,6 +26,7 @@ import { AddActionToChatMessage1721078251523 } from './1721078251523-AddActionTo import { LongTextColumn1722301395521 } from './1722301395521-LongTextColumn' import { AddCustomTemplate1725629836652 } from './1725629836652-AddCustomTemplate' import { AddArtifactsToChatMessage1726156258465 } from './1726156258465-AddArtifactsToChatMessage' +import { AddFollowUpPrompts1726666302024 } from './1726666302024-AddFollowUpPrompts' export const mysqlMigrations = [ Init1693840429259, @@ -55,5 +56,6 @@ export const mysqlMigrations = [ AddActionToChatMessage1721078251523, LongTextColumn1722301395521, AddCustomTemplate1725629836652, - AddArtifactsToChatMessage1726156258465 + AddArtifactsToChatMessage1726156258465, + AddFollowUpPrompts1726666302024 ] diff --git a/packages/server/src/database/migrations/postgres/1726666309552-AddFollowUpPrompts.ts b/packages/server/src/database/migrations/postgres/1726666309552-AddFollowUpPrompts.ts new file mode 100644 index 000000000..ef460363b --- /dev/null +++ b/packages/server/src/database/migrations/postgres/1726666309552-AddFollowUpPrompts.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class AddFollowUpPrompts1726666309552 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "chat_flow" ADD COLUMN IF NOT EXISTS "followUpPrompts" TEXT;`) + await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN IF NOT EXISTS "followUpPrompts" TEXT;`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "chat_flow" DROP COLUMN "followUpPrompts";`) + await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "followUpPrompts";`) + } +} diff --git a/packages/server/src/database/migrations/postgres/index.ts b/packages/server/src/database/migrations/postgres/index.ts index 3455c5d41..464bcaaba 100644 --- a/packages/server/src/database/migrations/postgres/index.ts +++ b/packages/server/src/database/migrations/postgres/index.ts @@ -26,6 +26,7 @@ import { AddApiKey1720230151480 } from './1720230151480-AddApiKey' import { AddActionToChatMessage1721078251523 } from './1721078251523-AddActionToChatMessage' import { AddCustomTemplate1725629836652 } from './1725629836652-AddCustomTemplate' import { AddArtifactsToChatMessage1726156258465 } from './1726156258465-AddArtifactsToChatMessage' +import { AddFollowUpPrompts1726666309552 } from './1726666309552-AddFollowUpPrompts' export const postgresMigrations = [ Init1693891895163, @@ -55,5 +56,6 @@ export const postgresMigrations = [ AddApiKey1720230151480, AddActionToChatMessage1721078251523, AddCustomTemplate1725629836652, - AddArtifactsToChatMessage1726156258465 + AddArtifactsToChatMessage1726156258465, + AddFollowUpPrompts1726666309552 ] diff --git a/packages/server/src/database/migrations/sqlite/1726666294213-AddFollowUpPrompts.ts b/packages/server/src/database/migrations/sqlite/1726666294213-AddFollowUpPrompts.ts new file mode 100644 index 000000000..6f0d61cc9 --- /dev/null +++ b/packages/server/src/database/migrations/sqlite/1726666294213-AddFollowUpPrompts.ts @@ -0,0 +1,13 @@ +import { MigrationInterface, QueryRunner } from 'typeorm' + +export class AddFollowUpPrompts1726666294213 implements MigrationInterface { + public async up(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "chat_flow" ADD COLUMN "followUpPrompts" TEXT;`) + await queryRunner.query(`ALTER TABLE "chat_message" ADD COLUMN "followUpPrompts" TEXT;`) + } + + public async down(queryRunner: QueryRunner): Promise { + await queryRunner.query(`ALTER TABLE "chat_flow" DROP COLUMN "followUpPrompts";`) + await queryRunner.query(`ALTER TABLE "chat_message" DROP COLUMN "followUpPrompts";`) + } +} diff --git a/packages/server/src/database/migrations/sqlite/index.ts b/packages/server/src/database/migrations/sqlite/index.ts index 33c04bdf7..75a900297 100644 --- a/packages/server/src/database/migrations/sqlite/index.ts +++ b/packages/server/src/database/migrations/sqlite/index.ts @@ -25,6 +25,7 @@ import { AddApiKey1720230151480 } from './1720230151480-AddApiKey' import { AddActionToChatMessage1721078251523 } from './1721078251523-AddActionToChatMessage' import { AddArtifactsToChatMessage1726156258465 } from './1726156258465-AddArtifactsToChatMessage' import { AddCustomTemplate1725629836652 } from './1725629836652-AddCustomTemplate' +import { AddFollowUpPrompts1726666294213 } from './1726666294213-AddFollowUpPrompts' export const sqliteMigrations = [ Init1693835579790, @@ -53,5 +54,6 @@ export const sqliteMigrations = [ AddApiKey1720230151480, AddActionToChatMessage1721078251523, AddArtifactsToChatMessage1726156258465, - AddCustomTemplate1725629836652 + AddCustomTemplate1725629836652, + AddFollowUpPrompts1726666294213 ] diff --git a/packages/server/src/utils/SSEStreamer.ts b/packages/server/src/utils/SSEStreamer.ts index 4217925f2..ffa7693a5 100644 --- a/packages/server/src/utils/SSEStreamer.ts +++ b/packages/server/src/utils/SSEStreamer.ts @@ -211,6 +211,9 @@ export class SSEStreamer implements IServerSideEventStreamer { if (apiResponse.memoryType) { metadataJson['memoryType'] = apiResponse.memoryType } + if (apiResponse.followUpPrompts) { + metadataJson['followUpPrompts'] = JSON.parse(apiResponse.followUpPrompts) + } if (Object.keys(metadataJson).length > 0) { this.streamCustomEvent(chatId, 'metadata', metadataJson) } diff --git a/packages/server/src/utils/buildChatflow.ts b/packages/server/src/utils/buildChatflow.ts index 5ff9ddcaf..90297076f 100644 --- a/packages/server/src/utils/buildChatflow.ts +++ b/packages/server/src/utils/buildChatflow.ts @@ -8,6 +8,7 @@ import { addArrayFilesToStorage, mapMimeTypeToInputField, mapExtToInputField, + generateFollowUpPrompts, IServerSideEventStreamer } from 'flowise-components' import { StatusCodes } from 'http-status-codes' @@ -452,6 +453,18 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals if (result?.usedTools) apiMessage.usedTools = JSON.stringify(result.usedTools) if (result?.fileAnnotations) apiMessage.fileAnnotations = JSON.stringify(result.fileAnnotations) if (result?.artifacts) apiMessage.artifacts = JSON.stringify(result.artifacts) + if (chatflow.followUpPrompts) { + const followUpPromptsConfig = JSON.parse(chatflow.followUpPrompts) + const followUpPrompts = await generateFollowUpPrompts(followUpPromptsConfig, apiMessage.content, { + chatId, + chatflowid, + appDataSource: appServer.AppDataSource, + databaseEntities + }) + if (followUpPrompts?.questions) { + apiMessage.followUpPrompts = JSON.stringify(followUpPrompts.questions) + } + } const chatMessage = await utilAddChatMessage(apiMessage) @@ -470,6 +483,7 @@ export const utilBuildChatflow = async (req: Request, isInternal: boolean = fals result.question = incomingInput.question result.chatId = chatId result.chatMessageId = chatMessage?.id + result.followUpPrompts = JSON.stringify(apiMessage.followUpPrompts) result.isStreamValid = isStreamValid if (sessionId) result.sessionId = sessionId @@ -543,6 +557,18 @@ const utilBuildAgentResponse = async ( if (usedTools?.length) apiMessage.usedTools = JSON.stringify(usedTools) if (agentReasoning?.length) apiMessage.agentReasoning = JSON.stringify(agentReasoning) if (finalAction && Object.keys(finalAction).length) apiMessage.action = JSON.stringify(finalAction) + if (agentflow.followUpPrompts) { + const followUpPromptsConfig = JSON.parse(agentflow.followUpPrompts) + const generatedFollowUpPrompts = await generateFollowUpPrompts(followUpPromptsConfig, apiMessage.content, { + chatId, + chatflowid: agentflow.id, + appDataSource: appServer.AppDataSource, + databaseEntities + }) + if (generatedFollowUpPrompts?.questions) { + apiMessage.followUpPrompts = JSON.stringify(generatedFollowUpPrompts.questions) + } + } const chatMessage = await utilAddChatMessage(apiMessage) await appServer.telemetry.sendTelemetry('agentflow_prediction_sent', { @@ -591,6 +617,7 @@ const utilBuildAgentResponse = async ( if (memoryType) result.memoryType = memoryType if (agentReasoning?.length) result.agentReasoning = agentReasoning if (finalAction && Object.keys(finalAction).length) result.action = finalAction + result.followUpPrompts = JSON.stringify(apiMessage.followUpPrompts) return result } diff --git a/packages/ui/src/assets/images/anthropic.svg b/packages/ui/src/assets/images/anthropic.svg new file mode 100644 index 000000000..84bc18ca5 --- /dev/null +++ b/packages/ui/src/assets/images/anthropic.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui/src/assets/images/azure_openai.svg b/packages/ui/src/assets/images/azure_openai.svg new file mode 100644 index 000000000..7b1508111 --- /dev/null +++ b/packages/ui/src/assets/images/azure_openai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui/src/assets/images/mistralai.svg b/packages/ui/src/assets/images/mistralai.svg new file mode 100644 index 000000000..aa84b39c5 --- /dev/null +++ b/packages/ui/src/assets/images/mistralai.svg @@ -0,0 +1 @@ + \ No newline at end of file diff --git a/packages/ui/src/ui-component/cards/FollowUpPromptsCard.jsx b/packages/ui/src/ui-component/cards/FollowUpPromptsCard.jsx new file mode 100644 index 000000000..75aceb85b --- /dev/null +++ b/packages/ui/src/ui-component/cards/FollowUpPromptsCard.jsx @@ -0,0 +1,45 @@ +import Box from '@mui/material/Box' +import PropTypes from 'prop-types' +import { Chip } from '@mui/material' +import './StarterPromptsCard.css' +import { useSelector } from 'react-redux' + +const FollowUpPromptsCard = ({ isGrid, followUpPrompts, sx, onPromptClick }) => { + const customization = useSelector((state) => state.customization) + + return ( + + {followUpPrompts.map((fp, index) => ( + onPromptClick(fp, e)} + sx={{ + backgroundColor: 'transparent', + border: '1px solid', + boxShadow: '0px 2px 1px -1px rgba(0,0,0,0.2)', + color: '#2196f3', + transition: 'all 300ms cubic-bezier(0.4, 0, 0.2, 1) 0ms', + '&:hover': { + backgroundColor: customization.isDarkMode ? 'rgba(0, 0, 0, 0.12)' : 'rgba(0, 0, 0, 0.05)', + border: '1px solid' + } + }} + /> + ))} + + ) +} + +FollowUpPromptsCard.propTypes = { + isGrid: PropTypes.bool, + followUpPrompts: PropTypes.array, + sx: PropTypes.object, + onPromptClick: PropTypes.func +} + +export default FollowUpPromptsCard diff --git a/packages/ui/src/ui-component/dialog/ChatflowConfigurationDialog.jsx b/packages/ui/src/ui-component/dialog/ChatflowConfigurationDialog.jsx index 8743abcdf..1155eec56 100644 --- a/packages/ui/src/ui-component/dialog/ChatflowConfigurationDialog.jsx +++ b/packages/ui/src/ui-component/dialog/ChatflowConfigurationDialog.jsx @@ -10,6 +10,7 @@ import ChatFeedback from '@/ui-component/extended/ChatFeedback' import AnalyseFlow from '@/ui-component/extended/AnalyseFlow' import StarterPrompts from '@/ui-component/extended/StarterPrompts' import Leads from '@/ui-component/extended/Leads' +import FollowUpPrompts from '@/ui-component/extended/FollowUpPrompts' const CHATFLOW_CONFIGURATION_TABS = [ { @@ -20,6 +21,10 @@ const CHATFLOW_CONFIGURATION_TABS = [ label: 'Starter Prompts', id: 'conversationStarters' }, + { + label: 'Follow-up Prompts', + id: 'followUpPrompts' + }, { label: 'Speech to Text', id: 'speechToText' @@ -116,6 +121,7 @@ const ChatflowConfigurationDialog = ({ show, dialogProps, onCancel }) => { {item.id === 'rateLimiting' && } {item.id === 'conversationStarters' ? : null} + {item.id === 'followUpPrompts' ? : null} {item.id === 'speechToText' ? : null} {item.id === 'chatFeedback' ? : null} {item.id === 'allowedDomains' ? : null} diff --git a/packages/ui/src/ui-component/extended/FollowUpPrompts.jsx b/packages/ui/src/ui-component/extended/FollowUpPrompts.jsx new file mode 100644 index 000000000..5d0c703a0 --- /dev/null +++ b/packages/ui/src/ui-component/extended/FollowUpPrompts.jsx @@ -0,0 +1,527 @@ +import PropTypes from 'prop-types' +import { Box, Button, FormControl, ListItem, ListItemAvatar, ListItemText, MenuItem, Select, Typography } from '@mui/material' +import { useEffect, useState } from 'react' +import { useDispatch } from 'react-redux' + +// Project Imports +import { StyledButton } from '@/ui-component/button/StyledButton' +import { SwitchInput } from '@/ui-component/switch/Switch' +import chatflowsApi from '@/api/chatflows' +import { closeSnackbar as closeSnackbarAction, enqueueSnackbar as enqueueSnackbarAction, SET_CHATFLOW } from '@/store/actions' +import useNotifier from '@/utils/useNotifier' +import anthropicIcon from '@/assets/images/anthropic.svg' +import azureOpenAiIcon from '@/assets/images/azure_openai.svg' +import mistralAiIcon from '@/assets/images/mistralai.svg' +import openAiIcon from '@/assets/images/openai.svg' +import { TooltipWithParser } from '@/ui-component/tooltip/TooltipWithParser' +import CredentialInputHandler from '@/views/canvas/CredentialInputHandler' +import { Input } from '@/ui-component/input/Input' +import { AsyncDropdown } from '@/ui-component/dropdown/AsyncDropdown' + +// Icons +import { IconX } from '@tabler/icons-react' +import { Dropdown } from '@/ui-component/dropdown/Dropdown' + +const promptDescription = + 'Prompt to generate questions based on the conversation history. You can use variable {history} to refer to the conversation history.' +const defaultPrompt = + 'Given the following conversations: {history}. Please help me predict the three most likely questions that human would ask and keeping each question short and concise.' + +// update when adding new providers +const FollowUpPromptProviders = { + ANTHROPIC: 'chatAnthropic', + AZURE_OPENAI: 'azureChatOpenAI', + GOOGLE_GENAI: 'chatGoogleGenerativeAI', + MISTRALAI: 'chatMistralAI', + OPENAI: 'chatOpenAI' +} + +const followUpPromptsOptions = { + [FollowUpPromptProviders.ANTHROPIC]: { + label: 'Anthropic Claude', + name: FollowUpPromptProviders.ANTHROPIC, + icon: anthropicIcon, + inputs: [ + { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['anthropicApi'] + }, + { + label: 'Model Name', + name: 'modelName', + type: 'asyncOptions', + loadMethod: 'listModels' + }, + { + label: 'Prompt', + name: 'prompt', + type: 'string', + rows: 4, + description: promptDescription, + optional: true, + default: defaultPrompt + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + optional: true, + default: 0.9 + } + ] + }, + [FollowUpPromptProviders.AZURE_OPENAI]: { + label: 'Azure ChatOpenAI', + name: FollowUpPromptProviders.AZURE_OPENAI, + icon: azureOpenAiIcon, + inputs: [ + { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['azureOpenAIApi'] + }, + { + label: 'Model Name', + name: 'modelName', + type: 'asyncOptions', + loadMethod: 'listModels' + }, + { + label: 'Prompt', + name: 'prompt', + type: 'string', + rows: 4, + description: promptDescription, + optional: true, + default: defaultPrompt + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + optional: true, + default: 0.9 + } + ] + }, + [FollowUpPromptProviders.GOOGLE_GENAI]: { + label: 'Google Gemini', + name: FollowUpPromptProviders.GOOGLE_GENAI, + icon: azureOpenAiIcon, + inputs: [ + { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['googleGenerativeAI'] + }, + { + label: 'Model Name', + name: 'modelName', + type: 'options', + default: 'gemini-1.5-pro-latest', + options: [ + { label: 'gemini-1.5-flash-latest', name: 'gemini-1.5-flash-latest' }, + { label: 'gemini-1.5-pro-latest', name: 'gemini-1.5-pro-latest' } + ] + }, + { + label: 'Prompt', + name: 'prompt', + type: 'string', + rows: 4, + description: promptDescription, + optional: true, + default: defaultPrompt + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + optional: true, + default: 0.9 + } + ] + }, + [FollowUpPromptProviders.MISTRALAI]: { + label: 'Mistral AI', + name: FollowUpPromptProviders.MISTRALAI, + icon: mistralAiIcon, + inputs: [ + { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['mistralAIApi'] + }, + { + label: 'Model Name', + name: 'modelName', + type: 'options', + options: [ + { label: 'mistral-large-latest', name: 'mistral-large-latest' }, + { label: 'mistral-large-2402', name: 'mistral-large-2402' } + ] + }, + { + label: 'Prompt', + name: 'prompt', + type: 'string', + rows: 4, + description: promptDescription, + optional: true, + default: defaultPrompt + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + optional: true, + default: 0.9 + } + ] + }, + [FollowUpPromptProviders.OPENAI]: { + label: 'OpenAI', + name: FollowUpPromptProviders.OPENAI, + icon: openAiIcon, + inputs: [ + { + label: 'Connect Credential', + name: 'credential', + type: 'credential', + credentialNames: ['openAIApi'] + }, + { + label: 'Model Name', + name: 'modelName', + type: 'asyncOptions', + loadMethod: 'listModels' + }, + { + label: 'Prompt', + name: 'prompt', + type: 'string', + rows: 4, + description: promptDescription, + optional: true, + default: defaultPrompt + }, + { + label: 'Temperature', + name: 'temperature', + type: 'number', + step: 0.1, + optional: true, + default: 0.9 + } + ] + } +} + +const FollowUpPrompts = ({ dialogProps }) => { + const dispatch = useDispatch() + + useNotifier() + + const enqueueSnackbar = (...args) => dispatch(enqueueSnackbarAction(...args)) + const closeSnackbar = (...args) => dispatch(closeSnackbarAction(...args)) + + const [followUpPromptsConfig, setFollowUpPromptsConfig] = useState({}) + const [chatbotConfig, setChatbotConfig] = useState({}) + const [selectedProvider, setSelectedProvider] = useState('none') + + const handleChange = (key, value) => { + setFollowUpPromptsConfig({ + ...followUpPromptsConfig, + [key]: value + }) + } + + const handleSelectedProviderChange = (event) => { + const selectedProvider = event.target.value + setSelectedProvider(selectedProvider) + handleChange('selectedProvider', selectedProvider) + } + + const setValue = (value, providerName, inputParamName) => { + let newVal = {} + if (!Object.prototype.hasOwnProperty.call(followUpPromptsConfig, providerName)) { + newVal = { ...followUpPromptsConfig, [providerName]: {} } + } else { + newVal = { ...followUpPromptsConfig } + } + + newVal[providerName][inputParamName] = value + if (inputParamName === 'status' && value === true) { + // ensure that the others are turned off + Object.keys(followUpPromptsOptions).forEach((key) => { + const provider = followUpPromptsOptions[key] + if (provider.name !== providerName) { + newVal[provider.name] = { ...followUpPromptsConfig[provider.name], status: false } + } + }) + } + setFollowUpPromptsConfig(newVal) + return newVal + } + + const onSave = async () => { + // TODO: saving without changing the prompt will not save the prompt + try { + let value = { + followUpPrompts: { status: followUpPromptsConfig.status } + } + chatbotConfig.followUpPrompts = value.followUpPrompts + + // if the prompt is not set, save the default prompt + if (!followUpPromptsConfig[followUpPromptsConfig.selectedProvider].prompt) { + followUpPromptsConfig[followUpPromptsConfig.selectedProvider].prompt = followUpPromptsOptions[ + followUpPromptsConfig.selectedProvider + ].inputs.find((input) => input.name === 'prompt').default + } + + if (!followUpPromptsConfig[followUpPromptsConfig.selectedProvider].temperature) { + followUpPromptsConfig[followUpPromptsConfig.selectedProvider].temperature = followUpPromptsOptions[ + followUpPromptsConfig.selectedProvider + ].inputs.find((input) => input.name === 'temperature').default + } + + const saveResp = await chatflowsApi.updateChatflow(dialogProps.chatflow.id, { + chatbotConfig: JSON.stringify(chatbotConfig), + followUpPrompts: JSON.stringify(followUpPromptsConfig) + }) + if (saveResp.data) { + enqueueSnackbar({ + message: 'Follow-up Prompts configuration saved', + options: { + key: new Date().getTime() + Math.random(), + variant: 'success', + action: (key) => ( + + ) + } + }) + dispatch({ type: SET_CHATFLOW, chatflow: saveResp.data }) + } + } catch (error) { + const errorData = error.response.data || `${error.response.status}: ${error.response.statusText}` + enqueueSnackbar({ + message: `Failed to save follow-up prompts configuration: ${errorData}`, + options: { + key: new Date().getTime() + Math.random(), + variant: 'error', + persist: true, + action: (key) => ( + + ) + } + }) + } + } + + useEffect(() => { + if (dialogProps.chatflow && dialogProps.chatflow.followUpPrompts) { + let chatbotConfig = JSON.parse(dialogProps.chatflow.chatbotConfig) + let followUpPromptsConfig = JSON.parse(dialogProps.chatflow.followUpPrompts) + setChatbotConfig(chatbotConfig || {}) + if (followUpPromptsConfig) { + setFollowUpPromptsConfig(followUpPromptsConfig) + setSelectedProvider(followUpPromptsConfig.selectedProvider) + } + } + + return () => {} + }, [dialogProps]) + + const checkDisabled = () => { + if (followUpPromptsConfig && followUpPromptsConfig.status) { + if (selectedProvider === 'none') { + return true + } + const provider = followUpPromptsOptions[selectedProvider] + for (let inputParam of provider.inputs) { + if (!inputParam.optional) { + const param = inputParam.name === 'credential' ? 'credentialId' : inputParam.name + if ( + !followUpPromptsConfig[selectedProvider] || + !followUpPromptsConfig[selectedProvider][param] || + followUpPromptsConfig[selectedProvider][param] === '' + ) { + return true + } + } + } + } + return false + } + + return ( + <> + + handleChange('status', value)} + value={followUpPromptsConfig.status} + /> + {followUpPromptsConfig && followUpPromptsConfig.status && ( + <> + Providers + + + + {selectedProvider !== 'none' && ( + <> + + +
+ AI +
+
+ + {followUpPromptsOptions[selectedProvider].url} + + } + /> +
+ {followUpPromptsOptions[selectedProvider].inputs.map((inputParam, index) => ( + +
+ + {inputParam.label} + {!inputParam.optional &&  *} + {inputParam.description && ( + + )} + +
+ {inputParam.type === 'credential' && ( + setValue(newValue, selectedProvider, 'credentialId')} + /> + )} + + {(inputParam.type === 'string' || + inputParam.type === 'password' || + inputParam.type === 'number') && ( + setValue(newValue, selectedProvider, inputParam.name)} + value={ + followUpPromptsConfig[selectedProvider] && + followUpPromptsConfig[selectedProvider][inputParam.name] + ? followUpPromptsConfig[selectedProvider][inputParam.name] + : inputParam.default ?? '' + } + /> + )} + + {inputParam.type === 'asyncOptions' && ( + <> +
+ setValue(newValue, selectedProvider, inputParam.name)} + /> +
+ + )} + + {inputParam.type === 'options' && ( + setValue(newValue, selectedProvider, inputParam.name)} + value={ + followUpPromptsConfig[selectedProvider] && + followUpPromptsConfig[selectedProvider][inputParam.name] + ? followUpPromptsConfig[selectedProvider][inputParam] + : inputParam.default ?? 'choose an option' + } + /> + )} +
+ ))} + + )} + + )} +
+ + Save + + + ) +} + +FollowUpPrompts.propTypes = { + dialogProps: PropTypes.object +} + +export default FollowUpPrompts diff --git a/packages/ui/src/views/chatmessage/ChatMessage.jsx b/packages/ui/src/views/chatmessage/ChatMessage.jsx index df5bb25d4..c2faa51a2 100644 --- a/packages/ui/src/views/chatmessage/ChatMessage.jsx +++ b/packages/ui/src/views/chatmessage/ChatMessage.jsx @@ -38,7 +38,8 @@ import { IconSquareFilled, IconDeviceSdCard, IconCheck, - IconPaperclip + IconPaperclip, + IconSparkles } from '@tabler/icons-react' import robotPNG from '@/assets/images/robot.png' import userPNG from '@/assets/images/account.png' @@ -79,6 +80,7 @@ import { enqueueSnackbar as enqueueSnackbarAction, closeSnackbar as closeSnackba // Utils import { isValidURL, removeDuplicateURL, setLocalStorageChatflow, getLocalStorageChatflow } from '@/utils/genericHelper' import useNotifier from '@/utils/useNotifier' +import FollowUpPromptsCard from '@/ui-component/cards/FollowUpPromptsCard' const messageImageStyle = { width: '128px', @@ -202,6 +204,10 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview const [isLeadSaving, setIsLeadSaving] = useState(false) const [isLeadSaved, setIsLeadSaved] = useState(false) + // follow-up prompts + const [followUpPromptsStatus, setFollowUpPromptsStatus] = useState(false) + const [followUpPrompts, setFollowUpPrompts] = useState([]) + // drag & drop and file input const imgUploadRef = useRef(null) const fileUploadRef = useRef(null) @@ -627,6 +633,12 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview handleSubmit(undefined, promptStarterInput) } + const handleFollowUpPromptClick = async (promptStarterInput) => { + setUserInput(promptStarterInput) + setFollowUpPrompts([]) + handleSubmit(undefined, promptStarterInput) + } + const handleActionClick = async (elem, action) => { setUserInput(elem.label) setMessages((prevMessages) => { @@ -664,6 +676,11 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview return allMessages }) } + + if (data.followUpPrompts) { + const followUpPrompts = JSON.parse(data.followUpPrompts) + setFollowUpPrompts(followUpPrompts) + } } // Handle form submission @@ -954,6 +971,7 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview } }) } + if (message.followUpPrompts) obj.followUpPrompts = JSON.parse(message.followUpPrompts) return obj }) setMessages((prevMessages) => [...prevMessages, ...loadedMessages]) @@ -1013,6 +1031,10 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview }) } } + + if (config.followUpPrompts) { + setFollowUpPromptsStatus(config.followUpPrompts.status) + } } } // eslint-disable-next-line react-hooks/exhaustive-deps @@ -1078,6 +1100,17 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview // eslint-disable-next-line }, [previews]) + useEffect(() => { + if (followUpPromptsStatus && messages.length > 0) { + const lastMessage = messages[messages.length - 1] + if (lastMessage.type === 'apiMessage' && lastMessage.followUpPrompts) { + setFollowUpPrompts(lastMessage.followUpPrompts) + } else if (lastMessage.type === 'userMessage') { + setFollowUpPrompts([]) + } + } + }, [followUpPromptsStatus, messages]) + const copyMessageToClipboard = async (text) => { try { await navigator.clipboard.writeText(text || '') @@ -1970,6 +2003,26 @@ export const ChatMessage = ({ open, chatflowid, isAgentCanvas, isDialog, preview )} + {messages && messages.length > 2 && followUpPromptsStatus && followUpPrompts.length > 0 && ( + <> + + + + + + Try these prompts + + + 0 ? 70 : 0 }} + followUpPrompts={followUpPrompts || []} + onPromptClick={handleFollowUpPromptClick} + isGrid={isDialog} + /> + + + )} +
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 894aa00fc..3dc4d4b2f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -35,7 +35,7 @@ importers: version: 8.10.0(eslint@8.57.0) eslint-config-react-app: specifier: ^7.0.1 - version: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + version: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) eslint-plugin-jsx-a11y: specifier: ^6.6.1 version: 6.8.0(eslint@8.57.0) @@ -159,13 +159,13 @@ importers: version: 0.0.7(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/community': specifier: ^0.2.17 - version: 0.2.17(zxx4jpbxqhs7oe3oglbsfznx6a) + version: 0.2.17(rqn77hvkkdahc2ybmydnhh3cf4) '@langchain/core': specifier: 0.2.18 - version: 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + version: 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@langchain/exa': specifier: ^0.0.5 - version: 0.0.5(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + version: 0.0.5(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@langchain/google-genai': specifier: ^0.0.22 version: 0.0.22(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) @@ -177,28 +177,28 @@ importers: version: 0.0.8(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/langgraph': specifier: ^0.0.22 - version: 0.0.22(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + version: 0.0.22(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@langchain/mistralai': specifier: ^0.0.26 version: 0.0.26(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/mongodb': specifier: ^0.0.1 - version: 0.0.1(gcp-metadata@5.3.0(encoding@0.1.13))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(socks@2.8.1) + version: 0.0.1(gcp-metadata@5.3.0(encoding@0.1.13))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(socks@2.8.1) '@langchain/ollama': specifier: ^0.0.2 version: 0.0.2(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/openai': specifier: ^0.0.30 - version: 0.0.30(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra)) + version: 0.0.30(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua)) '@langchain/pinecone': specifier: ^0.0.3 - version: 0.0.3(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + version: 0.0.3(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@langchain/qdrant': specifier: ^0.0.5 - version: 0.0.5(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(typescript@5.5.2) + version: 0.0.5(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(typescript@5.5.2) '@langchain/weaviate': specifier: ^0.0.1 - version: 0.0.1(encoding@0.1.13)(graphql@16.8.1)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + version: 0.0.1(encoding@0.1.13)(graphql@16.8.1)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@mendable/firecrawl-js': specifier: ^0.0.28 version: 0.0.28 @@ -300,19 +300,19 @@ importers: version: 5.0.1 langchain: specifier: ^0.2.11 - version: 0.2.11(rijpiaudoghub5wl4aggkbywra) + version: 0.2.11(d46g2oh7pzryev2vs75vns4aua) langfuse: specifier: 3.3.4 version: 3.3.4 langfuse-langchain: specifier: ^3.3.4 - version: 3.3.4(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra)) + version: 3.3.4(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua)) langsmith: specifier: 0.1.6 version: 0.1.6 langwatch: specifier: ^0.1.1 - version: 0.1.1(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(react@18.2.0)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2)) + version: 0.1.1(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(react@18.2.0)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2)) linkifyjs: specifier: ^4.1.1 version: 4.1.3 @@ -390,7 +390,7 @@ importers: version: 1.2.3 typeorm: specifier: ^0.3.6 - version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: specifier: ^1.1.0 version: 1.6.0(encoding@0.1.13)(graphql@16.8.1) @@ -401,7 +401,7 @@ importers: specifier: ^8.9.0 version: 8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) zod: - specifier: ^3.22.4 + specifier: 3.22.4 version: 3.22.4 zod-to-json-schema: specifier: ^3.21.4 @@ -541,7 +541,7 @@ importers: version: 5.1.7 typeorm: specifier: ^0.3.6 - version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + version: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) uuid: specifier: ^9.0.1 version: 9.0.1 @@ -777,7 +777,7 @@ importers: version: 3.3.1(prettier@3.2.5) react-scripts: specifier: ^5.0.1 - version: 5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2) + version: 5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@swc/core@1.4.6)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2) rimraf: specifier: ^5.0.5 version: 5.0.5 @@ -19248,8 +19248,8 @@ snapshots: url-join: 4.0.1 zod: 3.23.8 optionalDependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - langchain: 0.2.11(rijpiaudoghub5wl4aggkbywra) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.11(d46g2oh7pzryev2vs75vns4aua) transitivePeerDependencies: - encoding @@ -19421,7 +19421,7 @@ snapshots: jest-util: 28.1.3 slash: 3.0.0 - '@jest/core@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))': + '@jest/core@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))': dependencies: '@jest/console': 27.5.1 '@jest/reporters': 27.5.1 @@ -19435,7 +19435,7 @@ snapshots: exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 27.5.1 - jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-haste-map: 27.5.1 jest-message-util: 27.5.1 jest-regex-util: 27.5.1 @@ -19686,7 +19686,7 @@ snapshots: '@langchain/anthropic@0.2.1(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))': dependencies: '@anthropic-ai/sdk': 0.21.1(encoding@0.1.13) - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) fast-xml-parser: 4.3.5 zod: 3.22.4 zod-to-json-schema: 3.22.5(zod@3.22.4) @@ -19701,7 +19701,7 @@ snapshots: '@aws-sdk/client-bedrock-runtime': 3.624.0 '@aws-sdk/client-kendra': 3.624.0 '@aws-sdk/credential-provider-node': 3.624.0(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0) - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) zod: 3.23.8 zod-to-json-schema: 3.23.1(zod@3.23.8) transitivePeerDependencies: @@ -19713,23 +19713,23 @@ snapshots: '@langchain/cohere@0.0.7(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) cohere-ai: 7.10.0(encoding@0.1.13) transitivePeerDependencies: - encoding - langchain - openai - '@langchain/community@0.2.17(zxx4jpbxqhs7oe3oglbsfznx6a)': + '@langchain/community@0.2.17(rqn77hvkkdahc2ybmydnhh3cf4)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) - '@langchain/openai': 0.1.3(encoding@0.1.13)(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky)) + '@langchain/core': 0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) + '@langchain/openai': 0.1.3(encoding@0.1.13)(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa)) binary-extensions: 2.2.0 expr-eval: 2.0.2 flat: 5.0.2 js-yaml: 4.1.0 - langchain: 0.2.3(qtzklq3trxgbwvwvhhdjhpcdky) - langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.3(6gucoml2zeyvfd3acm6anx5zwa) + langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) uuid: 9.0.1 zod: 3.22.4 zod-to-json-schema: 3.22.5(zod@3.22.4) @@ -19792,7 +19792,7 @@ snapshots: redis: 4.6.13 replicate: 0.31.1 srt-parser-2: 1.2.3 - typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: 1.6.0(encoding@0.1.13)(graphql@16.8.1) ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: @@ -19805,54 +19805,54 @@ snapshots: - peggy - pyodide - '@langchain/core@0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.12 - langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) ml-distance: 4.0.1 mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 10.0.0 - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - langchain - openai - '@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13))': + '@langchain/core@0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13))': dependencies: ansi-styles: 5.2.0 camelcase: 6.3.0 decamelize: 1.2.0 js-tiktoken: 1.0.12 - langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + langsmith: 0.1.39(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) ml-distance: 4.0.1 mustache: 4.2.0 p-queue: 6.6.2 p-retry: 4.6.2 uuid: 10.0.0 - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - langchain - openai - '@langchain/exa@0.0.5(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/exa@0.0.5(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) exa-js: 1.0.12(encoding@0.1.13) transitivePeerDependencies: - encoding - langchain - openai - '@langchain/google-common@0.0.20(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': + '@langchain/google-common@0.0.20(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) uuid: 10.0.0 zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: @@ -19860,10 +19860,10 @@ snapshots: - openai - zod - '@langchain/google-gauth@0.0.19(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': + '@langchain/google-gauth@0.0.19(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - '@langchain/google-common': 0.0.20(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + '@langchain/google-common': 0.0.20(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) google-auth-library: 8.9.0(encoding@0.1.13) transitivePeerDependencies: - encoding @@ -19875,7 +19875,7 @@ snapshots: '@langchain/google-genai@0.0.22(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': dependencies: '@google/generative-ai': 0.15.0 - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - langchain @@ -19884,8 +19884,8 @@ snapshots: '@langchain/google-vertexai@0.0.19(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))(zod@3.22.4)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - '@langchain/google-gauth': 0.0.19(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + '@langchain/google-gauth': 0.0.19(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) transitivePeerDependencies: - encoding - langchain @@ -19895,8 +19895,8 @@ snapshots: '@langchain/groq@0.0.8(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - '@langchain/openai': 0.0.30(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + '@langchain/openai': 0.0.30(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua)) groq-sdk: 0.3.2(encoding@0.1.13) zod: 3.22.4 zod-to-json-schema: 3.22.5(zod@3.22.4) @@ -19905,9 +19905,9 @@ snapshots: - langchain - openai - '@langchain/langgraph@0.0.22(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/langgraph@0.0.22(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) uuid: 9.0.1 transitivePeerDependencies: - langchain @@ -19915,19 +19915,19 @@ snapshots: '@langchain/mistralai@0.0.26(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@mistralai/mistralai': 0.4.0(encoding@0.1.13) uuid: 10.0.0 - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - encoding - langchain - openai - '@langchain/mongodb@0.0.1(gcp-metadata@5.3.0(encoding@0.1.13))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(socks@2.8.1)': + '@langchain/mongodb@0.0.1(gcp-metadata@5.3.0(encoding@0.1.13))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(socks@2.8.1)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) mongodb: 6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1) transitivePeerDependencies: - '@aws-sdk/credential-providers' @@ -19942,16 +19942,16 @@ snapshots: '@langchain/ollama@0.0.2(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) ollama: 0.5.6 uuid: 10.0.0 transitivePeerDependencies: - langchain - openai - '@langchain/openai@0.0.30(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))': + '@langchain/openai@0.0.30(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 openai: 4.51.0(encoding@0.1.13) zod: 3.22.4 @@ -19960,9 +19960,9 @@ snapshots: - encoding - langchain - '@langchain/openai@0.0.30(encoding@0.1.13)(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))': + '@langchain/openai@0.0.30(encoding@0.1.13)(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 openai: 4.51.0(encoding@0.1.13) zod: 3.22.4 @@ -19971,31 +19971,31 @@ snapshots: - encoding - langchain - '@langchain/openai@0.1.3(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))': + '@langchain/openai@0.1.3(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 openai: 4.51.0(encoding@0.1.13) - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - encoding - langchain - '@langchain/openai@0.1.3(encoding@0.1.13)(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))': + '@langchain/openai@0.1.3(encoding@0.1.13)(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 openai: 4.51.0(encoding@0.1.13) - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) transitivePeerDependencies: - encoding - langchain - '@langchain/pinecone@0.0.3(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/pinecone@0.0.3(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@pinecone-database/pinecone': 2.2.2 flat: 5.0.2 uuid: 9.0.1 @@ -20003,9 +20003,9 @@ snapshots: - langchain - openai - '@langchain/qdrant@0.0.5(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))(typescript@5.5.2)': + '@langchain/qdrant@0.0.5(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))(typescript@5.5.2)': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) '@qdrant/js-client-rest': 1.9.0(typescript@5.5.2) uuid: 9.0.1 transitivePeerDependencies: @@ -20013,25 +20013,25 @@ snapshots: - openai - typescript - '@langchain/textsplitters@0.0.1(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/textsplitters@0.0.1(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 transitivePeerDependencies: - langchain - openai - '@langchain/textsplitters@0.0.1(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13))': + '@langchain/textsplitters@0.0.1(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) js-tiktoken: 1.0.12 transitivePeerDependencies: - langchain - openai - '@langchain/weaviate@0.0.1(encoding@0.1.13)(graphql@16.8.1)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13))': + '@langchain/weaviate@0.0.1(encoding@0.1.13)(graphql@16.8.1)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13))': dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) uuid: 9.0.1 weaviate-ts-client: 2.1.1(encoding@0.1.13)(graphql@16.8.1) transitivePeerDependencies: @@ -20668,7 +20668,7 @@ snapshots: '@pkgjs/parseargs@0.11.0': optional: true - '@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3))(webpack@5.90.3)': + '@pmmmwh/react-refresh-webpack-plugin@0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)))(webpack@5.90.3(@swc/core@1.4.6))': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -20680,10 +20680,10 @@ snapshots: react-refresh: 0.11.0 schema-utils: 3.3.0 source-map: 0.7.4 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: type-fest: 4.12.0 - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)) '@popperjs/core@2.11.8': {} @@ -23254,14 +23254,14 @@ snapshots: transitivePeerDependencies: - supports-color - babel-loader@8.3.0(@babel/core@7.24.0)(webpack@5.90.3): + babel-loader@8.3.0(@babel/core@7.24.0)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/core': 7.24.0 find-cache-dir: 3.3.2 loader-utils: 2.0.4 make-dir: 3.1.0 schema-utils: 2.7.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) babel-messages@6.23.0: dependencies: @@ -24443,7 +24443,7 @@ snapshots: postcss: 8.4.35 postcss-selector-parser: 6.0.15 - css-loader@6.10.0(webpack@5.90.3): + css-loader@6.10.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: icss-utils: 5.1.0(postcss@8.4.35) postcss: 8.4.35 @@ -24454,9 +24454,9 @@ snapshots: postcss-value-parser: 4.2.0 semver: 7.6.0 optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - css-minimizer-webpack-plugin@3.4.1(webpack@5.90.3): + css-minimizer-webpack-plugin@3.4.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: cssnano: 5.1.15(postcss@8.4.35) jest-worker: 27.5.1 @@ -24464,7 +24464,7 @@ snapshots: schema-utils: 4.2.0 serialize-javascript: 6.0.2 source-map: 0.6.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) css-prefers-color-scheme@6.0.3(postcss@8.4.35): dependencies: @@ -25375,7 +25375,7 @@ snapshots: dependencies: eslint: 8.57.0 - eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): + eslint-config-react-app@7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): dependencies: '@babel/core': 7.24.0 '@babel/eslint-parser': 7.23.10(@babel/core@7.24.0)(eslint@8.57.0) @@ -25387,7 +25387,7 @@ snapshots: eslint: 8.57.0 eslint-plugin-flowtype: 8.0.3(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0) eslint-plugin-import: 2.29.1(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0) - eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + eslint-plugin-jest: 25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) eslint-plugin-jsx-a11y: 6.8.0(eslint@8.57.0) eslint-plugin-react: 7.34.0(eslint@8.57.0) eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0) @@ -25455,13 +25455,13 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): + eslint-plugin-jest@25.7.0(@typescript-eslint/eslint-plugin@5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2): dependencies: '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.2) eslint: 8.57.0 optionalDependencies: '@typescript-eslint/eslint-plugin': 5.62.0(@typescript-eslint/parser@5.62.0(eslint@8.57.0)(typescript@5.5.2))(eslint@8.57.0)(typescript@5.5.2) - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) transitivePeerDependencies: - supports-color - typescript @@ -25558,7 +25558,7 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.90.3): + eslint-webpack-plugin@3.2.0(eslint@8.57.0)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/eslint': 8.56.5 eslint: 8.57.0 @@ -25566,7 +25566,7 @@ snapshots: micromatch: 4.0.5 normalize-path: 3.0.0 schema-utils: 4.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) eslint@8.57.0: dependencies: @@ -25993,11 +25993,11 @@ snapshots: dependencies: flat-cache: 3.2.0 - file-loader@6.2.0(webpack@5.90.3): + file-loader@6.2.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: loader-utils: 2.0.4 schema-utils: 3.3.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) file-uri-to-path@1.0.0: {} @@ -26139,7 +26139,7 @@ snapshots: prettier: 3.2.5 solid-element: 1.7.0(solid-js@1.7.1) solid-js: 1.7.1 - zod: 3.23.8 + zod: 3.22.4 transitivePeerDependencies: - supports-color @@ -26195,7 +26195,7 @@ snapshots: forever-agent@0.6.1: {} - fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3): + fork-ts-checker-webpack-plugin@6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/code-frame': 7.23.5 '@types/json-schema': 7.0.15 @@ -26211,7 +26211,7 @@ snapshots: semver: 7.6.0 tapable: 1.1.3 typescript: 5.5.2 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: eslint: 8.57.0 @@ -27049,7 +27049,7 @@ snapshots: html-void-elements@3.0.0: {} - html-webpack-plugin@5.6.0(webpack@5.90.3): + html-webpack-plugin@5.6.0(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/html-minifier-terser': 6.1.0 html-minifier-terser: 6.1.0 @@ -27057,7 +27057,7 @@ snapshots: pretty-error: 4.0.0 tapable: 2.2.1 optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) htmlparser2@6.1.0: dependencies: @@ -27684,16 +27684,16 @@ snapshots: transitivePeerDependencies: - supports-color - jest-cli@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest-cli@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) '@jest/test-result': 27.5.1 '@jest/types': 27.5.1 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 import-local: 3.1.0 - jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-config: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-util: 27.5.1 jest-validate: 27.5.1 prompts: 2.4.2 @@ -27705,7 +27705,7 @@ snapshots: - ts-node - utf-8-validate - jest-config@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest-config@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@babel/core': 7.24.0 '@jest/test-sequencer': 27.5.1 @@ -28045,11 +28045,11 @@ snapshots: leven: 3.1.0 pretty-format: 27.5.1 - jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))): + jest-watch-typeahead@1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))): dependencies: ansi-escapes: 4.3.2 chalk: 4.1.2 - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-regex-util: 28.0.2 jest-watcher: 28.1.3 slash: 4.0.0 @@ -28095,11 +28095,11 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: - '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + '@jest/core': 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) import-local: 3.1.0 - jest-cli: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest-cli: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) transitivePeerDependencies: - bufferutil - canvas @@ -28388,24 +28388,24 @@ snapshots: kuler@2.0.0: {} - langchain@0.2.11(rijpiaudoghub5wl4aggkbywra): + langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua): dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - '@langchain/openai': 0.1.3(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra)) - '@langchain/textsplitters': 0.0.1(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + '@langchain/openai': 0.1.3(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua)) + '@langchain/textsplitters': 0.0.1(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) binary-extensions: 2.2.0 js-tiktoken: 1.0.12 js-yaml: 4.1.0 jsonpointer: 5.0.1 langchainhub: 0.0.8 - langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) ml-distance: 4.0.1 openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 10.0.0 yaml: 2.4.1 - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) optionalDependencies: '@aws-sdk/client-s3': 3.529.1 '@aws-sdk/credential-provider-node': 3.529.1 @@ -28414,7 +28414,7 @@ snapshots: '@langchain/anthropic': 0.2.1(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/aws': 0.0.9(@aws-sdk/client-sso-oidc@3.624.0(@aws-sdk/client-sts@3.624.0))(@aws-sdk/client-sts@3.624.0)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) '@langchain/cohere': 0.0.7(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) - '@langchain/community': 0.2.17(zxx4jpbxqhs7oe3oglbsfznx6a) + '@langchain/community': 0.2.17(rqn77hvkkdahc2ybmydnhh3cf4) '@langchain/google-genai': 0.0.22(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) '@langchain/google-vertexai': 0.0.19(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13))(zod@3.22.4) '@langchain/groq': 0.0.8(encoding@0.1.13)(langchain@0.2.11)(openai@4.51.0(encoding@0.1.13)) @@ -28446,31 +28446,31 @@ snapshots: pyodide: 0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) redis: 4.6.13 srt-parser-2: 1.2.3 - typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: 1.6.0(encoding@0.1.13)(graphql@16.8.1) ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: - encoding - openai - langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky): + langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa): dependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) - '@langchain/openai': 0.0.30(encoding@0.1.13)(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky)) - '@langchain/textsplitters': 0.0.1(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) + '@langchain/openai': 0.0.30(encoding@0.1.13)(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa)) + '@langchain/textsplitters': 0.0.1(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) binary-extensions: 2.2.0 js-tiktoken: 1.0.12 js-yaml: 4.1.0 jsonpointer: 5.0.1 langchainhub: 0.0.11 - langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) + langsmith: 0.1.32(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)) ml-distance: 4.0.1 openapi-types: 12.1.3 p-retry: 4.6.2 uuid: 9.0.1 yaml: 2.4.1 - zod: 3.23.8 - zod-to-json-schema: 3.23.1(zod@3.23.8) + zod: 3.22.4 + zod-to-json-schema: 3.23.1(zod@3.22.4) optionalDependencies: '@aws-sdk/client-s3': 3.529.1 '@aws-sdk/credential-provider-node': 3.529.1 @@ -28502,7 +28502,7 @@ snapshots: pyodide: 0.25.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) redis: 4.6.13 srt-parser-2: 1.2.3 - typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)) + typeorm: 0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) weaviate-ts-client: 1.6.0(encoding@0.1.13)(graphql@16.8.1) ws: 8.16.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) transitivePeerDependencies: @@ -28517,9 +28517,9 @@ snapshots: dependencies: mustache: 4.2.0 - langfuse-langchain@3.3.4(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra)): + langfuse-langchain@3.3.4(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua)): dependencies: - langchain: 0.2.11(rijpiaudoghub5wl4aggkbywra) + langchain: 0.2.11(d46g2oh7pzryev2vs75vns4aua) langfuse: 3.3.4 langfuse-core: 3.3.4 @@ -28527,7 +28527,7 @@ snapshots: dependencies: langfuse-core: 3.3.4 - langsmith@0.1.32(@langchain/core@0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)): + langsmith@0.1.32(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)): dependencies: '@types/uuid': 9.0.8 commander: 10.0.1 @@ -28535,11 +28535,11 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - langchain: 0.2.11(rijpiaudoghub5wl4aggkbywra) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.11(d46g2oh7pzryev2vs75vns4aua) openai: 4.51.0(encoding@0.1.13) - langsmith@0.1.32(@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)): + langsmith@0.1.32(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)): dependencies: '@types/uuid': 9.0.8 commander: 10.0.1 @@ -28547,11 +28547,11 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) - langchain: 0.2.3(qtzklq3trxgbwvwvhhdjhpcdky) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.3(6gucoml2zeyvfd3acm6anx5zwa) openai: 4.51.0(encoding@0.1.13) - langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)): + langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)): dependencies: '@types/uuid': 9.0.8 commander: 10.0.1 @@ -28559,11 +28559,11 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) - langchain: 0.2.11(rijpiaudoghub5wl4aggkbywra) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.11(d46g2oh7pzryev2vs75vns4aua) openai: 4.51.0(encoding@0.1.13) - langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)): + langsmith@0.1.39(@langchain/core@0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)))(langchain@0.2.3(6gucoml2zeyvfd3acm6anx5zwa))(openai@4.51.0(encoding@0.1.13)): dependencies: '@types/uuid': 9.0.8 commander: 10.0.1 @@ -28571,8 +28571,8 @@ snapshots: p-retry: 4.6.2 uuid: 9.0.1 optionalDependencies: - '@langchain/core': 0.2.18(langchain@0.2.3(qtzklq3trxgbwvwvhhdjhpcdky))(openai@4.51.0(encoding@0.1.13)) - langchain: 0.2.3(qtzklq3trxgbwvwvhhdjhpcdky) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) + langchain: 0.2.3(6gucoml2zeyvfd3acm6anx5zwa) openai: 4.51.0(encoding@0.1.13) langsmith@0.1.6: @@ -28589,9 +28589,9 @@ snapshots: dependencies: language-subtag-registry: 0.3.22 - langwatch@0.1.1(encoding@0.1.13)(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(react@18.2.0)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2)): + langwatch@0.1.1(encoding@0.1.13)(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(react@18.2.0)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2)): dependencies: - '@langchain/core': 0.2.18(langchain@0.2.11(rijpiaudoghub5wl4aggkbywra))(openai@4.51.0(encoding@0.1.13)) + '@langchain/core': 0.2.18(langchain@0.2.11(d46g2oh7pzryev2vs75vns4aua))(openai@4.51.0(encoding@0.1.13)) ai: 3.2.22(openai@4.51.0(encoding@0.1.13))(react@18.2.0)(svelte@4.2.18)(vue@3.4.31(typescript@5.5.2))(zod@3.22.4) javascript-stringify: 2.1.0 llm-cost: 1.0.4 @@ -29573,11 +29573,11 @@ snapshots: min-indent@1.0.1: {} - mini-css-extract-plugin@2.8.1(webpack@5.90.3): + mini-css-extract-plugin@2.8.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: schema-utils: 4.2.0 tapable: 2.2.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) minimalistic-assert@1.0.1: {} @@ -30955,7 +30955,7 @@ snapshots: postcss: 8.4.35 postcss-value-parser: 4.2.0 - postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + postcss-load-config@4.0.2(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: lilconfig: 3.1.1 yaml: 2.4.1 @@ -30963,13 +30963,13 @@ snapshots: postcss: 8.4.35 ts-node: 10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2) - postcss-loader@6.2.1(postcss@8.4.35)(webpack@5.90.3): + postcss-loader@6.2.1(postcss@8.4.35)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: cosmiconfig: 7.1.0 klona: 2.0.6 postcss: 8.4.35 semver: 7.6.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) postcss-logical@5.0.4(postcss@8.4.35): dependencies: @@ -31706,7 +31706,7 @@ snapshots: react-onclickoutside: 6.13.0(react-dom@18.2.0(react@18.2.0))(react@18.2.0) react-popper: 2.3.0(@popperjs/core@2.11.8)(react-dom@18.2.0(react@18.2.0))(react@18.2.0) - react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3): + react-dev-utils@12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@babel/code-frame': 7.23.5 address: 1.2.2 @@ -31717,7 +31717,7 @@ snapshots: escape-string-regexp: 4.0.0 filesize: 8.0.7 find-up: 5.0.0 - fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3) + fork-ts-checker-webpack-plugin: 6.5.3(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)) global-modules: 2.0.0 globby: 11.1.0 gzip-size: 6.0.0 @@ -31732,7 +31732,7 @@ snapshots: shell-quote: 1.8.1 strip-ansi: 6.0.1 text-table: 0.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: typescript: 5.5.2 transitivePeerDependencies: @@ -31851,56 +31851,56 @@ snapshots: history: 5.3.0 react: 18.2.0 - react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2): + react-scripts@5.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(@swc/core@1.4.6)(@types/babel__core@7.20.5)(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(eslint@8.57.0)(react@18.2.0)(sass@1.71.1)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))(type-fest@4.12.0)(typescript@5.5.2): dependencies: '@babel/core': 7.24.0 - '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3))(webpack@5.90.3) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.11(react-refresh@0.11.0)(type-fest@4.12.0)(webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)))(webpack@5.90.3(@swc/core@1.4.6)) '@svgr/webpack': 5.5.0 babel-jest: 27.5.1(@babel/core@7.24.0) - babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@5.90.3) + babel-loader: 8.3.0(@babel/core@7.24.0)(webpack@5.90.3(@swc/core@1.4.6)) babel-plugin-named-asset-import: 0.3.8(@babel/core@7.24.0) babel-preset-react-app: 10.0.1 bfj: 7.1.0 browserslist: 4.23.0 camelcase: 6.3.0 case-sensitive-paths-webpack-plugin: 2.4.0 - css-loader: 6.10.0(webpack@5.90.3) - css-minimizer-webpack-plugin: 3.4.1(webpack@5.90.3) + css-loader: 6.10.0(webpack@5.90.3(@swc/core@1.4.6)) + css-minimizer-webpack-plugin: 3.4.1(webpack@5.90.3(@swc/core@1.4.6)) dotenv: 10.0.0 dotenv-expand: 5.1.0 eslint: 8.57.0 - eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) - eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.90.3) - file-loader: 6.2.0(webpack@5.90.3) + eslint-config-react-app: 7.0.1(@babel/plugin-syntax-flow@7.23.3(@babel/core@7.24.0))(@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.0))(eslint@8.57.0)(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)))(typescript@5.5.2) + eslint-webpack-plugin: 3.2.0(eslint@8.57.0)(webpack@5.90.3(@swc/core@1.4.6)) + file-loader: 6.2.0(webpack@5.90.3(@swc/core@1.4.6)) fs-extra: 10.1.0 - html-webpack-plugin: 5.6.0(webpack@5.90.3) + html-webpack-plugin: 5.6.0(webpack@5.90.3(@swc/core@1.4.6)) identity-obj-proxy: 3.0.0 - jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + jest: 27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) jest-resolve: 27.5.1 - jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2))) - mini-css-extract-plugin: 2.8.1(webpack@5.90.3) + jest-watch-typeahead: 1.1.0(jest@27.5.1(bufferutil@4.0.8)(canvas@2.11.2(encoding@0.1.13))(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2))) + mini-css-extract-plugin: 2.8.1(webpack@5.90.3(@swc/core@1.4.6)) postcss: 8.4.35 postcss-flexbugs-fixes: 5.0.2(postcss@8.4.35) - postcss-loader: 6.2.1(postcss@8.4.35)(webpack@5.90.3) + postcss-loader: 6.2.1(postcss@8.4.35)(webpack@5.90.3(@swc/core@1.4.6)) postcss-normalize: 10.0.1(browserslist@4.23.0)(postcss@8.4.35) postcss-preset-env: 7.8.3(postcss@8.4.35) prompts: 2.4.2 react: 18.2.0 react-app-polyfill: 3.0.0 - react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3) + react-dev-utils: 12.0.1(eslint@8.57.0)(typescript@5.5.2)(webpack@5.90.3(@swc/core@1.4.6)) react-refresh: 0.11.0 resolve: 1.22.8 resolve-url-loader: 4.0.0 - sass-loader: 12.6.0(sass@1.71.1)(webpack@5.90.3) + sass-loader: 12.6.0(sass@1.71.1)(webpack@5.90.3(@swc/core@1.4.6)) semver: 7.6.0 - source-map-loader: 3.0.2(webpack@5.90.3) - style-loader: 3.3.4(webpack@5.90.3) - tailwindcss: 3.4.1(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) - terser-webpack-plugin: 5.3.10(webpack@5.90.3) - webpack: 5.90.3 - webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3) - webpack-manifest-plugin: 4.1.1(webpack@5.90.3) - workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3) + source-map-loader: 3.0.2(webpack@5.90.3(@swc/core@1.4.6)) + style-loader: 3.3.4(webpack@5.90.3(@swc/core@1.4.6)) + tailwindcss: 3.4.1(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)) + webpack: 5.90.3(@swc/core@1.4.6) + webpack-dev-server: 4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)) + webpack-manifest-plugin: 4.1.1(webpack@5.90.3(@swc/core@1.4.6)) + workbox-webpack-plugin: 6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3(@swc/core@1.4.6)) optionalDependencies: fsevents: 2.3.3 typescript: 5.5.2 @@ -32487,11 +32487,11 @@ snapshots: sanitize.css@13.0.0: {} - sass-loader@12.6.0(sass@1.71.1)(webpack@5.90.3): + sass-loader@12.6.0(sass@1.71.1)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: klona: 2.0.6 neo-async: 2.6.2 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) optionalDependencies: sass: 1.71.1 @@ -32882,12 +32882,12 @@ snapshots: source-map-js@1.2.0: {} - source-map-loader@3.0.2(webpack@5.90.3): + source-map-loader@3.0.2(webpack@5.90.3(@swc/core@1.4.6)): dependencies: abab: 2.0.6 iconv-lite: 0.6.3 source-map-js: 1.0.2 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) source-map-resolve@0.5.3: dependencies: @@ -33241,9 +33241,9 @@ snapshots: stubs@3.0.0: {} - style-loader@3.3.4(webpack@5.90.3): + style-loader@3.3.4(webpack@5.90.3(@swc/core@1.4.6)): dependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) style-mod@4.1.2: {} @@ -33408,7 +33408,7 @@ snapshots: symbol-tree@3.2.4: {} - tailwindcss@3.4.1(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)): + tailwindcss@3.4.1(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -33427,7 +33427,7 @@ snapshots: postcss: 8.4.35 postcss-import: 15.1.0(postcss@8.4.35) postcss-js: 4.0.1(postcss@8.4.35) - postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@types/node@20.12.12)(typescript@5.5.2)) + postcss-load-config: 4.0.2(postcss@8.4.35)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)) postcss-nested: 6.0.1(postcss@8.4.35) postcss-selector-parser: 6.0.15 resolve: 1.22.8 @@ -33508,14 +33508,16 @@ snapshots: ansi-escapes: 4.3.2 supports-hyperlinks: 2.3.0 - terser-webpack-plugin@5.3.10(webpack@5.90.3): + terser-webpack-plugin@5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@jridgewell/trace-mapping': 0.3.25 jest-worker: 27.5.1 schema-utils: 3.3.0 serialize-javascript: 6.0.2 terser: 5.29.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) + optionalDependencies: + '@swc/core': 1.4.6 terser@5.29.1: dependencies: @@ -33845,7 +33847,7 @@ snapshots: typedarray@0.0.6: {} - typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(typescript@5.5.2)): + typeorm@0.3.20(ioredis@5.3.2)(mongodb@6.3.0(gcp-metadata@5.3.0(encoding@0.1.13))(socks@2.8.1))(mysql2@3.9.2)(pg@8.11.3)(redis@4.6.13)(sqlite3@5.1.7)(ts-node@10.9.2(@swc/core@1.4.6)(@types/node@20.12.12)(typescript@5.5.2)): dependencies: '@sqltools/formatter': 1.2.5 app-root-path: 3.1.0 @@ -34424,16 +34426,16 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-dev-middleware@5.3.3(webpack@5.90.3): + webpack-dev-middleware@5.3.3(webpack@5.90.3(@swc/core@1.4.6)): dependencies: colorette: 2.0.20 memfs: 3.5.3 mime-types: 2.1.35 range-parser: 1.2.1 schema-utils: 4.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) - webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3): + webpack-dev-server@4.15.1(bufferutil@4.0.8)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: '@types/bonjour': 3.5.13 '@types/connect-history-api-fallback': 1.5.4 @@ -34463,20 +34465,20 @@ snapshots: serve-index: 1.9.1 sockjs: 0.3.24 spdy: 4.0.2 - webpack-dev-middleware: 5.3.3(webpack@5.90.3) + webpack-dev-middleware: 5.3.3(webpack@5.90.3(@swc/core@1.4.6)) ws: 8.17.0(bufferutil@4.0.8)(utf-8-validate@6.0.4) optionalDependencies: - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) transitivePeerDependencies: - bufferutil - debug - supports-color - utf-8-validate - webpack-manifest-plugin@4.1.1(webpack@5.90.3): + webpack-manifest-plugin@4.1.1(webpack@5.90.3(@swc/core@1.4.6)): dependencies: tapable: 2.2.1 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) webpack-sources: 2.3.1 webpack-sources@1.4.3: @@ -34493,7 +34495,7 @@ snapshots: webpack-virtual-modules@0.6.1: {} - webpack@5.90.3: + webpack@5.90.3(@swc/core@1.4.6): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.5 @@ -34516,7 +34518,7 @@ snapshots: neo-async: 2.6.2 schema-utils: 3.3.0 tapable: 2.2.1 - terser-webpack-plugin: 5.3.10(webpack@5.90.3) + terser-webpack-plugin: 5.3.10(@swc/core@1.4.6)(webpack@5.90.3(@swc/core@1.4.6)) watchpack: 2.4.0 webpack-sources: 3.2.3 transitivePeerDependencies: @@ -34898,12 +34900,12 @@ snapshots: workbox-sw@7.0.0: {} - workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3): + workbox-webpack-plugin@6.6.0(@types/babel__core@7.20.5)(webpack@5.90.3(@swc/core@1.4.6)): dependencies: fast-json-stable-stringify: 2.1.0 pretty-bytes: 5.6.0 upath: 1.2.0 - webpack: 5.90.3 + webpack: 5.90.3(@swc/core@1.4.6) webpack-sources: 1.4.3 workbox-build: 6.6.0(@types/babel__core@7.20.5) transitivePeerDependencies: