Skip to main content

Installation

pip install rail-score-sdk
Install with optional extras for provider integrations:
pip install "rail-score-sdk[openai]"       # OpenAI wrapper
pip install "rail-score-sdk[anthropic]"    # Anthropic wrapper
pip install "rail-score-sdk[google]"       # Gemini wrapper
pip install "rail-score-sdk[litellm]"      # LiteLLM wrapper
pip install "rail-score-sdk[integrations]" # All LLM providers
pip install "rail-score-sdk[agents]"       # CrewAI, LangGraph, AutoGen
pip install "rail-score-sdk[telemetry]"    # OpenTelemetry support
pip install "rail-score-sdk[dev]"          # Development tools

Sync client

from rail_score_sdk import RailScoreClient

client = RailScoreClient(api_key="YOUR_RAIL_API_KEY")

result = client.eval(content="Your AI-generated text here", mode="basic")
print(f"RAIL Score: {result.rail_score.score}/10")
RailScoreClient returns typed dataclass objects. Access scores as result.rail_score.score, result.dimension_scores["fairness"].score, etc.

Async client

import asyncio
from rail_score_sdk import AsyncRAILClient

async def main():
    client = AsyncRAILClient(api_key="YOUR_RAIL_API_KEY")
    result = await client.eval(content="Your text here", mode="basic")
    print(result["rail_score"]["score"])  # Returns raw dicts

asyncio.run(main())
AsyncRAILClient returns raw dictionaries rather than dataclasses.

Key classes

ClassPurpose
RailScoreClientSync client - all core methods
AsyncRAILClientAsync client - all core methods
RAILSessionTrack quality across a conversation
PolicyDeclarative rules for score enforcement
RuleIndividual policy rule
RAILMiddlewareWrap any async LLM function

Error handling

from rail_score_sdk import (
    RailScoreClient,
    AuthenticationError,
    InsufficientCreditsError,
    RateLimitError,
    ContentTooHarmfulError,
    DPDPHostedOnlyError,
)

client = RailScoreClient(api_key="YOUR_RAIL_API_KEY")

try:
    result = client.eval(content="...", mode="deep")
except AuthenticationError:
    print("Check your API key")
except InsufficientCreditsError:
    print("Account limit reached")
except RateLimitError:
    print("Slow down requests")
except ContentTooHarmfulError:
    print("Content blocked at safety layer")
except DPDPHostedOnlyError:
    print("DPDP audit runs against the hosted API only")
DPDPHostedOnlyError (added in SDK 2.6.0) is raised when a hosted-only DPDP operation — such as client.dpdp.dpdp_audit() — is called against a self-hosted RAIL agent. See Python: India DPDP.

What’s next

Evaluation

Sync and async eval examples.

Safe Regeneration

Auto-fix below-threshold content.

Sessions & Policy

Track quality across conversations.

India DPDP

Scan Indian PII, gate decisions, emit events, and generate evidence.

Configuration

Inspect policy, plan capabilities, and dimensions at runtime.

Integrations

Provider wrappers for OpenAI, Gemini, Anthropic.