ASCEND LangChain Integration
Enterprise-grade AI governance for LangChain agents and tools.
Installation
pip install ascend-langchain
Quick Start
1. Wrap Existing Tools
The simplest way to add governance - wrap any LangChain tool:
from ascend_langchain import AscendToolWrapper
from langchain_community.tools import DuckDuckGoSearchRun
# Wrap existing tool with governance
search = AscendToolWrapper(
tool=DuckDuckGoSearchRun(),
action_type="web.search",
risk_level="low"
)
# Use as normal - governance happens automatically
result = search.invoke("latest AI governance news")
2. Use Callback Handler
Automatic governance for all agent tool calls:
from ascend_langchain import AscendCallbackHandler
from langchain.agents import AgentExecutor
# Create callback handler
handler = AscendCallbackHandler(
agent_id="customer-support-agent",
agent_name="Customer Support Bot"
)
# Add to agent executor
executor = AgentExecutor(
agent=agent,
tools=tools,
callbacks=[handler]
)
# All tool calls are now governed
result = executor.invoke({"input": "Help me with my order"})
3. Use Decorator
Simple function-level governance:
from ascend_langchain import governed
@governed(action_type="database.query", tool_name="postgresql", risk_level="high")
def query_database(query: str) -> list:
return db.execute(query).fetchall()
# Governance check happens automatically
results = query_database("SELECT * FROM customers")
4. Create Governed Tools
Build governed tools from scratch:
from ascend_langchain import GovernedBaseTool
class DatabaseQueryTool(GovernedBaseTool):
name = "query_database"
description = "Execute SQL queries against the database"
action_type = "database.query"
tool_name = "postgresql"
risk_level = "high"
def _execute(self, query: str) -> str:
return str(db.execute(query).fetchall())
# Use in LangChain agent
tool = DatabaseQueryTool()
Or use the factory function:
from ascend_langchain import create_governed_tool
sql_tool = create_governed_tool(
name="sql_query",
description="Execute SQL queries",
func=lambda query: str(db.execute(query).fetchall()),
action_type="database.query",
tool_name="postgresql",
risk_level="high"
)
Configuration
Environment Variables
export ASCEND_API_KEY="owkai_your_key_here"
export ASCEND_API_URL="https://api.owkai.app" # Optional
export ASCEND_AGENT_ID="my-langchain-agent" # Optional
Risk Levels
| Level | Description | Default Behavior |
|---|---|---|
low |
Read-only, non-sensitive | Auto-approve |
medium |
Write operations | Evaluate policy |
high |
Delete, modify critical | Require review |
critical |
Financial, PII access | Require approval |
Complete Example
import os
from langchain.agents import AgentExecutor, create_react_agent
from langchain_openai import ChatOpenAI
from langchain.prompts import PromptTemplate
from ascend_langchain import (
AscendCallbackHandler,
GovernedBaseTool,
create_governed_tool
)
# Set API key
os.environ["ASCEND_API_KEY"] = "owkai_your_key_here"
# Create governed tools
class CustomerLookupTool(GovernedBaseTool):
name = "customer_lookup"
description = "Look up customer information by ID"
action_type = "database.read"
tool_name = "crm_database"
risk_level = "medium"
def _execute(self, customer_id: str) -> str:
# Your actual lookup logic
return f"Customer {customer_id}: John Doe, Premium tier"
# Create callback handler for automatic governance
handler = AscendCallbackHandler(
agent_id="support-agent-prod",
agent_name="Customer Support Agent"
)
# Set up agent
llm = ChatOpenAI(model="gpt-4", temperature=0)
tools = [CustomerLookupTool()]
prompt = PromptTemplate.from_template("""
You are a customer support assistant.
Tools: {tools}
Tool Names: {tool_names}
Question: {input}
{agent_scratchpad}
""")
agent = create_react_agent(llm, tools, prompt)
executor = AgentExecutor(
agent=agent,
tools=tools,
callbacks=[handler],
verbose=True
)
# Run agent - all tool calls are governed
result = executor.invoke({"input": "Look up customer 12345"})
print(result["output"])
Features
- AscendToolWrapper: Wrap any existing LangChain tool
- AscendCallbackHandler: Automatic governance for all agent actions
- @governed decorator: Simple function-level governance
- GovernedBaseTool: Base class for custom governed tools
- create_governed_tool(): Factory function for quick tool creation
- Full audit trail: All actions logged to ASCEND
- Risk classification: Automatic risk-based policy enforcement
- Fail-secure design: Deny by default on errors
Documentation
License
MIT License - see LICENSE for details.
Metadata
Release files for ascend-langchain 2.0.1
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | Actions |
|---|---|---|---|---|
| ascend_langchain-2.0.1.tar.gz | 17.4 kB | Without provenance | Details for ascend_langchain-2.0.1.tar.gz |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Actions Reset |
|---|---|---|---|---|
| ascend_langchain-2.0.1-py3-none-any.whl | Python 3 | none | any | Details for ascend_langchain-2.0.1-py3-none-any.whl |
Total release size: 33.6 kB
Release files / ascend_langchain-2.0.1.tar.gz
| Download URL | ascend_langchain-2.0.1.tar.gz |
|---|---|
| Size | 17.4 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
b2626d8086d1869ef371cada4a6e631a21b3d174e1ddb7f658e436948bc704d7
|
|
BLAKE2b-256 checksum How to use checksums |
4fab928ea9d33a92f890903ce3ac68187442de6bdd31ef5e08f99bbe37efb16a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Release files / ascend_langchain-2.0.1-py3-none-any.whl
| Download URL | ascend_langchain-2.0.1-py3-none-any.whl |
|---|---|
| Size | 16.2 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
122b2c96cba4169358a6c5e4db7217a7db853f54ddbecf104e866f8ebfa00108
|
|
BLAKE2b-256 checksum How to use checksums |
3625c361874dd3a91c929e5907c932d0efd3140edbd5f49fb5e1423660f0f59f
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.2.0 CPython/3.13.1
|
Security for ascend-langchain 2.0.1
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.