Integrate Composio's AgentAuth with FastAPI and Django
Project description
Composio Agent Integration
A comprehensive Python package for integrating Composio's AgentAuth architecture with FastAPI and Django web frameworks, along with vector database support, E2B code execution, and workflow management for AI agent applications.
Features
-
Authentication & Authorization
- Seamless integration with Composio's AgentAuth
- Role-based access control (client, admin)
- Token management and validation
-
Framework Support
- FastAPI middleware and security dependencies
- Django authentication backend and middleware
- Framework-specific helpers for both platforms
-
Discussion Management
- Vector database storage (Pinecone, Chroma)
- Semantic search for relevant discussions
- User-specific discussion isolation
-
Code Execution
- Secure sandbox execution via E2B
- Multiple language support (Python, JavaScript)
- Synchronous and asynchronous execution
-
Workflow Management
- Multi-step workflow creation and execution
- Parallel execution with dependencies
- Code execution integration
- Result storage and retrieval
-
Error Handling
- Comprehensive exception hierarchy
- Detailed error messages and context
- Framework-specific error responses
Installation & Setup
# Basic installation
pip install composio_integration_frameworks
# Complete installation with all features
pip install composio_integration_frameworks[all]
# Selective installation
pip install composio_integration_frameworks[fastapi,pinecone,e2b] # FastAPI with Pinecone and E2B
pip install composio_integration_frameworks[django,chroma] # Django with Chroma
Environment Variables
Set these environment variables based on your configuration needs:
# Core Authentication
export COMPOSIO_API_KEY="your-api-key"
export COMPOSIO_API_URL="https://api.composio.dev/v1/"
# Vector Database (choose one)
# For Pinecone
export PINECONE_API_KEY="your-pinecone-api-key"
export PINECONE_ENVIRONMENT="your-pinecone-environment"
export PINECONE_INDEX="composio-discussions"
# For Chroma
export CHROMA_PERSIST_DIRECTORY="./chroma_db"
# E2B Code Execution
export E2B_API_KEY="your-e2b-api-key"
export E2B_EXECUTION_TIMEOUT="300" # in seconds
# Workflow Management
export WORKFLOW_STORAGE_PATH="./workflows"
Source Build & Package Development
To build the package from source and develop locally:
# Clone the repository
git clone https://github.com/Frontier-tech-consulting/composio_integration_frameworks.git
cd composio_integration_frameworks
# Create and activate a virtual environment
python -m venv venv
source venv/bin/activate # On Windows: venv\Scripts\activate
# Install development dependencies
pip install -e ".[test]"
# Install in development mode with all dependencies
pip install -e ".[all]"
# Run tests
pytest
# Build the package
pip install build
python -m build
Troubleshooting Installation Issues
If you encounter errors during installation, try these steps:
-
Package structure issues: Ensure your directory structure matches the package configuration
# Check that these directories exist at the root level ls -la auth discussion utils generators e2b_interpreter fastapi django workflows
-
TOML parsing errors: If you get TOML parsing errors, check your pyproject.toml file
# Validate your TOML file pip install tomli python -c "import tomli; tomli.loads(open('pyproject.toml', 'rb').read())"
-
Dependency conflicts: Try installing with fewer extras at a time
pip install -e ".[fastapi]" pip install -e ".[django]" # Then add other extras one by one
Publishing Updates
When updating the package, follow these steps:
- Update version in
setup.pyandpyproject.toml - Update CHANGELOG.md with your changes
- Build the distribution:
python -m build
- Upload to PyPI:
python -m twine upload dist/*
Publishing to PyPI
This package uses GitHub Actions for automated publishing to PyPI. The publishing process is triggered either by creating a new release on GitHub or by manually running the workflow.
Automated Publishing with GitHub Releases
- Go to the GitHub repository
- Click on "Releases" in the right sidebar
- Click "Create a new release"
- Enter a tag version (e.g.,
v0.1.0) - Enter a release title and description
- Click "Publish release"
The GitHub Actions workflow will automatically build and publish the package to PyPI.
Manual Publishing
- Go to the GitHub repository
- Click on "Actions" in the top navigation
- Select the "Publish to PyPI" workflow
- Click "Run workflow"
- Enter the version number (e.g.,
0.1.0) - Click "Run workflow"
The workflow will update the version in the package files, create a tag, and publish to PyPI.
Setting Up PyPI Trusted Publishing
To set up trusted publishing with PyPI:
- Create an account on PyPI if you don't have one
- Register your package name on PyPI
- Go to your package settings on PyPI
- Under "Publishing", click "Add a new pending publisher"
- Enter your GitHub repository details:
- Owner:
Frontier-tech-consulting - Repository name:
composio_integration_frameworks - Workflow name:
publish.yml
- Owner:
- Click "Add"
- Approve the publisher in PyPI
This setup allows GitHub Actions to publish to PyPI without storing API tokens.
Integration Process
The following diagram shows the step-by-step process for integrating the Composio framework:
flowchart TD
Start([Start Integration]) --> InstallPkg[Install Package]
InstallPkg --> ChooseFramework{Choose Framework}
ChooseFramework -->|FastAPI| FastSetup[Setup FastAPI App]
ChooseFramework -->|Django| DjangoSetup[Setup Django Project]
FastSetup --> ConfigAuth[Configure Authentication]
DjangoSetup --> ConfigAuth
ConfigAuth --> ChooseVectorDB{Choose Vector DB}
ChooseVectorDB -->|Pinecone| SetupPinecone[Configure Pinecone]
ChooseVectorDB -->|Chroma| SetupChroma[Configure Chroma]
SetupPinecone --> SetupDiscussion[Setup Discussion Manager]
SetupChroma --> SetupDiscussion
SetupDiscussion --> NeedCodeExec{Need Code Execution?}
NeedCodeExec -->|Yes| SetupE2B[Configure E2B Client]
NeedCodeExec -->|No| SkipE2B[Skip E2B Setup]
SetupE2B --> NeedWorkflow{Need Workflows?}
SkipE2B --> NeedWorkflow
NeedWorkflow -->|Yes| SetupWorkflow[Configure Workflow Manager]
NeedWorkflow -->|No| SkipWorkflow[Skip Workflow Setup]
SetupWorkflow --> IntegrateRoutes[Integrate Routes/Views]
SkipWorkflow --> IntegrateRoutes
IntegrateRoutes --> TestIntegration[Test Integration]
TestIntegration --> Deploy([Deploy Application])
subgraph "1. Installation"
InstallPkg
note1[/"pip install composio_integration_frameworks[options]"/]
InstallPkg --- note1
end
subgraph "2. Framework Selection"
ChooseFramework
FastSetup
DjangoSetup
note2[/"Add middleware and dependencies"/]
FastSetup --- note2
note3[/"Configure auth backend"/]
DjangoSetup --- note3
end
subgraph "3. Authentication Setup"
ConfigAuth
note4[/"Set API keys and configure roles"/]
ConfigAuth --- note4
end
subgraph "4. Vector Database Selection"
ChooseVectorDB
SetupPinecone
SetupChroma
note5[/"Configure environment variables"/]
SetupPinecone --- note5
SetupChroma --- note5
end
subgraph "5. Discussion Management"
SetupDiscussion
note6[/"Initialize DiscussionManager"/]
SetupDiscussion --- note6
end
subgraph "6. Code Execution (Optional)"
NeedCodeExec
SetupE2B
SkipE2B
note7[/"Configure E2B API key"/]
SetupE2B --- note7
end
subgraph "7. Workflow Management (Optional)"
NeedWorkflow
SetupWorkflow
SkipWorkflow
note8[/"Define workflow steps and dependencies"/]
SetupWorkflow --- note8
end
subgraph "8. Integration & Deployment"
IntegrateRoutes
TestIntegration
Deploy
note9[/"Create endpoints/views for your application"/]
IntegrateRoutes --- note9
end
classDef decision fill:#f9f,stroke:#333,stroke-width:2px;
classDef process fill:#bbf,stroke:#333,stroke-width:1px;
classDef endpoint fill:#bfb,stroke:#333,stroke-width:2px;
class ChooseFramework,ChooseVectorDB,NeedCodeExec,NeedWorkflow decision;
class InstallPkg,FastSetup,DjangoSetup,ConfigAuth,SetupPinecone,SetupChroma,SetupDiscussion,SetupE2B,SkipE2B,SetupWorkflow,SkipWorkflow,IntegrateRoutes,TestIntegration process;
class Start,Deploy endpoint;
Architecture
The package follows a modular architecture designed for flexibility and extensibility:
graph TD
A[Client Application] --> B[Framework Layer]
B --> C[Authentication Layer]
B --> D[Discussion Management]
B --> E[Code Execution]
B --> F[Workflow Management]
C --> G[Composio AgentAuth API]
D --> H[Vector Database]
E --> I[E2B Sandbox]
F --> D
F --> E
Core Components
- Authentication Layer: Handles user authentication, token validation, and role-based access control
- Discussion Management: Stores and retrieves discussions using vector databases
- Code Execution: Executes code in secure sandboxes via E2B
- Workflow Management: Orchestrates multi-step workflows with dependencies
Framework Integration
graph TD
subgraph "FastAPI Integration"
FA[FastAPI App] --> FM[Authentication Middleware]
FA --> FS[Security Dependencies]
FA --> FR[API Routes]
end
subgraph "Django Integration"
DA[Django App] --> DB[Auth Backend]
DA --> DM[Middleware]
DA --> DV[Views]
end
FM --> C[Authentication Layer]
FS --> C
DB --> C
DM --> C
FR --> D[Discussion Management]
FR --> E[Code Execution]
FR --> F[Workflow Management]
DV --> D
DV --> E
DV --> F
API Endpoints
FastAPI Endpoints
| Endpoint | Method | Description | Example Request | Example Response |
|---|---|---|---|---|
/auth/register |
POST | Register a new user | {"username": "user", "password": "pass", "email": "user@example.com", "role": "client"} |
{"user_id": "123", "token": "jwt-token"} |
/auth/login |
POST | Login and get token | {"username": "user", "password": "pass"} |
{"token": "jwt-token"} |
/auth/me |
GET | Get current user info | Headers: Authorization: Bearer jwt-token |
{"user_id": "123", "username": "user", "role": "client"} |
/discussions |
POST | Add a discussion | {"message": "Hello, AI"} |
{"id": "disc-123", "status": "success"} |
/discussions/search |
GET | Search discussions | Query: ?query=AI&limit=5 |
[{"message": "Hello, AI", "timestamp": "2023-01-01T12:00:00Z"}] |
/e2b/execute |
POST | Execute code | {"code": "print('Hello')", "language": "python"} |
{"success": true, "outputs": [...], "result": {...}} |
/e2b/schedule |
POST | Schedule code execution | {"code": "print('Hello')", "language": "python"} |
{"execution_id": "exec-123", "status": "scheduled"} |
/workflows |
POST | Create workflow | {"name": "Data Analysis", "steps": [...]} |
{"id": "wf-123", "name": "Data Analysis", "status": "pending"} |
/workflows/{id}/execute |
POST | Execute workflow | {"inputs": {"param": "value"}} |
{"workflow_id": "wf-123", "status": "completed", "steps_results": {...}} |
Django URL Patterns
| URL Pattern | View | Description | Example Usage |
|---|---|---|---|
auth/login/ |
login_view |
Login with AgentAuth | POST with username/password |
auth/logout/ |
logout_view |
Logout current user | GET/POST request |
discussions/add/ |
add_discussion_view |
Add a discussion | POST with message |
discussions/search/ |
search_discussions_view |
Search discussions | GET with query parameter |
e2b/execute/ |
execute_code_view |
Execute code | POST with code and language |
workflows/create/ |
create_workflow_view |
Create workflow | POST with workflow definition |
workflows/<id>/execute/ |
execute_workflow_view |
Execute workflow | POST with inputs |
Usage Examples
Basic Authentication
from auth.client import register_user, login_user, get_user_info
# Register a new user
user_data = register_user(
username="john_doe",
password="secure_password",
email="john@example.com",
role="client"
)
# Login to get a token
token = login_user("john_doe", "secure_password")
# Get user information
user_info = get_user_info(token)
print(f"Logged in as: {user_info['username']} (Role: {user_info['role']})")
FastAPI Integration
from fastapi import FastAPI, Depends
from fastapi.security import AgentAuthSecurity
from discussion.manager import DiscussionManager
from e2b_interpreter.client import E2BClient
from workflows.manager import WorkflowManager
# Initialize components
app = FastAPI()
auth_security = AgentAuthSecurity()
discussion_mgr = DiscussionManager(vector_db_type="pinecone")
e2b_client = E2BClient()
workflow_mgr = WorkflowManager(
discussion_manager=discussion_mgr,
e2b_client=e2b_client
)
# Secure endpoint example
@app.post("/chat")
async def chat(message: str, user=Depends(auth_security)):
# Store the user's message
discussion_mgr.add_discussion(user["user_id"], message)
# Execute code if needed
if "run code:" in message:
code = message.split("run code:")[1].strip()
result = await e2b_client.execute_code(code, user["user_id"])
return {"message": "Code executed", "result": result}
# Get relevant discussions
discussions = discussion_mgr.get_relevant_discussions(user["user_id"], message)
return {"message": "Message stored", "relevant_discussions": discussions}
Django Integration
# In views.py
from django.http import JsonResponse
from django.contrib.auth.decorators import login_required
from django.discussion import add_discussion, get_relevant_discussions
from django.e2b import execute_code
@login_required
def chat_view(request):
message = request.POST.get("message", "")
# Store the user's message
add_discussion(request, message)
# Execute code if needed
if "run code:" in message:
code = message.split("run code:")[1].strip()
result = execute_code(request, code)
return JsonResponse({"message": "Code executed", "result": result})
# Get relevant discussions
discussions = get_relevant_discussions(request, message)
return JsonResponse({"message": "Message stored", "relevant_discussions": discussions})
Workflow Example
from workflows.models import StepType
from workflows.manager import WorkflowManager
# Initialize workflow manager
workflow_mgr = WorkflowManager(
discussion_manager=discussion_mgr,
e2b_client=e2b_client
)
# Create a data analysis workflow
workflow = workflow_mgr.create_workflow(
name="Data Analysis",
description="Analyze CSV data",
steps=[
{
"name": "Load Data",
"type": StepType.CODE_EXECUTION.value,
"config": {
"code": "import pandas as pd\ndata = pd.read_csv('data.csv')\ndata.head()",
"language": "python"
}
},
{
"name": "Analyze",
"type": StepType.CODE_EXECUTION.value,
"config": {
"code": "data.describe()",
"language": "python"
},
"depends_on": ["load-data"]
}
]
)
# Execute the workflow
result = await workflow_mgr.execute_workflow(workflow.id)
Exception Handling
The package provides a comprehensive exception hierarchy for robust error handling:
# Authentication exceptions
from auth.exceptions import (
AuthException, # Base exception
InvalidCredentialsError, # Wrong username/password
TokenExpiredError, # Expired token
AdminRequiredError # Admin role required
)
# Discussion exceptions
from discussion.exceptions import (
DiscussionException, # Base exception
VectorDBError, # Vector database issues
UserDiscussionAccessError # Access control violation
)
# Code execution exceptions
from e2b_interpreter.exceptions import (
CodeInterpreterException, # Base exception
SandboxError, # Sandbox issues
ExecutionError # Code execution failure
)
# Workflow exceptions
from workflows.exceptions import (
WorkflowError, # Base exception
WorkflowNotFoundError, # Workflow not found
WorkflowExecutionError # Execution failure
)
Contributing
Contributions are welcome! Please feel free to submit a Pull Request.
- Fork the repository
- Create your feature branch (
git checkout -b feature/amazing-feature) - Commit your changes (
git commit -m 'Add some amazing feature') - Push to the branch (
git push origin feature/amazing-feature) - Open a Pull Request
License
This project is licensed under the MIT License - see the LICENSE file for details.
Project details
Release history Release notifications | RSS feed
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 composio_integration_frameworks-0.1.0.tar.gz.
File metadata
- Download URL: composio_integration_frameworks-0.1.0.tar.gz
- Upload date:
- Size: 57.3 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
3ccbaa9f324a2374d6bc43d59f5ecb122aad08ca9fd045b17576b5fcabfcbb90
|
|
| MD5 |
b8deed08ebd663d8ac2594022913d107
|
|
| BLAKE2b-256 |
b90390a0436aa75d7c79f9c8887a5ec703bea7e4ad014927c2bd58b530faef44
|
File details
Details for the file composio_integration_frameworks-0.1.0-py3-none-any.whl.
File metadata
- Download URL: composio_integration_frameworks-0.1.0-py3-none-any.whl
- Upload date:
- Size: 59.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.1.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
283e6a293d74d639b463130c2d6fef654ef346e958b0150bad6156cba63548b7
|
|
| MD5 |
1c7c2e1a618fd0bd2bd3deb35095bb7b
|
|
| BLAKE2b-256 |
a19e3012537cab5d9395f465272246668e2269fdfb4a8844b7c58c78eb9ff5d2
|