graphsight-langgraph 0.3.0__tar.gz → 0.3.1__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (21) hide show
  1. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/PKG-INFO +24 -7
  2. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/README.md +23 -6
  3. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/PKG-INFO +24 -7
  4. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/pyproject.toml +1 -1
  5. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/LICENSE +0 -0
  6. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/__init__.py +0 -0
  7. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/_text.py +0 -0
  8. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/capture.py +0 -0
  9. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/github_ingest.py +0 -0
  10. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/mapper.py +0 -0
  11. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/schema.py +0 -0
  12. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph/tracer.py +0 -0
  13. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/SOURCES.txt +0 -0
  14. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/dependency_links.txt +0 -0
  15. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/entry_points.txt +0 -0
  16. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/requires.txt +0 -0
  17. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/graphsight_langgraph.egg-info/top_level.txt +0 -0
  18. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/setup.cfg +0 -0
  19. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/tests/test_capture.py +0 -0
  20. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/tests/test_mapper.py +0 -0
  21. {graphsight_langgraph-0.3.0 → graphsight_langgraph-0.3.1}/tests/test_tracer.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphsight-langgraph
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: X-ray for LangGraph retrieval: one callback handler captures every retriever call, score, and relational path — rendered as an interactive graph.
5
5
  Author: Arush Karnatak
6
6
  License: MIT
@@ -31,10 +31,13 @@ Dynamic: license-file
31
31
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/graphsight-langgraph/)
32
32
  [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Kcodess2807/graphsight/blob/main/graphsight-langgraph/LICENSE)
33
33
 
34
- **See exactly why your LangGraph agent picked the context it picked.**
34
+ **See which retrieved documents your agent actually used — and which it ignored.**
35
+
36
+ Retrieval in an agent is a black box: twelve documents go in, an answer comes
37
+ out, and when the answer is wrong you're left guessing which context misled
38
+ it. The nine documents the model ignored still cost you tokens, latency, and
39
+ a wider surface to go wrong on — and nothing tells you which nine.
35
40
 
36
- Retrieval in an agent is a black box: documents go in, an answer comes out,
37
- and when the answer is wrong you're left guessing which context misled it.
38
41
  This package opens the box. One callback handler records a
