Skip to main content

Toolkit For Creating Gemini Based Agents

Project description

img.png

gemini-agents-toolkit

The project is an SDK for implementing Agent-Driven Development (ADD) applications. ADD is aimed to move routine code tasks to the LLM agents and concentrate on the algorithmic and fun part of the business logic implementation.

license discord youtube

⭐ Add a star for a duck!


How It Works  •  Requirements  •  Getting Started  •  Run Examples  •  How To Contribute


🚀How It Works

gemini-agents-toolkit is an SDK that creates LLM agents and enables their integration into pipelines for modifying generated responses.

See the picture describing the process:

img.png

The roles of every component are as follows:

  1. Application: Define custom functions to guide LLM executions, launch agents for task execution, and combine tasks into pipelines.
  2. gemini-agents-toolkit: A tool for creating agents, executing pipelines and interacting with Gemini.
  3. Vertex AI API: A Google API for interacting with Gemini models.
  4. Gemini: LLM models that generate text, code, or instructions to guide agent execution.

📝Requirements

❗️ The project uses Vertex AI API to access Gemini models, which is paid Google API ❗

You can find pricing here.

Agents request text generating only, which is paid for Text Input and Text Output. Running a pipeline will produce several requests depending on the pipeline's complexity.

========

Supported Python versions: Python 3.8 to 3.12 (gcloud requirement)


🤖Getting Started

Big Picture

This project uses Gemini via Google Cloud API. To use the project you must first set up the following:

  • Google Cloud account with Billing
  • Allow requesting LLM models via APIs (pricing)
  • Set up gcloud tool in your environment
  • Set up the project

Google Cloud account with Billing

  1. Go to Google AI Studio, select "Get API key" in the menu on the left. Click "Create API" key button and select Google Cloud project to associate API key with.
  2. Click suggestion to "Set up Billing" near your new API key and initialize your Google Billing account.
  3. [Optional] You can add a Budget for your account, which will email you when your spendings reach configured thresholds. Choose "Budgets & alerts" in the menu on the left in Billing console and follow the instruction.
  4. After this step, you should be able to test your Google Cloud project set up running curl command presented under the API keys table.

Allow requesting LLM models via APIs

  1. The project uses Vertex AI API to request Gemini models, Vertex AI API should be allowed in your Google cloud account. You need to allow it from the Google Cloud Vertex AI API product page.
  2. [Optional] With these instructions you can limit or increase your API requests quota.

Set up gcloud tool in your environment

Follow the Google instructions to install gcloud and to initialize it.

Set up the project

  1. Clone gemini-agents-toolkit repository.
  2. For the development process, you probably will need other repositories from the project. You can find other packages here. Currently, the project uses this list of other repositories:
Module Description Link
json-agent Agent to convert data formats to JSON link
  1. gemini-agents-toolkit uses several environment variables that you need to set up:
Env Variable Description Which Value To Set Command To Set Up
GOOGLE_PROJECT Project id from Google AI Studio Open Google AI studio and choose from the table with projects EXPORT GOOGLE_PROJECT=my-amazing-project
GOOGLE_API_KEY API key from Google AI Studio to request your project Find out the API key in the row with your project EXPORT GOOGLE_API_KEY=my-amazing-project
GOOGLE_REGION You can choose which region API to request You can ignore env for the default value us-west1, or find all available regions in Google Cloud docs EXPORT GOOGLE_REGION=my-amazing-project
  1. Now, you need to register custom Python modules to use them in examples:
export PYTHONPATH=/my/custom/module/path:$PYTHONPATH

Modules you need to register:

Module Description Link
config Using env variables and constants link
json-agent Agent to convert data formats to JSON link

❗ To have your variables set up permanently, register them in .bashrc (.zshrc etc, depending on your operational system and shell).


🎉Run Examples

Now it's time for fun!

Run examples/simple_example.py with

python examples/simple_example.py

In this example, you have created a custom function and gave Gemini ability to use your function:

See code
import vertexai
from config import (PROJECT_ID, REGION, SIMPLE_MODEL)
from gemini_agents_toolkit import agent


def say_to_duck(say: str):
    """say something to a duck"""
    return f"duck answer is: duck duck {say} duck duck duck"


vertexai.init(project=PROJECT_ID, location=REGION)

all_functions = [say_to_duck]
duck_comms_agent = agent.create_agent_from_functions_list(functions=all_functions,
                                                          model_name=SIMPLE_MODEL)

print(duck_comms_agent.send_message("say to the duck message: I am hungry"))

=>>>><<<<=

You can create several agents, which will delegate functions execution to each other:

