Skip to main content

ActiveFence integration for Parlant

Project description

parlant-activefence

ActiveFence integration for Parlant - A Python package that provides content moderation and compliance checking for Parlant applications using ActiveFence's threat analysis & detection services.

Introduction

ActiveFence’s Trust and Safety (T&S) is the world’s leading tool stack for Trust & Safety teams. With ActiveFence’s end-to-end solution, Trust & Safety teams of all sizes can protect users from malicious activity and online harm – regardless of content format, language or abuse area. Integrating with the T&S platform enables you to detect, collect and analyze harmful content that may put your users and brand at risk. By combining AI and a team of subject-matter experts, the ActiveFence T&S platform enables you to be agile and proactive for maximum efficiency, scalability and impact.

Installation

You can install parlant-activefence using pip:

pip install parlant-activefence

Usage

Basic Usage

The parlant-activefence package integrates with Parlant's framework to provide automatic content moderation and compliance checking. Here's how to use it:

from parlant.contrib.activefence import ActiveFence

# Configure Parlant server to use ActiveFence moderation services
# Will use environment variables for configuration
async with p.Server(configure_container=ActiveFence().configure_container) as server:

For the ActiveFence integration to work, an API key must be configured. This and more can be supplied using environment variables. The following environment variables can be used to configure ActiveFence integration:

Variable Description Default
ACTIVEFENCE_API_KEY ActiveFence API key for authentication None (required)
ACTIVEFENCE_APP_NAME Application name for identification Unknown
ACTIVEFENCE_BLOCKED_MESSAGE Message to display when content is blocked "The generated message was blocked by guardrails."

These values can also be passed directly when initializing the container:

from parlant.contrib.activefence import ActiveFence

moderation = ActiveFence(api_key="API_KEY",app_name="APP_NAME", blocked_message="This message was blocked")
async with p.Server(configure_container=moderation.configure_container) as server:

Impact

Using ActiveFence's moderation as shown will analyze messages sent by users to the AI agent, and the agent's response to them. This helps manage abusive messages, protect the application from malicious prompts and ensure the agent responses align to your policies.

User messages blocked by ActiveFence will not reach the agent, but it will get a flagged message indication a censored user request. You can guide the agent to respond to such messages using the Parlant guidelines, like so:

await agent.create_guideline(
        condition="the customer's last message is censored",
        action="respond with a polite refusal to answer the question, mention that the message was censored based on guardrails analysis",
    )

Analysis of the agent responses works a bit different. If the ActiveFence analysis marks the response as BLOCKED, the message itself will not be returned to the user, and instead a preconfigured block message will be returned. This message can be configured as described above. If a policy violation is detected but not flagged to be blocked, a warning is logged using Parlant's internal logger. This warning message will look like this: [warning ] [ReuwnpD7Gzn::process][MessageEventComposer][CannedResponseGenerator] Prevented sending a non-compliant message: 'However, I can't respond to your previous message because it was censored based on our guardrails analysis. If you have another question or need assistance, feel free to ask.'.

Example

Here is a complete example of setting up a Parlant server with ActiveFence moderation:

import asyncio
import parlant.sdk as p
from parlant.contrib.activefence import ActiveFence

async def main():
    async with p.Server(configure_container=ActiveFence(api_key="<API_KEY>",app_name="test").configure_container) as server:
        agent = await server.create_agent(
            name="Otto Carmen",
            description="You work at a computer parts store",
        )
        print(agent.id)

        blocked = await agent.create_guideline(
            condition="the customer's last message is censored",
            action="respond with a polite refusal to answer the question, mention that the message was censored based on guardrails analysis",
        )

asyncio.run(main())

And this is an example of a basic client that calls this server, and prints the messages returned by the agent to the console:

import asyncio
from parlant.client import ParlantClient

async def main():

    client = ParlantClient(base_url='http://localhost:8800')
    session = client.sessions.create(
        agent_id='<AGENT ID>',
        allow_greeting=False,
        title="test",
    )
    session_id = session.id
    client.sessions.create_event(
        session_id,
        kind="message",
        source="customer",
        message='Should I sue about this?',
        moderation="auto",
    )

    last_offset = 0
    while (True):
        try:
            events = client.sessions.list_events(session_id=session_id,
                min_offset=last_offset,
                wait_for_data=30,
                kinds="message",
            )
            for event in events:
                print(event)
                last_offset = max(last_offset, event.offset + 1)
        except Exception as e:
            print(e)

asyncio.run(main())

Enabled moderation="auto" will trigger the user prompt analysis, and if the ActiveFence policy is configured for it, it will block the message for including legal advice, even if the LLM is not configured to respond to this.

License

This project is licensed under the MIT License - see the LICENSE file for details.

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

parlant_activefence-0.1.2.tar.gz (7.1 kB view details)

Uploaded Source

Built Distribution

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

parlant_activefence-0.1.2-py3-none-any.whl (7.2 kB view details)

Uploaded Python 3

File details

Details for the file parlant_activefence-0.1.2.tar.gz.

File metadata

  • Download URL: parlant_activefence-0.1.2.tar.gz
  • Upload date:
  • Size: 7.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for parlant_activefence-0.1.2.tar.gz
Algorithm Hash digest
SHA256 33641e5262c8ce51ab0b542d0ff90cf5f22d61db60363130cab4f47d851642b4
MD5 d6f430ff218ee59419d113935a0f6b6e
BLAKE2b-256 24c6ab88bdfa1e93b5af7f8644ab5dda7eb2ca39712a77a265a3173483aab675

See more details on using hashes here.

Provenance

The following attestation bundles were made for parlant_activefence-0.1.2.tar.gz:

Publisher: python-publish.yml on ActiveFence/parlant-activefence

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file parlant_activefence-0.1.2-py3-none-any.whl.

File metadata

File hashes

Hashes for parlant_activefence-0.1.2-py3-none-any.whl
Algorithm Hash digest
SHA256 f2d35d440aa11a6ff94bdd16d7382b10151d6c4edfe0de653d9860a45be748fe
MD5 5aad9333dee65d0525cafef691f5099d
BLAKE2b-256 7c61cba8ba8cd44de9389181b2f2b7e3f3faa1109ad99985ea063cd7f67ee903

See more details on using hashes here.

Provenance

The following attestation bundles were made for parlant_activefence-0.1.2-py3-none-any.whl:

Publisher: python-publish.yml on ActiveFence/parlant-activefence

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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