LlamaIndex
LlamaIndex¶
Use make_guarded_tool to wrap any LlamaIndex FunctionTool with a Xybern check. Denied actions return a safe string that the agent can interpret without crashing.
# llamaindex_xybern.py
import requests
from llama_index.core.tools import FunctionTool
from llama_index.core.agent import ReActAgent
from llama_index.llms.openai import OpenAI
XYBERN_API_KEY = "xb_your_api_key"
AGENT_ID = "llamaindex_agent_001"
def xybern_check(tool_name: str, params: dict) -> bool:
resp = requests.post(
"https://www.xybern.com/api/v1/enforce/intercept",
headers={"X-API-Key": XYBERN_API_KEY},
json={
"agent_id": AGENT_ID,
"action": {"type": "tool_call", "tool": tool_name, "parameters": params},
"context": {"framework": "llamaindex"}
}
).json()
return resp["decision"] == "ALLOW"
def make_guarded_tool(name: str, description: str, fn):
"""Wrap a LlamaIndex tool function with Xybern authorisation."""
def guarded(**kwargs):
if not xybern_check(name, kwargs):
return f"Xybern denied action: {name}. Check your authorisation policies."
return fn(**kwargs)
return FunctionTool.from_defaults(fn=guarded, name=name, description=description)
def search_documents(query: str) -> str:
return f"Documents matching '{query}': [doc1, doc2]"
def write_report(content: str, filename: str) -> str:
return f"Report written to {filename}"
tools = [
make_guarded_tool("search_documents", "Search internal documents", search_documents),
make_guarded_tool("write_report", "Write a report to disk", write_report),
]
llm = OpenAI(model="gpt-4")
agent = ReActAgent.from_tools(tools, llm=llm, verbose=True)
response = agent.chat("Find all documents about Q4 and write a summary report.")
print(response)