Skip to Content
Agent Integration

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 / execute use bearer session auth.
  • Service-account keys (dgk_* via x-driftgate-api-key) are for admin/config APIs, not runtime sessions.
Last updated on