"""LangGraph example: one node calls precheck before checkout. No model call. If langgraph is not installed, the same node still runs so CI can call a mock. Keep this file next to precheck_tool.py. """ from __future__ import annotations import json import os import sys from pathlib import Path from typing import TypedDict sys.path.insert(0, str(Path(__file__).resolve().parent)) from precheck_tool import precheck class PrecheckState(TypedDict, total=False): url: str reading: dict def precheck_node(state: PrecheckState) -> dict: raw = precheck.invoke({"url": state["url"]}) if hasattr(precheck, "invoke") else precheck(state["url"]) return {"reading": json.loads(raw)} def run(url: str) -> dict: os.environ.setdefault("ARC_CLIENT_REF", "int-langgraph-py") try: from langgraph.graph import END, START, StateGraph except ImportError: return precheck_node({"url": url}) graph = StateGraph(PrecheckState) graph.add_node("precheck", precheck_node) graph.add_edge(START, "precheck") graph.add_edge("precheck", END) return graph.compile().invoke({"url": url}) def main() -> None: url = os.environ.get("PRECHECK_EXAMPLE_URL", "https://allbirds.com/products/shoe") print(json.dumps(run(url))) if __name__ == "__main__": main()