diff --git a/app/api/langchain-tools/arxiv.ts b/app/api/langchain-tools/arxiv.ts index e7dd36ebc..7cca00eee 100644 --- a/app/api/langchain-tools/arxiv.ts +++ b/app/api/langchain-tools/arxiv.ts @@ -1,4 +1,4 @@ -import { StructuredTool } from "langchain/tools"; +import { StructuredTool } from "@langchain/core/tools"; import { z } from "zod"; export class ArxivAPIWrapper extends StructuredTool { diff --git a/app/api/langchain-tools/baidu_search.ts b/app/api/langchain-tools/baidu_search.ts index 0d99ef4f4..c6b82ffd1 100644 --- a/app/api/langchain-tools/baidu_search.ts +++ b/app/api/langchain-tools/baidu_search.ts @@ -1,6 +1,6 @@ import { decode } from "html-entities"; import { convert as htmlToText } from "html-to-text"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; import * as cheerio from "cheerio"; import { getRandomUserAgent } from "./ua_tools"; diff --git a/app/api/langchain-tools/dalle_image_generator.ts b/app/api/langchain-tools/dalle_image_generator.ts index 0c4d14efa..fe88c0010 100644 --- a/app/api/langchain-tools/dalle_image_generator.ts +++ b/app/api/langchain-tools/dalle_image_generator.ts @@ -1,4 +1,4 @@ -import { StructuredTool } from "langchain/tools"; +import { StructuredTool } from "@langchain/core/tools"; import { z } from "zod"; import S3FileStorage from "../../utils/s3_file_storage"; diff --git a/app/api/langchain-tools/duckduckgo.ts b/app/api/langchain-tools/duckduckgo.ts index 518f2ea89..ecb580127 100644 --- a/app/api/langchain-tools/duckduckgo.ts +++ b/app/api/langchain-tools/duckduckgo.ts @@ -1,6 +1,6 @@ import { SafeSearchType, search } from "duck-duck-scrape"; import { convert as htmlToText } from "html-to-text"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; export class DuckDuckGo extends Tool { name = "duckduckgo_search"; diff --git a/app/api/langchain-tools/duckduckgo_search.ts b/app/api/langchain-tools/duckduckgo_search.ts index 58437d97e..01b1fe793 100644 --- a/app/api/langchain-tools/duckduckgo_search.ts +++ b/app/api/langchain-tools/duckduckgo_search.ts @@ -1,6 +1,6 @@ import { decode } from "html-entities"; import { convert as htmlToText } from "html-to-text"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; const SEARCH_REGEX = /DDG\.pageLayout\.load\('d',(\[.+\])\);DDG\.duckbar\.load\('images'/; diff --git a/app/api/langchain-tools/google_search.ts b/app/api/langchain-tools/google_search.ts index 017e7c8d0..8eed5131e 100644 --- a/app/api/langchain-tools/google_search.ts +++ b/app/api/langchain-tools/google_search.ts @@ -1,6 +1,6 @@ import { decode } from "html-entities"; import { convert as htmlToText } from "html-to-text"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; import * as cheerio from "cheerio"; import { getRandomUserAgent } from "./ua_tools"; diff --git a/app/api/langchain-tools/http_get.ts b/app/api/langchain-tools/http_get.ts index b4b5a9383..2848162ab 100644 --- a/app/api/langchain-tools/http_get.ts +++ b/app/api/langchain-tools/http_get.ts @@ -1,5 +1,5 @@ import { htmlToText } from "html-to-text"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; export interface Headers { [key: string]: string; diff --git a/app/api/langchain-tools/langchian-tool-index.ts b/app/api/langchain-tools/langchian-tool-index.ts new file mode 100644 index 000000000..5f19f703b --- /dev/null +++ b/app/api/langchain-tools/langchian-tool-index.ts @@ -0,0 +1,25 @@ +export { + SerpAPI, + type SerpAPIParameters, +} from "@langchain/community/tools/serpapi"; +export { DadJokeAPI } from "@langchain/community/tools/dadjokeapi"; +export { BingSerpAPI } from "@langchain/community/tools/bingserpapi"; +export { + Serper, + type SerperParameters, +} from "@langchain/community/tools/serper"; +export { + GoogleCustomSearch, + type GoogleCustomSearchParams, +} from "@langchain/community/tools/google_custom_search"; +export { AIPluginTool } from "@langchain/community/tools/aiplugin"; +export { + WikipediaQueryRun, + type WikipediaQueryRunParams, +} from "@langchain/community/tools/wikipedia_query_run"; +export { WolframAlphaTool } from "@langchain/community/tools/wolframalpha"; +export { SearxngSearch } from "@langchain/community/tools/searxng_search"; +export { + SearchApi, + type SearchApiParameters, +} from "@langchain/community/tools/searchapi"; diff --git a/app/api/langchain-tools/pdf_browser.ts b/app/api/langchain-tools/pdf_browser.ts index 8c9e429dc..2a607f5ed 100644 --- a/app/api/langchain-tools/pdf_browser.ts +++ b/app/api/langchain-tools/pdf_browser.ts @@ -1,12 +1,13 @@ import axiosMod, { AxiosStatic } from "axios"; import { WebPDFLoader } from "langchain/document_loaders/web/pdf"; import { MemoryVectorStore } from "langchain/vectorstores/memory"; -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; import { RecursiveCharacterTextSplitter, TextSplitter, } from "langchain/text_splitter"; -import { CallbackManagerForToolRun } from "langchain/callbacks"; + +import { CallbackManagerForToolRun } from "@langchain/core/callbacks/manager"; import { BaseLanguageModel } from "langchain/dist/base_language"; import { formatDocumentsAsString } from "langchain/util/document"; import { Embeddings } from "langchain/dist/embeddings/base.js"; diff --git a/app/api/langchain-tools/stable_diffusion_image_generator.ts b/app/api/langchain-tools/stable_diffusion_image_generator.ts index cf551fba8..20049497e 100644 --- a/app/api/langchain-tools/stable_diffusion_image_generator.ts +++ b/app/api/langchain-tools/stable_diffusion_image_generator.ts @@ -1,4 +1,4 @@ -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; import S3FileStorage from "../../utils/s3_file_storage"; export class StableDiffusionWrapper extends Tool { diff --git a/app/api/langchain-tools/wolframalpha.ts b/app/api/langchain-tools/wolframalpha.ts index 15813d93e..4f7526354 100644 --- a/app/api/langchain-tools/wolframalpha.ts +++ b/app/api/langchain-tools/wolframalpha.ts @@ -1,4 +1,4 @@ -import { Tool } from "langchain/tools"; +import { Tool } from "@langchain/core/tools"; export class WolframAlphaTool extends Tool { name = "wolfram_alpha_llm"; diff --git a/app/api/langchain/tool/agent/agentapi.ts b/app/api/langchain/tool/agent/agentapi.ts index 1d2b2cd7e..11713343b 100644 --- a/app/api/langchain/tool/agent/agentapi.ts +++ b/app/api/langchain/tool/agent/agentapi.ts @@ -1,33 +1,39 @@ import { NextRequest, NextResponse } from "next/server"; import { getServerSideConfig } from "@/app/config/server"; -import { auth } from "../../../auth"; -import { ChatOpenAI } from "langchain/chat_models/openai"; -import { BaseCallbackHandler } from "langchain/callbacks"; +import { BaseCallbackHandler } from "@langchain/core/callbacks/base"; -import { AIMessage, HumanMessage, SystemMessage } from "langchain/schema"; import { BufferMemory, ChatMessageHistory } from "langchain/memory"; -import { - AgentExecutor, - initializeAgentExecutorWithOptions, -} from "langchain/agents"; +import { AgentExecutor } from "langchain/agents"; import { ACCESS_CODE_PREFIX, ServiceProvider } from "@/app/constant"; -import * as langchainTools from "langchain/tools"; -import { HttpGetTool } from "@/app/api/langchain-tools/http_get"; +// import * as langchainTools from "langchain/tools"; +import * as langchainTools from "@/app/api/langchain-tools/langchian-tool-index"; import { DuckDuckGo } from "@/app/api/langchain-tools/duckduckgo_search"; -import { DynamicTool, Tool } from "langchain/tools"; +import { + DynamicTool, + Tool, + StructuredToolInterface, +} from "@langchain/core/tools"; +import { convertToOpenAITool } from "@langchain/core/utils/function_calling"; import { BaiduSearch } from "@/app/api/langchain-tools/baidu_search"; import { GoogleSearch } from "@/app/api/langchain-tools/google_search"; -import { useAccessStore } from "@/app/store"; -import { DynamicStructuredTool, formatToOpenAITool } from "langchain/tools"; import { formatToOpenAIToolMessages } from "langchain/agents/format_scratchpad/openai_tools"; import { OpenAIToolsAgentOutputParser, type ToolsAgentStep, } from "langchain/agents/openai/output_parser"; -import { RunnableSequence } from "langchain/schema/runnable"; -import { ChatPromptTemplate, MessagesPlaceholder } from "langchain/prompts"; +import { RunnableSequence } from "@langchain/core/runnables"; +import { + ChatPromptTemplate, + MessagesPlaceholder, +} from "@langchain/core/prompts"; +import { ChatOpenAI } from "@langchain/openai"; +import { + SystemMessage, + HumanMessage, + AIMessage, +} from "@langchain/core/messages"; export interface RequestMessage { role: string; @@ -66,23 +72,27 @@ export class AgentApi { private encoder: TextEncoder; private transformStream: TransformStream; private writer: WritableStreamDefaultWriter; + private controller: AbortController; constructor( encoder: TextEncoder, transformStream: TransformStream, writer: WritableStreamDefaultWriter, + controller: AbortController, ) { this.encoder = encoder; this.transformStream = transformStream; this.writer = writer; + this.controller = controller; } async getHandler(reqBody: any) { var writer = this.writer; var encoder = this.encoder; + var controller = this.controller; return BaseCallbackHandler.fromMethods({ async handleLLMNewToken(token: string) { - if (token) { + if (token && !controller.signal.aborted) { var response = new ResponseBody(); response.message = token; await writer.ready; @@ -92,6 +102,11 @@ export class AgentApi { } }, async handleChainError(err, runId, parentRunId, tags) { + if (controller.signal.aborted) { + console.warn("[handleChainError]", "abort"); + await writer.close(); + return; + } console.log("[handleChainError]", err, "writer error"); var response = new ResponseBody(); response.isSuccess = false; @@ -112,6 +127,11 @@ export class AgentApi { // await writer.close(); }, async handleLLMError(e: Error) { + if (controller.signal.aborted) { + console.warn("[handleLLMError]", "abort"); + await writer.close(); + return; + } console.log("[handleLLMError]", e, "writer error"); var response = new ResponseBody(); response.isSuccess = false; @@ -159,6 +179,9 @@ export class AgentApi { // console.log("[handleToolEnd]", { output, runId, parentRunId, tags }); }, async handleAgentEnd(action, runId, parentRunId, tags) { + if (controller.signal.aborted) { + return; + } console.log("[handleAgentEnd]"); await writer.ready; await writer.close(); @@ -301,14 +324,6 @@ export class AgentApi { pastMessages.push(new AIMessage(message.content)); }); - // const memory = new BufferMemory({ - // memoryKey: "chat_history", - // returnMessages: true, - // inputKey: "input", - // outputKey: "output", - // chatHistory: new ChatMessageHistory(pastMessages), - // }); - let llm = new ChatOpenAI( { modelName: reqBody.model, @@ -349,7 +364,9 @@ export class AgentApi { ["human", "{input}"], new MessagesPlaceholder("agent_scratchpad"), ]); - const modelWithTools = llm.bind({ tools: tools.map(formatToOpenAITool) }); + const modelWithTools = llm.bind({ + tools: tools.map(convertToOpenAITool), + }); const runnableAgent = RunnableSequence.from([ { input: (i: { input: string; steps: ToolsAgentStep[] }) => i.input, @@ -373,19 +390,21 @@ export class AgentApi { tools, }); - // const executor = await initializeAgentExecutorWithOptions(tools, llm, { - // agentType: "openai-functions", - // returnIntermediateSteps: reqBody.returnIntermediateSteps, - // maxIterations: reqBody.maxIterations, - // memory: memory, - // }); - - executor.call( - { - input: reqBody.messages.slice(-1)[0].content, - }, - [handler], - ); + executor + .call( + { + input: reqBody.messages.slice(-1)[0].content, + signal: this.controller.signal, + }, + [handler], + ) + .catch((error) => { + if (this.controller.signal.aborted) { + console.warn("[AgentCall]", "abort"); + } else { + console.error("[AgentCall]", error); + } + }); return new Response(this.transformStream.readable, { headers: { "Content-Type": "text/event-stream" }, diff --git a/app/api/langchain/tool/agent/edge/route.ts b/app/api/langchain/tool/agent/edge/route.ts index 4de6a73a8..421ed7bc9 100644 --- a/app/api/langchain/tool/agent/edge/route.ts +++ b/app/api/langchain/tool/agent/edge/route.ts @@ -2,9 +2,8 @@ import { NextRequest, NextResponse } from "next/server"; import { AgentApi, RequestBody, ResponseBody } from "../agentapi"; import { auth } from "@/app/api/auth"; import { EdgeTool } from "../../../../langchain-tools/edge_tools"; -import { OpenAI } from "langchain/llms/openai"; -import { OpenAIEmbeddings } from "langchain/embeddings/openai"; import { ModelProvider } from "@/app/constant"; +import { OpenAI, OpenAIEmbeddings } from "@langchain/openai"; async function handle(req: NextRequest) { if (req.method === "OPTIONS") { @@ -21,7 +20,8 @@ async function handle(req: NextRequest) { const encoder = new TextEncoder(); const transformStream = new TransformStream(); const writer = transformStream.writable.getWriter(); - const agentApi = new AgentApi(encoder, transformStream, writer); + const controller = new AbortController(); + const agentApi = new AgentApi(encoder, transformStream, writer, controller); const reqBody: RequestBody = await req.json(); const authToken = req.headers.get("Authorization") ?? ""; @@ -52,6 +52,9 @@ async function handle(req: NextRequest) { await writer.write( encoder.encode(`data: ${JSON.stringify(response)}\n\n`), ); + controller.abort({ + reason: "dall-e tool abort", + }); }; var edgeTool = new EdgeTool( diff --git a/app/api/langchain/tool/agent/nodejs/route.ts b/app/api/langchain/tool/agent/nodejs/route.ts index 33af30c90..e8f6c80b8 100644 --- a/app/api/langchain/tool/agent/nodejs/route.ts +++ b/app/api/langchain/tool/agent/nodejs/route.ts @@ -1,11 +1,9 @@ import { NextRequest, NextResponse } from "next/server"; import { AgentApi, RequestBody, ResponseBody } from "../agentapi"; import { auth } from "@/app/api/auth"; -import { EdgeTool } from "../../../../langchain-tools/edge_tools"; -import { OpenAI } from "langchain/llms/openai"; -import { OpenAIEmbeddings } from "langchain/embeddings/openai"; import { NodeJSTool } from "@/app/api/langchain-tools/nodejs_tools"; import { ModelProvider } from "@/app/constant"; +import { OpenAI, OpenAIEmbeddings } from "@langchain/openai"; async function handle(req: NextRequest) { if (req.method === "OPTIONS") { @@ -22,7 +20,8 @@ async function handle(req: NextRequest) { const encoder = new TextEncoder(); const transformStream = new TransformStream(); const writer = transformStream.writable.getWriter(); - const agentApi = new AgentApi(encoder, transformStream, writer); + const controller = new AbortController(); + const agentApi = new AgentApi(encoder, transformStream, writer, controller); const reqBody: RequestBody = await req.json(); const authToken = req.headers.get("Authorization") ?? ""; @@ -53,6 +52,9 @@ async function handle(req: NextRequest) { await writer.write( encoder.encode(`data: ${JSON.stringify(response)}\n\n`), ); + controller.abort({ + reason: "dall-e tool abort", + }); }; var nodejsTool = new NodeJSTool( diff --git a/package.json b/package.json index efe96e4ff..3718b0706 100644 --- a/package.json +++ b/package.json @@ -20,12 +20,15 @@ "@aws-sdk/s3-request-presigner": "^3.414.0", "@fortaine/fetch-event-source": "^3.0.6", "@hello-pangea/dnd": "^16.5.0", + "@langchain/community": "^0.0.20", + "@langchain/core": "^0.1.17", + "@langchain/openai": "^0.0.12", "@svgr/webpack": "^6.5.1", "@vercel/analytics": "^0.1.11", + "@vercel/speed-insights": "^1.0.2", "axios": "^1.4.0", "cheerio": "^1.0.0-rc.12", "duck-duck-scrape": "^2.2.4", - "@vercel/speed-insights": "^1.0.2", "emoji-picker-react": "^4.5.15", "encoding": "^0.1.13", "fuse.js": "^7.0.0", @@ -33,7 +36,7 @@ "html-to-image": "^1.11.11", "html-to-text": "^9.0.5", "https-proxy-agent": "^7.0.2", - "langchain": "^0.0.213", + "langchain": "^0.1.6", "mermaid": "^10.6.1", "nanoid": "^5.0.3", "next": "^13.4.9", @@ -55,8 +58,8 @@ "zustand": "^4.3.8" }, "devDependencies": { - "@types/html-to-text": "^9.0.1", "@tauri-apps/cli": "1.5.7", + "@types/html-to-text": "^9.0.1", "@types/node": "^20.9.0", "@types/react": "^18.2.14", "@types/react-dom": "^18.2.7", diff --git a/yarn.lock b/yarn.lock index 4cbdd0c38..8d0996972 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1813,22 +1813,22 @@ "@jridgewell/resolve-uri" "3.1.0" "@jridgewell/sourcemap-codec" "1.4.14" -"@langchain/community@~0.0.12": - version "0.0.12" - resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.12.tgz#95b5ddfaef47db6a1f665959e417a706cf56057f" - integrity sha512-mcm6FxxnLxSx9PiYvehGGwvcHjsVR5WXfYOwymojf/6d0apyewjOLzKsR3xx0HJVtCs8pff7NZSdDoE+jj8OcA== +"@langchain/community@^0.0.20", "@langchain/community@~0.0.17": + version "0.0.20" + resolved "https://registry.yarnpkg.com/@langchain/community/-/community-0.0.20.tgz#a64307e959545fa0b4ed6b67d5aba3437cd76879" + integrity sha512-maPMjvF50Z+4eMs7HKmY3wfT+k6IjULqLUVPtVdN1zSGobRvnUIbQMKUY2IXVTZmaMXKBAIob+49X8vjO2snDQ== dependencies: - "@langchain/core" "~0.1.5" - "@langchain/openai" "~0.0.9" + "@langchain/core" "~0.1.16" + "@langchain/openai" "~0.0.10" flat "^5.0.2" langsmith "~0.0.48" uuid "^9.0.0" zod "^3.22.3" -"@langchain/core@~0.1.5": - version "0.1.6" - resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.6.tgz#4b1dfc361379d6bd45c6652418a05f051488e6d9" - integrity sha512-mBXsHHAWgDYJPzPNwOLWXJob3DAlO1tXBybu9cJ+zcVzixiSh/oxQ5eonTK6nlFwO6kGpaIcCD9l9+yq/WCMBg== +"@langchain/core@^0.1.17", "@langchain/core@~0.1.13", "@langchain/core@~0.1.16": + version "0.1.17" + resolved "https://registry.yarnpkg.com/@langchain/core/-/core-0.1.17.tgz#2718cefe4db67e97fda676a7f654ab79ece60e8b" + integrity sha512-PNmQgyAsDFm3DsZD+Djmm+sxH8xTGMlAryhYNgTg1Wkvhh+ztCqcVVYAv+aWch8CM56FBYMD8Guq0TJuRJJxEA== dependencies: ansi-styles "^5.0.0" camelcase "6" @@ -1839,16 +1839,17 @@ p-queue "^6.6.2" p-retry "4" uuid "^9.0.0" - zod "^3.22.3" + zod "^3.22.4" + zod-to-json-schema "^3.22.3" -"@langchain/openai@~0.0.9": - version "0.0.9" - resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.9.tgz#e84b7db0554de75fdd4a8fe12914fdc2b2d2d1f6" - integrity sha512-Py7rJijOjNtb9pj5He+E9uAj9d8PCX+8Ix4LvY7cUTMCDlfkhngw2DhJ8wlk23u1IvunakdnnN74pfbO2JJBrw== +"@langchain/openai@^0.0.12", "@langchain/openai@~0.0.10", "@langchain/openai@~0.0.12": + version "0.0.12" + resolved "https://registry.yarnpkg.com/@langchain/openai/-/openai-0.0.12.tgz#4c6a4dda3ca96f103482f389299e018340aa2b75" + integrity sha512-MR9x1xRXwJpdYlVx9Tga89q/MvxPrSTYyA5vy9tQ8dfQHNWnlgmI4gB/hDIsWUu1ooScagD4wW+aTnohTX+g+g== dependencies: - "@langchain/core" "~0.1.5" + "@langchain/core" "~0.1.13" js-tiktoken "^1.0.7" - openai "^4.19.0" + openai "^4.24.2" zod "^3.22.3" zod-to-json-schema "3.20.3" @@ -5492,29 +5493,29 @@ kleur@^4.0.3: resolved "https://registry.yarnpkg.com/kleur/-/kleur-4.1.5.tgz#95106101795f7050c6c650f350c683febddb1780" integrity sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ== -langchain@^0.0.213: - version "0.0.213" - resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.0.213.tgz#52fd367d5f1a100a1cdb775ffbb98eaa5793307b" - integrity sha512-nQDOJXvtIAIuUzamCiF1AWyi2GH9FSDPR+3XulJUEpdU60aSFPZ9GBiWdu+dVHXeAmm8C0iCVi0+3GWLJrUoXA== +langchain@^0.1.6: + version "0.1.6" + resolved "https://registry.yarnpkg.com/langchain/-/langchain-0.1.6.tgz#7bd5586aa8c3db31d766ea815f2bd8f82544fcac" + integrity sha512-ju4LLw6vTax3bfSkphcK8CE6yIKe1NXLT95Ys/gvoONRfZkV4FpNMjDc9Y+keUvzmTv2buhiFU/gslbA4eJtrw== dependencies: "@anthropic-ai/sdk" "^0.9.1" - "@langchain/community" "~0.0.12" - "@langchain/core" "~0.1.5" - "@langchain/openai" "~0.0.9" + "@langchain/community" "~0.0.17" + "@langchain/core" "~0.1.16" + "@langchain/openai" "~0.0.12" binary-extensions "^2.2.0" expr-eval "^2.0.2" js-tiktoken "^1.0.7" js-yaml "^4.1.0" jsonpointer "^5.0.1" langchainhub "~0.0.6" - langsmith "~0.0.48" + langsmith "~0.0.59" ml-distance "^4.0.0" openapi-types "^12.1.3" p-retry "4" uuid "^9.0.0" yaml "^2.2.1" - zod "^3.22.3" - zod-to-json-schema "3.20.3" + zod "^3.22.4" + zod-to-json-schema "^3.22.3" langchainhub@~0.0.6: version "0.0.6" @@ -5532,6 +5533,17 @@ langsmith@~0.0.48: p-retry "4" uuid "^9.0.0" +langsmith@~0.0.59: + version "0.0.62" + resolved "https://registry.yarnpkg.com/langsmith/-/langsmith-0.0.62.tgz#79e306b82436d8f165b976b05842ebd0f7058a1d" + integrity sha512-OjjlNbxbfEUSgbBLA7JS7Lwg0M+oMZp4ZSwujR9TZBcSKvpv1f3lE2X9e9vTWe9huoUMlUAvwoaSWdDG6w6QLQ== + dependencies: + "@types/uuid" "^9.0.1" + commander "^10.0.1" + p-queue "^6.6.2" + p-retry "4" + uuid "^9.0.0" + language-subtag-registry@~0.3.2: version "0.3.22" resolved "https://registry.yarnpkg.com/language-subtag-registry/-/language-subtag-registry-0.3.22.tgz#2e1500861b2e457eba7e7ae86877cbd08fa1fd1d" @@ -6491,10 +6503,10 @@ open@^8.4.0: is-docker "^2.1.1" is-wsl "^2.2.0" -openai@^4.19.0: - version "4.24.1" - resolved "https://registry.yarnpkg.com/openai/-/openai-4.24.1.tgz#3759001eca835228289fcf18c1bd8d35dae538ba" - integrity sha512-ezm/O3eiZMnyBqirUnWm9N6INJU1WhNtz+nK/Zj/2oyKvRz9pgpViDxa5wYOtyGYXPn1sIKBV0I/S4BDhtydqw== +openai@^4.24.2: + version "4.25.0" + resolved "https://registry.yarnpkg.com/openai/-/openai-4.25.0.tgz#b40099d625cccb19cbf1cab88915ac1699ece0ed" + integrity sha512-qLMFOizjxKuDfQkBrczZPYo6XVL4bdcuz9MR11Q+M91kGcs8dQw+O90nRcC+qWuhaGphQkfXQJMn4cd7Yew3Kg== dependencies: "@types/node" "^18.11.18" "@types/node-fetch" "^2.6.4" @@ -7906,12 +7918,17 @@ zod-to-json-schema@3.20.3: resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.20.3.tgz#8c95d8c20f20455ffa0b4b526c29703f35f6d787" integrity sha512-/Q3wnyxAfCt94ZcrGiXXoiAfRqasxl9CX64LZ9fj+4dKH68zulUtU0uk1WMxQPfAxQ0ZI70dKzcoW7hHj+DwSQ== +zod-to-json-schema@^3.22.3: + version "3.22.3" + resolved "https://registry.yarnpkg.com/zod-to-json-schema/-/zod-to-json-schema-3.22.3.tgz#1c71f9fa23f80b2f3b5eed537afa8a13a66a5200" + integrity sha512-9isG8SqRe07p+Aio2ruBZmLm2Q6Sq4EqmXOiNpDxp+7f0LV6Q/LX65fs5Nn+FV/CzfF3NLBoksXbS2jNYIfpKw== + zod@3.21.4: version "3.21.4" resolved "https://registry.npmmirror.com/zod/-/zod-3.21.4.tgz#10882231d992519f0a10b5dd58a38c9dabbb64db" integrity sha512-m46AKbrzKVzOzs/DZgVnG5H55N1sv1M8qZU3A8RIKbs3mrACDNeIOeilDymVb2HdmP8uwshOCF4uJ8uM9rCqJw== -zod@^3.22.3: +zod@^3.22.3, zod@^3.22.4: version "3.22.4" resolved "https://registry.yarnpkg.com/zod/-/zod-3.22.4.tgz#f31c3a9386f61b1f228af56faa9255e845cf3fff" integrity sha512-iC+8Io04lddc+mVqQ9AZ7OQ2MrUKGN+oIQyq1vemgt46jwCwLfhq7/pwnBnNXXXZb8VTVLKwp9EDkx+ryxIWmg==