| title | Google AI |
|---|---|
| id | integrations-google-ai |
| description | Google AI integration for Haystack |
| slug | /integrations-google-ai |
Generates text using multimodal Gemini models through Google AI Studio.
from haystack.utils import Secret
from haystack_integrations.components.generators.google_ai import GoogleAIGeminiGenerator
gemini = GoogleAIGeminiGenerator(model="gemini-2.0-flash", api_key=Secret.from_token("<MY_API_KEY>"))
res = gemini.run(parts = ["What is the most interesting thing you know?"])
for answer in res["replies"]:
print(answer)import requests
from haystack.utils import Secret
from haystack.dataclasses.byte_stream import ByteStream
from haystack_integrations.components.generators.google_ai import GoogleAIGeminiGenerator
BASE_URL = (
"https://raw.githubusercontent.com/deepset-ai/haystack-core-integrations"
"/main/integrations/google_ai/example_assets"
)
URLS = [
f"{BASE_URL}/robot1.jpg",
f"{BASE_URL}/robot2.jpg",
f"{BASE_URL}/robot3.jpg",
f"{BASE_URL}/robot4.jpg"
]
images = [
ByteStream(data=requests.get(url).content, mime_type="image/jpeg")
for url in URLS
]
gemini = GoogleAIGeminiGenerator(model="gemini-2.0-flash", api_key=Secret.from_token("<MY_API_KEY>"))
result = gemini.run(parts = ["What can you tell me about this robots?", *images])
for answer in result["replies"]:
print(answer)def __init__(*,
api_key: Secret = Secret.from_env_var("GOOGLE_API_KEY"),
model: str = "gemini-2.0-flash",
generation_config: Optional[Union[GenerationConfig,
dict[str, Any]]] = None,
safety_settings: Optional[dict[HarmCategory,
HarmBlockThreshold]] = None,
streaming_callback: Optional[Callable[[StreamingChunk],
None]] = None)Initializes a GoogleAIGeminiGenerator instance.
To get an API key, visit: https://makersuite.google.com
Arguments:
api_key: Google AI Studio API key.model: Name of the model to use. For available models, see https://ai.google.dev/gemini-api/docs/models/geminigeneration_config: The generation configuration to use. This can either be aGenerationConfigobject or a dictionary of parameters. For available parameters, see theGenerationConfigAPI reference.safety_settings: The safety settings to use. A dictionary withHarmCategoryas keys andHarmBlockThresholdas values. For more information, see the API referencestreaming_callback: A callback function that is called when a new token is received from the stream. The callback function accepts StreamingChunk as an argument.
def to_dict() -> dict[str, Any]Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "GoogleAIGeminiGenerator"Deserializes the component from a dictionary.
Arguments:
data: Dictionary to deserialize from.
Returns:
Deserialized component.
@component.output_types(replies=list[str])
def run(parts: Variadic[Union[str, ByteStream, Part]],
streaming_callback: Optional[Callable[[StreamingChunk], None]] = None)Generates text based on the given input parts.
Arguments:
parts: A heterogeneous list of strings,ByteStreamorPartobjects.streaming_callback: A callback function that is called when a new token is received from the stream.
Returns:
A dictionary containing the following key:
replies: A list of strings containing the generated responses.
Completes chats using Gemini models through Google AI Studio.
It uses the ChatMessage
dataclass to interact with the model.
from haystack.utils import Secret
from haystack.dataclasses.chat_message import ChatMessage
from haystack_integrations.components.generators.google_ai import GoogleAIGeminiChatGenerator
gemini_chat = GoogleAIGeminiChatGenerator(model="gemini-2.0-flash", api_key=Secret.from_token("<MY_API_KEY>"))
messages = [ChatMessage.from_user("What is the most interesting thing you know?")]
res = gemini_chat.run(messages=messages)
for reply in res["replies"]:
print(reply.text)
messages += res["replies"] + [ChatMessage.from_user("Tell me more about it")]
res = gemini_chat.run(messages=messages)
for reply in res["replies"]:
print(reply.text)from typing import Annotated
from haystack.utils import Secret
from haystack.dataclasses.chat_message import ChatMessage
from haystack.components.tools import ToolInvoker
from haystack.tools import create_tool_from_function
from haystack_integrations.components.generators.google_ai import GoogleAIGeminiChatGenerator
# example function to get the current weather
def get_current_weather(
location: Annotated[str, "The city for which to get the weather, e.g. 'San Francisco'"] = "Munich",
unit: Annotated[str, "The unit for the temperature, e.g. 'celsius'"] = "celsius",
) -> str:
return f"The weather in {location} is sunny. The temperature is 20 {unit}."
tool = create_tool_from_function(get_current_weather)
tool_invoker = ToolInvoker(tools=[tool])
gemini_chat = GoogleAIGeminiChatGenerator(
model="gemini-2.0-flash-exp",
api_key=Secret.from_token("<MY_API_KEY>"),
tools=[tool],
)
user_message = [ChatMessage.from_user("What is the temperature in celsius in Berlin?")]
replies = gemini_chat.run(messages=user_message)["replies"]
print(replies[0].tool_calls)
# actually invoke the tool
tool_messages = tool_invoker.run(messages=replies)["tool_messages"]
messages = user_message + replies + tool_messages
# transform the tool call result into a human readable message
final_replies = gemini_chat.run(messages=messages)["replies"]
print(final_replies[0].text)def __init__(*,
api_key: Secret = Secret.from_env_var("GOOGLE_API_KEY"),
model: str = "gemini-2.0-flash",
generation_config: Optional[Union[GenerationConfig,
dict[str, Any]]] = None,
safety_settings: Optional[dict[HarmCategory,
HarmBlockThreshold]] = None,
tools: Optional[list[Tool]] = None,
tool_config: Optional[content_types.ToolConfigDict] = None,
streaming_callback: Optional[StreamingCallbackT] = None)Initializes a GoogleAIGeminiChatGenerator instance.
To get an API key, visit: https://aistudio.google.com/
Arguments:
api_key: Google AI Studio API key. To get a key, see Google AI Studio.model: Name of the model to use. For available models, see https://ai.google.dev/gemini-api/docs/models/gemini.generation_config: The generation configuration to use. This can either be aGenerationConfigobject or a dictionary of parameters. For available parameters, see the API reference.safety_settings: The safety settings to use. A dictionary withHarmCategoryas keys andHarmBlockThresholdas values. For more information, see the API referencetools: A list of tools for which the model can prepare calls.tool_config: The tool config to use. See the documentation for ToolConfig.streaming_callback: A callback function that is called when a new token is received from the stream. The callback function accepts StreamingChunk as an argument.
def to_dict() -> dict[str, Any]Serializes the component to a dictionary.
Returns:
Dictionary with serialized data.
@classmethod
def from_dict(cls, data: dict[str, Any]) -> "GoogleAIGeminiChatGenerator"Deserializes the component from a dictionary.
Arguments:
data: Dictionary to deserialize from.
Returns:
Deserialized component.
@component.output_types(replies=list[ChatMessage])
def run(messages: list[ChatMessage],
streaming_callback: Optional[StreamingCallbackT] = None,
*,
tools: Optional[list[Tool]] = None)Generates text based on the provided messages.
Arguments:
messages: A list ofChatMessageinstances, representing the input messages.streaming_callback: A callback function that is called when a new token is received from the stream.tools: A list of tools for which the model can prepare calls. If set, it will override thetoolsparameter set during component initialization.
Returns:
A dictionary containing the following key:
replies: A list containing the generated responses asChatMessageinstances.
@component.output_types(replies=list[ChatMessage])
async def run_async(messages: list[ChatMessage],
streaming_callback: Optional[StreamingCallbackT] = None,
*,
tools: Optional[list[Tool]] = None)Async version of the run method. Generates text based on the provided messages.
Arguments:
messages: A list ofChatMessageinstances, representing the input messages.streaming_callback: A callback function that is called when a new token is received from the stream.tools: A list of tools for which the model can prepare calls. If set, it will override thetoolsparameter set during component initialization.
Returns:
A dictionary containing the following key:
replies: A list containing the generated responses asChatMessageinstances.