Skip to main content

SentinelAI Python SDK

Official Python SDK for integrating applications with SentinelAI AI safety platform.

🚀 Quick Start

Installation

pip install sentinelai-risk

Quick Start with Render Backend

from sentinelai import SentinelAIClient

# Initialize client with your Render backend
client = SentinelAIClient(
    base_url="https://sentinel-ai-dml3.onrender.com",  # Your Render backend URL
    source="my-chatbot-app"
)

# Analyze interaction
result = client.analyze(
    prompt="User message here",
    response="AI response here",
    user_id="user123",
    session_id="session456"
)

# Handle based on risk assessment
if result['decision'] == 'block':
    print("🚫 Response blocked - high risk!")
elif result['decision'] == 'warn':
    print("⚠️ Response flagged for review")
else:
    print("✅ Response is safe")

📋 Features

  • ✅ Real-time AI Safety Analysis - Analyze prompt/response pairs instantly
  • ✅ One-shot Verification - Verify and correct responses with a single call
  • ✅ Hallucination Detection - Score (0-100), claims, and auto-correction
  • ✅ Risk-based Decision Making - Get allow/warn/block/escalate decisions
  • ✅ Multi-turn Conversation Tracking - Track entire conversations
  • ✅ Production-ready - Built-in retries, timeouts, and error handling
  • ✅ Comprehensive Logging - Full audit trail for compliance
  • ✅ Easy Integration - Just 3 lines of code to get started

🎯 Use Cases

  • Customer Support Chatbots - Monitor customer interactions
  • Content Moderation - Automatically moderate user-generated content
  • AI Assistant Safety - Ensure AI responses are safe and appropriate
  • Compliance Monitoring - Meet regulatory requirements for AI safety
  • Multi-application Management - Monitor multiple AI applications from one dashboard

📚 Documentation

Full documentation available at: SentinelAI Documentation

🔧 Installation

From PyPI (Recommended)

pip install sentinelai-risk

From Source

git clone https://github.com/Blacksujit/Sentinel-AI.git
cd Sentinel-AI/sentinelai-sdk
pip install -e .

🚀 Getting Started

1. Initialize Client with Render Backend

from sentinelai import SentinelAIClient

# For development (no API key required)
client = SentinelAIClient(
    base_url="https://sentinel-ai-dml3.onrender.com",
    source="my-application"
)

# For production (with API key)
client = SentinelAIClient(
    base_url="https://sentinel-ai-dml3.onrender.com",
    api_key="your-production-api-key",
    source="production-app"
)

2. API Endpoints Available

The SDK automatically connects to these Render backend endpoints:

Endpoint Purpose SDK Method
POST /api/analyze/external Analyze prompt/response pairs client.analyze()
POST /api/analyze/external One-shot verify (score 0-100, status, claims) client.verify()
POST /api/analyze/external Verify and return corrected text client.correct()
GET /api/health Check backend health client.health_check()
GET /api/logs Retrieve risk logs client.get_risk_logs()
GET /api/settings Get current settings client.get_settings()
POST /api/settings/reset Reset to defaults client.reset_settings()

3. Analyze Interactions

result = client.analyze(
    prompt="User's question or message",
    response="AI model's response",
    user_id="unique-user-id",
    session_id="session-identifier"
)

3. Handle Risk Decisions

decision = result['decision']
risk_score = result['final_risk_score']

if decision == 'allow':
    # Safe to deliver
    return ai_response
elif decision == 'warn':
    # Flag for review but deliver
    log_for_review(result)
    return ai_response
elif decision == 'block':
    # Block the response
    return safe_fallback_response()
elif decision == 'escalate':
    # High priority escalation
    notify_administrators(result)
    return emergency_fallback_response()

✅ One-Shot Verification

The verify() method provides a simplified, single-call interface that returns a score (0-100), status classification, detected claims, and a corrected version.

# Verify a response for accuracy and safety
result = client.verify(
    prompt="Who won the Nobel Prize in Physics in 2019?",
    response="It was awarded entirely to Stephen Hawking for his work on black holes.",
)

