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.6.tar.gz (40.4 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.6-py3-none-any.whl (54.4 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agent_factory_core-0.3.6.tar.gz
  • Upload date:
  • Size: 40.4 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.6.tar.gz
Algorithm Hash digest
SHA256 7066ab3e91e91d9cd1044e4a5815cf7e7c9c43a244473281a2863eb3451251dc
MD5 76abc27a9fa11f05fa71a192c70a3d98
BLAKE2b-256 c1ae95e672ead4f09fd2179f19de4975c95a3a9c0eef7c02c39c3f67b8f04a10

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for agent_factory_core-0.3.6-py3-none-any.whl
Algorithm Hash digest
SHA256 6517bd5d178c27af580b6b511cd959f4b479dcae91833fbae26aa475dd0e607b
MD5 106e6d30bbea72bc3329cee136d367c8
BLAKE2b-256 756060bd39ba1808ec5b2c0de0ed9df9ff78a369cf0c38a5f671f46957297b40

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