Skip to main content

Railtown AI Python SDK

The Railtown AI Python SDK provides error tracking, agent observability, and Conductr chat agent support.

For Conductr chat agents, see src/railtownai/chat/README.md.

Logging

  1. Sign up for Railtown AI - Conductr
  2. Create a project, navigate to the Project Configuration page, and copy your API key
  3. In your app:
    1. Install the Railtown AI SDK: pip install railtownai
    2. Initialize Railtown AI with your API key: railtownai.init('YOUR_RAILTOWN_API_KEY')
    3. Use Python's native logging - all logs will automatically be sent to Railtown AI

Log delivery runs on a background thread. Calling logger.info() enqueues the record and returns immediately; the SDK does not perform network I/O on the thread that emitted the log.

Logging Basic Usage

import logging
import railtownai

# Initialize Railtown AI
railtownai.init('YOUR_RAILTOWN_API_KEY')

# Use Python's native logging - all logs are sent to Railtown AI
logging.info("User logged in", extra={"user_id": 123, "action": "login"})
logging.warning("High memory usage detected", extra={"memory_usage": "85%"})
logging.error("Database connection failed", extra={"db_host": "localhost"})

# Log exceptions with full stack traces
try:
    result = 1 / 0
except Exception:
    logging.exception("Division by zero error")

Logging with Breadcrumbs

Railtown AI supports breadcrumbs - contextual information that gets attached to log events. This is useful for tracking user actions or system state leading up to an error.

import logging
import railtownai

railtownai.init('YOUR_RAILTOWN_API_KEY')

# Add breadcrumbs throughout your application
railtownai.add_breadcrumb("User clicked login button", category="ui")
railtownai.add_breadcrumb("Validating user credentials", category="auth")
railtownai.add_breadcrumb("Database query executed", category="database",
                         data={"query": "SELECT * FROM users", "duration_ms": 45})

# When an error occurs, all breadcrumbs are automatically attached
try:
    # Some operation that might fail
    result = risky_operation()
except Exception:
    logging.exception("Operation failed")  # This will include all the breadcrumbs above

Agent Observability

Track and monitor your AI agent executions with structured data upload. This feature allows you to store detailed information about agent runs, including nodes, steps, and execution flow.

  1. Sign up for Conductr AI for FREE
  2. Initialize Conductr AI with your API key in your Project Configuration (Logs)
  3. Structure your agent data in the session format
  4. Upload using upload_agent_run()
import json
import logging

import railtownai
import railtracks as rt
from fastapi import FastAPI, Query

logger = logging.getLogger(__name__)

# Initialize SDK
railtownai.init("YOUR_API_KEY")

app = FastAPI()

# Replace with your actual agent
# from your_agents_module import WeatherAgent


@app.get("/weather")
async def get_weather(
    city: str = Query(..., description="City name like Vancouver"),
    units: str = Query("metric", description="metric or imperial"),
):
    try:
        # Build the message history for the weather request
        message_history = rt.llm.MessageHistory([
            rt.llm.UserMessage(f"Weather request\nCity: {city}\nUnits: {units}")
        ])

        # Call the agent
        with rt.Session(name="agent-session") as session:
            result = await rt.call(WeatherAgent, message_history)

            # Upload agent run data to RailTown AI
            agent_run_data = session.payload()
            success = railtownai.upload_agent_run(agent_run_data)

            if success:
                logger.info("Agent run data uploaded successfully")
            else:
                logger.error("Failed to upload agent run data")

        logger.info("Weather processing completed successfully")

        return {
            "success": True,
            "city": city,
            "units": units,
            "analysis": str(result),
        }

    except Exception as e:
        logger.error(f"Error processing weather request: {e}")
        return {"error": str(e)}

If you are using the Railtown AI Python Logger, RailTracks Frameworkr automatically propagates any errors at run-time and attaches the node_id, run_id, and session_id via the python logging package, so that Conductr Agent Observability platform can show you exactly which nodes failed or retried.

Agent Evaluations

Send agent evaluation results to Railengine (Conductr Agent Evaluations) for tracking and analysis.

  1. Get your EVALUATIONS_API_TOKEN from the Conductr Agent Evaluations page
  2. Add to .env: EVALUATIONS_API_TOKEN=<base64-encoded-json-from-conductr>
  3. Call upload_agent_evaluation() with your evaluation payload