# Check result
print(result['score'])        # 0-100 risk score
print(result['status'])       # 'trusted', 'needs_review', or 'hallucinated'
print(result['corrected'])    # Corrected text if hallucinated, otherwise None
print(result['claims'])       # List of flagged claims with detector info

Verify Response Format

{
    "score": 91,                    # Risk score (0-100)
    "status": "hallucinated",       # 'trusted', 'needs_review', or 'hallucinated'
    "decision": "block",            # Backend decision
    "action_taken": "block",        # Action taken
    "claims": [                      # Detected issues
        {
            "detector": "Unsafe Output",
            "text": "Stephen Hawking won it...",
            "severity": "high",
            "source": "response",
            "note": "Flagged by Unsafe Output detector"
        }
    ],
    "corrected": "The 2019 Nobel Prize in Physics...",        # Auto-corrected text
    "meta": {
        "claims_checked": 1,
        "detectors_run": 6,
        "verified_at": "2026-07-16T12:00:00Z"
    }
}

Correct Method

For cases where you only want the corrected response:

corrected = client.correct(
    prompt="Who won the 2019 Nobel Prize?",
    response="Stephen Hawking won it posthumously.",
)
# Returns corrected text if needed, otherwise the original response

📊 Risk Assessment

The SDK provides detailed risk analysis:

{
    "final_risk_score": 0.8,           # Risk score (0.0 to 1.0)
    "decision": "warn",                # 'allow', 'warn', 'block', 'escalate'
    "flags": ["privacy_violation"],    # Detected risk flags
    "confidence": 1.0,                 # Analysis confidence
    "action_taken": "warn",            # Recommended action
    "decision_reason": "Score 0.80...", # Explanation
    "settings_version": 47,            # Settings version used
    "thresholds_applied": {            # Risk thresholds
        "warn_threshold": 0.3,
        "escalate_threshold": 0.7,
        "confidence_floor": 0.5
    }
}

🔄 Conversation Tracking

For multi-turn conversations:

from sentinelai import ConversationTracker

# Initialize tracker
tracker = ConversationTracker(client, "user_session_123")

# Add conversation turns
tracker.add_turn("Hello", "Hi! How can I help you?", user_id="user123")
tracker.add_turn("What's your refund policy?", "We offer 30-day refunds...", user_id="user123")

# Get conversation summary
summary = tracker.get_summary()
print(f"Average risk score: {summary['risk_statistics']['average_risk_score']:.3f}")

🔒 Security & Authentication

Getting an API Key

SentinelAI API keys are generated from the SentinelAI Console:

Copy the generated key once and store it securely (for example in a secrets manager or environment variable).

API Key Authentication

client = SentinelAIClient(
    base_url="https://sentinel-ai-dml3.onrender.com",
    api_key="your-production-api-key",
    source="production-app"
)

Environment Variables

export SENTINELAI_URL="https://sentinel-ai-dml3.onrender.com"
export SENTINELAI_API_KEY="your-api-key"
export SENTINELAI_SOURCE="my-application"

HTTP Header Used

The SDK sends the API key using:

  • Authorization: Bearer <api_key>

The backend also supports X-API-Key: <api_key> if you want to integrate without the SDK.

import os
from sentinelai import SentinelAIClient

client = SentinelAIClient(
    base_url=os.getenv('SENTINELAI_URL'),
    api_key=os.getenv('SENTINELAI_API_KEY'),
    source=os.getenv('SENTINELAI_SOURCE')
)

🚨 Error Handling

The SDK provides comprehensive error handling:

from sentinelai import SentinelAIClient, SentinelAIError, SentinelAIConnectionError

try:
    result = client.analyze(prompt, response, user_id, session_id)
    
except SentinelAIAuthenticationError:
    print("❌ Invalid API key")
    
except SentinelAIConnectionError:
    print("🔴 Cannot connect to SentinelAI")
    # Implement fallback behavior
    
except SentinelAIError as e:
    print(f"⚠️ SentinelAI error: {e}")

📈 Monitoring & Health Checks