39
42
  [LangGraph](https://github.com/langchain-ai/langgraph) run — every node,
40
43
  every retriever call, per-document scores, and (for graph-aware retrievers)
@@ -42,13 +45,18 @@ the relational paths between retrieved entities — and one command renders it
42
45
  as an interactive graph in your browser.
43
46
 
44
47
  ```
45
- your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.1) ──▶ graphsight viewer
48
+ your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.2) ──▶ graphsight viewer
46
49
  (callbacks) neutral JSON interactive graph
47
50
  ```
48
51
 
49
52
  Only dependency: `langchain-core`. No engine, no backend, no account —
50
53
  nothing leaves your machine.
51
54
 
55
+ ![Graphsight showing a retrieved-but-unused document](https://raw.githubusercontent.com/Kcodess2807/graphsight/main/docs/media/retrieved-vs-used.gif)
56
+
57
+ *A real run. `PR #101` scored **0.910** — the highest of anything retrieved — and the answer
58
+ never used it. `PR #412` scored **0.340** and is the one that answered.*
59
+
52
60
  ## Installation
53
61
 
54
62
  ```bash
@@ -171,7 +179,7 @@ retrievals.
171
179
  | `capture(tracer, query=None, answer=None, dir=None) -> Path` | `finish()` + save to the history directory in one call. |
172
180
  | `save_trace(trace, dir=None) -> Path` | Writes a finished trace to the history directory (`./.graphsight/` or `$GRAPHSIGHT_DIR`). |
173
181
  | `to_tracestate(trace) -> dict` | Maps an `AgentTrace` to the viewer's JSON contract. Serialize with `json.dump`. |
174
- | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.1) for your own tooling. |
182
+ | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.2) for your own tooling. |
175
183
  | `AgentTrace`, `Span`, `Retrieval`, `RetrievedItem`, `TraceEdge` | Plain dataclasses defining the schema; importable for custom emitters. |
176
184
 
177
185
  ## What gets captured
@@ -214,6 +222,15 @@ Document(
214
222
  `repo → Repo`, `library → Library`, `team → Team`, `tool → Tool`; anything
215
223
  else renders as `Document`).
216
224
 
225
+ > **Both endpoints must be retrieved items.** The viewer can only draw an edge
226
+ > between two nodes it has, so an edge pointing at something you didn't return
227
+ > — `{"source": "person_vishal", "target": "pr_412"}` when no document has
228
+ > `id: "person_vishal"` — is dropped from the rendered graph. (It is preserved
229
+ > in `AgentTrace`, so your own tooling still sees it.) If you want people,
230
+ > services or tickets on the canvas, **return them as documents too**, each
231
+ > with its own `id`, `label` and `kind`. A retriever that emits only PRs and
232
+ > then links them to authors will render a flat graph with no edges at all.
233
+
217
234
  ### Degradation behavior
218
235
 
219
236
  - **No edges in metadata** → a flat scored-retrieval view instead of
@@ -265,7 +282,7 @@ OpenTelemetry) emit the same shape and render in the same viewer. v0.2 adds
265
282
  |---|---|
266
283
  | Node spans but no retrievals | Config not propagated into the node's sub-runnables — see [Configuration propagation](#configuration-propagation-read-this-once). |
267
284
  | Items without scores | Your retriever doesn't write a recognized score key to `Document.metadata` — add one (`score` is simplest). |
268
- | Flat graph, no edges | Your retriever doesn't emit `metadata["edges"]` — see [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
285
+ | Flat graph, no edges | Either your retriever doesn't emit `metadata["edges"]`, or the edges point at ids you never returned as documents — both endpoints must be retrieved items. See [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
269
286
  | `GitHub API 403` from the CLI | Rate limit (60 requests/hour unauthenticated) — pass `--token` or set `GITHUB_TOKEN`. |
270
287
  | Garbled output on Windows consoles | Fixed in ≥ 0.1.1; upgrade. |
271
288
 
@@ -4,10 +4,13 @@
4
4
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/graphsight-langgraph/)
5
5
  [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Kcodess2807/graphsight/blob/main/graphsight-langgraph/LICENSE)
6
6
 
7
- **See exactly why your LangGraph agent picked the context it picked.**
7
+ **See which retrieved documents your agent actually used — and which it ignored.**
8
+
9
+ Retrieval in an agent is a black box: twelve documents go in, an answer comes
10
+ out, and when the answer is wrong you're left guessing which context misled
11
+ it. The nine documents the model ignored still cost you tokens, latency, and
12
+ a wider surface to go wrong on — and nothing tells you which nine.
8
13
 
9
- Retrieval in an agent is a black box: documents go in, an answer comes out,
10
- and when the answer is wrong you're left guessing which context misled it.
11
14
  This package opens the box. One callback handler records a
12
15
  [LangGraph](https://github.com/langchain-ai/langgraph) run — every node,
13
16
  every retriever call, per-document scores, and (for graph-aware retrievers)
@@ -15,13 +18,18 @@ the relational paths between retrieved entities — and one command renders it
15
18
  as an interactive graph in your browser.
16
19
 
17
20
  ```
18
- your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.1) ──▶ graphsight viewer
21
+ your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.2) ──▶ graphsight viewer
19
22
  (callbacks) neutral JSON interactive graph
20
23
  ```
21
24
 
22
25
  Only dependency: `langchain-core`. No engine, no backend, no account —
23
26
  nothing leaves your machine.
24
27
 
28
+ ![Graphsight showing a retrieved-but-unused document](https://raw.githubusercontent.com/Kcodess2807/graphsight/main/docs/media/retrieved-vs-used.gif)
29
+
30
+ *A real run. `PR #101` scored **0.910** — the highest of anything retrieved — and the answer
31
+ never used it. `PR #412` scored **0.340** and is the one that answered.*
32
+
25
33
  ## Installation
26
34
 
