Observed since 20 Oct, 22:46 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
LangChain callback handlers for the Grafana Agent Observability Python SDK
agento11y-langchain provides callback handlers that map LangChain lifecycle events into agento11y generation recorder lifecycles.
pip install agento11y agento11y-langchain
pip install langchain-openai
from agento11y import Client
from agento11y_langchain import with_agento11y_langchain_callbacks
client = Client()
config = with_agento11y_langchain_callbacks(None, client=client, provider_resolver="auto")
from langchain_openai import ChatOpenAI
from agento11y import Client
from agento11y_langchain import Agento11yLangChainHandler, with_agento11y_langchain_callbacks
client = Client()
handler = Agento11yLangChainHandler(
client=client,
provider_resolver="auto",
agent_name="langchain-example",
agent_version="1.0.0",
)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)
# Non-stream call -> SYNC generation mode.
result = llm.invoke(
"Summarize why retry budgets matter.",
config=with_agento11y_langchain_callbacks(None, client=client, provider_resolver="auto"),
)
print(result.content)
# Stream call -> STREAM generation mode + TTFT tracking.
for chunk in llm.stream(
"Give me three short reliability tips.",
config=with_agento11y_langchain_callbacks(None, client=client, provider_resolver="auto"),
):
if chunk.content:
print(chunk.content, end="", flush=True)
print()
# Advanced usage: explicit handler wiring remains supported.
_ = llm.invoke("manual handler wiring", config={"callbacks": [handler]})
client.shutdown()
The handler resolves the conversation id per invocation, in this order:
conversation_id / session_id / group_id in the callback metadata, invocation params, or configurablethread_id in the same placesconversation_id constructor argumentPass conversation_id on the constructor when your application owns the conversation identity.
Per-invocation identity still wins, so a handler built once per process cannot override it.
handler = Agento11yLangChainHandler(
client=client,
agent_name="my-chain",
conversation_id=request.conversation_id,
)
Without any of these, each run becomes its own conversation.
on_llm_start / on_chat_model_start -> generation recorderon_chat_model_start are lifted out of the input
message list into system_prompt (joined with a blank line when there are several), since the
wire format has no system role. An explicit invocation_params["system_prompt"] wins.on_tool_start / on_tool_end / on_tool_error -> start_tool_executionon_chain_start / on_chain_end / on_chain_error -> framework chain spanson_retriever_start / on_retriever_end / on_retriever_error -> framework retriever spanson_llm_new_token -> first-token timestamp for stream modeSYNC, stream -> STREAM.gpt-/o1/o3/o4 -> openai, claude- -> anthropic, gemini- -> gemini)customagento11y.framework.name=langchainagento11y.framework.source=handleragento11y.framework.language=pythonmetadata["agento11y.framework.run_id"]=<run id>metadata["agento11y.framework.thread_id"]=<thread id> (when present in callback metadata/config)metadata["agento11y.framework.parent_run_id"] (when available)metadata["agento11y.framework.component_name"] (serialized component identity)metadata["agento11y.framework.run_type"] (llm, chat, tool, chain, retriever)metadata["agento11y.framework.tags"] (normalized callback tags)metadata["agento11y.framework.retry_attempt"] (when available)Call client.shutdown() during teardown to flush buffered telemetry.
Download counts and popularity will appear here as the collector receives them.
| Version | Published | Direct dependencies | Open version |
|---|---|---|---|
| 0.21.0 | 15 Oct 2026 | 3 |
This describes our collected data; it is not a security assessment.
Observed since 20 Oct, 22:46 UTC
No superseded metadata states collected. Unchanged observations do not create new revisions.
package:ce24851912ba87d4b012466afb04000b0c36b1697ff6f974d669d8145b88918c