# Health check
if client.health_check():
    print("✅ SentinelAI is healthy")
else:
    print("❌ SentinelAI is down")

# Get recent logs
logs = client.get_risk_logs(limit=100, source="my-app")

# Analyze patterns
high_risk_count = len([log for log in logs if log['final_risk_score'] > 0.7])
print(f"High risk interactions: {high_risk_count}")

🎯 Integration Examples

Customer Support Chatbot

class SupportChatbot:
    def __init__(self):
        self.client = SentinelAIClient(
            base_url="https://sentinel-ai-dml3.onrender.com",
            source="customer-support"
        )
    
    def handle_message(self, user_id: str, message: str) -> str:
        # Generate AI response
        ai_response = self.generate_response(message)
        
        # Analyze with SentinelAI
        result = self.client.analyze(
            prompt=message,
            response=ai_response,
            user_id=user_id,
            session_id=f"support_{user_id}"
        )
        
        # Handle based on risk
        if result['decision'] == 'block':
            return "I cannot assist with that request."
        
        return ai_response

Content Moderation

class ContentModerator:
    def __init__(self):
        self.client = SentinelAIClient(
            base_url="https://sentinel-ai-dml3.onrender.com",
            source="content-moderation"
        )
    
    def moderate_content(self, user_id: str, content: str) -> bool:
        result = self.client.analyze(
            prompt=content,
            response="User generated content",
            user_id=user_id
        )
        
        return result['decision'] in ['allow', 'warn']

🔧 Advanced Configuration

client = SentinelAIClient(
    base_url="https://sentinel-ai-dml3.onrender.com",
    api_key="your-api-key",
    source="advanced-app",
    timeout=15,           # Request timeout
    max_retries=3,       # Retry attempts
    retry_delay=1.0       # Delay between retries
)

📦 Requirements

  • Python 3.8+
  • requests >= 2.25.0

🧪 Testing

# Run tests
pip install -e ".[dev]"
pytest

# Run with coverage
pytest --cov=sentinelai

📄 License

MIT License - see LICENSE file for details.

🆘 Support

🔄 Changelog

v1.1.0

  • One-shot verify() method - simplified API with score (0-100), status (trusted/needs_review/hallucinated), claims[], and corrected text
  • correct() method - returns corrected response directly
  • Fixed Python 3.14 deprecation warnings (datetime.utcnow → datetime.now(timezone.utc))

v1.0.0

  • Initial release
  • Real-time AI safety analysis (analyze method)
  • Conversation tracking
  • Production-ready error handling
  • Comprehensive documentation

Ready to make your AI applications safer? Install the SDK and get started in minutes! 🚀

Metadata

Release files for sentinelai-risk 1.0.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for sentinelai-risk 1.0.0
File Size Uploaded
sentinelai_risk-1.0.0.tar.gz 27.4 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for sentinelai-risk 1.0.0
File Interpreter ABI Platform
sentinelai_risk-1.0.0-py3-none-any.whl Python 3 none any Details

Total release size: 47.3 kB

Release files / sentinelai_risk-1.0.0.tar.gz

Download URL sentinelai_risk-1.0.0.tar.gz
Size 27.4 kB
Tags Source
SHA-256 checksum
How to use checksums
3a279fe84dd27654bf636e1b63f7379406444c8f93b033504945d8e6bd6c7d25
BLAKE2b-256 checksum
How to use checksums
595cac2037095ec22926bbf07a736baeaffc64283c91bb310f7c7a6943910414
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release files / sentinelai_risk-1.0.0-py3-none-any.whl

Download URL sentinelai_risk-1.0.0-py3-none-any.whl
Size 19.9 kB
Tags Python 3
SHA-256 checksum
How to use checksums
23953b489ef0df4178a4d0fc004e17c44c49c48ef24207e324e7d4c3a318eafa
BLAKE2b-256 checksum
How to use checksums
e51b1b7547fa711ae4f071994d5d13847c5da12ad1709d2ce989f9bb6c0b2321
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/7.0.0 CPython/3.14.6

Release history Release notifications | RSS feed

This release

1.0.0 This release

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page