import railtownai

# Set EVALUATIONS_API_TOKEN in .env (from Conductr Agent Evaluations onboarding)
success = railtownai.upload_agent_evaluation(result_from_evaluation_run)

upload_agent_evaluation() is safe to call inside a running asyncio event loop — for example from a FastAPI async def handler, or as the payload_callback passed to a railtracks evaluate() call that runs inside one. When a loop is already running it transparently offloads the upload to a worker thread. If you are already in async code and prefer to await directly, use the async-native variant:

success = await railtownai.upload_agent_evaluation_async(result_from_evaluation_run)

End-to-end: evaluate runs pulled from Conductr

Fetch the runs you have stored in Conductr with get_agent_runs() (see Fetching Agent Runs from Conductr) and pass the payloads straight into the railtracks evaluations API:

import railtownai
from railtracks import evaluations as evals

payloads = railtownai.get_agent_runs(agent_run_ids)
data = evals.extract_agent_data_points(payloads)   # railtracks >= the version with list[dict] support
results = evals.evaluate(data=data, evaluators=[...])
railtownai.upload_agent_evaluation(results)

Fetching Agent Runs from Conductr

Pull agent runs from the Conductr platform by id — for example when the platform triggers an evaluation against your deployed agent and hands it a list of agentRunIds.

  1. Generate a project PAT in the platform UI (project → Secret Tokens)
  2. Add to .env (or the environment):
    • CONDUCTR_PROJECT_PAT=<your-project-pat>
    • CONDUCTR_PROJECT_ID=<your-project-id>
    • RAILTOWN_API_URL=<platform-base-url> (optional; defaults to https://cndr.railtown.ai)
  3. Call get_agent_runs()

railtownai.init() is not required when both project environment variables are set. The platform host defaults to https://cndr.railtown.ai; set RAILTOWN_API_URL to target a different environment, or call init() to have the host derived from your API key. CONDUCTR_PROJECT_ID overrides the project id from an init() key.

import railtownai

# Fetch one or more runs — pass a list of size 1 for a single run.
# Fail-fast by default; skip_errors=True logs a warning per failed run
# and returns the successful payloads instead.
payloads = railtownai.get_agent_runs([id1, id2], skip_errors=False)

Fetch failures raise railtownai.AgentRunFetchError (with .agent_run_id and .status_code); a missing PAT or project id raises railtownai.AgentRunsNotInitializedError.

Contributing

See the contributing guide for more information (including pip install -e ".[test,dev]" for tests and Ruff in a local clone).

License

The MIT License is a permissive license that allows you to:

  • Use the software for any purpose
  • Modify the software
  • Distribute the software
  • Use it commercially
  • Use it privately
  • Sublicense it

The only requirement is that the original copyright notice and license must be included in all copies or substantial portions of the software.

Metadata

Release files for railtownai 2.3.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for railtownai 2.3.0
File Size Uploaded Provenance Actions
railtownai-2.3.0.tar.gz 29.4 kB Without provenance Details for railtownai-2.3.0.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for railtownai 2.3.0
File Interpreter ABI Platform Actions
railtownai-2.3.0-py3-none-any.whl Python 3 none any Details for railtownai-2.3.0-py3-none-any.whl

Total release size: 62.1 kB

Release files / railtownai-2.3.0.tar.gz

Download URL railtownai-2.3.0.tar.gz
Size 29.4 kB
Tags Source
SHA-256 checksum
How to use checksums
0cb72d123d789f578411a2540ad2b1ec19a869b4c66800c8bddd4358a05e3cf7
BLAKE2b-256 checksum
How to use checksums
26ac7fc55f7324dfd2e5ec66ae97fd86853637987dd554df3cc96704aa0990e7
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.34.2

Release files / railtownai-2.3.0-py3-none-any.whl

Download URL railtownai-2.3.0-py3-none-any.whl
Size 32.7 kB
Tags Python 3
SHA-256 checksum
How to use checksums
ee43e7812e20b82ca23f5d538c401fe74a47016f2325a846473554a8bc61fd0b
BLAKE2b-256 checksum
How to use checksums
569618074fd20b6f2012e58921dc65933ad2a05830be4cc763c2f72043146261
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via python-requests/2.34.2

Security for railtownai 2.3.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

2.3.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page