A framework for creating AI agents, agent managers and Memory stores(buffer memory and Redis memory store).
Project description
Agentic
A simple framework for creating AI agents and agent managers with LLM backends.
Installation
pip install agentrix
Features
🤖 Flexible Agent System: Create specialized agents with different capabilities 🧠 Memory Management: Built-in chat memory and Redis persistence options 🔄 Agent Orchestration: Manager agents to coordinate specialized sub-agents 📄 JSON Parsing: Tools for structured data validation and extraction 🌐 Web Scraping: Integrated web browsing capabilities for research
Usage
from agentrix import Tool, Agent, ManagerAgent
import openai
# Initialize OpenAI client
client = AzureOpenAI(
api_key=os.getenv('AZURE_OPENAI_API_KEY'),
api_version="2024-02-15-preview",
azure_endpoint=os.getenv('AZURE_OPENAI_ENDPOINT')
)
# Create a simple tool
calculator_tool = Tool(
name="calculator",
description="Calculate a mathematical expression",
function=lambda expression: eval(expression),
inputs={"expression": ["string", "The math expression to evaluate"]}
)
# Create an agent with the tool
math_agent = Agent(
name="MathAgent",
system_prompt="You are a helpful mathematical assistant.",
llm=client,
tools=[calculator_tool],
verbose=True
)
# Use the agent
result = math_agent.go("What is 25 squared plus 13?")
print(result)
Creating a Manager Agent
# Create specialized agents
researcher = Agent("Researcher", "You research facts thoroughly.", client)
analyst = Agent("Analyst", "You analyze data and provide insights.", client)
# Create a manager agent
manager = ManagerAgent(
name="Manager",
system_prompt="You coordinate multiple agents to solve complex problems.",
llm=client,
agents=[(researcher, "Use for researching facts"), (analyst, "Use for data analysis")],
parallel=True,
verbose=True
)
# Use the manager agent
result = manager.go("Research the population of France and analyze its growth trend.")
print(result)
Web Scraping Capabilities
from agentrix import Agent, web_scraper_tools
# Create a research agent with web browsing capabilities
researcher = Agent(
name="WebResearcher",
system_prompt="""You are a research assistant that can browse the web.
Use the web browsing tools to find information and answer questions.
Always cite your sources with the URL.""",
llm=client,
tools=web_scraper_tools,
verbose=True,
memory=ChatMemory()
)
# Research a topic using web browsing
result = researcher.go("What are the latest developments in quantum computing?")
print(result)
Using Redis for Persistent Memory
import redis
from agentrix import Agent, RedisMemory
# Connect to Redis
redis_client = redis.Redis(host='localhost', port=6379, db=0)
# Create Redis-backed memory
persistent_memory = RedisMemory(
redis_client=redis_client,
agent_id="unique-agent-id", # Optional, will be auto-generated if not provided
max_messages=50,
ttl=86400 # 24 hour time-to-live
)
# Create agent with persistent memory
agent = Agent(
name="PersistentAgent",
system_prompt="You remember conversations even after restarts.",
llm=client,
verbose=True,
memory=persistent_memory
)
# Conversations will persist across application restarts
JSON Structure Validation
from agentrix import JsonModel, Field, JsonOutputParser
# Define a structured data model
class ProductInfo(JsonModel):
name = Field(str, required=True)
price = Field(float, required=True)
description = Field(str, required=False, default="No description provided")
in_stock = Field(bool, required=True)
# Create a parser for this model
parser = JsonOutputParser(ProductInfo)
# Use with an agent
def extract_product_info(text):
try:
# This will validate the data against the model
product = parser.parse(text)
return product.to_dict()
except Exception as e:
return f"Error parsing product info: {str(e)}"
# Create a tool for the agent
product_extractor_tool = Tool(
name="extract_product",
description="Extract structured product information from text",
function=extract_product_info,
inputs={"text": ["string", "Text containing product information"]}
)
Advanced: Creating Custom Tools
from agentrix import Tool
# Define a function for the tool
def weather_lookup(location):
# In a real app, this would call a weather API
return f"The weather in {location} is currently sunny and 72°F"
# Create a tool from the function
weather_tool = Tool(
name="weather_lookup",
description="Look up the current weather for a location",
function=weather_lookup,
inputs={
"location": ["string", "The city and state/country to get weather for"]
}
)
# Add the tool to an agent
agent = Agent(
name="WeatherAssistant",
system_prompt="You provide weather information.",
llm=client,
tools=[weather_tool],
memory=ChatMemory()
)
Contributing Contributions are welcome! Please feel free to submit a Pull Request.
License This project is licensed under the MIT License - see the LICENSE file for details.
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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agentrix-0.0.4.tar.gz.
File metadata
- Download URL: agentrix-0.0.4.tar.gz
- Upload date:
- Size: 14.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e24d825d435a761394cbb08e3bddf4ca4d40e3f8ea224c2507bb1a3fd275f81b
|
|
| MD5 |
25030bbc82922e0a3ef72d1d7200189e
|
|
| BLAKE2b-256 |
409503bc39f8aec31034ef4b198266f45938c4b2e5f096c1de5c503c9d8804a6
|
File details
Details for the file agentrix-0.0.4-py3-none-any.whl.
File metadata
- Download URL: agentrix-0.0.4-py3-none-any.whl
- Upload date:
- Size: 13.9 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.11.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
874139ec92a61c3eca9ae7495f95e4fc736f80014a6d10f32b0eb7b53211c291
|
|
| MD5 |
98e4184447d2b8c60266dca70194489a
|
|
| BLAKE2b-256 |
904cd7bb3dae3a484cad8ca054a22b00fcb2a9594adf9f18dc9e92c0a23dbc26
|