27
35
  ```bash
@@ -144,7 +152,7 @@ retrievals.
144
152
  | `capture(tracer, query=None, answer=None, dir=None) -> Path` | `finish()` + save to the history directory in one call. |
145
153
  | `save_trace(trace, dir=None) -> Path` | Writes a finished trace to the history directory (`./.graphsight/` or `$GRAPHSIGHT_DIR`). |
146
154
  | `to_tracestate(trace) -> dict` | Maps an `AgentTrace` to the viewer's JSON contract. Serialize with `json.dump`. |
147
- | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.1) for your own tooling. |
155
+ | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.2) for your own tooling. |
148
156
  | `AgentTrace`, `Span`, `Retrieval`, `RetrievedItem`, `TraceEdge` | Plain dataclasses defining the schema; importable for custom emitters. |
149
157
 
150
158
  ## What gets captured
@@ -187,6 +195,15 @@ Document(
187
195
  `repo → Repo`, `library → Library`, `team → Team`, `tool → Tool`; anything
188
196
  else renders as `Document`).
189
197
 
198
+ > **Both endpoints must be retrieved items.** The viewer can only draw an edge
199
+ > between two nodes it has, so an edge pointing at something you didn't return
200
+ > — `{"source": "person_vishal", "target": "pr_412"}` when no document has
201
+ > `id: "person_vishal"` — is dropped from the rendered graph. (It is preserved
202
+ > in `AgentTrace`, so your own tooling still sees it.) If you want people,
203
+ > services or tickets on the canvas, **return them as documents too**, each
204
+ > with its own `id`, `label` and `kind`. A retriever that emits only PRs and
205
+ > then links them to authors will render a flat graph with no edges at all.
206
+
190
207
  ### Degradation behavior
191
208
 
192
209
  - **No edges in metadata** → a flat scored-retrieval view instead of
@@ -238,7 +255,7 @@ OpenTelemetry) emit the same shape and render in the same viewer. v0.2 adds
238
255
  |---|---|
239
256
  | Node spans but no retrievals | Config not propagated into the node's sub-runnables — see [Configuration propagation](#configuration-propagation-read-this-once). |
240
257
  | Items without scores | Your retriever doesn't write a recognized score key to `Document.metadata` — add one (`score` is simplest). |
241
- | Flat graph, no edges | Your retriever doesn't emit `metadata["edges"]` — see [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
258
+ | Flat graph, no edges | Either your retriever doesn't emit `metadata["edges"]`, or the edges point at ids you never returned as documents — both endpoints must be retrieved items. See [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
242
259
  | `GitHub API 403` from the CLI | Rate limit (60 requests/hour unauthenticated) — pass `--token` or set `GITHUB_TOKEN`. |
243
260
  | Garbled output on Windows consoles | Fixed in ≥ 0.1.1; upgrade. |
244
261
 
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: graphsight-langgraph
3
- Version: 0.3.0
3
+ Version: 0.3.1
4
4
  Summary: X-ray for LangGraph retrieval: one callback handler captures every retriever call, score, and relational path — rendered as an interactive graph.
5
5
  Author: Arush Karnatak
6
6
  License: MIT
@@ -31,10 +31,13 @@ Dynamic: license-file
31
31
  [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/graphsight-langgraph/)
32
32
  [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Kcodess2807/graphsight/blob/main/graphsight-langgraph/LICENSE)
33
33
 
34
- **See exactly why your LangGraph agent picked the context it picked.**
34
+ **See which retrieved documents your agent actually used — and which it ignored.**
35
+
36
+ Retrieval in an agent is a black box: twelve documents go in, an answer comes
37
+ out, and when the answer is wrong you're left guessing which context misled
38
+ it. The nine documents the model ignored still cost you tokens, latency, and
39
+ a wider surface to go wrong on — and nothing tells you which nine.
35
40
 
36
- Retrieval in an agent is a black box: documents go in, an answer comes out,
37
- and when the answer is wrong you're left guessing which context misled it.
38
41
  This package opens the box. One callback handler records a
39
42
  [LangGraph](https://github.com/langchain-ai/langgraph) run — every node,
40
43
  every retriever call, per-document scores, and (for graph-aware retrievers)
@@ -42,13 +45,18 @@ the relational paths between retrieved entities — and one command renders it
42
45
  as an interactive graph in your browser.
43
46
 
44
47
  ```
