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/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/pnpm-lock.yaml b/pnpm-lock.yaml
index d8216154ad66468c94fddc1db653aa32932c66de..21278abca363df3ae26f25b5a209e4ef844c2c70 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
@@ -3252,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'}
@@ -14049,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)':
@@ -16650,10 +16667,10 @@ snapshots:
       '@types/node': 22.9.0
     optional: true
 
-  '@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.16.0(jiti@2.4.2))(typescript@5.7.3)':
+  '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)':
     dependencies:
       '@eslint-community/regexpp': 4.12.1
-      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/scope-manager': 8.24.0
       '@typescript-eslint/type-utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/utils': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
@@ -17192,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)
@@ -17208,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
@@ -17802,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
@@ -18571,12 +18588,12 @@ snapshots:
     dependencies:
       '@next/eslint-plugin-next': 15.1.0
       '@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.16.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       eslint: 9.16.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(@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@9.16.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-plugin-import@2.31.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)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2))
+      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-jsx-a11y: 6.10.2(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-react: 7.37.2(eslint@9.16.0(jiti@2.4.2))
       eslint-plugin-react-hooks: 5.1.0(eslint@9.16.0(jiti@2.4.2))
@@ -18596,7 +18613,7 @@ snapshots:
       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@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))
@@ -18625,7 +18642,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  eslint-import-resolver-typescript@3.7.0(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@9.22.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
+  eslint-import-resolver-typescript@3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       '@nolyfill/is-core-module': 1.0.39
       debug: 4.4.0
@@ -18637,7 +18654,7 @@ snapshots:
       is-glob: 4.0.3
       stable-hash: 0.0.4
     optionalDependencies:
-      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@9.22.0(jiti@2.4.2))
+      eslint-plugin-import: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2))
     transitivePeerDependencies:
       - supports-color
 
@@ -18653,22 +18670,22 @@ snapshots:
       is-glob: 4.0.3
       stable-hash: 0.0.4
     optionalDependencies:
-      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@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))
     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-plugin-import@2.31.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)))(eslint@9.16.0(jiti@2.4.2)))(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:
-      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
       eslint: 9.16.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(@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@9.16.0(jiti@2.4.2))
+      eslint-import-resolver-typescript: 3.7.0(eslint-plugin-import@2.31.0)(eslint@9.16.0(jiti@2.4.2))
     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:
@@ -18679,7 +18696,7 @@ snapshots:
     transitivePeerDependencies:
       - supports-color
 
-  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-plugin-import@2.31.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)))(eslint@9.16.0(jiti@2.4.2)))(eslint@9.16.0(jiti@2.4.2)):
+  eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3))(eslint-import-resolver-typescript@3.7.0)(eslint@9.16.0(jiti@2.4.2)):
     dependencies:
       '@rtsao/scc': 1.1.0
       array-includes: 3.1.8
@@ -18690,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.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(@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@9.16.0(jiti@2.4.2)))(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
@@ -18702,13 +18719,13 @@ snapshots:
       string.prototype.trimend: 1.0.9
       tsconfig-paths: 3.15.0
     optionalDependencies:
-      '@typescript-eslint/parser': 8.24.0(eslint@9.22.0(jiti@2.4.2))(typescript@5.7.3)
+      '@typescript-eslint/parser': 8.24.0(eslint@9.16.0(jiti@2.4.2))(typescript@5.7.3)
     transitivePeerDependencies:
       - eslint-import-resolver-typescript
       - eslint-import-resolver-webpack
       - supports-color
 
-  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@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)):
     dependencies:
       '@rtsao/scc': 1.1.0
       array-includes: 3.1.8
@@ -18719,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
@@ -22275,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
@@ -22290,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