Base code
This commit is contained in:
241
docs-site/docs/features/subscription/setup.md
Normal file
241
docs-site/docs/features/subscription/setup.md
Normal file
@@ -0,0 +1,241 @@
|
||||
# Subscription System Setup
|
||||
|
||||
Complete guide for installing and configuring the ALwrity usage-based subscription system.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
- Python 3.8+
|
||||
- PostgreSQL database (or SQLite for development)
|
||||
- FastAPI backend environment
|
||||
- Required Python packages: `sqlalchemy`, `loguru`, `fastapi`
|
||||
|
||||
## Installation
|
||||
|
||||
### 1. Database Migration
|
||||
|
||||
Run the database setup script to create all subscription tables:
|
||||
|
||||
```bash
|
||||
cd backend
|
||||
python scripts/create_subscription_tables.py
|
||||
```
|
||||
|
||||
This script will:
|
||||
- Create all subscription-related database tables
|
||||
- Initialize default subscription plans (Free, Basic, Pro, Enterprise)
|
||||
- Configure API pricing for all providers
|
||||
- Verify the setup
|
||||
|
||||
### 2. Verify Installation
|
||||
|
||||
Test the subscription system:
|
||||
|
||||
```bash
|
||||
python test_subscription_system.py
|
||||
```
|
||||
|
||||
This will verify:
|
||||
- Database table creation
|
||||
- Pricing calculations
|
||||
- Usage tracking
|
||||
- Limit enforcement
|
||||
- Error handling
|
||||
- API endpoints
|
||||
|
||||
### 3. Start the Server
|
||||
|
||||
```bash
|
||||
python start_alwrity_backend.py
|
||||
```
|
||||
|
||||
## Configuration
|
||||
|
||||
### Environment Variables
|
||||
|
||||
Create or update your `.env` file with the following:
|
||||
|
||||
```env
|
||||
# Database Configuration
|
||||
DATABASE_URL=postgresql://user:password@localhost/alwrity
|
||||
# For development, you can use SQLite:
|
||||
# DATABASE_URL=sqlite:///./alwrity.db
|
||||
|
||||
# API Keys (required for usage tracking)
|
||||
GEMINI_API_KEY=your_gemini_key
|
||||
OPENAI_API_KEY=your_openai_key
|
||||
ANTHROPIC_API_KEY=your_anthropic_key
|
||||
# ... other API keys as needed
|
||||
|
||||
# HuggingFace Pricing (optional, for GPT-OSS-120B via Groq)
|
||||
HUGGINGFACE_INPUT_TOKEN_COST=0.000001
|
||||
HUGGINGFACE_OUTPUT_TOKEN_COST=0.000003
|
||||
```
|
||||
|
||||
### HuggingFace Pricing Configuration
|
||||
|
||||
HuggingFace API calls (specifically for GPT-OSS-120B model via Groq) are tracked and billed using configurable pricing.
|
||||
|
||||
#### Environment Variables
|
||||
|
||||
- `HUGGINGFACE_INPUT_TOKEN_COST`: Cost per input token (default: `0.000001` = $1 per 1M tokens)
|
||||
- `HUGGINGFACE_OUTPUT_TOKEN_COST`: Cost per output token (default: `0.000003` = $3 per 1M tokens)
|
||||
|
||||
#### Updating Pricing
|
||||
|
||||
The pricing is automatically initialized when the database is set up. To update pricing after changing environment variables:
|
||||
|
||||
1. **Option 1**: Restart the backend server (pricing will be updated on next initialization)
|
||||
2. **Option 2**: Run the database setup script again:
|
||||
```bash
|
||||
python backend/scripts/create_subscription_tables.py
|
||||
```
|
||||
|
||||
#### Verify Pricing
|
||||
|
||||
Check that pricing is correctly configured by:
|
||||
1. Checking the database `api_provider_pricing` table
|
||||
2. Making a test API call and checking the cost in usage logs
|
||||
3. Viewing the billing dashboard to see cost calculations
|
||||
|
||||
## Production Setup
|
||||
|
||||
### 1. Database
|
||||
|
||||
Use PostgreSQL for production:
|
||||
|
||||
```env
|
||||
DATABASE_URL=postgresql://user:password@host:5432/alwrity_prod
|
||||
```
|
||||
|
||||
### 2. Caching
|
||||
|
||||
Set up Redis for caching (optional but recommended):
|
||||
|
||||
```env
|
||||
REDIS_URL=redis://localhost:6379/0
|
||||
```
|
||||
|
||||
### 3. Email Notifications
|
||||
|
||||
Configure email service for usage alerts:
|
||||
|
||||
```env
|
||||
SMTP_HOST=smtp.example.com
|
||||
SMTP_PORT=587
|
||||
SMTP_USER=alerts@alwrity.com
|
||||
SMTP_PASSWORD=your_password
|
||||
```
|
||||
|
||||
### 4. Monitoring and Alerting
|
||||
|
||||
Set up monitoring and alerting systems:
|
||||
- Configure log aggregation
|
||||
- Set up performance monitoring
|
||||
- Configure alert thresholds
|
||||
|
||||
### 5. Payment Processing
|
||||
|
||||
Implement payment processing integration:
|
||||
- Stripe integration
|
||||
- Payment gateway setup
|
||||
- Billing cycle management
|
||||
|
||||
## Middleware Integration
|
||||
|
||||
The subscription system automatically tracks API usage through enhanced middleware. The middleware:
|
||||
|
||||
- Detects API provider from request patterns
|
||||
- Estimates token usage from request/response content
|
||||
- Validates usage limits before processing
|
||||
- Calculates costs in real-time
|
||||
- Logs all API calls for tracking
|
||||
|
||||
No additional configuration is required - the middleware is automatically active once the subscription system is installed.
|
||||
|
||||
## Usage Limit Enforcement
|
||||
|
||||
The system enforces usage limits automatically:
|
||||
|
||||
```python
|
||||
# Usage limits are checked before processing requests
|
||||
can_proceed, message, usage_info = await usage_service.enforce_usage_limits(
|
||||
user_id=user_id,
|
||||
provider=APIProvider.GEMINI,
|
||||
tokens_requested=1000
|
||||
)
|
||||
|
||||
if not can_proceed:
|
||||
return JSONResponse(
|
||||
status_code=429,
|
||||
content={"error": "Usage limit exceeded", "message": message}
|
||||
)
|
||||
```
|
||||
|
||||
## Testing
|
||||
|
||||
### Run Tests
|
||||
|
||||
```bash
|
||||
python test_subscription_system.py
|
||||
```
|
||||
|
||||
### Test Coverage
|
||||
|
||||
The test suite covers:
|
||||
- Database table creation
|
||||
- Pricing calculations
|
||||
- Usage tracking
|
||||
- Limit enforcement
|
||||
- Error handling
|
||||
- API endpoints
|
||||
|
||||
## Troubleshooting
|
||||
|
||||
### Common Issues
|
||||
|
||||
1. **Database Connection Errors**
|
||||
- Check `DATABASE_URL` configuration
|
||||
- Verify database is running
|
||||
- Check network connectivity
|
||||
|
||||
2. **Missing API Keys**
|
||||
- Verify all required keys are set in `.env`
|
||||
- Check environment variable names match exactly
|
||||
|
||||
3. **Usage Not Tracking**
|
||||
- Verify middleware is integrated
|
||||
- Check database connection
|
||||
- Review logs for errors
|
||||
|
||||
4. **Pricing Errors**
|
||||
- Verify provider pricing configuration in database
|
||||
- Check `api_provider_pricing` table
|
||||
- Review pricing initialization logs
|
||||
|
||||
### Debug Mode
|
||||
|
||||
Enable debug logging:
|
||||
|
||||
```python
|
||||
import logging
|
||||
logging.basicConfig(level=logging.DEBUG)
|
||||
```
|
||||
|
||||
### Support
|
||||
|
||||
For issues and questions:
|
||||
1. Check the logs in `logs/subscription_errors.log`
|
||||
2. Run the test suite to identify problems
|
||||
3. Review the error handling documentation
|
||||
4. Contact the development team
|
||||
|
||||
## Next Steps
|
||||
|
||||
- [API Reference](api-reference.md) - Endpoint documentation and examples
|
||||
- [Pricing](pricing.md) - Subscription plans and API pricing details
|
||||
- [Frontend Integration](frontend-integration.md) - Technical specifications for frontend
|
||||
|
||||
---
|
||||
|
||||
**Last Updated**: January 2025
|
||||
|
||||
Reference in New Issue
Block a user