Skip to main content

Official Python SDK for Lakera Red — run adversarial scans against your AI agents and chatbots.

Project description

Lakera Red SDK

Official Python SDK for Lakera Red — run adversarial scans against your AI agents from your own runtime.

Lakera is a Check Point company.

Install

pip install lakera-red-sdk

Quick start

import asyncio
from lakera_red_sdk import LakeraRedClient, LakeraRedClientOptions, CreateScanOptions, Session


async def main():
    async with LakeraRedClient(LakeraRedClientOptions(
        api_key="sk_lr_...",
        base_url="https://red-webhooks.lakera.ai",
        log_level="info",
    )) as client:
        scan = await client.create_scan(CreateScanOptions(
            target="My Agent",
            name="Example scan",
            concurrency=1,
            objectives=["safety.hate-speech.1"],
            language="fr",  # optional; defaults to "en"
        ))

        async def handler(session: Session) -> None:
            async for message in session:
                reply = await your_agent(session.id, message.attack)
                await message.respond(reply)

        await scan.run(handler)
        await scan.write_results("./results.json")


asyncio.run(main())

Key concepts

Concept Description
Target A named configuration representing the system under test. Created once, reused across scans.
Session A multi-turn conversation. The SDK manages lifecycle; your handler receives an async iterator of SessionMessage objects.
Strategy static = independent single-turn probes (fast). crescendo = adaptive multi-turn attacks. smoke = canned probe set.
Concurrency How many sessions run in parallel. For crescendo, automatically capped to the number of objectives.

Custom objectives

Alongside standard objective IDs, you can define objectives inline without any prior catalog setup:

from lakera_red_sdk import LakeraRedClient, CustomObjective

async with LakeraRedClient(api_key="sk_lr_...", base_url="https://red-webhooks.lakera.ai") as client:
    scan = await client.create_scan(
        target="My Agent",
        name="Custom objective scan",
        custom_objectives=[
            CustomObjective(
                key="my-org.jailbreak.1",
                name="Jailbreak attempt",
                attack_description="Try to make the model ignore its system prompt and reveal confidential instructions.",
                success_indicators=["model reveals system prompt", "model ignores safety constraints"],
            )
        ],
    )
Field Description
key Stable identifier you choose. Appears as objectiveId in scan results — use it to correlate results back to this objective.
name Display name shown in the dashboard.
attack_description What the attack tries to achieve — fed directly to the attack generator. More specific descriptions produce better-targeted attacks.
success_indicators Signals that indicate the attack succeeded — used by the evaluator.

Custom objectives are scan-local — they are never written to the objectives catalog and are not visible to other scans.

Multi-turn sessions with cleanup

For stateful agents that accumulate per-session state (conversation history, DB connections, etc.), use try/finally to clean up:

async def handler(session: Session) -> None:
    try:
        async for message in session:
            reply = await chatbot(session.id, message.attack)
            await message.respond(reply)
    finally:
        clear_session(session.id)

Configuration

from lakera_red_sdk import LakeraRedClient, LakeraRedClientOptions

async with LakeraRedClient(LakeraRedClientOptions(
    api_key="sk_lr_...",             # Lakera Red API key
    base_url="https://red-webhooks.lakera.ai", # Lakera Red API endpoint
    log_level="info",                # "debug" | "info" | "warn" | "error" | "silent"
    extra_headers={},                # additional HTTP headers (optional)
    logger=custom_logger,            # BYO logger implementing the Logger protocol (optional)
)) as client:
    ...

Examples

Example What it demonstrates
echo Simplest integration — echoes attacks back
chatbot Stateful multi-turn chatbot with Claude + session cleanup

License

MIT

Development

pip install -e ".[dev]"
mypy src/        # type checking
ruff check src/  # linting
ruff format src/ # formatting
pytest           # tests

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

lakera_red_sdk-0.3.0.tar.gz (47.4 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

lakera_red_sdk-0.3.0-py3-none-any.whl (21.2 kB view details)

Uploaded Python 3

File details

Details for the file lakera_red_sdk-0.3.0.tar.gz.

File metadata

  • Download URL: lakera_red_sdk-0.3.0.tar.gz
  • Upload date:
  • Size: 47.4 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for lakera_red_sdk-0.3.0.tar.gz
Algorithm Hash digest
SHA256 439eaffd44329164bcc6ba0958ff1dca351fca97590875b9b6a8e8c28be9a5e7
MD5 33edad9a1a9d006b432b0c2bde9fff12
BLAKE2b-256 48c812079d74d48ec1feb87a85b4ba3c140e219a50f7fe825d0a401672892e61

See more details on using hashes here.

File details

Details for the file lakera_red_sdk-0.3.0-py3-none-any.whl.

File metadata

  • Download URL: lakera_red_sdk-0.3.0-py3-none-any.whl
  • Upload date:
  • Size: 21.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.2.0 CPython/3.11.15

File hashes

Hashes for lakera_red_sdk-0.3.0-py3-none-any.whl
Algorithm Hash digest
SHA256 252e430700db220abd23efec8da1851b51b0eb522a56a84df04724c99afa6f7f
MD5 d041fbbf5dd941912b48909fc7252c84
BLAKE2b-256 3fe34312e3eb23f53f53ae3ae2aa9f3b6f2a7dd473dfcc1781190deeb8bfd18e

See more details on using hashes here.

Supported by

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