Appearance
LangGraph integration
Converra diagnoses failures in LangGraph agent conversations, generates bounded behavior fixes, and compares them against your current agent in simulation. You approve the change, then receive a production verdict: verified, not fixed, or confounded.
Install
bash
pip install converra langgraph langchain-openaiSet CONVERRA_API_KEY, OPENAI_API_KEY, and OPENAI_MODEL in your server environment. Use a Python version supported by LangGraph.
Send the completed graph conversation
This example uses a single text-only node and no persistent checkpointer. Converra receives the graph's actual user and assistant messages, after execution completes.
python
import os
from converra import Converra
from langchain_core.messages import HumanMessage, SystemMessage
from langchain_openai import ChatOpenAI
from langgraph.graph import END, START, MessagesState, StateGraph
converra = Converra(api_key=os.environ['CONVERRA_API_KEY'])
model = ChatOpenAI(model=os.environ['OPENAI_MODEL'])
def respond(state: MessagesState):
instructions = SystemMessage(
content='Ask for an order number before discussing refund eligibility.'
)
return {'messages': [model.invoke([instructions, *state['messages']])]}
builder = StateGraph(MessagesState)
builder.add_node('respond', respond)
builder.add_edge(START, 'respond')
builder.add_edge('respond', END)
graph = builder.compile()
try:
result = graph.invoke({'messages': [HumanMessage(content='Can I get a refund?')]})
roles = {'human': 'user', 'ai': 'assistant'}
messages = []
for message in result['messages']:
if message.type not in roles or not isinstance(message.content, str):
raise ValueError('This example supports user and assistant text only')
messages.append({'role': roles[message.type], 'content': message.content})
run = converra.send(
agent='Refund support',
messages=messages,
metadata={'source': 'langgraph'},
)
print(run.conversation_id)
finally:
converra.shutdown()For graphs with tools, handoffs, images, or multiple agents, preserve that evidence using enriched messages and trace lineage. The text adapter above deliberately rejects message shapes it cannot represent. If LangSmith already captures your graph, the LangSmith connector is another ingestion path; avoid importing the same conversations twice.
For a graph with conversation history, append only new turns to the saved Converra conversation ID rather than sending the entire accumulated state on every invocation. Register the real instructions for each agent in Converra before optimizing.
Fix the failing behavior
Use Converra through your coding agent to inspect the failing turn, generate a bounded change, and compare it against the baseline in simulation. Apply the approved instructions to the relevant graph node. Code and routing changes remain your application's responsibility.
Continue sending production conversations after the change. Query get_deployment_impact and get_verification_evidence to inspect the result against the verdict rules.
References
Reviewed 2026-10-15: LangGraph quickstart for graph construction and invocation; Converra Python SDK version 0.5.1 for explicit conversation delivery.
