The Init Function#

If config.py contains an init function, it is called during LLMRails initialization. Use it to set up shared resources and register action parameters.

Basic Usage#

from nemoguardrails import LLMRails

def init(app: LLMRails):
    # Initialize database connection
    db = DatabaseConnection()

    # Register as action parameter (available to all actions)
    app.register_action_param("db", db)

Registering Action Parameters#

Action parameters registered in config.py are automatically injected into actions that declare them:

config.py:

from nemoguardrails import LLMRails

def init(app: LLMRails):
    # Initialize shared resources
    db = DatabaseConnection(host="localhost", port=5432)
    api_client = ExternalAPIClient(api_key="...")

    # Register as action parameters
    app.register_action_param("db", db)
    app.register_action_param("api_client", api_client)

actions.py:

from nemoguardrails.actions import action

@action()
async def fetch_user_data(user_id: str, db=None):
    """The 'db' parameter is injected from config.py."""
    return await db.get_user(user_id)

@action()
async def call_external_service(query: str, api_client=None):
    """The 'api_client' parameter is injected from config.py."""
    return await api_client.search(query)

Accessing the Configuration#

The app parameter provides access to the full configuration:

def init(app: LLMRails):
    # Access the RailsConfig object
    config = app.config

    # Access custom data from config.yml
    custom_settings = config.custom_data

    # Access model configurations
    models = config.models

Example: Database Connection#

import asyncpg
from nemoguardrails import LLMRails

async def create_db_pool():
    return await asyncpg.create_pool(
        host="localhost",
        database="mydb",
        user="user",
        password="password"
    )

def init(app: LLMRails):
    import asyncio

    # Create connection pool
    loop = asyncio.get_event_loop()
    db_pool = loop.run_until_complete(create_db_pool())

    # Register for use in actions
    app.register_action_param("db_pool", db_pool)

Example: API Client Initialization#

import httpx
from nemoguardrails import LLMRails

def init(app: LLMRails):
    # Get API key from custom_data in config.yml
    api_key = app.config.custom_data.get("api_key")

    # Create HTTP client with authentication
    client = httpx.AsyncClient(
        base_url="https://api.example.com",
        headers={"Authorization": f"Bearer {api_key}"}
    )

    app.register_action_param("http_client", client)