Skip to main content

Modern async Python framework for AI APIs with native Model Context Protocol (MCP) support

Project description

nzrRest Framework

🤖 Modern Async Python Framework for AI APIs with Native MCP Support

PyPI version Python Support License: MIT Build Status Coverage

Documentation | Examples | n8n Integration | Contributing


✨ What is nzrRest?

nzrRest is a powerful, production-ready Python framework specifically designed for building AI-powered APIs. It combines the best of modern web frameworks with specialized features for AI model integration, making it the perfect choice for developers who want to build scalable AI services with minimal complexity.

🎯 Key Features

  • 🤖 Native AI Model Integration - First-class support for multiple AI providers and custom models
  • 🔄 Model Context Protocol (MCP) - Built-in MCP implementation for seamless n8n integration
  • High Performance - Async/await throughout with ASGI compliance
  • 📊 Context Management - Persistent conversation contexts with automatic cleanup
  • 🛡️ Production Ready - Rate limiting, authentication, monitoring, and error handling
  • 🗄️ Database Integration - SQLAlchemy async with automatic migrations
  • 🎨 DRF-Inspired Serializers - Familiar, powerful data validation and transformation
  • 🚀 Auto-Generation - CLI tools for rapid project scaffolding
  • 🐳 Cloud Native - Docker support with production configurations

🚀 Quick Start

Installation

pip install nzrrest

Create Your First AI API

# Create a new project
nzrrest new my-ai-api

# Navigate to project
cd my-ai-api

# Run the development server
nzrrest run --reload

Your AI API is now running at http://localhost:8000! 🎉

Hello World Example

from nzrrest import NzrRestApp, Router

app = NzrRestApp(title="My AI API")
router = Router()

@router.post("/chat")
async def chat(request):
    data = await request.json()
    
    # Use built-in AI model
    model = request.app.ai_registry.get_model("default")
    result = await model.predict({"message": data["message"]})
    
    return {"response": result["response"]}

app.include_router(router)

if __name__ == "__main__":
    import uvicorn
    uvicorn.run(app, host="0.0.0.0", port=8000)

🤖 AI Model Integration

nzrRest makes it incredibly easy to work with AI models:

from nzrrest.ai.models import AIModel

class MyCustomModel(AIModel):
    async def load_model(self):
        # Load your model (PyTorch, HuggingFace, OpenAI, etc.)
        self.model = load_my_model()
        self.is_loaded = True
    
    async def predict(self, payload, context=None):
        # Make predictions with optional context
        result = self.model.generate(payload["prompt"])
        return {"response": result}

# Register and use
app.ai_registry.register_model_class("custom", MyCustomModel)
await app.ai_registry.add_model("my_model", "custom", config={...})

Supported AI Providers

  • OpenAI (GPT-3.5, GPT-4, etc.)
  • Anthropic (Claude models)
  • HuggingFace (Transformers, Inference API)
  • Custom Models (PyTorch, TensorFlow, etc.)
  • Mock Models (for development and testing)

🔄 Model Context Protocol (MCP)

nzrRest implements the Model Context Protocol for stateful AI interactions:

# MCP-compliant endpoint
@router.post("/mcp/{model_name}/predict")
async def mcp_predict(request, model_name: str):
    # Automatic context management
    mcp_request = MCPRequest(**(await request.json()))
    
    # Retrieve conversation context
    context = await get_context(mcp_request.context_id)
    
    # Make prediction with context
    model = request.app.ai_registry.get_model(model_name)
    result = await model.predict(mcp_request.payload, context)
    
    # Return MCP-compliant response
    return MCPResponse(
        request_id=mcp_request.request_id,
        context_id=mcp_request.context_id,
        result=result
    )

🎨 Powerful Serializers

nzrRest provides robust data validation:

from nzrrest.serializers import BaseSerializer, CharField, IntegerField

class ChatRequestSerializer(BaseSerializer):
    message = CharField(max_length=1000)
    user_id = CharField(required=False)
    temperature = FloatField(min_value=0.0, max_value=2.0, default=0.7)
    
    def validate(self, data):
        # Custom validation logic
        return data

# Use in endpoints
@router.post("/chat")
async def chat(request):
    data = await request.json()
    serializer = ChatRequestSerializer(data=data)
    
    if serializer.is_valid():
        validated_data = serializer.validated_data
        # Process with confidence...
    else:
        return JSONResponse(serializer.errors, status_code=422)

🗄️ Database Integration

Built-in async database support with SQLAlchemy:

from nzrrest.db import Base
from sqlalchemy import Column, Integer, String, DateTime

