Skip to main content

Core library for building AI agents with pluggable models and channels

Project description

Agent Factory Core

Core library for building AI agents with pluggable models and channels.

Installation

# Basic installation
pip install agent-factory-core

# With Bedrock support
pip install agent-factory-core[bedrock]

# With Anthropic API support
pip install agent-factory-core[anthropic]

# With Slack channel support
pip install agent-factory-core[slack]

# With Teams channel support
pip install agent-factory-core[teams]

# All providers
pip install agent-factory-core[all]

Quick Start

Basic Agent

from agent_factory import AgentOrchestrator
from agent_factory.models import BedrockModel
from agent_factory.tools import tool

# Define a tool
@tool
def get_weather(city: str) -> str:
    """Get current weather for a city."""
    return f"Weather in {city}: 72°F, Sunny"

# Create orchestrator with Bedrock
orchestrator = AgentOrchestrator(
    model=BedrockModel(model_id="anthropic.claude-3-5-sonnet-20241022-v2:0"),
    system_prompt="You are a helpful weather assistant.",
    tools=[get_weather],
)

# Invoke
response = orchestrator.invoke(
    prompt="What's the weather in Miami?",
    session_id="user-123",
)
print(response["content"])

Using Anthropic API

from agent_factory import AgentOrchestrator
from agent_factory.models import AnthropicModel

orchestrator = AgentOrchestrator(
    model=AnthropicModel(
        model_id="claude-3-5-sonnet-20241022",
        api_key="sk-ant-...",  # Or use ANTHROPIC_API_KEY env var
    ),
    system_prompt="You are a helpful assistant.",
)

Slack Channel Integration

from agent_factory.channels import SlackChannel

# Create Slack channel
slack = SlackChannel(
    bot_token="xoxb-...",
    signing_secret="...",
)

# Handle incoming event
response = slack.handle_event(event_body)

# Send message
slack.send_message(
    channel="#general",
    text="Hello from the agent!",
)

Teams Channel Integration

from agent_factory.channels import TeamsChannel

# Create Teams channel
teams = TeamsChannel(
    app_id="your-app-id",        # Or use TEAMS_APP_ID env var
    app_password="your-secret",   # Or use TEAMS_APP_PASSWORD env var
)

# Handle incoming activity
message = teams.handle_event(activity)

# Send response
teams.send_message(
    conversation_id=message.channel_id,
    text="Hello from the bot!",
    service_url=message.metadata["service_url"],
)

# Send Adaptive Card
teams.send_adaptive_card(
    conversation_id=message.channel_id,
    card={"type": "AdaptiveCard", "body": [...]},
    service_url=message.metadata["service_url"],
)

Lambda Handler

from agent_factory import AgentOrchestrator
from agent_factory.models import BedrockModel
from agent_factory.handlers import LambdaHandler

orchestrator = AgentOrchestrator(
    model=BedrockModel(),
    system_prompt="You are a helpful assistant.",
)
handler = LambdaHandler(orchestrator)

def lambda_handler(event, context):
    return handler.handle(event)

Architecture

Models

The library provides a pluggable model interface:

  • BedrockModel - AWS Bedrock (Claude, Llama, etc.)
  • AnthropicModel - Direct Anthropic API

Create custom models by extending BaseModel:

from agent_factory.models import BaseModel, ModelResponse

class CustomModel(BaseModel):
    def converse(self, messages, system_prompt, tools=None, **kwargs):
        # Your implementation
        return ModelResponse(content="...", stop_reason=StopReason.END_TURN)

Channels

Supported channels:

  • SlackChannel - Slack integration
  • TeamsChannel - Microsoft Teams integration
  • API - Use LambdaHandler with API Gateway

Channel Allowlist

Restrict which Slack channels can interact with your agent:

from agent_factory.channels import SlackChannel

# Only allow specific channels
slack = SlackChannel(
    allowed_channels=["C0123456789", "C9876543210"],
)

# Or use environment variable (comma-separated)
# SLACK_ALLOWED_CHANNELS=C0123456789,C9876543210
slack = SlackChannel()  # Will read from env var

Messages from unauthorized channels will raise ChannelAccessDeniedError.

Tools

Define tools with the @tool decorator:

from agent_factory.tools import tool

@tool
def search_database(query: str, limit: int = 10) -> list:
    """Search the database for records.

    Args:
        query: Search query string
        limit: Maximum results to return
    """
    return [{"id": 1, "name": "Result"}]

Configuration

Environment Variable Description
ANTHROPIC_API_KEY Anthropic API key
AWS_REGION AWS region for Bedrock
SLACK_BOT_TOKEN Slack bot token
SLACK_SIGNING_SECRET Slack signing secret
TEAMS_APP_ID Microsoft Teams App ID
TEAMS_APP_PASSWORD Microsoft Teams App Password
TEAMS_TENANT_ID Azure AD Tenant ID (optional)

License

MIT

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

agent_factory_core-0.3.5.tar.gz (40.3 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

agent_factory_core-0.3.5-py3-none-any.whl (54.2 kB view details)

Uploaded Python 3

File details

Details for the file agent_factory_core-0.3.5.tar.gz.

File metadata

  • Download URL: agent_factory_core-0.3.5.tar.gz
  • Upload date:
  • Size: 40.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.13.12

File hashes

Hashes for agent_factory_core-0.3.5.tar.gz
Algorithm Hash digest
SHA256 27494fc36214f86bf2b909fd0bb22d83395d3fd5e5d45990175fafe7bc9c69c9
MD5 29072033c8c66bc4234ce868450120b5
BLAKE2b-256 abc2bd0d69e18ce893e2c04916bc72376162d98a8058d9a5ae9f4881c7698236

See more details on using hashes here.

File details

Details for the file agent_factory_core-0.3.5-py3-none-any.whl.

File metadata

File hashes

Hashes for agent_factory_core-0.3.5-py3-none-any.whl
Algorithm Hash digest
SHA256 8e91e2f627fe23cb9ae77275c6fe17127f1814cb8e65598efb96035bbb4ab96f
MD5 1607f7bcec02fdf57ef71e39aa4afe8c
BLAKE2b-256 46f1761a208531295d7417d9344a15fe40c031e03143cfbdf62976b95510b5e6

See more details on using hashes here.

Supported by

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