A robust Laravel package for integrating Python AI capabilities through a secure subprocess bridge. Instead of reimplementing complex AI libraries in PHP, this package provides a clean interface to delegate AI operations to Python's rich ecosystem (OpenAI, LangChain, scikit-learn, etc.).
Check out Ask-My-Doc - a sophisticated document Q&A system built with Overpass that showcases real-world AI integration:
Ask-My-Doc demonstrates Overpass in action with:
- π Document ingestion and intelligent chunking
- π Semantic search using OpenAI embeddings
- π¬ AI-powered Q&A with source citations
- β‘ Real-time Python bridge status monitoring
- π¨ Beautiful dark-themed UI inspired by Linear
Note: This package is not affiliated with the existing decodelabs/overpass package, which provides a PHP bridge to Node.js. Our "Overpass" package serves a different purpose - bridging between PHP and Python for AI operations.
- π Python Integration: Seamlessly execute Python AI scripts from Laravel
- π Secure: API keys passed via environment variables, never in command lines
- β‘ Async Ready: Built for Laravel queues and background processing
- π‘οΈ Robust Error Handling: Graceful degradation and comprehensive logging
- π§ͺ Production Tested: Battle-tested patterns for reliability
- π― Laravel Native: Follows Laravel conventions with facades, service providers, and Artisan commands
You can install the package via composer:
composer require bmadigan/overpassInstall the package with example Python scripts:
php artisan overpass:install --with-examplesPublish the config file:
php artisan vendor:publish --tag="overpass-config"Add your OpenAI API key to your .env file:
OPENAI_API_KEY=your-openai-api-key
OVERPASS_SCRIPT_PATH=/path/to/your/python/script.pyConfigure the package in config/overpass.php:
return [
'script_path' => env('OVERPASS_SCRIPT_PATH', base_path('overpass-ai/main.py')),
'timeout' => env('OVERPASS_TIMEOUT', 90),
'max_output_length' => env('OVERPASS_MAX_OUTPUT', 10000),
// ... more options
];use Bmadigan\Overpass\Facades\Overpass;
// Test the connection
$healthCheck = Overpass::testConnection();
// Generate embeddings
$embedding = Overpass::generateEmbedding('Hello, world!');
// Execute custom operations
$result = Overpass::execute('custom_operation', ['data' => 'value']);$response = Overpass::chat([
'message' => 'What is machine learning?',
'session_id' => 'user-123',
'context' => ['previous' => 'conversation']
]);
echo $response['response']; // AI-generated response$results = Overpass::vectorSearch('machine learning concepts', [
'limit' => 10,
'threshold' => 0.8
]);use Bmadigan\Overpass\Services\PythonAiBridge;
// In a Laravel job
class ProcessAiTask implements ShouldQueue
{
public function handle(PythonAiBridge $bridge)
{
$result = $bridge->analyzeData($this->data);
// Process result...
}
}Your Python script should follow this pattern:
import sys
import json
def health_check(data):
return {
'success': True,
'data': {'status': 'healthy'}
}
def analyze_data(data):
# Your AI logic here
return {
'success': True,
'data': {'result': 'analysis complete'}
}
def main():
operation = sys.argv[1]
data = json.loads(sys.argv[2]) if len(sys.argv) > 2 else {}
operations = {
'health_check': health_check,
'analyze_data': analyze_data,
}
if operation in operations:
result = operations[operation](data)
print(json.dumps(result))
else:
print(json.dumps({'success': False, 'error': 'Unknown operation'}))
if __name__ == '__main__':
main()# Test the bridge connection
php artisan overpass:test
# Run package tests
composer test
# Run tests with coverage
composer test-coverage// Define custom operations in your Python script
$result = Overpass::execute('sentiment_analysis', [
'text' => 'This product is amazing!',
'options' => ['return_confidence' => true]
]);try {
$result = Overpass::generateEmbedding($text);
} catch (\Exception $e) {
Log::error('Embedding generation failed', ['error' => $e->getMessage()]);
// Implement fallback logic
}class MyService
{
public function __construct(
private PythonAiBridge $bridge
) {}
public function processData(array $data): array
{
return $this->bridge->execute('process', $data);
}
}# Install and setup the package
php artisan overpass:install --with-examples
# Test the bridge connection
php artisan overpass:test --verbose
# Check configuration
php artisan overpass:test --timeout=60Connection Failures:
- Ensure Python 3 is installed and accessible
- Check that your Python script path is correct
- Verify Python dependencies are installed
- Test your OpenAI API key
Performance Issues:
- Increase timeout for complex operations
- Use Laravel queues for long-running tasks
- Consider output length limits
Memory Issues:
- Set appropriate
max_output_lengthin config - Use streaming for large datasets
- Monitor Python process memory usage
- Timeouts: Set appropriate timeouts based on operation complexity
- Memory: Monitor both PHP and Python memory usage
- Queues: Use Laravel queues for expensive AI operations
- Caching: Cache embedding results and AI responses when appropriate
- API keys are passed via environment variables, never command line arguments
- All input data is JSON-encoded to prevent injection attacks
- Process isolation ensures Python failures don't crash Laravel
- Comprehensive logging for audit trails
Contributions are welcome! Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
The MIT License (MIT). Please see License File for more information.
