From 15b2901f8a723ce92401ae34282f7ac83cac1fad Mon Sep 17 00:00:00 2001 From: Baptiste Arnaud Date: Tue, 21 May 2024 16:08:35 +0200 Subject: [PATCH] :recycle: (mistral) Use new ai sdk Mistral core --- apps/builder/package.json | 2 +- apps/docs/package.json | 2 +- apps/landing-page/package.json | 2 +- apps/viewer/package.json | 4 +- packages/bot-engine/package.json | 6 +- packages/deprecated/bot-engine/package.json | 4 +- packages/deprecated/typebot-js/package.json | 2 +- packages/forge/blocks/anthropic/package.json | 2 +- .../elevenlabs/actions/convertTextToSpeech.ts | 4 + .../mistral/actions/createChatCompletion.ts | 48 ++- packages/forge/blocks/mistral/constants.ts | 1 + .../forge/blocks/mistral/helpers/client.js | 341 ---------------- .../blocks/mistral/helpers/parseMessages.ts | 3 +- packages/forge/blocks/mistral/package.json | 6 +- .../blocks/openai/actions/askAssistant.tsx | 5 +- .../openai/actions/createChatCompletion.tsx | 2 + .../blocks/openai/actions/createSpeech.tsx | 2 + packages/forge/blocks/openai/package.json | 4 +- packages/forge/blocks/zemanticAi/index.ts | 6 +- packages/forge/cli/package.json | 2 +- packages/forge/core/types.ts | 2 +- packages/lib/package.json | 2 +- packages/playwright/package.json | 2 +- packages/prisma/package.json | 2 +- packages/transactional/package.json | 2 +- pnpm-lock.yaml | 378 ++++++------------ 26 files changed, 191 insertions(+), 645 deletions(-) create mode 100644 packages/forge/blocks/mistral/constants.ts delete mode 100644 packages/forge/blocks/mistral/helpers/client.js diff --git a/apps/builder/package.json b/apps/builder/package.json index ca4f5e067..2a89219a2 100644 --- a/apps/builder/package.json +++ b/apps/builder/package.json @@ -79,7 +79,7 @@ "nextjs-cors": "2.1.2", "nodemailer": "6.9.8", "nprogress": "0.2.0", - "openai": "4.28.4", + "openai": "4.47.1", "papaparse": "5.4.1", "prettier": "2.8.8", "qs": "6.11.2", diff --git a/apps/docs/package.json b/apps/docs/package.json index 920a85502..ebee53e23 100644 --- a/apps/docs/package.json +++ b/apps/docs/package.json @@ -10,6 +10,6 @@ "devDependencies": { "mintlify": "4.0.75", "tsx": "^4.6.2", - "dotenv-cli": "7.2.1" + "dotenv-cli": "7.4.1" } } diff --git a/apps/landing-page/package.json b/apps/landing-page/package.json index faad068af..0c299dd52 100644 --- a/apps/landing-page/package.json +++ b/apps/landing-page/package.json @@ -40,7 +40,7 @@ "@types/react": "18.2.15", "autoprefixer": "10.4.14", "cross-env": "7.0.3", - "dotenv-cli": "7.2.1", + "dotenv-cli": "7.4.1", "eslint": "8.44.0", "eslint-config-custom": "workspace:*", "next-runtime-env": "1.6.2", diff --git a/apps/viewer/package.json b/apps/viewer/package.json index cdfcd33f3..49b61a601 100644 --- a/apps/viewer/package.json +++ b/apps/viewer/package.json @@ -21,7 +21,7 @@ "@typebot.io/js": "workspace:*", "@typebot.io/nextjs": "workspace:*", "@typebot.io/prisma": "workspace:*", - "ai": "3.0.31", + "ai": "3.1.12", "bot-engine": "workspace:*", "cors": "2.8.5", "google-spreadsheet": "4.1.1", @@ -30,7 +30,7 @@ "next": "14.1.0", "nextjs-cors": "2.1.2", "nodemailer": "6.9.8", - "openai": "4.38.3", + "openai": "4.47.1", "qs": "6.11.2", "react": "18.2.0", "react-dom": "18.2.0", diff --git a/packages/bot-engine/package.json b/packages/bot-engine/package.json index 8b5fc1c2e..3e9a95067 100644 --- a/packages/bot-engine/package.json +++ b/packages/bot-engine/package.json @@ -20,7 +20,7 @@ "@typebot.io/variables": "workspace:*", "@udecode/plate-common": "30.4.5", "@typebot.io/logic": "workspace:*", - "ai": "3.0.31", + "ai": "3.1.12", "chrono-node": "2.7.5", "date-fns": "2.30.0", "date-fns-tz": "2.0.0", @@ -30,14 +30,14 @@ "libphonenumber-js": "1.10.37", "node-html-parser": "6.1.5", "nodemailer": "6.9.8", - "openai": "4.38.3", + "openai": "4.47.1", "qs": "6.11.2", "stripe": "12.13.0" }, "devDependencies": { "@typebot.io/forge": "workspace:*", "@typebot.io/forge-repository": "workspace:*", - "@types/node": "^20.12.3", + "@types/node": "20.4.2", "@types/nodemailer": "6.4.14", "@types/qs": "6.9.7" } diff --git a/packages/deprecated/bot-engine/package.json b/packages/deprecated/bot-engine/package.json index 0d73d6ab5..050456df1 100644 --- a/packages/deprecated/bot-engine/package.json +++ b/packages/deprecated/bot-engine/package.json @@ -20,7 +20,7 @@ "resize-observer": "1.0.4" }, "devDependencies": { - "@types/node": "18.11.18", + "@types/node": "20.4.2", "@types/qs": "6.9.7", "@types/react": "18.2.15", "@types/react-phone-number-input": "3.0.14", @@ -29,7 +29,7 @@ "autoprefixer": "10.4.13", "@typebot.io/prisma": "workspace:*", "esbuild": "0.17.5", - "eslint": "8.32.0", + "eslint": "8.44.0", "eslint-config-custom": "workspace:*", "@typebot.io/schemas": "workspace:*", "postcss": "8.4.21", diff --git a/packages/deprecated/typebot-js/package.json b/packages/deprecated/typebot-js/package.json index 52d26b148..a4dbeadf5 100644 --- a/packages/deprecated/typebot-js/package.json +++ b/packages/deprecated/typebot-js/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@types/jest": "29.4.0", "tsup": "6.5.0", - "eslint": "8.32.0", + "eslint": "8.44.0", "eslint-config-custom": "workspace:*", "jest": "29.4.1", "jest-environment-jsdom": "29.4.1", diff --git a/packages/forge/blocks/anthropic/package.json b/packages/forge/blocks/anthropic/package.json index 1012ffba7..bc55518aa 100644 --- a/packages/forge/blocks/anthropic/package.json +++ b/packages/forge/blocks/anthropic/package.json @@ -15,6 +15,6 @@ }, "dependencies": { "@anthropic-ai/sdk": "0.20.6", - "ai": "3.0.31" + "ai": "3.1.12" } } diff --git a/packages/forge/blocks/elevenlabs/actions/convertTextToSpeech.ts b/packages/forge/blocks/elevenlabs/actions/convertTextToSpeech.ts index 6b428418e..0bb331192 100644 --- a/packages/forge/blocks/elevenlabs/actions/convertTextToSpeech.ts +++ b/packages/forge/blocks/elevenlabs/actions/convertTextToSpeech.ts @@ -38,6 +38,8 @@ export const convertTextToSpeech = createAction({ { id: 'fetchVoices', fetch: async ({ credentials }) => { + if (!credentials?.apiKey) return [] + const response = await got .get(baseUrl + '/v1/voices', { headers: { @@ -56,6 +58,8 @@ export const convertTextToSpeech = createAction({ { id: 'fetchModels', fetch: async ({ credentials }) => { + if (!credentials?.apiKey) return [] + const response = await got .get(baseUrl + '/v1/models', { headers: { diff --git a/packages/forge/blocks/mistral/actions/createChatCompletion.ts b/packages/forge/blocks/mistral/actions/createChatCompletion.ts index 3befa72ce..0f65b4756 100644 --- a/packages/forge/blocks/mistral/actions/createChatCompletion.ts +++ b/packages/forge/blocks/mistral/actions/createChatCompletion.ts @@ -2,9 +2,10 @@ import { option, createAction } from '@typebot.io/forge' import { isDefined } from '@typebot.io/lib' import { auth } from '../auth' import { parseMessages } from '../helpers/parseMessages' -import { OpenAIStream } from 'ai' -// @ts-ignore -import MistralClient from '../helpers/client' +import { createMistral } from '@ai-sdk/mistral' +import { apiBaseUrl } from '../constants' +import ky from 'ky' +import { generateText, streamText } from 'ai' const nativeMessageContentSchema = { content: option.string.layout({ @@ -98,35 +99,38 @@ export const createChatCompletion = createAction({ id: 'fetchModels', dependencies: [], fetch: async ({ credentials }) => { - const client = new MistralClient(credentials.apiKey) + if (!credentials?.apiKey) return [] - const listModelsResponse: any = await client.listModels() + const { data } = await ky + .get(apiBaseUrl + '/v1/models', { + headers: { + Authorization: `Bearer ${credentials.apiKey}`, + }, + }) + .json<{ data: { id: string }[] }>() - return ( - listModelsResponse.data - .sort( - (a: { created: number }, b: { created: number }) => - b.created - a.created - ) - .map((model: { id: any }) => model.id) ?? [] - ) + return data.map((model) => model.id) }, }, ], run: { server: async ({ credentials: { apiKey }, options, variables, logs }) => { if (!options.model) return logs.add('No model selected') - const client = new MistralClient(apiKey) - const response: any = await client.chat({ - model: options.model, + const model = createMistral({ + apiKey, + })(options.model) + + const { text } = await generateText({ + model, messages: parseMessages({ options, variables }), + tools: {}, }) options.responseMapping?.forEach((mapping) => { if (!mapping.variableId) return if (!mapping.item || mapping.item === 'Message content') - variables.set(mapping.variableId, response.choices[0].message.content) + variables.set(mapping.variableId, text) }) }, stream: { @@ -136,14 +140,16 @@ export const createChatCompletion = createAction({ )?.variableId, run: async ({ credentials: { apiKey }, options, variables }) => { if (!options.model) return - const client = new MistralClient(apiKey) + const model = createMistral({ + apiKey, + })(options.model) - const response: any = client.chatStream({ - model: options.model, + const response = await streamText({ + model, messages: parseMessages({ options, variables }), }) - return OpenAIStream(response) + return response.toAIStream() }, }, }, diff --git a/packages/forge/blocks/mistral/constants.ts b/packages/forge/blocks/mistral/constants.ts new file mode 100644 index 000000000..73fef825b --- /dev/null +++ b/packages/forge/blocks/mistral/constants.ts @@ -0,0 +1 @@ +export const apiBaseUrl = 'https://api.mistral.ai' diff --git a/packages/forge/blocks/mistral/helpers/client.js b/packages/forge/blocks/mistral/helpers/client.js deleted file mode 100644 index 48bce84aa..000000000 --- a/packages/forge/blocks/mistral/helpers/client.js +++ /dev/null @@ -1,341 +0,0 @@ -// Taken from https://github.com/mistralai/client-js/blob/main/src/client.js -// Lib seems not actively maintained, and we need this patch: https://github.com/mistralai/client-js/pull/42 - -let isNode = false - -let fetch - -const VERSION = '0.0.3' -const RETRY_STATUS_CODES = [429, 500, 502, 503, 504] -const ENDPOINT = 'https://api.mistral.ai' - -/** - * Initialize fetch - * @return {Promise} - */ -async function initializeFetch() { - if (typeof globalThis.fetch === 'undefined') - throw new Error('No fetch implementation found') - if (typeof window === 'undefined') { - isNode = true - } - fetch = globalThis.fetch -} - -initializeFetch() - -/** - * MistralAPIError - * @return {MistralAPIError} - * @extends {Error} - */ -class MistralAPIError extends Error { - /** - * A simple error class for Mistral API errors - * @param {*} message - */ - constructor(message) { - super(message) - this.name = 'MistralAPIError' - } -} - -/** - * MistralClient - * @return {MistralClient} - */ -class MistralClient { - /** - * A simple and lightweight client for the Mistral API - * @param {*} apiKey can be set as an environment variable MISTRAL_API_KEY, - * or provided in this parameter - * @param {*} endpoint defaults to https://api.mistral.ai - * @param {*} maxRetries defaults to 5 - * @param {*} timeout defaults to 120 seconds - */ - constructor( - apiKey = process.env.MISTRAL_API_KEY, - endpoint = ENDPOINT, - maxRetries = 5, - timeout = 120 - ) { - this.endpoint = endpoint - this.apiKey = apiKey - - this.maxRetries = maxRetries - this.timeout = timeout - - if (this.endpoint.indexOf('inference.azure.com')) { - this.modelDefault = 'mistral' - } - } - - /** - * - * @param {*} method - * @param {*} path - * @param {*} request - * @return {Promise<*>} - */ - _request = async function (method, path, request) { - const url = `${this.endpoint}/${path}` - const options = { - method: method, - headers: { - 'User-Agent': `mistral-client-js/${VERSION}`, - Accept: request?.stream ? 'text/event-stream' : 'application/json', - 'Content-Type': 'application/json', - Authorization: `Bearer ${this.apiKey}`, - }, - body: method !== 'get' ? JSON.stringify(request) : null, - timeout: this.timeout * 1000, - } - - for (let attempts = 0; attempts < this.maxRetries; attempts++) { - try { - const response = await fetch(url, options) - - if (response.ok) { - if (request?.stream) { - if (isNode) { - return response.body - } else { - const reader = response.body.getReader() - // Chrome does not support async iterators yet, so polyfill it - const asyncIterator = async function* () { - try { - while (true) { - // Read from the stream - const { done, value } = await reader.read() - // Exit if we're done - if (done) return - // Else yield the chunk - yield value - } - } finally { - reader.releaseLock() - } - } - - return asyncIterator() - } - } - return await response.json() - } else if (RETRY_STATUS_CODES.includes(response.status)) { - console.debug( - `Retrying request on response status: ${response.status}`, - `Response: ${await response.text()}`, - `Attempt: ${attempts + 1}` - ) - // eslint-disable-next-line max-len - await new Promise((resolve) => - setTimeout(resolve, Math.pow(2, attempts + 1) * 500) - ) - } else { - throw new MistralAPIError( - `HTTP error! status: ${response.status} ` + - `Response: \n${await response.text()}` - ) - } - } catch (error) { - console.error(`Request failed: ${error.message}`) - if (error.name === 'MistralAPIError') { - throw error - } - if (attempts === this.maxRetries - 1) throw error - // eslint-disable-next-line max-len - await new Promise((resolve) => - setTimeout(resolve, Math.pow(2, attempts + 1) * 500) - ) - } - } - throw new Error('Max retries reached') - } - - /** - * Creates a chat completion request - * @param {*} model - * @param {*} messages - * @param {*} tools - * @param {*} temperature - * @param {*} maxTokens - * @param {*} topP - * @param {*} randomSeed - * @param {*} stream - * @param {*} safeMode deprecated use safePrompt instead - * @param {*} safePrompt - * @param {*} toolChoice - * @param {*} responseFormat - * @return {Promise} - */ - _makeChatCompletionRequest = function ( - model, - messages, - tools, - temperature, - maxTokens, - topP, - randomSeed, - stream, - safeMode, - safePrompt, - toolChoice, - responseFormat - ) { - // if modelDefault and model are undefined, throw an error - if (!model && !this.modelDefault) { - throw new MistralAPIError('You must provide a model name') - } - return { - model: model ?? this.modelDefault, - messages: messages, - tools: tools ?? undefined, - temperature: temperature ?? undefined, - max_tokens: maxTokens ?? undefined, - top_p: topP ?? undefined, - random_seed: randomSeed ?? undefined, - stream: stream ?? undefined, - safe_prompt: (safeMode || safePrompt) ?? undefined, - tool_choice: toolChoice ?? undefined, - response_format: responseFormat ?? undefined, - } - } - - /** - * Returns a list of the available models - * @return {Promise} - */ - listModels = async function () { - const response = await this._request('get', 'v1/models') - return response - } - - /** - * A chat endpoint without streaming - * @param {*} model the name of the model to chat with, e.g. mistral-tiny - * @param {*} messages an array of messages to chat with, e.g. - * [{role: 'user', content: 'What is the best French cheese?'}] - * @param {*} tools a list of tools to use. - * @param {*} temperature the temperature to use for sampling, e.g. 0.5 - * @param {*} maxTokens the maximum number of tokens to generate, e.g. 100 - * @param {*} topP the cumulative probability of tokens to generate, e.g. 0.9 - * @param {*} randomSeed the random seed to use for sampling, e.g. 42 - * @param {*} safeMode deprecated use safePrompt instead - * @param {*} safePrompt whether to use safe mode, e.g. true - * @param {*} toolChoice the tool to use, e.g. 'auto' - * @param {*} responseFormat the format of the response, e.g. 'json_format' - * @return {Promise} - */ - chat = async function ({ - model, - messages, - tools, - temperature, - maxTokens, - topP, - randomSeed, - safeMode, - safePrompt, - toolChoice, - responseFormat, - }) { - const request = this._makeChatCompletionRequest( - model, - messages, - tools, - temperature, - maxTokens, - topP, - randomSeed, - false, - safeMode, - safePrompt, - toolChoice, - responseFormat - ) - const response = await this._request('post', 'v1/chat/completions', request) - return response - } - - /** - * A chat endpoint that streams responses. - * @param {*} model the name of the model to chat with, e.g. mistral-tiny - * @param {*} messages an array of messages to chat with, e.g. - * [{role: 'user', content: 'What is the best French cheese?'}] - * @param {*} tools a list of tools to use. - * @param {*} temperature the temperature to use for sampling, e.g. 0.5 - * @param {*} maxTokens the maximum number of tokens to generate, e.g. 100 - * @param {*} topP the cumulative probability of tokens to generate, e.g. 0.9 - * @param {*} randomSeed the random seed to use for sampling, e.g. 42 - * @param {*} safeMode deprecated use safePrompt instead - * @param {*} safePrompt whether to use safe mode, e.g. true - * @param {*} toolChoice the tool to use, e.g. 'auto' - * @param {*} responseFormat the format of the response, e.g. 'json_format' - * @return {Promise} - */ - chatStream = async function* ({ - model, - messages, - tools, - temperature, - maxTokens, - topP, - randomSeed, - safeMode, - safePrompt, - toolChoice, - responseFormat, - }) { - const request = this._makeChatCompletionRequest( - model, - messages, - tools, - temperature, - maxTokens, - topP, - randomSeed, - true, - safeMode, - safePrompt, - toolChoice, - responseFormat - ) - const response = await this._request('post', 'v1/chat/completions', request) - - let buffer = '' - const decoder = new TextDecoder() - for await (const chunk of response) { - buffer += decoder.decode(chunk, { stream: true }) - let firstNewline - while ((firstNewline = buffer.indexOf('\n')) !== -1) { - const chunkLine = buffer.substring(0, firstNewline) - buffer = buffer.substring(firstNewline + 1) - if (chunkLine.startsWith('data:')) { - const json = chunkLine.substring(6).trim() - if (json !== '[DONE]') { - yield JSON.parse(json) - } - } - } - } - } - - /** - * An embeddings endpoint that returns embeddings for a single, - * or batch of inputs - * @param {*} model The embedding model to use, e.g. mistral-embed - * @param {*} input The input to embed, - * e.g. ['What is the best French cheese?'] - * @return {Promise} - */ - embeddings = async function ({ model, input }) { - const request = { - model: model, - input: input, - } - const response = await this._request('post', 'v1/embeddings', request) - return response - } -} - -export default MistralClient diff --git a/packages/forge/blocks/mistral/helpers/parseMessages.ts b/packages/forge/blocks/mistral/helpers/parseMessages.ts index 089cb29f6..f7c0f4d28 100644 --- a/packages/forge/blocks/mistral/helpers/parseMessages.ts +++ b/packages/forge/blocks/mistral/helpers/parseMessages.ts @@ -2,6 +2,7 @@ import { options as createChatCompletionOption } from '../actions/createChatComp import { VariableStore } from '@typebot.io/forge' import { isDefined, isNotEmpty } from '@typebot.io/lib' import { z } from '@typebot.io/forge/zod' +import { CoreMessage } from 'ai' export const parseMessages = ({ options: { messages }, @@ -11,7 +12,7 @@ export const parseMessages = ({ variables: VariableStore }) => messages - ?.flatMap((message) => { + ?.flatMap((message) => { if (!message.role) return if (message.role === 'Dialogue') { diff --git a/packages/forge/blocks/mistral/package.json b/packages/forge/blocks/mistral/package.json index 611a3fccc..d5af453a8 100644 --- a/packages/forge/blocks/mistral/package.json +++ b/packages/forge/blocks/mistral/package.json @@ -9,11 +9,13 @@ "@typebot.io/forge": "workspace:*", "@typebot.io/lib": "workspace:*", "@typebot.io/tsconfig": "workspace:*", - "@types/node": "^20.12.4", + "@types/node": "20.4.2", "@types/react": "18.2.15", "typescript": "5.4.5" }, "dependencies": { - "ai": "3.0.31" + "@ai-sdk/mistral": "0.0.11", + "ai": "3.1.12", + "ky": "1.2.4" } } diff --git a/packages/forge/blocks/openai/actions/askAssistant.tsx b/packages/forge/blocks/openai/actions/askAssistant.tsx index cdba85134..fbf1e4bbc 100644 --- a/packages/forge/blocks/openai/actions/askAssistant.tsx +++ b/packages/forge/blocks/openai/actions/askAssistant.tsx @@ -67,6 +67,8 @@ export const askAssistant = createAction({ { id: 'fetchAssistants', fetch: async ({ options, credentials }) => { + if (!credentials?.apiKey) return [] + const config = { apiKey: credentials.apiKey, baseURL: options.baseUrl, @@ -100,7 +102,8 @@ export const askAssistant = createAction({ { id: 'fetchAssistantFunctions', fetch: async ({ options, credentials }) => { - if (!options.assistantId) return [] + if (!options.assistantId || !credentials?.apiKey) return [] + const config = { apiKey: credentials.apiKey, baseURL: options.baseUrl, diff --git a/packages/forge/blocks/openai/actions/createChatCompletion.tsx b/packages/forge/blocks/openai/actions/createChatCompletion.tsx index e01eb4cba..90aa58168 100644 --- a/packages/forge/blocks/openai/actions/createChatCompletion.tsx +++ b/packages/forge/blocks/openai/actions/createChatCompletion.tsx @@ -46,6 +46,8 @@ export const createChatCompletion = createAction({ id: 'fetchModels', dependencies: ['baseUrl', 'apiVersion'], fetch: async ({ credentials, options }) => { + if (!credentials?.apiKey) return [] + const baseUrl = options?.baseUrl ?? defaultOpenAIOptions.baseUrl const config = { apiKey: credentials.apiKey, diff --git a/packages/forge/blocks/openai/actions/createSpeech.tsx b/packages/forge/blocks/openai/actions/createSpeech.tsx index f00fc4f81..291997186 100644 --- a/packages/forge/blocks/openai/actions/createSpeech.tsx +++ b/packages/forge/blocks/openai/actions/createSpeech.tsx @@ -37,6 +37,8 @@ export const createSpeech = createAction({ id: 'fetchSpeechModels', dependencies: ['baseUrl', 'apiVersion'], fetch: async ({ credentials, options }) => { + if (!credentials?.apiKey) return [] + const baseUrl = options?.baseUrl ?? defaultOpenAIOptions.baseUrl const config = { apiKey: credentials.apiKey, diff --git a/packages/forge/blocks/openai/package.json b/packages/forge/blocks/openai/package.json index 1339feb90..352cb3cb1 100644 --- a/packages/forge/blocks/openai/package.json +++ b/packages/forge/blocks/openai/package.json @@ -7,8 +7,8 @@ "author": "Baptiste Arnaud", "license": "ISC", "dependencies": { - "ai": "3.0.31", - "openai": "4.38.3" + "ai": "3.1.12", + "openai": "4.47.1" }, "devDependencies": { "@typebot.io/forge": "workspace:*", diff --git a/packages/forge/blocks/zemanticAi/index.ts b/packages/forge/blocks/zemanticAi/index.ts index d7d930bbd..e43015ebe 100644 --- a/packages/forge/blocks/zemanticAi/index.ts +++ b/packages/forge/blocks/zemanticAi/index.ts @@ -16,13 +16,15 @@ export const zemanticAiBlock = createBlock({ { id: 'fetchProjects', dependencies: [], - fetch: async ({ credentials: { apiKey } }) => { + fetch: async ({ credentials }) => { + if (!credentials?.apiKey) return [] + const url = 'https://api.zemantic.ai/v1/projects' const response = await ky .get(url, { headers: { - Authorization: `Bearer ${apiKey}`, + Authorization: `Bearer ${credentials.apiKey}`, }, }) .json() diff --git a/packages/forge/cli/package.json b/packages/forge/cli/package.json index 8766f7d23..b549e3598 100644 --- a/packages/forge/cli/package.json +++ b/packages/forge/cli/package.json @@ -12,7 +12,7 @@ "devDependencies": { "@clack/prompts": "^0.7.0", "@typebot.io/tsconfig": "workspace:*", - "@types/node": "^20.10.1", + "@types/node": "20.4.2", "tsx": "^4.6.1", "prettier": "3.0.0" } diff --git a/packages/forge/core/types.ts b/packages/forge/core/types.ts index c302a14ee..e2f9612e5 100644 --- a/packages/forge/core/types.ts +++ b/packages/forge/core/types.ts @@ -101,7 +101,7 @@ export type FetcherDefinition = { */ dependencies: (keyof T)[] fetch: (params: { - credentials: CredentialsFromAuthDef + credentials: CredentialsFromAuthDef | undefined options: T }) => Promise<(string | { label: string; value: string })[]> } diff --git a/packages/lib/package.json b/packages/lib/package.json index 0220f204c..1e809f7a2 100644 --- a/packages/lib/package.json +++ b/packages/lib/package.json @@ -12,7 +12,7 @@ "@typebot.io/prisma": "workspace:*", "@typebot.io/tsconfig": "workspace:*", "@types/escape-html": "^1.0.4", - "@types/nodemailer": "6.4.8", + "@types/nodemailer": "6.4.14", "@types/validator": "13.11.9", "next": "14.1.0", "nodemailer": "6.9.8", diff --git a/packages/playwright/package.json b/packages/playwright/package.json index c5778293b..d43158c8f 100644 --- a/packages/playwright/package.json +++ b/packages/playwright/package.json @@ -13,7 +13,7 @@ "@typebot.io/schemas": "workspace:*" }, "devDependencies": { - "@types/node": "^20.11.26", + "@types/node": "20.4.2", "@typebot.io/tsconfig": "workspace:*" } } diff --git a/packages/prisma/package.json b/packages/prisma/package.json index 1d2cf9a87..9e240277b 100644 --- a/packages/prisma/package.json +++ b/packages/prisma/package.json @@ -18,7 +18,7 @@ }, "devDependencies": { "@types/node": "20.4.2", - "dotenv-cli": "7.2.1", + "dotenv-cli": "7.4.1", "prisma": "5.12.1", "@typebot.io/tsconfig": "workspace:*", "tsx": "3.12.7", diff --git a/packages/transactional/package.json b/packages/transactional/package.json index e195806a3..23bd4c198 100644 --- a/packages/transactional/package.json +++ b/packages/transactional/package.json @@ -14,6 +14,6 @@ "@typebot.io/env": "workspace:*" }, "devDependencies": { - "dotenv-cli": "7.2.1" + "dotenv-cli": "7.4.1" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d3605829a..e0e6798b9 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -228,8 +228,8 @@ importers: specifier: 0.2.0 version: 0.2.0 openai: - specifier: 4.28.4 - version: 4.28.4 + specifier: 4.47.1 + version: 4.47.1 papaparse: specifier: 5.4.1 version: 5.4.1 @@ -382,8 +382,8 @@ importers: apps/docs: devDependencies: dotenv-cli: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.4.1 + version: 7.4.1 mintlify: specifier: 4.0.75 version: 4.0.75(acorn@8.11.3)(axios@1.6.7)(openapi-types@12.1.3) @@ -482,8 +482,8 @@ importers: specifier: 7.0.3 version: 7.0.3 dotenv-cli: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.4.1 + version: 7.4.1 eslint: specifier: 8.44.0 version: 8.44.0 @@ -536,8 +536,8 @@ importers: specifier: workspace:* version: link:../../packages/prisma ai: - specifier: 3.0.31 - version: 3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + specifier: 3.1.12 + version: 3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) bot-engine: specifier: workspace:* version: link:../../packages/deprecated/bot-engine @@ -563,8 +563,8 @@ importers: specifier: 6.9.8 version: 6.9.8 openai: - specifier: 4.38.3 - version: 4.38.3 + specifier: 4.47.1 + version: 4.47.1 qs: specifier: 6.11.2 version: 6.11.2 @@ -727,8 +727,8 @@ importers: specifier: 30.4.5 version: 30.4.5(@types/react@18.2.15)(immer@10.0.2)(react-dom@18.2.0)(react@18.2.0)(scheduler@0.23.0)(slate-history@0.100.0)(slate-hyperscript@0.100.0)(slate-react@0.102.0)(slate@0.102.0) ai: - specifier: 3.0.31 - version: 3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + specifier: 3.1.12 + version: 3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) chrono-node: specifier: 2.7.5 version: 2.7.5 @@ -757,8 +757,8 @@ importers: specifier: 6.9.8 version: 6.9.8 openai: - specifier: 4.38.3 - version: 4.38.3 + specifier: 4.47.1 + version: 4.47.1 qs: specifier: 6.11.2 version: 6.11.2 @@ -773,8 +773,8 @@ importers: specifier: workspace:* version: link:../forge/repository '@types/node': - specifier: ^20.12.3 - version: 20.12.3 + specifier: 20.4.2 + version: 20.4.2 '@types/nodemailer': specifier: 6.4.14 version: 6.4.14 @@ -825,8 +825,8 @@ importers: specifier: workspace:* version: link:../../tsconfig '@types/node': - specifier: 18.11.18 - version: 18.11.18 + specifier: 20.4.2 + version: 20.4.2 '@types/qs': specifier: 6.9.7 version: 6.9.7 @@ -849,8 +849,8 @@ importers: specifier: 0.17.5 version: 0.17.5 eslint: - specifier: 8.32.0 - version: 8.32.0 + specifier: 8.44.0 + version: 8.44.0 eslint-config-custom: specifier: workspace:* version: link:../../eslint-config-custom @@ -888,8 +888,8 @@ importers: specifier: 29.4.0 version: 29.4.0 eslint: - specifier: 8.32.0 - version: 8.32.0 + specifier: 8.44.0 + version: 8.44.0 eslint-config-custom: specifier: workspace:* version: link:../../eslint-config-custom @@ -1249,8 +1249,8 @@ importers: specifier: 0.20.6 version: 0.20.6 ai: - specifier: 3.0.31 - version: 3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + specifier: 3.1.12 + version: 3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) devDependencies: '@typebot.io/forge': specifier: workspace:* @@ -1352,9 +1352,15 @@ importers: packages/forge/blocks/mistral: dependencies: + '@ai-sdk/mistral': + specifier: 0.0.11 + version: 0.0.11(zod@3.22.4) ai: - specifier: 3.0.31 - version: 3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + specifier: 3.1.12 + version: 3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + ky: + specifier: 1.2.4 + version: 1.2.4 devDependencies: '@typebot.io/forge': specifier: workspace:* @@ -1366,8 +1372,8 @@ importers: specifier: workspace:* version: link:../../../tsconfig '@types/node': - specifier: ^20.12.4 - version: 20.12.4 + specifier: 20.4.2 + version: 20.4.2 '@types/react': specifier: 18.2.15 version: 18.2.15 @@ -1402,11 +1408,11 @@ importers: packages/forge/blocks/openai: dependencies: ai: - specifier: 3.0.31 - version: 3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) + specifier: 3.1.12 + version: 3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4) openai: - specifier: 4.38.3 - version: 4.38.3 + specifier: 4.47.1 + version: 4.47.1 devDependencies: '@typebot.io/forge': specifier: workspace:* @@ -1506,8 +1512,8 @@ importers: specifier: workspace:* version: link:../../tsconfig '@types/node': - specifier: ^20.10.1 - version: 20.11.26 + specifier: 20.4.2 + version: 20.4.2 prettier: specifier: 3.0.0 version: 3.0.0 @@ -1655,8 +1661,8 @@ importers: specifier: ^1.0.4 version: 1.0.4 '@types/nodemailer': - specifier: 6.4.8 - version: 6.4.8 + specifier: 6.4.14 + version: 6.4.14 '@types/validator': specifier: 13.11.9 version: 13.11.9 @@ -1727,8 +1733,8 @@ importers: specifier: workspace:* version: link:../tsconfig '@types/node': - specifier: ^20.11.26 - version: 20.11.26 + specifier: 20.4.2 + version: 20.4.2 packages/prisma: dependencies: @@ -1743,8 +1749,8 @@ importers: specifier: 20.4.2 version: 20.4.2 dotenv-cli: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.4.1 + version: 7.4.1 prisma: specifier: 5.12.1 version: 5.12.1 @@ -1929,8 +1935,8 @@ importers: version: 2.0.0(eslint@8.44.0) devDependencies: dotenv-cli: - specifier: 7.2.1 - version: 7.2.1 + specifier: 7.4.1 + version: 7.4.1 packages/tsconfig: {} @@ -1949,8 +1955,8 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - /@ai-sdk/provider-utils@0.0.3(zod@3.22.4): - resolution: {integrity: sha512-13+4v62ylduGvwz8966SdnT1aoQRO4QkWzZJyVswdgmYeX2vrXuU4bssK578+FXIXc1jwi2hLZO8lqgLPT/xDA==} + /@ai-sdk/mistral@0.0.11(zod@3.22.4): + resolution: {integrity: sha512-Y/2V7BMwyaTnVRfhs6YhI5MGcQgjBrTwo2K6CftUAjJvNIDtSJ+eVc9hCuw02uMvTScfeiTB6lZ8OrzGyCNHoQ==} engines: {node: '>=18'} peerDependencies: zod: ^3.0.0 @@ -1958,15 +1964,29 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider': 0.0.2 + '@ai-sdk/provider': 0.0.5 + '@ai-sdk/provider-utils': 0.0.8(zod@3.22.4) + zod: 3.22.4 + dev: false + + /@ai-sdk/provider-utils@0.0.8(zod@3.22.4): + resolution: {integrity: sha512-J/ZNvFhORd3gCeK3jFvNrxp1Dnvy6PvPq21RJ+OsIEjsoHeKQaHALCWG0aJunXDuzd+Mck/lCg7LqA0qmIbHIg==} + engines: {node: '>=18'} + peerDependencies: + zod: ^3.0.0 + peerDependenciesMeta: + zod: + optional: true + dependencies: + '@ai-sdk/provider': 0.0.5 eventsource-parser: 1.1.2 nanoid: 3.3.6 secure-json-parse: 2.7.0 zod: 3.22.4 dev: false - /@ai-sdk/provider@0.0.2: - resolution: {integrity: sha512-LDRx7TFWjuuW1V8bGCMvOk4ap5gNGeSxa6w65Y+pHskiLRk/nn+Z2xzMy1JjCTksUblu0i/plai4bOLgqkxJHA==} + /@ai-sdk/provider@0.0.5: + resolution: {integrity: sha512-TZDldBZ5clAsNwJ2PSeo/b1uILj9a2lvi0rnOj2RCNZDgaVqFRVIAnKyeHusCRv2lzhPIw03B3fiGI6VoLzOAA==} engines: {node: '>=18'} dependencies: json-schema: 0.4.0 @@ -6433,23 +6453,6 @@ packages: resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - /@eslint/eslintrc@1.4.1: - resolution: {integrity: sha512-XXrH9Uarn0stsyldqDYq8r++mROmWRI1xKMXa640Bb//SY1+ECYX6VzT6Lcx5frD0V30XieqJ0oX9I2Xj5aoMA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - dependencies: - ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 - import-fresh: 3.3.0 - js-yaml: 4.1.0 - minimatch: 3.1.2 - strip-json-comments: 3.1.1 - transitivePeerDependencies: - - supports-color - dev: true - /@eslint/eslintrc@2.1.4: resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -6843,7 +6846,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -6864,14 +6867,14 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.4.9) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -6899,7 +6902,7 @@ packages: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-mock: 29.7.0 dev: true @@ -6926,7 +6929,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -6959,7 +6962,7 @@ packages: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -7047,7 +7050,7 @@ packages: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.12.4 + '@types/node': 20.4.9 '@types/yargs': 17.0.32 chalk: 4.1.2 dev: true @@ -7852,7 +7855,7 @@ packages: engines: {node: '>=16'} hasBin: true dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 playwright-core: 1.36.0 optionalDependencies: fsevents: 2.3.2 @@ -9459,7 +9462,7 @@ packages: resolution: {integrity: sha512-fB3Zu92ucau0iQ0JMCFQE7b/dv8Ot07NI3KaZIkIUNXq82k4eBAqUaneXfleGY9JWskeS9y+u0nXMyspcuQrCg==} dependencies: '@types/connect': 3.4.38 - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: false /@types/canvas-confetti@1.6.0: @@ -9469,13 +9472,13 @@ packages: /@types/cli-progress@3.11.5: resolution: {integrity: sha512-D4PbNRbviKyppS5ivBGyFO29POlySLmA2HyUFE4p5QGazAMM3CwkKWcvTl8gvElSuxRh6FPKL8XmidX873ou4g==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: true /@types/connect@3.4.38: resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: false /@types/content-type@1.1.8: @@ -9534,7 +9537,7 @@ packages: /@types/express-serve-static-core@4.17.43: resolution: {integrity: sha512-oaYtiBirUOPQGSWNGPWnzyAFJ0BP3cwvN4oWZQY+zUBwpVIGsKUkpBpSztp74drYcjavs7SKFZ4DX1V2QeN8rg==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 '@types/qs': 6.9.7 '@types/range-parser': 1.2.7 '@types/send': 0.17.4 @@ -9552,7 +9555,7 @@ packages: /@types/graceful-fs@4.1.9: resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: true /@types/hast@2.3.10: @@ -9610,7 +9613,7 @@ packages: /@types/jsdom@20.0.1: resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 dev: true @@ -9665,7 +9668,7 @@ packages: /@types/micro@7.3.7: resolution: {integrity: sha512-MFsX7eCj0Tg3TtphOQvANNvNtFpya+s/rYOCdV6o+DFjOQPFi2EVRbBALjbbgZTXUaJP1Q281MJiJOD40d0UxQ==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: true /@types/mime@1.3.5: @@ -9686,24 +9689,13 @@ packages: /@types/node-fetch@2.6.11: resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 form-data: 4.0.0 dev: false /@types/node@18.11.18: resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} - - /@types/node@20.11.26: - resolution: {integrity: sha512-YwOMmyhNnAWijOBQweOJnQPl068Oqd4K3OFbTc6AHJwzweUwwWG3GIFY74OKks2PJUDkQPeddOQES9mLn1CTEQ==} - dependencies: - undici-types: 5.26.5 - dev: true - - /@types/node@20.12.3: - resolution: {integrity: sha512-sD+ia2ubTeWrOu+YMF+MTAB7E+O7qsMqAbMfW7DG3K1URwhZ5hN1pLlRVGbf4wDFzSfikL05M17EyorS86jShw==} - dependencies: - undici-types: 5.26.5 - dev: true + dev: false /@types/node@20.12.4: resolution: {integrity: sha512-E+Fa9z3wSQpzgYQdYmme5X3OTuejnnTx88A6p6vkkJosR3KBz+HpE3kqNm98VE6cfLFcISx7zW7MsJkH6KwbTw==} @@ -9715,18 +9707,11 @@ packages: /@types/node@20.4.9: resolution: {integrity: sha512-8e2HYcg7ohnTUbHk8focoklEQYvemQmu9M/f43DZVx43kHn0tE3BY/6gSDxS7k0SprtS0NHvj+L80cGLnoOUcQ==} - dev: true /@types/nodemailer@6.4.14: resolution: {integrity: sha512-fUWthHO9k9DSdPCSPRqcu6TWhYyxTBg382vlNIttSe9M7XfsT06y0f24KHXtbnijPGGRIcVvdKHTNikOI6qiHA==} dependencies: - '@types/node': 20.12.4 - dev: true - - /@types/nodemailer@6.4.8: - resolution: {integrity: sha512-oVsJSCkqViCn8/pEu2hfjwVO+Gb3e+eTWjg3PcjeFKRItfKpKwHphQqbYmPQrlMk+op7pNNWPbsJIEthpFN/OQ==} - dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: true /@types/normalize-package-data@2.4.4: @@ -9757,7 +9742,7 @@ packages: /@types/prompts@2.4.4: resolution: {integrity: sha512-p5N9uoTH76lLvSAaYSZtBCdEXzpOOufsRjnhjVSrZGXikVGHX9+cc9ERtHRV4hvBKHyZb1bg4K+56Bd2TqUn4A==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 kleur: 3.0.3 dev: true @@ -9767,7 +9752,7 @@ packages: /@types/qrcode@1.5.5: resolution: {integrity: sha512-CdfBi/e3Qk+3Z/fXYShipBT13OJ2fDO2Q2w5CIP5anLTLIndQG9z6P1cnm+8zCWSpm5dnxMFd/uREtb0EXuQzg==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: true /@types/qs@6.9.7: @@ -9823,7 +9808,7 @@ packages: resolution: {integrity: sha512-x2EM6TJOybec7c52BX0ZspPodMsQUd5L6PRwOunVyVUhXiBSKf3AezDL8Dgvgt5o0UfKNfuA0eMLr2wLT4AiBA==} dependencies: '@types/mime': 1.3.5 - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: false /@types/serve-static@1.15.5: @@ -9831,7 +9816,7 @@ packages: dependencies: '@types/http-errors': 2.0.4 '@types/mime': 3.0.4 - '@types/node': 20.12.4 + '@types/node': 20.4.9 dev: false /@types/stack-utils@2.0.3: @@ -9863,7 +9848,7 @@ packages: /@types/webpack@5.28.5(@swc/core@1.3.101)(esbuild@0.19.11): resolution: {integrity: sha512-wR87cgvxj3p6D0Crt1r5avwqffqPXUkNlnQ1mjU93G7gCuFjufZR4I6j8cz5g1F1tTYpfOOFvly+cmIQwL9wvw==} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 tapable: 2.2.1 webpack: 5.90.3(@swc/core@1.3.101)(esbuild@0.19.11) transitivePeerDependencies: @@ -11000,16 +10985,19 @@ packages: indent-string: 5.0.0 dev: true - /ai@3.0.31(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4): - resolution: {integrity: sha512-SmwVgBcTLchKTcQjFYRskCkw9H9p/PivUxAQzqIT+aX97kfBr3uBw3nFOH+RKseCsVEMt3w27K2h9n2u0bskZA==} + /ai@3.1.12(openai@4.47.1)(react@18.2.0)(solid-js@1.7.8)(svelte@4.2.12)(vue@3.4.21)(zod@3.22.4): + resolution: {integrity: sha512-XlurBw1sdgQCFmCTPYjKjpm+fPS6iY+tLb/PYNUEjZn3bhqosAkcqUkGJTsFP49OMAWO1Lm2oPthCakKcn6Lzw==} engines: {node: '>=18'} peerDependencies: + openai: ^4.42.0 react: ^18.2.0 solid-js: ^1.7.7 svelte: ^3.0.0 || ^4.0.0 vue: ^3.3.4 zod: ^3.0.0 peerDependenciesMeta: + openai: + optional: true react: optional: true solid-js: @@ -11021,12 +11009,13 @@ packages: zod: optional: true dependencies: - '@ai-sdk/provider': 0.0.2 - '@ai-sdk/provider-utils': 0.0.3(zod@3.22.4) + '@ai-sdk/provider': 0.0.5 + '@ai-sdk/provider-utils': 0.0.8(zod@3.22.4) eventsource-parser: 1.1.2 json-schema: 0.4.0 jsondiffpatch: 0.6.0 nanoid: 3.3.6 + openai: 4.47.1 react: 18.2.0 secure-json-parse: 2.7.0 solid-js: 1.7.8 @@ -11591,10 +11580,6 @@ packages: /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} - /base-64@0.1.0: - resolution: {integrity: sha512-Y5gU45svrR5tI2Vt/X9GPd3L0HNIKzGu202EjxrXMpuc2V2CiKgemAbUUsqYmZJvPtCXoUKjNZwBJzsNScUbXA==} - dev: false - /base32-decode@1.0.0: resolution: {integrity: sha512-KNWUX/R7wKenwE/G/qFMzGScOgVntOmbE27vvc6GrniDGYb6a5+qWcuoXl8WIOQL7q0TpK7nZDm1Y04Yi3Yn5g==} dev: true @@ -11958,10 +11943,6 @@ packages: resolution: {integrity: sha512-j/Toj7f1z98Hh2cYo2BVr85EpIRWqUi7rtRSGxh/cqUjqrnJe9l9UE7IUGd2vQ2p+kSHLkSzObQPZPLUC6TQwg==} dev: true - /charenc@0.0.2: - resolution: {integrity: sha512-yrLQ/yVUFXkzg7EDQsPieE/53+0RlaWTs+wBrvW36cyilJ2SaDWfl4Yj7MtLTXleV9uEKefbAGUPv2/iWSooRA==} - dev: false - /cheerio-select@2.1.0: resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} dependencies: @@ -12468,7 +12449,7 @@ packages: chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.4.9) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -12515,10 +12496,6 @@ packages: optional: true dev: false - /crypt@0.0.2: - resolution: {integrity: sha512-mCxBlsHFYh9C+HVpiEacem8FEBnMXgU9gy4zmNC+SXAZNB/1idgp/aulFJ4FgCi7GPEVbfyng092GqL2k2rmow==} - dev: false - /css-box-model@1.2.1: resolution: {integrity: sha512-a7Vr4Q/kd/aw96bnJG332W9V9LkJO69JRcaCYDUqjp6/z0w6VcZjgAcTbgFxEPfBgdnAwlh3iwu+hLopa+flJw==} dependencies: @@ -12953,13 +12930,6 @@ packages: resolution: {integrity: sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==} engines: {node: '>=0.3.1'} - /digest-fetch@1.3.0: - resolution: {integrity: sha512-CGJuv6iKNM7QyZlM2T3sPAdZWd/p9zQiRNS9G+9COUCwzWFTs0Xp8NF5iePx7wtvhDykReiRRrSeNb4oMmB8lA==} - dependencies: - base-64: 0.1.0 - md5: 2.3.0 - dev: false - /dijkstrajs@1.0.3: resolution: {integrity: sha512-qiSlmBq9+BCdCA/L46dw8Uy93mloxsPSbwnm5yrKn2vMPiy8KyAskTF6zuV/j5BMsmOGZDPs7KjU+mjb670kfA==} dev: false @@ -13076,16 +13046,6 @@ packages: domelementtype: 2.3.0 domhandler: 5.0.3 - /dotenv-cli@7.2.1: - resolution: {integrity: sha512-ODHbGTskqRtXAzZapDPvgNuDVQApu4oKX8lZW7Y0+9hKA6le1ZJlyRS687oU9FXjOVEDU/VFV6zI125HzhM1UQ==} - hasBin: true - dependencies: - cross-spawn: 7.0.3 - dotenv: 16.4.5 - dotenv-expand: 10.0.0 - minimist: 1.2.8 - dev: true - /dotenv-cli@7.4.1: resolution: {integrity: sha512-fE1aywjRrWGxV3miaiUr3d2zC/VAiuzEGghi+QzgIA9fEf/M5hLMaRSXb4IxbUAwGmaLi0IozdZddnVU96acag==} hasBin: true @@ -13189,7 +13149,7 @@ packages: dependencies: '@types/cookie': 0.4.1 '@types/cors': 2.8.13 - '@types/node': 20.12.4 + '@types/node': 20.4.9 accepts: 1.3.8 base64id: 2.0.0 cookie: 0.4.2 @@ -14031,73 +13991,10 @@ packages: esrecurse: 4.3.0 estraverse: 5.3.0 - /eslint-utils@3.0.0(eslint@8.32.0): - resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} - engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} - peerDependencies: - eslint: '>=5' - dependencies: - eslint: 8.32.0 - eslint-visitor-keys: 2.1.0 - dev: true - - /eslint-visitor-keys@2.1.0: - resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} - engines: {node: '>=10'} - dev: true - /eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - /eslint@8.32.0: - resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - hasBin: true - dependencies: - '@eslint/eslintrc': 1.4.1 - '@humanwhocodes/config-array': 0.11.14 - '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - ajv: 6.12.6 - chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 - escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-utils: 3.0.0(eslint@8.32.0) - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 - esutils: 2.0.3 - fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 - find-up: 5.0.0 - glob-parent: 6.0.2 - globals: 13.24.0 - grapheme-splitter: 1.0.4 - ignore: 5.3.1 - import-fresh: 3.3.0 - imurmurhash: 0.1.4 - is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-sdsl: 4.4.2 - js-yaml: 4.1.0 - json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 - lodash.merge: 4.6.2 - minimatch: 3.1.2 - natural-compare: 1.4.0 - optionator: 0.9.3 - regexpp: 3.2.0 - strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 - text-table: 0.2.0 - transitivePeerDependencies: - - supports-color - dev: true - /eslint@8.44.0: resolution: {integrity: sha512-0wpHoUbDUHgNCyvFB5aXLiQVfK9B0at6gUvzy83k4kAsQ/u769TQDX6iKC+aO4upIHO9WSaA3QoXYQDHbNwf1A==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} @@ -15619,10 +15516,6 @@ packages: call-bind: 1.0.7 has-tostringtag: 1.0.2 - /is-buffer@1.1.6: - resolution: {integrity: sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w==} - dev: false - /is-buffer@2.0.5: resolution: {integrity: sha512-i2R6zNFDwgEHJyQUtJEk0XFi1i0dPFn/oqjK3/vPCcDeJvW5NQ83V8QbicfF1SupOaB0h8ntgBC2YiE7dfyctQ==} engines: {node: '>=4'} @@ -15983,7 +15876,7 @@ packages: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.1 @@ -16021,7 +15914,7 @@ packages: create-jest: 29.7.0 exit: 0.1.2 import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.12.4) + jest-config: 29.7.0(@types/node@20.4.9) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -16032,7 +15925,7 @@ packages: - ts-node dev: true - /jest-config@29.7.0(@types/node@20.12.4): + /jest-config@29.7.0(@types/node@20.4.9): resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} peerDependencies: @@ -16047,7 +15940,7 @@ packages: '@babel/core': 7.22.9 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 babel-jest: 29.7.0(@babel/core@7.22.9) chalk: 4.1.2 ci-info: 3.9.0 @@ -16113,7 +16006,7 @@ packages: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -16130,7 +16023,7 @@ packages: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-mock: 29.7.0 jest-util: 29.7.0 dev: true @@ -16146,7 +16039,7 @@ packages: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.12.4 + '@types/node': 20.4.9 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -16197,7 +16090,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-util: 29.7.0 dev: true @@ -16252,7 +16145,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -16283,7 +16176,7 @@ packages: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 cjs-module-lexer: 1.2.3 collect-v8-coverage: 1.0.2 @@ -16335,7 +16228,7 @@ packages: engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -16360,7 +16253,7 @@ packages: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.12.4 + '@types/node': 20.4.9 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -16372,7 +16265,7 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 merge-stream: 2.0.0 supports-color: 8.1.1 dev: false @@ -16381,7 +16274,7 @@ packages: resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - '@types/node': 20.12.4 + '@types/node': 20.4.9 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 @@ -16480,10 +16373,6 @@ packages: resolution: {integrity: sha512-cEiJEAEoIbWfCZYKWhVwFuvPX1gETRYPw6LlaTKoxD3s2AkXzkCjnp6h0V77ozyqj0jakteJ4YqDJT830+lVGw==} engines: {node: '>=14'} - /js-sdsl@4.4.2: - resolution: {integrity: sha512-dwXFwByc/ajSV6m5bcKAPwe4yDDF6D614pxmIi5odytzxRlwqF6nwoiCek80Ixc7Cvma5awClxrzFtxCQvcM8w==} - dev: true - /js-tokens@4.0.0: resolution: {integrity: sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ==} @@ -16717,6 +16606,11 @@ packages: resolution: {integrity: sha512-2IM3VssHfG2zYz2FsHRUqIp8chhLc9uxDMcK2THxgFfv8pQhnMfN8L0ul+iW4RdBl5AglF8ooPIflRm3yNH0IA==} engines: {node: '>=18'} + /ky@1.2.4: + resolution: {integrity: sha512-CfSrf4a0yj1n6WgPT6kQNQOopIGLkQzqSAXo05oKByaH7G3SiqW4a8jGox0p9whMXqO49H7ljgigivrMyycAVA==} + engines: {node: '>=18'} + dev: false + /language-subtag-registry@0.3.22: resolution: {integrity: sha512-tN0MCzyWnoz/4nHS6uxdlFWoUZT7ABptwKPQ52Ea7URk6vll88bWBVhodtnlfEuCcKWNGoc+uGbw1cwa9IKh/w==} dev: false @@ -16985,14 +16879,6 @@ packages: hasBin: true dev: false - /md5@2.3.0: - resolution: {integrity: sha512-T1GITYmFaKuO91vxyoQMFETst+O71VUPEU3ze5GNzDm0OWdP8v1ziTaAEPUr/3kLsY3Sftgz242A1SetQiDL7g==} - dependencies: - charenc: 0.0.2 - crypt: 0.0.2 - is-buffer: 1.1.6 - dev: false - /mdast-util-definitions@5.1.2: resolution: {integrity: sha512-8SVPMuHqlPME/z3gqVwWY4zVXn8lqKv/pAhC57FuJ40ImXyBpmO5ukh98zB2v7Blql2FiHjHv9LVztSIqjY+MA==} dependencies: @@ -18802,25 +18688,8 @@ packages: is-docker: 2.2.1 is-wsl: 2.2.0 - /openai@4.28.4: - resolution: {integrity: sha512-RNIwx4MT/F0zyizGcwS+bXKLzJ8QE9IOyigDG/ttnwB220d58bYjYFp0qjvGwEFBO6+pvFVIDABZPGDl46RFsg==} - hasBin: true - dependencies: - '@types/node': 18.11.18 - '@types/node-fetch': 2.6.11 - abort-controller: 3.0.0 - agentkeepalive: 4.5.0 - digest-fetch: 1.3.0 - form-data-encoder: 1.7.2 - formdata-node: 4.4.1 - node-fetch: 2.7.0 - web-streams-polyfill: 3.3.3 - transitivePeerDependencies: - - encoding - dev: false - - /openai@4.38.3: - resolution: {integrity: sha512-mIL9WtrFNOanpx98mJ+X/wkoepcxdqqu0noWFoNQHl/yODQ47YM7NEYda7qp8JfjqpLFVxY9mQhshoS/Fqac0A==} + /openai@4.47.1: + resolution: {integrity: sha512-WWSxhC/69ZhYWxH/OBsLEirIjUcfpQ5+ihkXKp06hmeYXgBBIUCa9IptMzYx6NdkiOCsSGYCnTIsxaic3AjRCQ==} hasBin: true dependencies: '@types/node': 18.11.18 @@ -20407,11 +20276,6 @@ packages: es-errors: 1.3.0 set-function-name: 2.0.2 - /regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} - dev: true - /regexpu-core@5.3.2: resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} engines: {node: '>=4'}