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.6.0.tar.gz (48.6 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.6.0-py3-none-any.whl (21.9 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: lakera_red_sdk-0.6.0.tar.gz
  • Upload date:
  • Size: 48.6 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.6.0.tar.gz
Algorithm Hash digest
SHA256 4698d6e41b10cd5cff86d1e965d5559e7fa5ade72d9698186fff74074df2a502
MD5 912f07c37dc4909de763c7ad112e2bd3
BLAKE2b-256 ec87ce61b5ff688806fa5b789892e3cbeda239eb746e2a7256d02d56cb69dc3d

See more details on using hashes here.

File details

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

File metadata

  • Download URL: lakera_red_sdk-0.6.0-py3-none-any.whl
  • Upload date:
  • Size: 21.9 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.6.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e811efb0f9236e32a42ebd5d0584c67d729853ca95eef42344bf20d1b2cd8b4b
MD5 78952c1f620748a0a0a393b339bbbf4b
BLAKE2b-256 fffaafacb845576665f94ce7b9feebac78fbad96c3d7d43e7cd9a623c5c21c9e

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