45
- your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.1) ──▶ graphsight viewer
48
+ your LangGraph agent ──▶ LangGraphTracer ──▶ AgentTrace (v0.2) ──▶ graphsight viewer
46
49
  (callbacks) neutral JSON interactive graph
47
50
  ```
48
51
 
49
52
  Only dependency: `langchain-core`. No engine, no backend, no account —
50
53
  nothing leaves your machine.
51
54
 
55
+ ![Graphsight showing a retrieved-but-unused document](https://raw.githubusercontent.com/Kcodess2807/graphsight/main/docs/media/retrieved-vs-used.gif)
56
+
57
+ *A real run. `PR #101` scored **0.910** — the highest of anything retrieved — and the answer
58
+ never used it. `PR #412` scored **0.340** and is the one that answered.*
59
+
52
60
  ## Installation
53
61
 
54
62
  ```bash
@@ -171,7 +179,7 @@ retrievals.
171
179
  | `capture(tracer, query=None, answer=None, dir=None) -> Path` | `finish()` + save to the history directory in one call. |
172
180
  | `save_trace(trace, dir=None) -> Path` | Writes a finished trace to the history directory (`./.graphsight/` or `$GRAPHSIGHT_DIR`). |
173
181
  | `to_tracestate(trace) -> dict` | Maps an `AgentTrace` to the viewer's JSON contract. Serialize with `json.dump`. |
174
- | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.1) for your own tooling. |
182
+ | `trace.to_dict() -> dict` | The framework-neutral `AgentTrace` (schema v0.2) for your own tooling. |
175
183
  | `AgentTrace`, `Span`, `Retrieval`, `RetrievedItem`, `TraceEdge` | Plain dataclasses defining the schema; importable for custom emitters. |
176
184
 
177
185
  ## What gets captured
@@ -214,6 +222,15 @@ Document(
214
222
  `repo → Repo`, `library → Library`, `team → Team`, `tool → Tool`; anything
215
223
  else renders as `Document`).
216
224
 
225
+ > **Both endpoints must be retrieved items.** The viewer can only draw an edge
226
+ > between two nodes it has, so an edge pointing at something you didn't return
227
+ > — `{"source": "person_vishal", "target": "pr_412"}` when no document has
228
+ > `id: "person_vishal"` — is dropped from the rendered graph. (It is preserved
229
+ > in `AgentTrace`, so your own tooling still sees it.) If you want people,
230
+ > services or tickets on the canvas, **return them as documents too**, each
231
+ > with its own `id`, `label` and `kind`. A retriever that emits only PRs and
232
+ > then links them to authors will render a flat graph with no edges at all.
233
+
217
234
  ### Degradation behavior
218
235
 
219
236
  - **No edges in metadata** → a flat scored-retrieval view instead of
@@ -265,7 +282,7 @@ OpenTelemetry) emit the same shape and render in the same viewer. v0.2 adds
265
282
  |---|---|
266
283
  | Node spans but no retrievals | Config not propagated into the node's sub-runnables — see [Configuration propagation](#configuration-propagation-read-this-once). |
267
284
  | Items without scores | Your retriever doesn't write a recognized score key to `Document.metadata` — add one (`score` is simplest). |
268
- | Flat graph, no edges | Your retriever doesn't emit `metadata["edges"]` — see [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
285
+ | Flat graph, no edges | Either your retriever doesn't emit `metadata["edges"]`, or the edges point at ids you never returned as documents — both endpoints must be retrieved items. See [Making your retriever graph-aware](#making-your-retriever-graph-aware). |
269
286
  | `GitHub API 403` from the CLI | Rate limit (60 requests/hour unauthenticated) — pass `--token` or set `GITHUB_TOKEN`. |
270
287
  | Garbled output on Windows consoles | Fixed in ≥ 0.1.1; upgrade. |
271
288
 
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "graphsight-langgraph"
7
- version = "0.3.0"
7
+ version = "0.3.1"
8
8
  description = "X-ray for LangGraph retrieval: one callback handler captures every retriever call, score, and relational path — rendered as an interactive graph."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.10"