Dan Walsh
Updating README
77a88ff
metadata
title: AI Content Summariser API
emoji: πŸ“
colorFrom: blue
colorTo: indigo
sdk: docker
app_port: 7860
pinned: false
license: mit

AI Content Summariser API (Backend)

This is the backend API for the AI Content Summariser, a tool that automatically generates concise summaries of articles, documents, and web content using natural language processing.

The frontend application is available in a separate repository: ai-content-summariser.

Features

  • Text Summarization: Generate concise summaries using BART-large-CNN model
  • URL Content Extraction: Automatically extract and process content from web pages
  • Adjustable Parameters: Control summary length (30-500 chars) and style
  • Advanced Generation Options: Temperature control (0.7-2.0) and sampling options
  • Caching System: Store results to improve performance and reduce redundant processing
  • Status Monitoring: Track model loading and summarization progress in real-time
  • Error Handling: Robust error handling for various input scenarios
  • CORS Support: Configured for cross-origin requests from the frontend

API Endpoints

  • POST /api/summarise - Summarize text content
  • POST /api/summarise-url - Extract and summarize content from a URL
  • GET /api/status - Get the current status of the model and any running jobs
  • GET /health - Health check endpoint for monitoring

Technology Stack

  • Framework: FastAPI for efficient API development
  • NLP Models: Hugging Face Transformers (BART-large-CNN)
  • Web Scraping: BeautifulSoup4 for extracting content from URLs
  • HTTP Client: HTTPX for asynchronous web requests
  • ML Framework: PyTorch for running the NLP models
  • Testing: Pytest for unit and integration testing
  • Deployment: Docker containers on Hugging Face Spaces

Project Structure

ai-content-summariser-api/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ api/
β”‚   β”‚   └── routes.py      # API endpoints
β”‚   β”œβ”€β”€ services/
β”‚   β”‚   β”œβ”€β”€ summariser.py  # Text summarization service
β”‚   β”‚   β”œβ”€β”€ url_extractor.py # URL content extraction
β”‚   β”‚   └── cache.py       # Caching functionality
β”‚   └── check_transformers.py # Utility to verify model setup
β”œβ”€β”€ tests/
β”‚   β”œβ”€β”€ test_api.py        # API endpoint tests
β”‚   └── test_summariser.py # Summarizer service tests
β”œβ”€β”€ main.py                # Application entry point
β”œβ”€β”€ Dockerfile             # Docker configuration
β”œβ”€β”€ requirements.txt       # Python dependencies
└── .env                   # Environment variables (not in repo)

Getting Started

Prerequisites

  • Python (v3.8+)
  • pip
  • At least 4GB of RAM (8GB recommended for optimal performance)
  • GPU support (optional, but recommended for faster processing)

Installation

# Clone the repository
git clone https://github.com/dang-w/ai-content-summariser-api.git
cd ai-content-summariser-api

# Create a virtual environment
python -m venv venv
source venv/bin/activate  # On Windows: venv\Scripts\activate

# Install dependencies
pip install -r requirements.txt

Environment Setup

Create a .env file in the root directory with the following variables:

ENVIRONMENT=development
CORS_ORIGINS=http://localhost:3000,https://ai-content-summariser.vercel.app
TRANSFORMERS_CACHE=/path/to/cache  # Optional: custom cache location

Running Locally

# Start the backend server
uvicorn main:app --reload --host 0.0.0.0 --port 8000

The API will be available at http://localhost:8000. You can access the API documentation at http://localhost:8000/docs.

Testing

The project includes a comprehensive test suite covering both unit and integration tests.

Running Tests

# Run all tests
pytest

# Run tests with verbose output
pytest -v

# Run tests and generate coverage report
pytest --cov=app tests/

# Run tests and generate detailed coverage report
pytest --cov=app --cov-report=term-missing tests/

# Run specific test file
pytest tests/test_api.py

# Run tests without warnings
pytest -W ignore::FutureWarning -W ignore::UserWarning

Docker Deployment

# Build and run with Docker
docker build -t ai-content-summariser-api .
docker run -p 8000:8000 ai-content-summariser-api

Deployment to Hugging Face Spaces

When deploying to Hugging Face Spaces:

  1. Fork this repository to your Hugging Face account
  2. Set the following environment variables in the Space settings:
    • TRANSFORMERS_CACHE=/tmp/huggingface_cache
    • HF_HOME=/tmp/huggingface_cache
    • HUGGINGFACE_HUB_CACHE=/tmp/huggingface_cache
    • CORS_ORIGINS=https://ai-content-summariser.vercel.app,http://localhost:3000
  3. Ensure the Space is configured to use the Docker SDK
  4. Your API will be available at https://huggingface.co/spaces/your-username/ai-content-summariser-api

Performance Optimizations

The API includes several performance optimizations:

  1. Model Caching: Models are loaded once and cached for subsequent requests
  2. Result Caching: Frequently requested summaries are cached to avoid redundant processing
  3. Asynchronous Processing: Long-running tasks are processed asynchronously
  4. Text Preprocessing: Input text is cleaned and normalized before processing
  5. Batched Processing: Large texts are processed in batches for better memory management

API Request Examples

Text Summarization

curl -X 'POST' \
  'http://localhost:8000/api/summarise' \
  -H 'Content-Type: application/json' \
  -d '{
    "text": "Your long text to summarize goes here...",
    "max_length": 150,
    "min_length": 50,
    "do_sample": true,
    "temperature": 1.2
  }'

URL Summarization

curl -X 'POST' \
  'http://localhost:8000/api/summarise-url' \
  -H 'Content-Type: application/json' \
  -d '{
    "url": "https://example.com/article",
    "max_length": 150,
    "min_length": 50,
    "do_sample": true,
    "temperature": 1.2
  }'

License

This project is licensed under the MIT License.