Skip to content

pollystack/django-polly

Django Polly

PyPI Version License Python Versions Documentation Status Tests Publish Python 🐍 distribution 📦 to PyPI

Django Polly enhances Django with Language Learning Model (LLM) capabilities, enabling AI-powered conversations, task automation, and other intelligent features in your Django projects. It uses familiar Django patterns and provides a flexible framework for customizing AI behaviors and supporting various LLM backends.

Features

  • LLM Management: Create and configure LLM instances (parrots)
  • SmartConversations: Engage in AI-powered conversations
  • WebSocket Support: Real-time communication for chat interfaces
  • Admin Interface: Easily manage parrots and conversations
  • Extensible: Designed to work with various LLM backends

Screenshots

Django Admin Parrot UI

Django Admin Parrot UI

Smart Conversations Table UI

Smart Conversations Table UI

Smart Chat UI

Smart Chat UI

Usage

Smart Chat UI

To interact with Parrots in real-time using the built-in Chat UI, navigate to:

https://[hostname:port]/polly/smart-gpt-chat/<int:conversation_id>

Replace [hostname:port] with your server's hostname and port, and <int:conversation_id> with the ID of the conversation you want to interact with.

Documentation

For full documentation, visit: https://django-polly.readthedocs.io

Quick Start

  1. Install django-polly and its dependencies:

    pip install django-polly
  2. Add "django_polly" and its dependencies to your INSTALLED_APPS setting in settings.py:

    INSTALLED_APPS = [
        'daphne',  # Add this before all django apps
        'django.contrib.admin',
        'django.contrib.auth',
        'django.contrib.contenttypes',
        'django.contrib.sessions',
        'django.contrib.messages',
        'django.contrib.staticfiles',
        'django_polly',  # Add this after all django apps
        'rest_framework', # Required for API views
        'django_json_widget', # Required for JSON widget in admin (optional)
        # ... your other apps ...
    ]
  3. Configure ASGI in your project's asgi.py:

    import os
    from django.core.asgi import get_asgi_application
    from channels.routing import ProtocolTypeRouter
    from django_polly.routing import polly_asgi_routes
    
    os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'your_project.settings')
    
    # Get the Django ASGI application
    django_asgi_app = get_asgi_application()
    
    # Use the Django ASGI application for HTTP requests
    polly_asgi_routes["http"] = django_asgi_app
    
    # Create the final ASGI application
    application = ProtocolTypeRouter(polly_asgi_routes)
  4. Update your settings.py with the following:

    # Add this to specify the ASGI application
    ASGI_APPLICATION = 'your_project.asgi.application'
    WSGI_APPLICATION = 'your_project.wsgi.application'
    
    # Add this for daphne
    CHANNEL_LAYERS = {
        'default': {
            'BACKEND': 'channels.layers.InMemoryChannelLayer'
        }
    }
    
    AI_MODELS_PATH = BASE_DIR / 'ai_models' # Add this to specify the path to store AI models
  5. Include the django-polly URLconf in your project urls.py:

    from django.contrib import admin
    from django.urls import path, include
    
    urlpatterns = [
        path('admin/', admin.site.urls),
        path('polly/', include('django_polly.urls')),
        # ... other URL patterns ...
    ]
  6. Run migrations:

    python manage.py migrate
  7. Download an AI model (example using Qwen2):

    python manage.py download_model "Qwen2-500M-Instruct-Q8_0.gguf" "https://huggingface.co/lmstudio-community/Qwen2-500M-Instruct-GGUF/resolve/main/Qwen2-500M-Instruct-Q8_0.gguf"
  8. Start the development server:

    python manage.py runserver

    Visit http://127.0.0.1:8000/admin/ to create parrots and http://127.0.0.1:8000/polly/ to use django-polly.

Dependencies

Django Polly supports Python 3.8 and up, and is compatible with Django 4.2 and 5.0.

Contributing

We welcome contributions! To learn more about contributing, please read our contributing docs.

Support

If you're having issues, please let us know by opening an issue on our GitHub repository.

For larger discussions, join our mailing list.

License

The project is licensed under the AGPL-3.0 license.