class ConversationHistory(Base):
    __tablename__ = "conversations"
    
    id = Column(Integer, primary_key=True)
    user_id = Column(String(255), index=True)
    message = Column(Text)
    response = Column(Text)
    created_at = Column(DateTime, default=datetime.utcnow)

# Use in endpoints
@router.post("/chat")
async def chat(request):
    async with request.app.get_db_session() as session:
        # Save conversation
        conversation = ConversationHistory(
            user_id=user_id,
            message=message,
            response=response
        )
        session.add(conversation)
        await session.commit()

🛡️ Production Features

Rate Limiting

from nzrrest.middleware import RateLimitMiddleware

app.add_middleware(
    RateLimitMiddleware,
    calls_per_minute=60,
    calls_per_hour=1000
)

Authentication

from nzrrest.middleware import AuthenticationMiddleware

app.add_middleware(
    AuthenticationMiddleware,
    secret_key="your-secret-key"
)

CORS for n8n

from starlette.middleware.cors import CORSMiddleware

app.add_middleware(
    CORSMiddleware,
    allow_origins=["https://app.n8n.cloud"],
    allow_credentials=True,
    allow_methods=["*"],
    allow_headers=["*"]
)

🔧 CLI Tools

nzrRest includes powerful CLI tools for development:

# Create new project
nzrrest new my-project --template mcp-server

# Run development server  
nzrrest run --reload --port 8000

# Database migrations
nzrrest migrate -m "Add user table"
nzrrest migrate --upgrade

# Model management
nzrrest models --list
nzrrest models --add openai_gpt4 --type openai

# Project info
nzrrest info

🌐 n8n Integration

Perfect for n8n workflows with built-in MCP support:

{
  "nodes": [{
    "name": "AI Chat",
    "type": "n8n-nodes-base.httpRequest",
    "parameters": {
      "url": "http://your-api.com/api/v1/mcp/gpt4/predict",
      "method": "POST",
      "body": {
        "context_id": "{{ $json.session_id }}",
        "payload": {
          "message": "{{ $json.user_input }}"
        }
      }
    }
  }]
}

📊 Monitoring & Observability

Built-in monitoring capabilities:

# Health checks
GET /health
GET /api/v1/models/{name}/health

# Metrics
GET /metrics
GET /api/v1/stats

# Usage analytics
GET /api/v1/usage/models
GET /api/v1/conversations/{context_id}

🐳 Docker Deployment

Production-ready containers:

FROM python:3.11-slim
COPY requirements.txt .
RUN pip install -r requirements.txt
COPY . .
EXPOSE 8000
CMD ["uvicorn", "main:app", "--host", "0.0.0.0", "--port", "8000"]
# Build and run
docker build -t my-ai-api .
docker run -p 8000:8000 my-ai-api

# Or use docker-compose
docker-compose up -d

📚 Examples

Check out our comprehensive examples:

📖 Documentation

🤝 Contributing

We welcome contributions! Please see our Contributing Guide for details.

# Development setup
git clone https://github.com/nzrrest/nzrrest.git
cd nzrrest
pip install -e ".[dev]"

# Run tests
pytest

# Run linting
black .
isort .
flake8

📄 License

This project is licensed under the MIT License - see the LICENSE file for details.

🙏 Acknowledgments

  • Built on the excellent FastAPI and Starlette foundations
  • Designed for seamless n8n integration
  • Community-driven development

🔗 Links


Built with ❤️ for the AI community

nzrRest Framework - Making AI APIs Simple and Powerful

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

nzrrest-0.1.0.tar.gz (62.8 kB view details)

Uploaded Source

Built Distribution

nzrrest-0.1.0-py3-none-any.whl (42.0 kB view details)

Uploaded Python 3

File details

Details for the file nzrrest-0.1.0.tar.gz.

File metadata

  • Download URL: nzrrest-0.1.0.tar.gz
  • Upload date:
  • Size: 62.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for nzrrest-0.1.0.tar.gz
Algorithm Hash digest
SHA256 25e982fd74b753c73bf52b57f4fa8eb572edc8a74bafc8686bbb9af21d5e20fa
MD5 58684639e6af9ea49f85e78700d04fa9
BLAKE2b-256 25548a3007970d06ecbe3215cff278a4936707719ac52996747188b7ca976246

See more details on using hashes here.

File details

Details for the file nzrrest-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: nzrrest-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 42.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.11.11

File hashes

Hashes for nzrrest-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 737100f65a9cb3c385027cee10b0f3fa02003b8489cca22cba08381511c9960d
MD5 232174a6f5d2068f4b34e71e97180616
BLAKE2b-256 68529570a3e91c76ae666b3e54f783e250a5089eaa97dbfc0f554decddabfdbe

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page