!function(){function t(t){document.documentElement.setAttribute("data-theme",t)}var e=function(){var t=null;try{t=new URLSearchParams(window.location.search).get("docusaurus-theme")}catch(t){}return t}()||function(){var t=null;try{t=localStorage.getItem("theme")}catch(t){}return t}();t(null!==e?e:"light")}(),document.documentElement.setAttribute("data-announcement-bar-initially-dismissed",function(){try{return"true"===localStorage.getItem("docusaurus.announcement.dismiss")}catch(t){}return!1}())

[Skip to main content](#__docusaurus_skipToContent_fallback)

LangChain v0.2 is coming soon! Preview the new docs [here](/v0.2/docs/introduction/).

[

![🦜️🔗 Langchain](/v0.1/img/brand/wordmark.png)![🦜️🔗 Langchain](/v0.1/img/brand/wordmark-dark.png)

](/v0.1/)[Docs](/v0.1/docs/get_started/introduction/)[Use cases](/v0.1/docs/use_cases/)[Integrations](/v0.1/docs/integrations/platforms/)[API Reference](https://api.js.langchain.com)

[More](#)

*   [People](/v0.1/docs/people/)
*   [Community](/v0.1/docs/community/)
*   [Tutorials](/v0.1/docs/additional_resources/tutorials/)
*   [Contributing](/v0.1/docs/contributing/)

[v0.1](#)

*   [v0.2](https://js.langchain.com/v0.2/docs/introduction)
*   [v0.1](/v0.1/docs/get_started/introduction/)

[🦜🔗](#)

*   [LangSmith](https://smith.langchain.com)
*   [LangSmith Docs](https://docs.smith.langchain.com)
*   [LangChain Hub](https://smith.langchain.com/hub)
*   [LangServe](https://github.com/langchain-ai/langserve)
*   [Python Docs](https://python.langchain.com/)

[Chat](https://chatjs.langchain.com)[](https://github.com/langchain-ai/langchainjs)

Search

*   [Providers](/v0.1/docs/integrations/platforms/)
    
    *   [Providers](/v0.1/docs/integrations/platforms/)
    *   [Anthropic](/v0.1/docs/integrations/platforms/anthropic/)
    *   [AWS](/v0.1/docs/integrations/platforms/aws/)
    *   [Google](/v0.1/docs/integrations/platforms/google/)
    *   [Microsoft](/v0.1/docs/integrations/platforms/microsoft/)
    *   [OpenAI](/v0.1/docs/integrations/platforms/openai/)
*   [Components](/v0.1/docs/integrations/components/)
    
    *   [LLMs](/v0.1/docs/integrations/llms/)
        
    *   [Chat models](/v0.1/docs/integrations/chat/)
        
        *   [Chat models](/v0.1/docs/integrations/chat/)
        *   [Alibaba Tongyi](/v0.1/docs/integrations/chat/alibaba_tongyi/)
        *   [Anthropic](/v0.1/docs/integrations/chat/anthropic/)
        *   [Anthropic Tools](/v0.1/docs/integrations/chat/anthropic_tools/)
        *   [Azure OpenAI](/v0.1/docs/integrations/chat/azure/)
        *   [Baidu Wenxin](/v0.1/docs/integrations/chat/baidu_wenxin/)
        *   [Bedrock](/v0.1/docs/integrations/chat/bedrock/)
        *   [Cloudflare Workers AI](/v0.1/docs/integrations/chat/cloudflare_workersai/)
        *   [Cohere](/v0.1/docs/integrations/chat/cohere/)
        *   [Fake LLM](/v0.1/docs/integrations/chat/fake/)
        *   [Fireworks](/v0.1/docs/integrations/chat/fireworks/)
        *   [Friendli](/v0.1/docs/integrations/chat/friendli/)
        *   [Google GenAI](/v0.1/docs/integrations/chat/google_generativeai/)
        *   [(Legacy) Google PaLM/VertexAI](/v0.1/docs/integrations/chat/google_palm/)
        *   [Google Vertex AI](/v0.1/docs/integrations/chat/google_vertex_ai/)
        *   [Groq](/v0.1/docs/integrations/chat/groq/)
        *   [Llama CPP](/v0.1/docs/integrations/chat/llama_cpp/)
        *   [Minimax](/v0.1/docs/integrations/chat/minimax/)
        *   [Mistral AI](/v0.1/docs/integrations/chat/mistral/)
        *   [NIBittensorChatModel](/v0.1/docs/integrations/chat/ni_bittensor/)
        *   [Ollama](/v0.1/docs/integrations/chat/ollama/)
        *   [Ollama Functions](/v0.1/docs/integrations/chat/ollama_functions/)
        *   [OpenAI](/v0.1/docs/integrations/chat/openai/)
        *   [PremAI](/v0.1/docs/integrations/chat/premai/)
        *   [PromptLayer OpenAI](/v0.1/docs/integrations/chat/prompt_layer_openai/)
        *   [TogetherAI](/v0.1/docs/integrations/chat/togetherai/)
        *   [WebLLM](/v0.1/docs/integrations/chat/web_llm/)
        *   [YandexGPT](/v0.1/docs/integrations/chat/yandex/)
        *   [ZhipuAI](/v0.1/docs/integrations/chat/zhipuai/)
    *   [Document loaders](/v0.1/docs/integrations/document_loaders/)
        
    *   [Document transformers](/v0.1/docs/integrations/document_transformers/)
        
    *   [Document compressors](/v0.1/docs/integrations/document_compressors/)
        
    *   [Text embedding models](/v0.1/docs/integrations/text_embedding/)
        
    *   [Vector stores](/v0.1/docs/integrations/vectorstores/)
        
    *   [Retrievers](/v0.1/docs/integrations/retrievers/)
        
    *   [Tools](/v0.1/docs/integrations/tools/)
        
    *   [Agents and toolkits](/v0.1/docs/integrations/toolkits/)
        
    *   [Chat Memory](/v0.1/docs/integrations/chat_memory/)
        
    *   [Stores](/v0.1/docs/integrations/stores/)
        

*   [](/v0.1/)
*   [Components](/v0.1/docs/integrations/components/)
*   [Chat models](/v0.1/docs/integrations/chat/)
*   Google GenAI

On this page

ChatGoogleGenerativeAI
======================

You can access Google's `gemini` and `gemini-vision` models, as well as other generative models in LangChain through `ChatGoogleGenerativeAI` class in the `@langchain/google-genai` integration package.

tip

You can also access Google's `gemini` family of models via the LangChain VertexAI and VertexAI-web integrations.

Click [here](/v0.1/docs/integrations/chat/google_vertex_ai/) to read the docs.

Get an API key here: [https://ai.google.dev/tutorials/setup](https://ai.google.dev/tutorials/setup)

You'll first need to install the `@langchain/google-genai` package:

tip

See [this section for general instructions on installing integration packages](/v0.1/docs/get_started/installation/#installing-integration-packages).

*   npm
*   Yarn
*   pnpm

    npm install @langchain/google-genai

    yarn add @langchain/google-genai

    pnpm add @langchain/google-genai

Usage[​](#usage "Direct link to Usage")
---------------------------------------

tip

We're unifying model params across all packages. We now suggest using `model` instead of `modelName`, and `apiKey` for API keys.

    import { ChatGoogleGenerativeAI } from "@langchain/google-genai";import { HarmBlockThreshold, HarmCategory } from "@google/generative-ai";/* * Before running this, you should make sure you have created a * Google Cloud Project that has `generativelanguage` API enabled. * * You will also need to generate an API key and set * an environment variable GOOGLE_API_KEY * */// Textconst model = new ChatGoogleGenerativeAI({  model: "gemini-pro",  maxOutputTokens: 2048,  safetySettings: [    {      category: HarmCategory.HARM_CATEGORY_HARASSMENT,      threshold: HarmBlockThreshold.BLOCK_LOW_AND_ABOVE,    },  ],});// Batch and stream are also supportedconst res = await model.invoke([  [    "human",    "What would be a good company name for a company that makes colorful socks?",  ],]);console.log(res);/*  AIMessage {    content: '1. Rainbow Soles\n' +      '2. Toe-tally Colorful\n' +      '3. Bright Sock Creations\n' +      '4. Hue Knew Socks\n' +      '5. The Happy Sock Factory\n' +      '6. Color Pop Hosiery\n' +      '7. Sock It to Me!\n' +      '8. Mismatched Masterpieces\n' +      '9. Threads of Joy\n' +      '10. Funky Feet Emporium\n' +      '11. Colorful Threads\n' +      '12. Sole Mates\n' +      '13. Colorful Soles\n' +      '14. Sock Appeal\n' +      '15. Happy Feet Unlimited\n' +      '16. The Sock Stop\n' +      '17. The Sock Drawer\n' +      '18. Sole-diers\n' +      '19. Footloose Footwear\n' +      '20. Step into Color',    name: 'model',    additional_kwargs: {}  }*/

#### API Reference:

*   [ChatGoogleGenerativeAI](https://api.js.langchain.com/classes/langchain_google_genai.ChatGoogleGenerativeAI.html) from `@langchain/google-genai`

Multimodal support[​](#multimodal-support "Direct link to Multimodal support")
------------------------------------------------------------------------------

To provide an image, pass a human message with a `content` field set to an array of content objects. Each content object where each dict contains either an image value (type of image\_url) or a text (type of text) value. The value of image\_url must be a base64 encoded image (e.g., data:image/png;base64,abcd124):

    import fs from "fs";import { ChatGoogleGenerativeAI } from "@langchain/google-genai";import { HumanMessage } from "@langchain/core/messages";// Multi-modalconst vision = new ChatGoogleGenerativeAI({  model: "gemini-pro-vision",  maxOutputTokens: 2048,});const image = fs.readFileSync("./hotdog.jpg").toString("base64");const input2 = [  new HumanMessage({    content: [      {        type: "text",        text: "Describe the following image.",      },      {        type: "image_url",        image_url: `data:image/png;base64,${image}`,      },    ],  }),];const res2 = await vision.invoke(input2);console.log(res2);/*  AIMessage {    content: ' The image shows a hot dog in a bun. The hot dog is grilled and has a dark brown color. The bun is toasted and has a light brown color. The hot dog is in the center of the bun.',    name: 'model',    additional_kwargs: {}  }*/// Multi-modal streamingconst res3 = await vision.stream(input2);for await (const chunk of res3) {  console.log(chunk);}/*  AIMessageChunk {    content: ' The image shows a hot dog in a bun. The hot dog is grilled and has grill marks on it. The bun is toasted and has a light golden',    name: 'model',    additional_kwargs: {}  }  AIMessageChunk {    content: ' brown color. The hot dog is in the center of the bun.',    name: 'model',    additional_kwargs: {}  }*/

#### API Reference:

*   [ChatGoogleGenerativeAI](https://api.js.langchain.com/classes/langchain_google_genai.ChatGoogleGenerativeAI.html) from `@langchain/google-genai`
*   [HumanMessage](https://api.js.langchain.com/classes/langchain_core_messages.HumanMessage.html) from `@langchain/core/messages`

Gemini Prompting FAQs[​](#gemini-prompting-faqs "Direct link to Gemini Prompting FAQs")
---------------------------------------------------------------------------------------

As of the time this doc was written (2023/12/12), Gemini has some restrictions on the types and structure of prompts it accepts. Specifically:

1.  When providing multimodal (image) inputs, you are restricted to at most 1 message of "human" (user) type. You cannot pass multiple messages (though the single human message may have multiple content entries)
2.  System messages are not natively supported, and will be merged with the first human message if present.
3.  For regular chat conversations, messages must follow the human/ai/human/ai alternating pattern. You may not provide 2 AI or human messages in sequence.
4.  Message may be blocked if they violate the safety checks of the LLM. In this case, the model will return an empty response.

* * *

#### Help us out by providing feedback on this documentation page:

[

Previous

Friendli

](/v0.1/docs/integrations/chat/friendli/)[

Next

(Legacy) Google PaLM/VertexAI

](/v0.1/docs/integrations/chat/google_palm/)

*   [Usage](#usage)
*   [Multimodal support](#multimodal-support)
*   [Gemini Prompting FAQs](#gemini-prompting-faqs)

Community

*   [Discord](https://discord.gg/cU2adEyC7w)
*   [Twitter](https://twitter.com/LangChainAI)

GitHub

*   [Python](https://github.com/langchain-ai/langchain)
*   [JS/TS](https://github.com/langchain-ai/langchainjs)

More

*   [Homepage](https://langchain.com)
*   [Blog](https://blog.langchain.dev)

Copyright © 2024 LangChain, Inc.