Agent Integration
Reference patterns for OpenAI Responses/Agents and LangChain/LangGraph using DriftGate V4 session execution.
OpenAI Responses + DriftGate (TypeScript)
import OpenAI from "openai";
import { DriftGateClient } from "@driftgate/sdk";
const openai = new OpenAI({ apiKey: process.env.OPENAI_API_KEY! });
const driftgate = new DriftGateClient({
sessionToken: process.env.DRIFTGATE_SESSION_TOKEN!,
baseUrl: "https://api-staging.driftgate.ai"
});
const session = await driftgate.session.start({ agent: "support-agent" });
const execution = await session.execute({
input: { prompt: "Summarize refund policy for order #123" }
});
if (execution.error) throw new Error(execution.error.code);
const response = await openai.responses.create({
model: "gpt-4.1-mini",
input: [
{ role: "system", content: "Use the governance payload as ground truth." },
{ role: "user", content: JSON.stringify(execution.data) }
]
});
console.log(response.output_text);LangChain Middleware (TypeScript)
import { DriftGateClient } from "@driftgate/sdk";
import { ChatOpenAI } from "@langchain/openai";
const dg = new DriftGateClient({ sessionToken: process.env.DRIFTGATE_SESSION_TOKEN! });
const llm = new ChatOpenAI({ model: "gpt-4.1-mini" });
const session = await dg.session.start({ agent: "claims-agent" });
const gated = await session.execute({ input: { claimId: "C-42" } });
if (gated.error) throw new Error(gated.error.code);
const answer = await llm.invoke([
["system", "Answer only with approved details from payload."],
["human", JSON.stringify(gated.data)]
]);
console.log(answer.content);LangGraph Guardrail Node (Python)
from driftgate_sdk import DriftGateClient
from langgraph.graph import StateGraph
client = DriftGateClient(
bearer_token="${DRIFTGATE_SESSION_TOKEN}",
base_url="https://api-staging.driftgate.ai",
)
def gate_node(state: dict) -> dict:
session = client.session.start(agent="review-agent")
result = session.execute(input=state["input"])
if result.get("error"):
raise RuntimeError(result["error"]["code"])
state["driftgate"] = result["data"]
return state
graph = StateGraph(dict)
graph.add_node("gate", gate_node)
graph.set_entry_point("gate")
app = graph.compile()
print(app.invoke({"input": {"ticket_id": "T-100"}}))Expected Envelope
{
"data": {
"executionId": "exec_123",
"decision": "allow",
"result": {
"summary": "..."
}
},
"meta": {
"requestId": "req_123",
"timingMs": {
"total": 128
}
},
"error": null
}Downstream frameworks should branch on error and only consume governed payload from data.
Runtime auth note:
session.start/executeuse bearer session auth.- Service-account keys (
dgk_*viax-driftgate-api-key) are for admin/config APIs, not runtime sessions.
Last updated on