Skip to main content

FORMA — AI agent compliance SDK. Zero-config tracking, EU AI Act/DPDP/RBI compliance, cryptographic audit trails.

Project description

FORMA SDK

Make non-compliance impossible — in one line of code.

FORMA doesn't just record what your AI did; it blocks non-compliant decisions before they execute. Add enforce=[...] and PII leaks, prompt injections, and policy violations are stopped at runtime — then every decision is cryptographically signed and mapped to RBI, DPDP, EU AI Act, and ISO 42001.

License: MIT Python 3.8+


Install

pip install forma-sdk

Import name is trustlayer:

import trustlayer as tl

Quickstart — runtime enforcement

import trustlayer as tl

tl.init(
    api_key="tl_live_YOUR_KEY",   # from forma.2bd.net → Settings
    human_sponsor="ops@company.com",
    purpose="Loan application evaluation",
    risk_level="HIGH",
    enforce=["rbi_ml_risk", "dpdp"],   # ← blocks violations BEFORE they run
)

def approve_loan(application: dict) -> dict:
    with tl.using("loan-approval-agent", risk_level="HIGH", enforce=["rbi_ml_risk"]):
        return run_underwriting_model(application)

Now, before any LLM or tool call executes:

  • An Aadhaar / PAN / card number in the prompt → blocked (DPDP)
  • "Ignore previous instructions…" / jailbreaks → blocked
  • "Auto-approve without review" → blocked (RBI human-review rule)

A blocked action raises ComplianceViolation, and every decision (allow / warn / block) lands in your signed audit trail. The gate runs locally in ~1 ms — no network hop in your request path.

from trustlayer import ComplianceViolation

try:
    result = approve_loan(application)
except ComplianceViolation as e:
    print(e.reason)   # "PII detected in LLM prompt: Aadhaar number. ..."

Zero-config tracking (no enforcement)

import trustlayer as tl
tl.init(api_key="tl_live_YOUR_KEY")

# Every OpenAI / Anthropic / LangChain / LiteLLM call is now auto-captured —
# tokens, cost, latency, anomaly score — with no other code changes.

Human approvals (EU AI Act Article 14 / RBI human review)

import trustlayer as tl

tl.init(
    api_key="tl_live_YOUR_KEY",
    require_approval_when=lambda ctx: ctx.get("amount", 0) > 1_000_000,
    approval_message="Loan above ₹10L requires human review.",
)

def approve_loan(application: dict) -> dict:
    with tl.using("loan-approval-agent"):
        return run_underwriting_model(application)

The decision pauses in your FORMA Approvals inbox until a human approves or rejects. Fail-closed: a timeout or unreachable API is treated as a denial — a skipped review never silently passes.


Policy packs

Pack Region Enforces
dpdp India Aadhaar / PAN / card / phone blocked from prompts & tool args; consent-bypass blocked
rbi_ml_risk India Banking auto-approval-without-review blocked; fund-disbursal routed to approval
eu_ai_act EU human-oversight bypass (Art. 14) & logging suppression (Art. 12) blocked; PII protection
iso42001 Global concealing AI involvement blocked

Manual step control

import openai
import trustlayer as tl

tracker = tl.init(api_key="tl_live_YOUR_KEY", auto_capture=False)

def my_agent(task: str) -> str:
    with tl.using("my-agent"):
        with tracker.llm_call(label="generate", model="gpt-4o", prompt=task) as step:
            resp = openai.chat.completions.create(
                model="gpt-4o",
                messages=[{"role": "user", "content": task}],
            )
            step.prompt_tokens     = resp.usage.prompt_tokens
            step.completion_tokens = resp.usage.completion_tokens
            return resp.choices[0].message.content

# For tools:  with tracker.tool_call("send_email", {"to": addr}): ...

Kill switch

Pass kill_switch=True to tl.init(). When you trigger a kill from the dashboard, the next LLM/tool call raises KillSwitchTriggered in under ~100 ms.

CI/CD compliance gate

# Blocks the deploy (exit 1) if any agent is below the threshold
trustlayer gate --pre-deploy --fail-below 80

tl.init() parameters

Parameter Type Description
api_key str Your FORMA API key (tl_live_… / tl_test_…)
enforce list[str] Framework packs enforced on every call, e.g. ["dpdp"]
human_sponsor str Accountable human (EU AI Act Art. 14 / RBI)
auto_capture bool Auto-patch OpenAI/Anthropic/LangChain/LiteLLM (default True)
kill_switch bool Start the process-level kill watcher (default False)
compliance list[str] Frameworks for scoring/reports
require_approval_when callable Lambda on approval context; return True to require human review
approval_message str Message shown in the Approvals inbox

Node.js / TypeScript

npm install forma-sdk
import * as forma from "forma-sdk";

forma.init({ apiKey: "tl_live_YOUR_KEY", humanSponsor: "ops@company.com" });

const { decision } = await forma.gate("agent-id", {
    actionType: "llm_call",
    prompt: userPrompt,
});

Note: The Node SDK is coming soon (not yet published to npm). Runtime enforcement (enforce) and approvals are Python-only today. The Node package will provide init + gate first; enforcement parity is on the roadmap.


Dashboard & docs

License

MIT — see LICENSE.

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

forma_sdk-2.0.0.tar.gz (52.6 kB view details)

Uploaded Source

Built Distribution

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

forma_sdk-2.0.0-py3-none-any.whl (54.0 kB view details)

Uploaded Python 3

File details

Details for the file forma_sdk-2.0.0.tar.gz.

File metadata

  • Download URL: forma_sdk-2.0.0.tar.gz
  • Upload date:
  • Size: 52.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for forma_sdk-2.0.0.tar.gz
Algorithm Hash digest
SHA256 f347357374a2cddac9dcbd6310285113f8fe50f85b4787c1ce55139ca10590a0
MD5 791d7e683fad50a255f244df90fe51e1
BLAKE2b-256 45f7d02a3bff52635489112cdd4245699ec4d090783bd60827e977e10ddcdfc3

See more details on using hashes here.

File details

Details for the file forma_sdk-2.0.0-py3-none-any.whl.

File metadata

  • Download URL: forma_sdk-2.0.0-py3-none-any.whl
  • Upload date:
  • Size: 54.0 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.6

File hashes

Hashes for forma_sdk-2.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 fc1a1b363f0a27af2895b4fe2c5aebd5514b66c741192ca703b751da2cc9e783
MD5 26389e27ecbf8338c09a0bf1163ec6a5
BLAKE2b-256 953010de7ae507a97b5d91fa4556c5d5ad4771a885ca8baeb53075ebf5bc5e6e

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