Skip to content

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)