python examples/multi_agent_example.py
See code
import datetime
import vertexai
from config import (PROJECT_ID, REGION, SIMPLE_MODEL, DEFAULT_MODEL)
from gemini_agents_toolkit import agent
from gemini_agents_toolkit.history_utils import summarize

vertexai.init(project=PROJECT_ID, location=REGION)


def generate_duck_comms_agent():
    """create an agent to say to a duck"""

    def say_to_duck(say: str):
        """say something to a duck"""
        return f"duck answer is: duck duck {say} duck duck duck"

    return agent.create_agent_from_functions_list(
        functions=[say_to_duck],
        delegation_function_prompt=("""Agent can communicat to ducks and can say something to them.
                                    And provides the answer from the duck."""),
        model_name=DEFAULT_MODEL)


def generate_time_checker_agent():
    """create an agent to get the time"""

    def get_local_time():
        """get the current local time"""
        return datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

    return agent.create_agent_from_functions_list(
        functions=[get_local_time],
        delegation_function_prompt="Agent can provide the current local time.",
        model_name=SIMPLE_MODEL)


duck_comms_agent = generate_duck_comms_agent()
time_checker_agent = generate_time_checker_agent()

main_agent = agent.create_agent_from_functions_list(
    delegates=[time_checker_agent, duck_comms_agent],
    model_name=SIMPLE_MODEL)

result_say_operation, history_say_operation = main_agent.send_message("say to the duck message: I am hungry")
result_time_operation, history_time_operation = main_agent.send_message("can you tell me what time it is?")

print(result_say_operation)
print(result_time_operation)
print(summarize(agent=main_agent, history=history_say_operation + history_time_operation))

=>>>><<<<=

You can execute your code periodicaly:

python examples/simple_scheduler_example.py
See code
import time
import vertexai
from config import (PROJECT_ID, REGION, SIMPLE_MODEL)
from gemini_agents_toolkit import agent


def say_to_duck(say: str):
    """say something to a duck"""
    return f"duck answer is: duck duck {say} duck duck duck"


def print_msg_from_agent(msg: str):
    """print message in console"""
    print(msg)


vertexai.init(project=PROJECT_ID, location=REGION)

all_functions = [say_to_duck]
duck_comms_agent = agent.create_agent_from_functions_list(functions=all_functions,
                                                          model_name=SIMPLE_MODEL,
                                                          add_scheduling_functions=True,
                                                          on_message=print_msg_from_agent)

# no need to print result directly since we passed to agent on_message
duck_comms_agent.send_message("can you be saying, each minute, to the duck that I am hungry")

# wait 3 min to see results
time.sleep(180)

Find more advanced examples in the examples directory.


💡How To Contribute

If you want to be a code contributor

  • Just pick up a task from the Issues in this repository, assign it to you and raise a pull request with proposed changes.
  • If you need help, join the Discord and ask for help. The contributors team will be happy to see you!

If you want to contribute ideas or participate discussions

Feel free to join our Discord, where you can discuss the project with the contributors and probably impact on the way the project evolves.


Back to top

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

gemini_agents_toolkit-3.5.0.tar.gz (19.4 kB view details)

Uploaded Source

Built Distribution

gemini_agents_toolkit-3.5.0-py3-none-any.whl (35.5 kB view details)

Uploaded Python 3

File details

Details for the file gemini_agents_toolkit-3.5.0.tar.gz.

File metadata

  • Download URL: gemini_agents_toolkit-3.5.0.tar.gz
  • Upload date:
  • Size: 19.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/5.1.1 CPython/3.12.5

File hashes

Hashes for gemini_agents_toolkit-3.5.0.tar.gz
Algorithm Hash digest
SHA256 0b153dbf16150ba2ba962672cb19656c75f344bdfaabeeb6b50a253e8564e191
MD5 c109aa1d73710b325a360e699b033464
BLAKE2b-256 47627f6e936e90bd81e8faa4a557b2f2eb8b10b5208f04bee164432aaeef8d57

See more details on using hashes here.

File details

Details for the file gemini_agents_toolkit-3.5.0-py3-none-any.whl.

File metadata

File hashes

Hashes for gemini_agents_toolkit-3.5.0-py3-none-any.whl
Algorithm Hash digest
SHA256 0f1593e6071548a3329b8c511c7fa43e7ee27837c4c472dc6a315720f2ae284f
MD5 4b39bdc78a00d43380ca276e8861c821
BLAKE2b-256 7191125e9524c904ff49c8c8903c72bc5a619baef6fc7d0f167cdef07eccc4f2

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page