Skip to main content

GentleAgents

GentleAgents is a simple AI agents library built as a learning project by me to understand AI Agent workflows. This is not a production-ready library but rather a minimal implementation to explore AI agent architectures.

Inspiration

This project draws inspiration from various AI agent libraries, including:

What This Is

  • A barebones implementation of AI agents that interact with tools.
  • Focused on simplicity and not intended for real-world production use.
  • Built using OpenAI's API to process messages and invoke tool functions, and Pydantic for validations.

What This Is Not

  • Not production-ready—use proper frameworks if deploying serious AI agents.
  • Not feature-rich—it is minimal by design.

Installation

Install using pip:

pip install gentleagents

Usage

(Recommended) Here is a link to a notebook for your ease: https://colab.research.google.com/drive/13wQVAKotc1PXDr0MTnUxdanP8KBFtb8m#scrollTo=_BS8J5t-jPZK

Also given below is a short guide:

Place your API keys in a .env file

Example .env file:

OPENAI_API_KEY="OPENAI_KEY_IF_USING_OPENAI"
SENDER_EMAIL="OPTIONAL_FOR_EMAIL_EXAMPLE_TOOL"
SENDER_PASSWORD="OPTIONAL_FOR_EMAIL_EXAMPLE_TOOL"
GROQ_API_KEY="GROQ_KEY_IF_USING_GROQ"
GROQ_API_URL="https://api.groq.com/openai/v1"

Set up your "tools" (any Python functions)

Make sure to include the function doc strings as that helps the Agent's performance

#Define your functions

#example tool 1
def add_numbers(a: int, b: int) -> int:
    """Use this function to add two numbers.
    
    Args:
        a: int: The first number
        b: int: The second number

    Returns:
        int: sum of a + b
    """
    return a + b

#example tool 2
def sub_numbers(a: int, b: int) -> int:
    """Use this function to subtract two numbers.
    
    Args:
        a: int: The first number
        b: int: The second number

    Returns:
        int: result of a - b
    """
    return a - b

#OPTIONAL Example tool

# from email.mime.text import MIMEText
# from email.mime.multipart import MIMEMultipart
# import smtplib

# def send_email(recipient: str, subject: str, content: str) -> str: 
#     """Use this function to send an email.

#     Args:
#         recipient:str: the recipients' email, comma seperated if multiple
#         subject:str: the email subject
#         content:str: the email body
#     """



#     #set your google smtp email and password here
#     SENDER_EMAIL=""
#     SENDER_PASSWORD=""




#     sender_email = SENDER_EMAIL
#     sender_password = SENDER_PASSWORD

#     message = MIMEMultipart()
#     message["From"] = sender_email
#     message["To"] = recipient
#     message["Subject"] = subject

#     message.attach(MIMEText(content, "plain"))

#     try:
#         with smtplib.SMTP_SSL("smtp.gmail.com", 465) as server:
#             server.login(sender_email, sender_password)
#             server.sendmail(sender_email, recipient, message.as_string())
        
#         status = f"Successfully sent email to {recipient}"
#         return status
#     except Exception as e:
#         print(f"Error in Email tool: {str(e)}")
#         status = "Failed to send email."
#         return status

Then use them in your Agent/Team like so:

For Agent:

agent = Agent(name="Assistant",
            role="""You are an assistant that performs any tasks
            if they can be done by the tools provided to you. You make sure a task is done if a tool
            for it is available""",
            tools={"add_numbers": add_numbers,"sub_numbers": sub_numbers},
            model = "GROQ:llama-3.3-70b-versatile")
            # model = "GROQ:llama-3.3-70b-specdec")
            
            #If using OPENAI:
            # model = "OPENAI:gpt-4-turbo")

response = agent.start_agent("Can you add 5 and 7? And also subtract 9 from 20 thanks man, how are you btw?")

#prints the Agent's working by default, can also save the response in a variable for use
#print(response)

For Team:

add_agent = Agent(
    name="Addition Agent",
    role="Performs simple additions using the provided tool.",
    tools={"add_numbers": add_numbers},
    model="GROQ:llama-3.3-70b-versatile"
    #If using OPENAI:
    # model = "OPENAI:gpt-4-turbo")
)

sub_agent = Agent(
    name="Subtraction Agent",
    role="Performs simple subtractions using the provided tool.",
    tools={"sub_numbers": sub_numbers},
    model="GROQ:llama-3.3-70b-versatile"
    #If using OPENAI:
    # model = "OPENAI:gpt-4-turbo")
)

#optional agent if using the email tool
# email_agent = Agent(
#         name="Email Agent",
#         role="Sends emails using the provided tool.",
#         tools={"send_email": send_email},
#         model="GROQ:llama-3.3-70b-versatile"
#         #If using OPENAI:
#         # model = "OPENAI:gpt-4-turbo")
#     )

lead_agent = Agent(
    name="Lead Agent",
    role="Manages task delegation among specialized agents and summarizes results.",
    tools={},
    model="GROQ:llama-3.3-70b-versatile"
    #If using OPENAI:
    # model = "OPENAI:gpt-4-turbo")
)

team = Team(lead_agent, [add_agent, sub_agent])
tasks = "Add 5 and 3. and oh also subtract 4 from 10 thanks!"

result = team.assign_tasks(tasks)
print("\nFinal Team Output:\n", result)

#To test the email tool/Agent, uncomment below lines
# team_two = Team(lead_agent, [add_agent, sub_agent, email_agent])
# tasks = "Add 5 and 3. And email the answer to abdullah_nizami@live.com, and oh also subtract 4 from 10 thanks!"

# result_two = team_two.assign_tasks(tasks)
# print("\nFinal Team_two Output:\n", result)

License

This project is open-source but intended for learning and experimentation. Feel free to explore and modify, but use proper frameworks for real-world applications.


🚀 Built by Muhammad Abdullah Nizami as a learning project. Thanks for using :) To report any bugs, contribute to this project, or to collaborate on others, reach me at abdullah_nizami@live.com or abdullahnizami@iciltek.com or https://www.linkedin.com/in/muhammad-abdullah-nizami-318041237/

Release files for gentleagents 0.1.4

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for gentleagents 0.1.4
File Size Uploaded
gentleagents-0.1.4.tar.gz 13.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for gentleagents 0.1.4
File Interpreter ABI Platform
gentleagents-0.1.4-py3-none-any.whl Python 3 none any Details

Total release size: 29.4 kB

Release files / gentleagents-0.1.4.tar.gz

Download URL gentleagents-0.1.4.tar.gz
Size 13.7 kB
Tags Source
SHA-256 checksum
How to use checksums
7cfbabcfa18bc0e38bf9b0b168959fd4d84edc38668cf7239cbda69b7e7cebb0
BLAKE2b-256 checksum
How to use checksums
b229f79b9f8da9004ff1de66b73a0cab59dd5e5500f28f6270ff3c060c40362e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.16

Release files / gentleagents-0.1.4-py3-none-any.whl

Download URL gentleagents-0.1.4-py3-none-any.whl
Size 15.8 kB
Tags Python 3
SHA-256 checksum
How to use checksums
bd62f73043073d6f18b7d6b77ce20c5ef92f108a2b59969caddceba3c63c60c5
BLAKE2b-256 checksum
How to use checksums
c579bada4913ec2fae08c3a05bdded62f1f511200088f5675928add3a76a08c4
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.1.0 CPython/3.10.16

Release history Release notifications | RSS feed

This release

0.1.4 This release

2 release files

0.1.3

2 release files

0.1.2

2 release files

0.1.1

2 release files

0.1.0

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page