diff --git a/.changeset/calm-waves-press.md b/.changeset/calm-waves-press.md new file mode 100644 index 0000000000000000000000000000000000000000..23683988826f935b0cfce73e4d6a65d977faf051 --- /dev/null +++ b/.changeset/calm-waves-press.md @@ -0,0 +1,5 @@ +--- +"@llamaindex/tools": patch +--- + +fix: crypto is not defined when running on node18 diff --git a/.changeset/nervous-cars-own.md b/.changeset/nervous-cars-own.md new file mode 100644 index 0000000000000000000000000000000000000000..f4e117f48bd7b75dc6c34fd67ae8c4ee95ee2218 --- /dev/null +++ b/.changeset/nervous-cars-own.md @@ -0,0 +1,5 @@ +--- +"@llamaindex/doc": patch +--- + +Added documentation for structured output in openai and ollama diff --git a/.changeset/tidy-waves-play.md b/.changeset/tidy-waves-play.md new file mode 100644 index 0000000000000000000000000000000000000000..e68ee871e4f194c1683a31fbe4a67b609e13d710 --- /dev/null +++ b/.changeset/tidy-waves-play.md @@ -0,0 +1,6 @@ +--- +"@llamaindex/community": patch +"@llamaindex/google": patch +--- + +feat: use google's new gen ai library to support multimodal output diff --git a/apps/next/src/content/docs/llamaindex/modules/llms/ollama.mdx b/apps/next/src/content/docs/llamaindex/modules/llms/ollama.mdx index ed3161f2446ddde0f7bf5b4a15e81f5e063d143a..4767d285b52edc91e6b6dea401b2feeb2638e338 100644 --- a/apps/next/src/content/docs/llamaindex/modules/llms/ollama.mdx +++ b/apps/next/src/content/docs/llamaindex/modules/llms/ollama.mdx @@ -55,6 +55,35 @@ const results = await queryEngine.query({ }); ``` +## Using JSON Response Format + +You can configure Ollama to return responses in JSON format: + +```ts +import { Ollama } from "@llamaindex/llms/ollama"; +import { z } from "zod"; + +// Simple JSON format +const llm = new Ollama({ + model: "llama2", + temperature: 0, + responseFormat: { type: "json_object" } +}); + +// Using Zod schema for validation +const responseSchema = z.object({ + summary: z.string(), + topics: z.array(z.string()), + sentiment: z.enum(["positive", "negative", "neutral"]) +}); + +const llm = new Ollama({ + model: "llama2", + temperature: 0, + responseFormat: responseSchema +}); +``` + ## Full Example ```ts diff --git a/apps/next/src/content/docs/llamaindex/modules/llms/openai.mdx b/apps/next/src/content/docs/llamaindex/modules/llms/openai.mdx index a861a3501cbfe28cbf7ef331ca00941221853195..fb14423335dd7bd71696a56768b428925d4045ec 100644 --- a/apps/next/src/content/docs/llamaindex/modules/llms/openai.mdx +++ b/apps/next/src/content/docs/llamaindex/modules/llms/openai.mdx @@ -46,6 +46,33 @@ or Settings.llm = new OpenAI({ model: "gpt-3.5-turbo", temperature: 0, apiKey: <YOUR_API_KEY>, baseURL: "https://api.scaleway.ai/v1" }); ``` +## Using JSON Response Format + +You can configure OpenAI to return responses in JSON format: + +```ts +Settings.llm = new OpenAI({ + model: "gpt-4o", + temperature: 0, + responseFormat: { type: "json_object" } +}); + +// You can also use a Zod schema to validate the response structure +import { z } from "zod"; + +const responseSchema = z.object({ + summary: z.string(), + topics: z.array(z.string()), + sentiment: z.enum(["positive", "negative", "neutral"]) +}); + +Settings.llm = new OpenAI({ + model: "gpt-4o", + temperature: 0, + responseFormat: responseSchema +}); +``` + ## Load and index documents For this example, we will use a single document. In a real-world scenario, you would have multiple documents to index. diff --git a/packages/community/src/llm/bedrock/amazon/utils.ts b/packages/community/src/llm/bedrock/amazon/utils.ts index 51833c6ed0458c535ee3c8965df782f120e89362..6fc35813c7b1c977564b8854307c57ac599a4061 100644 --- a/packages/community/src/llm/bedrock/amazon/utils.ts +++ b/packages/community/src/llm/bedrock/amazon/utils.ts @@ -10,12 +10,10 @@ import type { MessageContentDetail, ToolCallLLMMessageOptions, } from "@llamaindex/core/llms"; -import { - extractDataUrlComponents, - mapMessageContentToMessageContentDetails, -} from "../utils"; +import { extractDataUrlComponents } from "../utils"; import type { JSONObject } from "@llamaindex/core/global"; +import { mapMessageContentToMessageContentDetails } from "../../utils"; import type { AmazonMessage, AmazonMessages } from "./types"; const ACCEPTED_IMAGE_MIME_TYPES = [ diff --git a/packages/community/src/llm/bedrock/anthropic/utils.ts b/packages/community/src/llm/bedrock/anthropic/utils.ts index ac841e543c7a805dddf5bdb5f8e6fe9d3f7a1eb7..ba53dedea2d835559e1fa105c9eba8594a10eff3 100644 --- a/packages/community/src/llm/bedrock/anthropic/utils.ts +++ b/packages/community/src/llm/bedrock/anthropic/utils.ts @@ -6,10 +6,8 @@ import type { MessageContentDetail, ToolCallLLMMessageOptions, } from "@llamaindex/core/llms"; -import { - extractDataUrlComponents, - mapMessageContentToMessageContentDetails, -} from "../utils"; +import { mapMessageContentToMessageContentDetails } from "../../utils"; +import { extractDataUrlComponents } from "../utils"; import type { AnthropicContent, AnthropicImageContent, diff --git a/packages/community/src/llm/bedrock/index.ts b/packages/community/src/llm/bedrock/index.ts index 1e491247f797093a64cba8e4670de4a949a5a068..f282b443ce04c48f0c9e13aa14db66a4d4838057 100644 --- a/packages/community/src/llm/bedrock/index.ts +++ b/packages/community/src/llm/bedrock/index.ts @@ -22,9 +22,9 @@ import { type BedrockChatStreamResponse, Provider, } from "./provider"; -import { mapMessageContentToMessageContentDetails } from "./utils"; import { wrapLLMEvent } from "@llamaindex/core/decorator"; +import { mapMessageContentToMessageContentDetails } from "../utils"; import { AmazonProvider } from "./amazon/provider"; import { AnthropicProvider } from "./anthropic/provider"; import { MetaProvider } from "./meta/provider"; diff --git a/packages/community/src/llm/bedrock/utils.ts b/packages/community/src/llm/bedrock/utils.ts index 9e90c14dd85ccd8ee4cb21b68bf5bf94e1cc8779..b60bc8257eeb4bb15dc0cea0970e74a72bf6092d 100644 --- a/packages/community/src/llm/bedrock/utils.ts +++ b/packages/community/src/llm/bedrock/utils.ts @@ -1,14 +1,3 @@ -import type { - MessageContent, - MessageContentDetail, -} from "@llamaindex/core/llms"; - -export const mapMessageContentToMessageContentDetails = ( - content: MessageContent, -): MessageContentDetail[] => { - return Array.isArray(content) ? content : [{ type: "text", text: content }]; -}; - export const toUtf8 = (input: Uint8Array): string => new TextDecoder("utf-8").decode(input); diff --git a/packages/community/src/llm/utils.ts b/packages/community/src/llm/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..b375a32b3438610bbe5d20eda4fa3d3b3db1f9cf --- /dev/null +++ b/packages/community/src/llm/utils.ts @@ -0,0 +1,10 @@ +import type { + MessageContent, + MessageContentDetail, +} from "@llamaindex/core/llms"; + +export const mapMessageContentToMessageContentDetails = ( + content: MessageContent, +): MessageContentDetail[] => { + return Array.isArray(content) ? content : [{ type: "text", text: content }]; +}; diff --git a/packages/providers/google/package.json b/packages/providers/google/package.json index 664f2dfad5ca7eea9b07bdb2407d3349960e5266..b67f7936fefcfe995cc6ead7ee2a65eb11a435d4 100644 --- a/packages/providers/google/package.json +++ b/packages/providers/google/package.json @@ -34,6 +34,7 @@ }, "dependencies": { "@google-cloud/vertexai": "1.9.0", + "@google/genai": "^0.4.0", "@google/generative-ai": "0.21.0", "@llamaindex/core": "workspace:*", "@llamaindex/env": "workspace:*" diff --git a/packages/providers/google/src/base.ts b/packages/providers/google/src/base.ts index ea5eb40599307f5ec4cf3429cefde0799d39f261..2e074a69445401c157f81d8eda27bfd06af8e68d 100644 --- a/packages/providers/google/src/base.ts +++ b/packages/providers/google/src/base.ts @@ -63,7 +63,7 @@ export const GEMINI_MODEL_INFO_MAP: Record<GEMINI_MODEL, GeminiModelInfo> = { [GEMINI_MODEL.GEMINI_2_0_PRO_EXPERIMENTAL]: { contextWindow: 2 * 10 ** 6 }, }; -const SUPPORT_TOOL_CALL_MODELS: GEMINI_MODEL[] = [ +export const SUPPORT_TOOL_CALL_MODELS: GEMINI_MODEL[] = [ GEMINI_MODEL.GEMINI_PRO, GEMINI_MODEL.GEMINI_PRO_VISION, GEMINI_MODEL.GEMINI_PRO_1_5_PRO_PREVIEW, @@ -79,7 +79,7 @@ const SUPPORT_TOOL_CALL_MODELS: GEMINI_MODEL[] = [ GEMINI_MODEL.GEMINI_2_0_PRO_EXPERIMENTAL, ]; -const DEFAULT_GEMINI_PARAMS = { +export const DEFAULT_GEMINI_PARAMS = { model: GEMINI_MODEL.GEMINI_PRO, temperature: 0.1, topP: 1, diff --git a/packages/providers/google/src/index.ts b/packages/providers/google/src/index.ts index 64e1b16e1327a34c0e156d03e1bc7c65f031124c..202d496e497785e581dc7a311b8e6d40a4cd6789 100644 --- a/packages/providers/google/src/index.ts +++ b/packages/providers/google/src/index.ts @@ -3,4 +3,10 @@ export * from "./types"; export * from "./utils"; export * from "./vertex"; +export { + GoogleStudio, + Modality, + getGoogleStudioInlineData, +} from "./studio/index.js"; + export * from "./GeminiEmbedding"; diff --git a/packages/providers/google/src/studio/index.ts b/packages/providers/google/src/studio/index.ts new file mode 100644 index 0000000000000000000000000000000000000000..b7f2301b8ca63996a9cb8452c91e2ee9b21d863c --- /dev/null +++ b/packages/providers/google/src/studio/index.ts @@ -0,0 +1,262 @@ +import { + GenerateContentResponse, + GoogleGenAI, + Modality, + type Blob, + type GenerateContentConfig, + type GoogleGenAIOptions, +} from "@google/genai"; +import { + ToolCallLLM, + type ChatResponse, + type ChatResponseChunk, + type CompletionResponse, + type LLMChatParamsNonStreaming, + type LLMChatParamsStreaming, + type LLMCompletionParamsNonStreaming, + type LLMCompletionParamsStreaming, + type LLMMetadata, + type ToolCall, + type ToolCallLLMMessageOptions, +} from "@llamaindex/core/llms"; +export { Modality }; + +import { streamConverter } from "@llamaindex/core/utils"; + +import { wrapLLMEvent } from "@llamaindex/core/decorator"; +import type { JSONObject } from "@llamaindex/core/global"; +import { DEFAULT_GEMINI_PARAMS, SUPPORT_TOOL_CALL_MODELS } from "../base"; +import type { GEMINI_MODEL } from "../types"; +import { + mapChatMessagesToGoogleFunctions, + mapChatMessagesToGoogleMessages, + mapMessageContentDetailToGooglePart, + mapMessageContentToMessageContentDetails, +} from "./utils"; + +export type GoogleAdditionalChatOptions = { config: GenerateContentConfig }; + +export type GoogleChatStreamResponse = AsyncIterable< + ChatResponseChunk< + ToolCallLLMMessageOptions & { + data?: Blob[]; + } + > +>; + +export type GoogleChatParamsStreaming = LLMChatParamsStreaming< + GoogleAdditionalChatOptions, + ToolCallLLMMessageOptions +>; + +export type GoogleChatParamsNonStreaming = LLMChatParamsNonStreaming< + GoogleAdditionalChatOptions, + ToolCallLLMMessageOptions +>; + +export type GoogleChatNonStreamResponse = + ChatResponse<ToolCallLLMMessageOptions>; + +export const getGoogleStudioInlineData = ( + response: GenerateContentResponse, +): Blob[] => { + return response.candidates + ?.flatMap((candidate) => candidate.content?.parts) + .map((part) => part?.inlineData) + .filter((data) => data) as Blob[]; +}; + +export type GoogleModelParams = { + model: GEMINI_MODEL; + temperature?: number; + topP?: number; + maxTokens?: number; +}; + +export type GoogleParams = GoogleGenAIOptions & GoogleModelParams; + +export class GoogleStudio extends ToolCallLLM<GoogleAdditionalChatOptions> { + client: GoogleGenAI; + model: GEMINI_MODEL; + temperature: number; + topP: number; + maxTokens?: number | undefined; + topK?: number; + + constructor({ + temperature, + topP, + maxTokens, + model, + ...params + }: GoogleParams) { + super(); + this.model = model; + this.maxTokens = maxTokens ?? DEFAULT_GEMINI_PARAMS.maxTokens; + this.temperature = temperature ?? DEFAULT_GEMINI_PARAMS.temperature; + this.topP = topP ?? DEFAULT_GEMINI_PARAMS.topP; + this.client = new GoogleGenAI(params); + } + + get supportToolCall(): boolean { + return SUPPORT_TOOL_CALL_MODELS.includes(this.model); + } + + get metadata(): LLMMetadata { + return { + model: this.model, + temperature: this.temperature, + topP: this.topP, + maxTokens: this.maxTokens, + contextWindow: 128000, + tokenizer: undefined, + structuredOutput: false, + }; + } + + getToolCallsFromResponse(response: GenerateContentResponse): ToolCall[] { + if (!response.functionCalls) return []; + return response.functionCalls.map((call) => ({ + id: call.id ?? "", + name: call.name ?? "", + input: call.args as JSONObject, + })); + } + + protected async nonStreamChat( + params: GoogleChatParamsNonStreaming, + ): Promise<GoogleChatNonStreamResponse> { + if (!this.supportToolCall && params.tools?.length) { + console.warn(`The model "${this.model}" doesn't support ToolCall`); + } + + const config: GenerateContentConfig = + params.additionalChatOptions?.config ?? {}; + if (params.tools?.length) { + if (config.responseModalities?.includes(Modality.IMAGE)) { + console.warn("Tools are currently not supported with Modality.IMAGE"); + } else { + config.tools = mapChatMessagesToGoogleFunctions(params.tools); + } + } + const response = await this.client.models.generateContent({ + model: this.model, + contents: mapChatMessagesToGoogleMessages(params.messages), + config, + }); + + if (this.supportToolCall) { + const tools = this.getToolCallsFromResponse(response); + if (tools.length) { + return { + raw: response, + message: { + role: "assistant", + content: "", + options: { toolCall: tools }, + }, + }; + } + } + return { + raw: response, + message: { + role: "assistant", + content: response.text ?? "", + options: { + inlineData: getGoogleStudioInlineData(response), + }, + }, + }; + } + + protected async *streamChat( + params: GoogleChatParamsStreaming, + ): GoogleChatStreamResponse { + if (!this.supportToolCall && params.tools?.length) { + console.warn(`The model "${this.model}" doesn't support ToolCall`); + } + const config: GenerateContentConfig = + params.additionalChatOptions?.config ?? {}; + if (params.tools?.length) { + if (config.responseModalities?.includes(Modality.IMAGE)) { + console.warn("Tools are currently not supported with Modality.IMAGE"); + } else { + config.tools = mapChatMessagesToGoogleFunctions(params.tools); + } + } + const response = await this.client.models.generateContentStream({ + model: this.model, + contents: mapChatMessagesToGoogleMessages(params.messages), + config, + }); + yield* streamConverter(response, (response) => { + if (response.functionCalls?.length) { + return { + delta: "", + raw: response, + options: { + toolCall: this.getToolCallsFromResponse(response), + }, + }; + } + + return { + delta: response.text ?? "", + raw: response, + options: { + inlineData: getGoogleStudioInlineData(response), + }, + }; + }); + } + + chat(params: GoogleChatParamsStreaming): Promise<GoogleChatStreamResponse>; + chat( + params: GoogleChatParamsNonStreaming, + ): Promise<GoogleChatNonStreamResponse>; + @wrapLLMEvent + async chat( + params: GoogleChatParamsStreaming | GoogleChatParamsNonStreaming, + ): Promise<GoogleChatStreamResponse | GoogleChatNonStreamResponse> { + if (params.stream) { + return this.streamChat(params); + } + return this.nonStreamChat(params); + } + + complete( + params: LLMCompletionParamsStreaming, + ): Promise<AsyncIterable<CompletionResponse>>; + complete( + params: LLMCompletionParamsNonStreaming, + ): Promise<CompletionResponse>; + async complete( + params: LLMCompletionParamsStreaming | LLMCompletionParamsNonStreaming, + ): Promise<CompletionResponse | AsyncIterable<CompletionResponse>> { + const contents = mapMessageContentToMessageContentDetails( + params.prompt, + ).map(mapMessageContentDetailToGooglePart); + if (params.stream) { + const response = await this.client.models.generateContentStream({ + model: this.model, + contents, + }); + return streamConverter(response, (response) => { + return { + text: response.text ?? "", + raw: response, + }; + }); + } + const response = await this.client.models.generateContent({ + model: this.model, + contents, + }); + + return { + text: response.text || "", + raw: response, + }; + } +} diff --git a/packages/providers/google/src/studio/utils.ts b/packages/providers/google/src/studio/utils.ts new file mode 100644 index 0000000000000000000000000000000000000000..924bdb7c3dd653f018be65157b10dedcb79e5203 --- /dev/null +++ b/packages/providers/google/src/studio/utils.ts @@ -0,0 +1,136 @@ +import type { + ContentListUnion, + ContentUnion, + Part, + Schema, + ToolListUnion, +} from "@google/genai"; +import type { + BaseTool, + ChatMessage, + MessageContentDetail, + ToolCallLLMMessageOptions, +} from "@llamaindex/core/llms"; +import { extractDataUrlComponents } from "@llamaindex/core/utils"; + +import type { MessageContent } from "@llamaindex/core/llms"; + +export const mapMessageContentToMessageContentDetails = ( + content: MessageContent, +): MessageContentDetail[] => { + return Array.isArray(content) ? content : [{ type: "text", text: content }]; +}; + +const ACCEPTED_IMAGE_MIME_TYPES = ["image/jpeg", "image/png"]; + +export const mapTextPart = (text: string): Part => { + return { text }; +}; + +export const mapImagePart = (imageUrl: string): Part => { + if (!imageUrl.startsWith("data:")) + throw new Error( + "For Google please only use base64 data url, e.g.: data:image/jpeg;base64,SGVsbG8sIFdvcmxkIQ==", + ); + const { mimeType, base64: data } = extractDataUrlComponents(imageUrl); + if (!ACCEPTED_IMAGE_MIME_TYPES.includes(mimeType)) + throw new Error( + `Anthropic only accepts the following mimeTypes: ${ACCEPTED_IMAGE_MIME_TYPES.join("\n")}`, + ); + + return { + inlineData: { + mimeType, + data, + }, + }; +}; + +export const mapMessageContentDetailToGooglePart = < + T extends MessageContentDetail, +>( + detail: T, +): Part => { + let part: Part; + + if (detail.type === "text") { + part = mapTextPart(detail.text); + } else if (detail.type === "image_url") { + part = mapImagePart(detail.image_url.url); + } else { + throw new Error("Unsupported content detail type"); + } + return part; +}; +export const mapChatMessagesToGoogleFunctions = ( + tools: BaseTool[], +): ToolListUnion => { + return [ + { + functionDeclarations: tools.map((tool) => ({ + response: tool.metadata.parameters as Schema, + description: tool.metadata.description, + name: tool.metadata.name, + })), + }, + ]; +}; + +export const mapChatMessagesToGoogleMessages = < + T extends ChatMessage<ToolCallLLMMessageOptions>, +>( + messages: T[], +): ContentListUnion => { + const functionNames: Record<string, string> = {}; + messages.forEach((msg: T) => { + if (msg.options && "toolCall" in msg.options) { + const mapped = msg.options.toolCall.reduce( + (result, item) => { + result[item.id] = item.name; + return result; + }, + {} as Record<string, string>, + ); + + Object.assign(functionNames, mapped); + } + }); + return messages.flatMap((msg: T): ContentListUnion => { + if (msg.options && "toolResult" in msg.options) { + return { + role: "user", + parts: [ + { + functionResponse: { + name: functionNames[msg.options.toolResult.id] ?? "", + response: msg.options.toolResult, + }, + }, + ], + }; + } + + if (msg.options && "toolCall" in msg.options) { + return { + role: "model", + parts: msg.options.toolCall.map((call) => ({ + functionCall: { + name: call.name, + args: call.input as Record<string, unknown>, + }, + })), + }; + } + return mapMessageContentToMessageContentDetails(msg.content) + .map((detail: MessageContentDetail): ContentUnion | null => { + const part = mapMessageContentDetailToGooglePart(detail); + if (!part.text) return null; + + return { + role: msg.role === "assistant" ? "model" : "user", + parts: [part], + }; + }) + .filter((content) => content) as ContentUnion; + }); +}; diff --git a/packages/tools/src/tools/img-gen.ts b/packages/tools/src/tools/img-gen.ts index b46de53d338fde6d85017acc3db91459745fd3e7..5606610b64d5dfc6eccc9d23bd9c92dd33e91a40 100644 --- a/packages/tools/src/tools/img-gen.ts +++ b/packages/tools/src/tools/img-gen.ts @@ -1,4 +1,5 @@ import { tool } from "@llamaindex/core/tools"; +import { randomUUID } from "@llamaindex/env"; import { FormData } from "formdata-node"; import got from "got"; import path from "path"; @@ -36,7 +37,7 @@ export const imageGenerator = (params: ImgGeneratorToolParams) => { try { const buffer = await promptToImgBuffer(prompt, apiKey, outputFormat); - const filename = `${crypto.randomUUID()}.${outputFormat}`; + const filename = `${randomUUID()}.${outputFormat}`; const filePath = path.join(outputDir, filename); await saveDocument(filePath, buffer); const imageUrl = getFileUrl(filePath, { fileServerURLPrefix }); diff --git a/packages/tools/src/tools/interpreter.ts b/packages/tools/src/tools/interpreter.ts index 364cdf6f425dc65c9acab0126717b37b28c88f85..316690b8b25d6581d923de5c2905c26ba1feb824 100644 --- a/packages/tools/src/tools/interpreter.ts +++ b/packages/tools/src/tools/interpreter.ts @@ -1,5 +1,6 @@ import { type Logs, Result, Sandbox } from "@e2b/code-interpreter"; import { tool } from "@llamaindex/core/tools"; +import { randomUUID } from "@llamaindex/env"; import fs from "fs"; import path from "node:path"; import { z } from "zod"; @@ -153,7 +154,7 @@ async function getExtraResult( } async function saveToDisk(outputDir: string, base64Data: string, ext: string) { - const filename = `${crypto.randomUUID()}.${ext}`; + const filename = `${randomUUID()}.${ext}`; const buffer = Buffer.from(base64Data, "base64"); const filePath = path.join(outputDir, filename); await saveDocument(filePath, buffer); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c417c04f057b36696c0b45e8dcf41803a92d1e1d..49b5087ce16a5060eaf4ccfa476f220f9d804301 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -119,7 +119,7 @@ importers: version: 1.6.0(@aws-sdk/credential-provider-web-identity@3.744.0) ai: specifier: ^3.4.33 - version: 3.4.33(openai@4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.3))(zod@3.24.2) + version: 3.4.33(openai@4.86.0(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.3))(zod@3.24.2) class-variance-authority: specifier: ^0.7.0 version: 0.7.1 @@ -791,7 +791,7 @@ importers: version: 2.10.2(@types/react@19.0.10)(react@19.0.0) openai: specifier: ^4 - version: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2) + version: 4.83.0(ws@8.18.0)(zod@3.24.2) typedoc: specifier: ^0.26.11 version: 0.26.11(typescript@5.7.3) @@ -843,7 +843,7 @@ importers: version: link:../../../llamaindex openai: specifier: ^4.73.1 - version: 4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2) + version: 4.83.0(ws@8.18.0)(zod@3.24.2) devDependencies: tsx: specifier: ^4.19.3 @@ -1190,6 +1190,9 @@ importers: '@google-cloud/vertexai': specifier: 1.9.0 version: 1.9.0 + '@google/genai': + specifier: ^0.4.0 + version: 0.4.0(bufferutil@4.0.9) '@google/generative-ai': specifier: 0.21.0 version: 0.21.0 @@ -1328,7 +1331,7 @@ importers: version: link:../../env openai: specifier: ^4.86.0 - version: 4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2) + version: 4.86.0(ws@8.18.0)(zod@3.24.2) zod: specifier: ^3.24.2 version: 3.24.2 @@ -1451,7 +1454,7 @@ importers: version: link:../../../env chromadb: specifier: 1.10.3 - version: 1.10.3(cohere-ai@7.14.0)(openai@4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(voyageai@0.0.3-1) + version: 1.10.3(cohere-ai@7.14.0)(openai@4.86.0)(voyageai@0.0.3-1) chromadb-default-embed: specifier: ^2.13.2 version: 2.13.2 @@ -1725,64 +1728,6 @@ importers: specifier: ^13.4.8 version: 13.4.8 - packages/server: - dependencies: - '@llamaindex/chat-ui': - specifier: 0.3.1 - version: 0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - ai: - specifier: ^4.0.3 - version: 4.1.34(react@19.0.0)(zod@3.24.2) - dotenv: - specifier: ^16.4.7 - version: 16.4.7 - llamaindex: - specifier: workspace:* - version: link:../llamaindex - next: - specifier: 15.2.3 - version: 15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - react: - specifier: ^19.0.0 - version: 19.0.0 - react-dom: - specifier: ^19.0.0 - version: 19.0.0(react@19.0.0) - devDependencies: - '@eslint/eslintrc': - specifier: ^3 - version: 3.3.0 - '@tailwindcss/postcss': - specifier: ^4 - version: 4.0.9 - '@types/node': - specifier: ^22.9.0 - version: 22.9.0 - '@types/react': - specifier: ^19 - version: 19.0.10 - '@types/react-dom': - specifier: ^19 - version: 19.0.4(@types/react@19.0.10) - bunchee: - specifier: 6.4.0 - version: 6.4.0(typescript@5.7.3) - eslint: - specifier: ^9 - version: 9.22.0(jiti@2.4.2) - eslint-config-next: - specifier: 15.2.3 - version: 15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - tailwindcss: - specifier: ^4 - version: 4.0.9 - tsx: - specifier: ^4.19.3 - version: 4.19.3 - vitest: - specifier: ^2.1.5 - version: 2.1.5(@edge-runtime/vm@4.0.4)(@types/node@22.9.0)(happy-dom@15.11.7)(lightningcss@1.29.1)(msw@2.7.0(@types/node@22.9.0)(typescript@5.7.3))(terser@5.38.2) - packages/tools: dependencies: '@apidevtools/swagger-parser': @@ -3310,6 +3255,10 @@ packages: resolution: {integrity: sha512-8brlcJwFXI4fPuBtsDNQqCdWZmz8gV9jeEKOU0vc5H2SjehCQpXK/NwuSEr916zbhlBHtg/sU37qQQdgvh5BRA==} engines: {node: '>=18.0.0'} + '@google/genai@0.4.0': + resolution: {integrity: sha512-u9KHoIDbnUi6GpH6mtkZjdeVy3FXI0Hfvl5QWZyYPBttXWaJ13Q4OXE+8zynbHvvGh4XUaH5fBvzsuNLQqB+qQ==} + engines: {node: '>=18.0.0'} + '@google/generative-ai@0.21.0': resolution: {integrity: sha512-7XhUbtnlkSEZK15kN3t+tzIMxsbKm/dSkKBFalj+20NvPKe1kBY7mR2P7vuijEn+f06z5+A8bVGKO0v39cr6Wg==} engines: {node: '>=18.0.0'} @@ -3637,11 +3586,6 @@ packages: peerDependencies: react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc - '@llamaindex/chat-ui@0.3.1': - resolution: {integrity: sha512-sF6axN9LviewAxvBbqkF3u3K0yvIt74prio7uiVruFVT/AYkRlIk721QXTPBscf+ZvyzAqjh0Nx0BoGiZUzBCw==} - peerDependencies: - react: ^18.2.0 || ^19.0.0 || ^19.0.0-rc - '@llamaindex/pdf-viewer@1.3.0': resolution: {integrity: sha512-HJtjzmxn+erb3Vq89W5atPq0q6uyZMMCgzOnmstxudzaHW/Yj1dp1ojCuBh/wlP1tUnIRoe9RmvC0ahmqSwRUA==} peerDependencies: @@ -3792,15 +3736,9 @@ packages: '@next/env@15.2.1': resolution: {integrity: sha512-JmY0qvnPuS2NCWOz2bbby3Pe0VzdAQ7XpEB6uLIHmtXNfAsAO0KLQLkuAoc42Bxbo3/jMC3dcn9cdf+piCcG2Q==} - '@next/env@15.2.3': - resolution: {integrity: sha512-a26KnbW9DFEUsSxAxKBORR/uD9THoYoKbkpFywMN/AFvboTt94b8+g/07T8J6ACsdLag8/PDU60ov4rPxRAixw==} - '@next/eslint-plugin-next@15.1.0': resolution: {integrity: sha512-+jPT0h+nelBT6HC9ZCHGc7DgGVy04cv4shYdAe6tKlEbjQUtwU3LzQhzbDHQyY2m6g39m6B0kOFVuLGBrxxbGg==} - '@next/eslint-plugin-next@15.2.3': - resolution: {integrity: sha512-eNSOIMJtjs+dp4Ms1tB1PPPJUQHP3uZK+OQ7iFY9qXpGO6ojT6imCL+KcUOqE/GXGidWbBZJzYdgAdPHqeCEPA==} - '@next/swc-darwin-arm64@15.2.0': resolution: {integrity: sha512-rlp22GZwNJjFCyL7h5wz9vtpBVuCt3ZYjFWpEPBGzG712/uL1bbSkS675rVAUCRZ4hjoTJ26Q7IKhr5DfJrHDA==} engines: {node: '>= 10'} @@ -3813,12 +3751,6 @@ packages: cpu: [arm64] os: [darwin] - '@next/swc-darwin-arm64@15.2.3': - resolution: {integrity: sha512-uaBhA8aLbXLqwjnsHSkxs353WrRgQgiFjduDpc7YXEU0B54IKx3vU+cxQlYwPCyC8uYEEX7THhtQQsfHnvv8dw==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [darwin] - '@next/swc-darwin-x64@15.2.0': resolution: {integrity: sha512-DiU85EqSHogCz80+sgsx90/ecygfCSGl5P3b4XDRVZpgujBm5lp4ts7YaHru7eVTyZMjHInzKr+w0/7+qDrvMA==} engines: {node: '>= 10'} @@ -3831,12 +3763,6 @@ packages: cpu: [x64] os: [darwin] - '@next/swc-darwin-x64@15.2.3': - resolution: {integrity: sha512-pVwKvJ4Zk7h+4hwhqOUuMx7Ib02u3gDX3HXPKIShBi9JlYllI0nU6TWLbPT94dt7FSi6mSBhfc2JrHViwqbOdw==} - engines: {node: '>= 10'} - cpu: [x64] - os: [darwin] - '@next/swc-linux-arm64-gnu@15.2.0': resolution: {integrity: sha512-VnpoMaGukiNWVxeqKHwi8MN47yKGyki5q+7ql/7p/3ifuU2341i/gDwGK1rivk0pVYbdv5D8z63uu9yMw0QhpQ==} engines: {node: '>= 10'} @@ -3849,12 +3775,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-gnu@15.2.3': - resolution: {integrity: sha512-50ibWdn2RuFFkOEUmo9NCcQbbV9ViQOrUfG48zHBCONciHjaUKtHcYFiCwBVuzD08fzvzkWuuZkd4AqbvKO7UQ==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-arm64-musl@15.2.0': resolution: {integrity: sha512-ka97/ssYE5nPH4Qs+8bd8RlYeNeUVBhcnsNUmFM6VWEob4jfN9FTr0NBhXVi1XEJpj3cMfgSRW+LdE3SUZbPrw==} engines: {node: '>= 10'} @@ -3867,12 +3787,6 @@ packages: cpu: [arm64] os: [linux] - '@next/swc-linux-arm64-musl@15.2.3': - resolution: {integrity: sha512-2gAPA7P652D3HzR4cLyAuVYwYqjG0mt/3pHSWTCyKZq/N/dJcUAEoNQMyUmwTZWCJRKofB+JPuDVP2aD8w2J6Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [linux] - '@next/swc-linux-x64-gnu@15.2.0': resolution: {integrity: sha512-zY1JduE4B3q0k2ZCE+DAF/1efjTXUsKP+VXRtrt/rJCTgDlUyyryx7aOgYXNc1d8gobys/Lof9P9ze8IyRDn7Q==} engines: {node: '>= 10'} @@ -3885,12 +3799,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-gnu@15.2.3': - resolution: {integrity: sha512-ODSKvrdMgAJOVU4qElflYy1KSZRM3M45JVbeZu42TINCMG3anp7YCBn80RkISV6bhzKwcUqLBAmOiWkaGtBA9w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-linux-x64-musl@15.2.0': resolution: {integrity: sha512-QqvLZpurBD46RhaVaVBepkVQzh8xtlUN00RlG4Iq1sBheNugamUNPuZEH1r9X1YGQo1KqAe1iiShF0acva3jHQ==} engines: {node: '>= 10'} @@ -3903,12 +3811,6 @@ packages: cpu: [x64] os: [linux] - '@next/swc-linux-x64-musl@15.2.3': - resolution: {integrity: sha512-ZR9kLwCWrlYxwEoytqPi1jhPd1TlsSJWAc+H/CJHmHkf2nD92MQpSRIURR1iNgA/kuFSdxB8xIPt4p/T78kwsg==} - engines: {node: '>= 10'} - cpu: [x64] - os: [linux] - '@next/swc-win32-arm64-msvc@15.2.0': resolution: {integrity: sha512-ODZ0r9WMyylTHAN6pLtvUtQlGXBL9voljv6ujSlcsjOxhtXPI1Ag6AhZK0SE8hEpR1374WZZ5w33ChpJd5fsjw==} engines: {node: '>= 10'} @@ -3921,12 +3823,6 @@ packages: cpu: [arm64] os: [win32] - '@next/swc-win32-arm64-msvc@15.2.3': - resolution: {integrity: sha512-+G2FrDcfm2YDbhDiObDU/qPriWeiz/9cRR0yMWJeTLGGX6/x8oryO3tt7HhodA1vZ8r2ddJPCjtLcpaVl7TE2Q==} - engines: {node: '>= 10'} - cpu: [arm64] - os: [win32] - '@next/swc-win32-x64-msvc@15.2.0': resolution: {integrity: sha512-8+4Z3Z7xa13NdUuUAcpVNA6o76lNPniBd9Xbo02bwXQXnZgFvEopwY2at5+z7yHl47X9qbZpvwatZ2BRo3EdZw==} engines: {node: '>= 10'} @@ -3939,12 +3835,6 @@ packages: cpu: [x64] os: [win32] - '@next/swc-win32-x64-msvc@15.2.3': - resolution: {integrity: sha512-gHYS9tc+G2W0ZC8rBL+H6RdtXIyk40uLiaos0yj5US85FNhbFEndMA2nW3z47nzOWiSvXTZ5kBClc3rD0zJg0w==} - engines: {node: '>= 10'} - cpu: [x64] - os: [win32] - '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -7232,15 +7122,6 @@ packages: typescript: optional: true - eslint-config-next@15.2.3: - resolution: {integrity: sha512-VDQwbajhNMFmrhLWVyUXCqsGPN+zz5G8Ys/QwFubfsxTIrkqdx3N3x3QPW+pERz8bzGPP0IgEm8cNbZcd8PFRQ==} - peerDependencies: - eslint: ^7.23.0 || ^8.0.0 || ^9.0.0 - typescript: '>=3.3.1' - peerDependenciesMeta: - typescript: - optional: true - eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} hasBin: true @@ -9654,27 +9535,6 @@ packages: sass: optional: true - next@15.2.3: - resolution: {integrity: sha512-x6eDkZxk2rPpu46E1ZVUWIBhYCLszmUY6fvHBFcbzJ9dD+qRX6vcHusaqqDlnY+VngKzKbAiG2iRCkPbmi8f7w==} - engines: {node: ^18.18.0 || ^19.8.0 || >= 20.0.0} - hasBin: true - peerDependencies: - '@opentelemetry/api': ^1.1.0 - '@playwright/test': ^1.41.2 - babel-plugin-react-compiler: '*' - react: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - react-dom: ^18.2.0 || 19.0.0-rc-de68d2f4-20241204 || ^19.0.0 - sass: ^1.3.0 - peerDependenciesMeta: - '@opentelemetry/api': - optional: true - '@playwright/test': - optional: true - babel-plugin-react-compiler: - optional: true - sass: - optional: true - nice-grpc-client-middleware-retry@3.1.9: resolution: {integrity: sha512-BgbsNjuppxD6hoeCfO5gkBA/G69Tq5d9QX35QLdA46NSjKllelC+FlcgSPMlO9VQKCAPDfp4zzzDJZTNtbvzVw==} @@ -14196,6 +14056,16 @@ snapshots: - encoding - supports-color + '@google/genai@0.4.0(bufferutil@4.0.9)': + dependencies: + google-auth-library: 9.15.1 + ws: 8.18.0(bufferutil@4.0.9) + transitivePeerDependencies: + - bufferutil + - encoding + - supports-color + - utf-8-validate + '@google/generative-ai@0.21.0': {} '@graphql-typed-document-node/core@3.2.0(graphql@16.10.0)': @@ -14564,36 +14434,6 @@ snapshots: - react-dom - supports-color - '@llamaindex/chat-ui@0.3.1(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': - dependencies: - '@llamaindex/pdf-viewer': 1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-collapsible': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-hover-card': 1.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-icons': 1.3.2(react@19.0.0) - '@radix-ui/react-progress': 1.1.2(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-select': 2.1.6(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - '@radix-ui/react-slot': 1.1.2(@types/react@19.0.10)(react@19.0.0) - '@radix-ui/react-tabs': 1.1.3(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - class-variance-authority: 0.7.1 - clsx: 2.1.1 - highlight.js: 11.11.1 - katex: 0.16.21 - lucide-react: 0.453.0(react@19.0.0) - react: 19.0.0 - react-markdown: 8.0.7(@types/react@19.0.10)(react@19.0.0) - rehype-katex: 7.0.1 - remark: 14.0.3 - remark-code-import: 1.2.0 - remark-gfm: 3.0.1 - remark-math: 5.1.1 - tailwind-merge: 2.6.0 - vaul: 0.9.9(@types/react-dom@19.0.4(@types/react@19.0.10))(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0) - transitivePeerDependencies: - - '@types/react' - - '@types/react-dom' - - react-dom - - supports-color - '@llamaindex/pdf-viewer@1.3.0(@types/react@19.0.10)(react-dom@19.0.0(react@19.0.0))(react@19.0.0)': dependencies: '@wojtekmaj/react-hooks': 1.17.2(react@19.0.0) @@ -14778,88 +14618,58 @@ snapshots: '@next/env@15.2.1': {} - '@next/env@15.2.3': {} - '@next/eslint-plugin-next@15.1.0': dependencies: fast-glob: 3.3.1 - '@next/eslint-plugin-next@15.2.3': - dependencies: - fast-glob: 3.3.1 - '@next/swc-darwin-arm64@15.2.0': optional: true '@next/swc-darwin-arm64@15.2.1': optional: true - '@next/swc-darwin-arm64@15.2.3': - optional: true - '@next/swc-darwin-x64@15.2.0': optional: true '@next/swc-darwin-x64@15.2.1': optional: true - '@next/swc-darwin-x64@15.2.3': - optional: true - '@next/swc-linux-arm64-gnu@15.2.0': optional: true '@next/swc-linux-arm64-gnu@15.2.1': optional: true - '@next/swc-linux-arm64-gnu@15.2.3': - optional: true - '@next/swc-linux-arm64-musl@15.2.0': optional: true '@next/swc-linux-arm64-musl@15.2.1': optional: true - '@next/swc-linux-arm64-musl@15.2.3': - optional: true - '@next/swc-linux-x64-gnu@15.2.0': optional: true '@next/swc-linux-x64-gnu@15.2.1': optional: true - '@next/swc-linux-x64-gnu@15.2.3': - optional: true - '@next/swc-linux-x64-musl@15.2.0': optional: true '@next/swc-linux-x64-musl@15.2.1': optional: true - '@next/swc-linux-x64-musl@15.2.3': - optional: true - '@next/swc-win32-arm64-msvc@15.2.0': optional: true '@next/swc-win32-arm64-msvc@15.2.1': optional: true - '@next/swc-win32-arm64-msvc@15.2.3': - optional: true - '@next/swc-win32-x64-msvc@15.2.0': optional: true '@next/swc-win32-x64-msvc@15.2.1': optional: true - '@next/swc-win32-x64-msvc@15.2.3': - optional: true - '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -17399,7 +17209,7 @@ snapshots: dependencies: humanize-ms: 1.2.1 - ai@3.4.33(openai@4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.3))(zod@3.24.2): + ai@3.4.33(openai@4.86.0(zod@3.24.2))(react@19.0.0)(sswr@2.1.0(svelte@5.19.10))(svelte@5.19.10)(vue@3.5.13(typescript@5.7.3))(zod@3.24.2): dependencies: '@ai-sdk/provider': 0.0.26 '@ai-sdk/provider-utils': 1.0.22(zod@3.24.2) @@ -17415,7 +17225,7 @@ snapshots: secure-json-parse: 2.7.0 zod-to-json-schema: 3.24.1(zod@3.24.2) optionalDependencies: - openai: 4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2) + openai: 4.86.0(ws@8.18.0)(zod@3.24.2) react: 19.0.0 sswr: 2.1.0(svelte@5.19.10) svelte: 5.19.10 @@ -18009,13 +17819,13 @@ snapshots: transitivePeerDependencies: - bare-buffer - chromadb@1.10.3(cohere-ai@7.14.0)(openai@4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2))(voyageai@0.0.3-1): + chromadb@1.10.3(cohere-ai@7.14.0)(openai@4.86.0)(voyageai@0.0.3-1): dependencies: cliui: 8.0.1 isomorphic-fetch: 3.0.0 optionalDependencies: cohere-ai: 7.14.0 - openai: 4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2) + openai: 4.86.0(ws@8.18.0)(zod@3.24.2) voyageai: 0.0.3-1 transitivePeerDependencies: - encoding @@ -18814,26 +18624,6 @@ snapshots: - eslint-plugin-import-x - supports-color - eslint-config-next@15.2.3(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3): - dependencies: - '@next/eslint-plugin-next': 15.2.3 - '@rushstack/eslint-patch': 1.10.5 - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3) - eslint: 9.22.0(jiti@2.4.2) - eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-jsx-a11y: 6.10.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-react: 7.37.2(eslint@9.22.0(jiti@2.4.2)) - eslint-plugin-react-hooks: 5.1.0(eslint@9.22.0(jiti@2.4.2)) - optionalDependencies: - typescript: 5.7.3 - transitivePeerDependencies: - - eslint-import-resolver-webpack - - eslint-plugin-import-x - - supports-color - eslint-config-prettier@9.1.0(eslint@9.22.0(jiti@2.4.2)): dependencies: eslint: 9.22.0(jiti@2.4.2) @@ -18884,7 +18674,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: @@ -18895,7 +18685,7 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)): dependencies: debug: 3.2.7 optionalDependencies: @@ -18917,7 +18707,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.16.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -18946,7 +18736,7 @@ snapshots: doctrine: 2.1.0 eslint: 9.22.0(jiti@2.4.2) eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0)(eslint@9.22.0(jiti@2.4.2)) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.22.0(jiti@2.4.2)))(eslint@9.22.0(jiti@2.4.2)) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -22281,32 +22071,6 @@ snapshots: - '@babel/core' - babel-plugin-macros - next@15.2.3(@opentelemetry/api@1.9.0)(react-dom@19.0.0(react@19.0.0))(react@19.0.0): - dependencies: - '@next/env': 15.2.3 - '@swc/counter': 0.1.3 - '@swc/helpers': 0.5.15 - busboy: 1.6.0 - caniuse-lite: 1.0.30001701 - postcss: 8.4.31 - react: 19.0.0 - react-dom: 19.0.0(react@19.0.0) - styled-jsx: 5.1.6(react@19.0.0) - optionalDependencies: - '@next/swc-darwin-arm64': 15.2.3 - '@next/swc-darwin-x64': 15.2.3 - '@next/swc-linux-arm64-gnu': 15.2.3 - '@next/swc-linux-arm64-musl': 15.2.3 - '@next/swc-linux-x64-gnu': 15.2.3 - '@next/swc-linux-x64-musl': 15.2.3 - '@next/swc-win32-arm64-msvc': 15.2.3 - '@next/swc-win32-x64-msvc': 15.2.3 - '@opentelemetry/api': 1.9.0 - sharp: 0.33.5 - transitivePeerDependencies: - - '@babel/core' - - babel-plugin-macros - nice-grpc-client-middleware-retry@3.1.9: dependencies: abort-controller-x: 0.4.3 @@ -22528,7 +22292,7 @@ snapshots: is-docker: 2.2.1 is-wsl: 2.2.0 - openai@4.83.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2): + openai@4.83.0(ws@8.18.0)(zod@3.24.2): dependencies: '@types/node': 18.19.75 '@types/node-fetch': 2.6.12 @@ -22543,7 +22307,7 @@ snapshots: transitivePeerDependencies: - encoding - openai@4.86.0(ws@8.18.0(bufferutil@4.0.9))(zod@3.24.2): + openai@4.86.0(ws@8.18.0)(zod@3.24.2): dependencies: '@types/node': 18.19.76 '@types/node-fetch': 2.6.12 @@ -25653,4 +25417,4 @@ snapshots: zod@3.24.2: {} - zwitch@2.0.4: {} + zwitch@2.0.4: {} \ No newline at end of file