Metadata-Version: 2.4
Name: tracerazor-langgraph
Version: 0.1.0
Summary: TraceRazor LangGraph/LangChain callback — token efficiency auditing
Author: Zulfaqar Hafez
License-Expression: Apache-2.0
Project-URL: Homepage, https://github.com/ZulfaqarHafez/tracerazor
Project-URL: Repository, https://github.com/ZulfaqarHafez/tracerazor
Keywords: ai,agents,langgraph,langchain,token-efficiency,tracing
Classifier: Development Status :: 4 - Beta
Classifier: Intended Audience :: Developers
Classifier: Programming Language :: Python :: 3
Classifier: Programming Language :: Python :: 3.10
Classifier: Programming Language :: Python :: 3.11
Classifier: Programming Language :: Python :: 3.12
Classifier: Topic :: Software Development :: Libraries
Requires-Python: >=3.10
Description-Content-Type: text/markdown
Requires-Dist: langchain-core>=0.2
Provides-Extra: langgraph
Requires-Dist: langgraph>=0.2; extra == "langgraph"
Dynamic: requires-python

# tracerazor-langgraph

LangGraph/LangChain callback adapter for [TraceRazor](../../README.md).

Automatically captures every LLM call and tool call from your LangGraph graph with zero manual instrumentation.

## Install

```bash
pip install tracerazor-langgraph
pip install tracerazor-langgraph[langgraph]  # includes langgraph
```

Requires the `tracerazor` binary:

```bash
cargo build --release
export TRACERAZOR_BIN=/path/to/TraceRazor/target/release/tracerazor
```

## Usage

```python
from tracerazor_langgraph import TraceRazorCallback
from langgraph.prebuilt import create_react_agent
from langchain_openai import ChatOpenAI

callback = TraceRazorCallback(
    agent_name="support-agent",
    threshold=70,
)

model = ChatOpenAI(model="gpt-4o-mini")
agent = create_react_agent(model, tools=[...])

result = agent.invoke(
    {"messages": [HumanMessage(content="I want a refund")]},
    config={"callbacks": [callback]},
)

# After the agent finishes:
report = callback.analyse()
print(report.markdown())

# CI/CD gate — raises AssertionError if TAS < threshold:
callback.assert_passes()
```

## API

### `TraceRazorCallback(agent_name, framework, threshold, task_value_score, tracerazor_bin)`

| param | default | description |
|---|---|---|
| `agent_name` | `"langgraph-agent"` | shown in all reports |
| `framework` | `"langgraph"` | framework label |
| `threshold` | `70.0` | minimum TAS for `assert_passes()` |
| `task_value_score` | `1.0` | answer quality (0–1) |
| `tracerazor_bin` | auto | path to binary; falls back to `TRACERAZOR_BIN` env var |

### `callback.analyse() → TraceRazorReport`

Finalise and submit the trace. Returns the report.

### `callback.assert_passes()`

Raise `AssertionError` if TAS < threshold.

### `callback.set_task_value_score(score: float)`

Update quality score before calling `analyse()`.
