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.8.tar.gz (40.9 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.8-py3-none-any.whl (54.8 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: agent_factory_core-0.3.8.tar.gz
  • Upload date:
  • Size: 40.9 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.8.tar.gz
Algorithm Hash digest
SHA256 2d9501bf9fcc4bd5e2879f32a6d92848b0786adb844dbb701de088f08327ea14
MD5 a4c42e304e34eadfe341cd28a1a5c237
BLAKE2b-256 bec3400ce94a5bb8ac9f2688d7a0dc727955be1ca5206dd7c30026542f06e911

See more details on using hashes here.

File details

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

File metadata

File hashes

Hashes for agent_factory_core-0.3.8-py3-none-any.whl
Algorithm Hash digest
SHA256 604dc6543263e9099786c346c78ba331358cb3a0a1b8901b1f9f39168f820122
MD5 8707c45acfc5015a7c17a34145829ede
BLAKE2b-256 69756cf0e239d682b583a0dcee8bee46ae022be80bf21a47812352028c84c4e9

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