Skip to main content

LangGraph callback handlers for Sigil Python SDK

Project description

Sigil Python Framework Module: LangGraph

sigil-sdk-langgraph provides callback handlers that map LangGraph lifecycle events into Sigil generation recorder lifecycles.

Installation

pip install sigil-sdk sigil-sdk-langgraph
pip install langgraph langchain-openai

Usage

from sigil_sdk import Client
from sigil_sdk_langgraph import with_sigil_langgraph_callbacks

client = Client()
config = with_sigil_langgraph_callbacks(None, client=client, provider_resolver="auto")

End-to-end example (graph invoke + stream)

from typing import TypedDict

from langchain_openai import ChatOpenAI
from langgraph.graph import END, StateGraph
from sigil_sdk import Client
from sigil_sdk_langgraph import SigilLangGraphHandler, with_sigil_langgraph_callbacks


class GraphState(TypedDict):
    prompt: str
    answer: str


client = Client()
handler = SigilLangGraphHandler(
    client=client,
    provider_resolver="auto",
    agent_name="langgraph-example",
    agent_version="1.0.0",
)
llm = ChatOpenAI(model="gpt-4o-mini", temperature=0)


def run_model(state: GraphState) -> GraphState:
    response = llm.invoke(
        state["prompt"],
        config=with_sigil_langgraph_callbacks(None, client=client, provider_resolver="auto"),
    )
    return {"prompt": state["prompt"], "answer": response.content}


workflow = StateGraph(GraphState)
workflow.add_node("model", run_model)
workflow.set_entry_point("model")
workflow.add_edge("model", END)
graph = workflow.compile()

# Non-stream graph invocation.
out = graph.invoke({"prompt": "Explain SLO burn rate in one paragraph.", "answer": ""})
print(out["answer"])

# Streamed graph events.
for _event in graph.stream(
    {"prompt": "List three practical alerting tips.", "answer": ""},
):
    pass

client.shutdown()

Persistent thread example (LangGraph checkpointer)

from langgraph.checkpoint.memory import MemorySaver

checkpointer = MemorySaver()
graph = workflow.compile(checkpointer=checkpointer)

thread_config = {
    **with_sigil_langgraph_callbacks(None, client=client, provider_resolver="auto"),
    "configurable": {"thread_id": "customer-42"},
}

graph.invoke({"prompt": "Remember that my timezone is UTC+1.", "answer": ""}, config=thread_config)
graph.invoke({"prompt": "What timezone did I just give you?", "answer": ""}, config=thread_config)

# Advanced usage: explicit handler wiring remains supported.
_ = graph.invoke(
    {"prompt": "manual handler wiring", "answer": ""},
    config={"callbacks": [handler]},
)

When thread_id is present, the handler records:

  • conversation_id=<thread_id>
  • metadata["sigil.framework.run_id"]=<run id>
  • metadata["sigil.framework.thread_id"]=<thread id>
  • generation span attributes sigil.framework.run_id and sigil.framework.thread_id

Behavior

  • Lifecycle mapping:
    • on_llm_start / on_chat_model_start -> generation recorder
    • on_tool_start / on_tool_end / on_tool_error -> start_tool_execution
    • on_chain_start / on_chain_end / on_chain_error -> framework chain spans
    • on_retriever_start / on_retriever_end / on_retriever_error -> framework retriever spans
    • on_llm_new_token -> first-token timestamp for stream mode
  • Mode mapping: non-stream -> SYNC, stream -> STREAM.
  • Provider resolver parity:
    • explicit provider metadata when available
    • model-name inference (gpt-/o1/o3/o4 -> openai, claude- -> anthropic, gemini- -> gemini)
    • fallback -> custom
  • Framework tags/metadata are always set:
    • sigil.framework.name=langgraph
    • sigil.framework.source=handler
    • sigil.framework.language=python
    • metadata["sigil.framework.run_id"]=<run id>
    • metadata["sigil.framework.thread_id"]=<thread id> (when present in callback metadata/config)
    • metadata["sigil.framework.parent_run_id"] (when available)
    • metadata["sigil.framework.component_name"] (serialized component identity)
    • metadata["sigil.framework.run_type"] (llm, chat, tool, chain, retriever)
    • metadata["sigil.framework.tags"] (normalized callback tags)
    • metadata["sigil.framework.retry_attempt"] (when available)
    • metadata["sigil.framework.langgraph.node"] (when callback context exposes node identity)
    • generation span attributes mirror low-cardinality framework metadata keys

Call client.shutdown() during teardown to flush buffered telemetry.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

sigil_sdk_langgraph-0.1.3.tar.gz (9.0 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

sigil_sdk_langgraph-0.1.3-py3-none-any.whl (5.7 kB view details)

Uploaded Python 3

File details

Details for the file sigil_sdk_langgraph-0.1.3.tar.gz.

File metadata

  • Download URL: sigil_sdk_langgraph-0.1.3.tar.gz
  • Upload date:
  • Size: 9.0 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for sigil_sdk_langgraph-0.1.3.tar.gz
Algorithm Hash digest
SHA256 f19621bf1f0a616f14ffb98f7f07d6f16765e7034487e086859f77e98b661f4f
MD5 e2b6d55b3bc5b38166742a1c6850d548
BLAKE2b-256 76f816a01a73760159fb5974d511a2648a4b3159f974ff31f480527d65639cd2

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigil_sdk_langgraph-0.1.3.tar.gz:

Publisher: python-sdks-publish.yml on grafana/sigil-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file sigil_sdk_langgraph-0.1.3-py3-none-any.whl.

File metadata

File hashes

Hashes for sigil_sdk_langgraph-0.1.3-py3-none-any.whl
Algorithm Hash digest
SHA256 9125ffd39fa0149f9a4b60b2920e841df41cf6fa50a6fc7b1a07faf0705cca49
MD5 347f0f2071ec4f76f6946532ce6c0a12
BLAKE2b-256 dbeda177036d9d8d374d03e4e7c44c1e419ce2ad38e7595c8460ebf78c9b546d

See more details on using hashes here.

Provenance

The following attestation bundles were made for sigil_sdk_langgraph-0.1.3-py3-none-any.whl:

Publisher: python-sdks-publish.yml on grafana/sigil-sdk

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page