Enterprise Multi-Tenant AI Companion Platform
Project description
Reflection
Enterprise Multi-Tenant AI Companion Platform
"From one, many. From chaos, order — at scale."
Reflection extends Familiar with enterprise multi-tenancy capabilities. All core AI functionality comes from Familiar; this package adds the enterprise layer.
Architecture
┌─────────────────────────────────────────────────────────────┐
│ Reflection │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Tenant Wrappers (~1,200 lines) │ │
│ │ │ │
│ │ TenantAgent Per-tenant agent instances │ │
│ │ TenantMemory Tenant-scoped memory │ │
│ │ TenantToolRegistry Per-tenant tool permissions │ │
│ │ TenantChannels Multi-tenant Discord/Telegram │ │
│ │ │ │
│ │ ┌──────────────────────────────────────────────────┐ │ │
│ │ │ Familiar Core (~103,000 lines) │ │ │
│ │ │ │ │ │
│ │ │ Agent Full agent loop │ │ │
│ │ │ Providers Anthropic, OpenAI, Ollama │ │ │
│ │ │ ToolRegistry 50+ built-in tools │ │ │
│ │ │ Memory Episodic + semantic memory │ │ │
│ │ │ Channels Discord, Telegram, Teams, etc │ │ │
│ │ │ Skills Browser, calendar, email, etc │ │ │
│ │ │ Guardrails Safety + compliance │ │ │
│ │ └──────────────────────────────────────────────────┘ │ │
│ └───────────────────────────────────────────────────────┘ │
│ │
│ ┌───────────────────────────────────────────────────────┐ │
│ │ Enterprise Layer │ │
│ │ │ │
│ │ PostgreSQL Tenants, users, conversations, usage │ │
│ │ Redis Quotas, sessions, distributed cache │ │
│ │ FastAPI REST API + SSE streaming │ │
│ │ JWT Auth Access + refresh tokens, bcrypt │ │
│ │ Quotas Rate limiting, token budgets │ │
│ │ Billing Usage tracking, metering │ │
│ └───────────────────────────────────────────────────────┘ │
└─────────────────────────────────────────────────────────────┘
Quick Start
from reflection import get_tenant_agent, TenantToolRegistry
from uuid import uuid4
# Create a tenant
tenant_id = uuid4()
# Get an agent for this tenant
agent = get_tenant_agent(tenant_id, tenant_config={
"agent_name": "Acme Assistant",
"default_provider": "anthropic",
})
# Chat (automatically isolated to tenant)
response = agent.chat("Hello!", user_id="user123")
print(response)
# Per-tenant tool permissions
registry = TenantToolRegistry(tenant_id)
registry.enable_tool("web_search")
registry.disable_tool("shell_execute")
Features
Multi-Tenancy
- Tenant Isolation: Each tenant has isolated agents, memory, and data
- Per-Tenant Configuration: Custom models, providers, quotas per tenant
- Shared Infrastructure: One deployment serves many tenants
Enterprise Components
- PostgreSQL Persistence: Conversations, messages, usage stored durably
- JWT Authentication: Secure API access with refresh tokens
- Quota Management: Rate limits, token budgets, concurrent request limits
- Usage Tracking: Detailed metering for billing
Tenant Wrappers
| Wrapper | Extends | Purpose |
|---|---|---|
TenantAgent |
familiar.Agent |
Per-tenant agent instances |
TenantMemory |
familiar.Memory |
Tenant-scoped memory |
TenantToolRegistry |
familiar.ToolRegistry |
Per-tenant tool permissions |
TenantDiscordChannel |
familiar.DiscordChannel |
Multi-tenant Discord bots |
TenantTelegramChannel |
familiar.TelegramChannel |
Multi-tenant Telegram bots |
Installation
Quick Install (Recommended)
# 1. Download Reflection
curl -L https://github.com/familiar-ai/reflection/archive/refs/heads/main.zip -o reflection.zip
unzip reflection.zip
cd reflection
# 2. Run installer (GUI wizard)
pip install -e .
reflection install
# That's it! Browser will open to http://localhost:8000
The installer will:
- ✅ Detect your hardware
- ✅ Ask about your use case (Healthcare/Business/Privacy)
- ✅ Install dependencies (Ollama for self-hosted, or configure API)
- ✅ Set up databases
- ✅ Launch Reflection
Total time: 5-10 minutes
Manual Installation
# Install Familiar (dependency)
pip install familiar-ai
# Install Reflection
pip install reflection
# Or from source
git clone https://github.com/familiar-ai/reflection
cd reflection
pip install -e .
Configuration
# Required
export DATABASE_URL="postgresql+asyncpg://user:pass@localhost/reflection"
export REDIS_URL="redis://localhost:6379"
export JWT_SECRET_KEY="your-secret-key"
# LLM Providers (at least one)
export ANTHROPIC_API_KEY="sk-ant-..."
export OPENAI_API_KEY="sk-..."
# Optional
export ENVIRONMENT="production"
export DEBUG="false"
Running
Docker Compose (Recommended)
docker-compose up -d
Manual
# Initialize database
reflection db init
reflection db migrate
# Start server
reflection serve --host 0.0.0.0 --port 8000
API
Chat Completion
curl -X POST http://localhost:8000/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Hello!", "stream": false}'
Streaming
curl -X POST http://localhost:8000/api/v1/chat/completions \
-H "Authorization: Bearer $API_KEY" \
-H "Content-Type: application/json" \
-d '{"message": "Write a haiku", "stream": true}'
Project Structure
reflection/
├── reflection/
│ ├── __init__.py # Main exports
│ ├── tenant_wrappers/ # Tenant isolation layer
│ │ ├── agent.py # TenantAgent
│ │ ├── memory.py # TenantMemory
│ │ ├── tools.py # TenantToolRegistry
│ │ └── channels.py # TenantDiscord/Telegram
│ ├── core/ # Enterprise core
│ │ ├── orchestrator.py # DB-backed agent loop
│ │ ├── memory.py # Enterprise memory service
│ │ └── settings.py # Configuration
│ ├── tenants/ # Tenant management
│ │ ├── context.py # Request-scoped context
│ │ ├── quotas.py # Rate limiting
│ │ └── models.py # Tenant models
│ ├── data/ # Database layer
│ │ ├── models.py # SQLAlchemy models
│ │ ├── repositories/ # Data access
│ │ └── postgres.py # Connection management
│ └── gateway/ # API layer
│ ├── app.py # FastAPI app
│ ├── auth.py # JWT authentication
│ └── routes.py # API endpoints
├── reflection_core/ # Shared primitives
│ ├── security/ # Trust, sanitization
│ └── exceptions/ # Error hierarchy
├── tests/ # Test suite
├── alembic/ # Database migrations
└── docker-compose.yml # Deployment config
Relationship to Familiar
Reflection is designed as a thin enterprise wrapper around Familiar:
- Familiar: Core AI capabilities (agents, tools, memory, providers, channels)
- Reflection: Multi-tenancy, persistence, billing, quotas
This separation means:
- Familiar improvements flow through automatically
- Enterprise features are clearly isolated
- Testing is focused on tenant isolation, not AI capabilities
- Development is faster (no wheel reinvention)
License
MIT License
Commercial licensing available. Contact: licensing@familiar.ai
Contributing
See CONTRIBUTING.md for guidelines.
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 reflection_agent-2.0.21.tar.gz.
File metadata
- Download URL: reflection_agent-2.0.21.tar.gz
- Upload date:
- Size: 313.7 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
20e05bda64f9fbf953650305e5741c3e2b75e669cce4958c518aaf2d0fc2a2c3
|
|
| MD5 |
8cf19bc72831ee407ccba68692172940
|
|
| BLAKE2b-256 |
f55c8977973d5032e774d3fbc8cf22c26b1e2e79bb3e9736b292e0cecfe94d73
|
File details
Details for the file reflection_agent-2.0.21-py3-none-any.whl.
File metadata
- Download URL: reflection_agent-2.0.21-py3-none-any.whl
- Upload date:
- Size: 267.5 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.12.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
5a425624374c24d48e458d6d45341d934cd41d85e6746ec3eda1e344e2c3c7e6
|
|
| MD5 |
11d28a18350ec1e5c820769736d4fa43
|
|
| BLAKE2b-256 |
991ce7665ee89a6514447301d7c02c333eb6e7164aa5fa11d788bcbed9aa53fe
|