graphsight 0.3.1__tar.gz → 0.3.3__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 (79) hide show
  1. {graphsight-0.3.1 → graphsight-0.3.3}/LICENSE +21 -21
  2. {graphsight-0.3.1 → graphsight-0.3.3}/MANIFEST.in +2 -2
  3. {graphsight-0.3.1/graphsight.egg-info → graphsight-0.3.3}/PKG-INFO +236 -204
  4. {graphsight-0.3.1 → graphsight-0.3.3}/README.md +212 -180
  5. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/__init__.py +11 -11
  6. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/cli.py +66 -66
  7. graphsight-0.3.1/graphsight/dist/assets/arc-DGOsvhEX.js → graphsight-0.3.3/graphsight/dist/assets/arc-CmklN-8F.js +1 -1
  8. graphsight-0.3.1/graphsight/dist/assets/architectureDiagram-3BPJPVTR-CbMqmqRH.js → graphsight-0.3.3/graphsight/dist/assets/architectureDiagram-3BPJPVTR-CFLzdMsa.js +1 -1
  9. graphsight-0.3.1/graphsight/dist/assets/blockDiagram-GPEHLZMM-CDyJXpDM.js → graphsight-0.3.3/graphsight/dist/assets/blockDiagram-GPEHLZMM-BS6KUcEM.js +1 -1
  10. graphsight-0.3.1/graphsight/dist/assets/c4Diagram-AAUBKEIU-CDIS2dj-.js → graphsight-0.3.3/graphsight/dist/assets/c4Diagram-AAUBKEIU-DGhRNswM.js +1 -1
  11. graphsight-0.3.3/graphsight/dist/assets/channel-D_cdbQzh.js +1 -0
  12. graphsight-0.3.1/graphsight/dist/assets/chunk-2J33WTMH-DF0wXQ_q.js → graphsight-0.3.3/graphsight/dist/assets/chunk-2J33WTMH-7qx4EE-l.js +1 -1
  13. graphsight-0.3.1/graphsight/dist/assets/chunk-4BX2VUAB-C6Xwj9Pr.js → graphsight-0.3.3/graphsight/dist/assets/chunk-4BX2VUAB-CwYpbQEu.js +1 -1
  14. graphsight-0.3.1/graphsight/dist/assets/chunk-55IACEB6-BjGYIYUH.js → graphsight-0.3.3/graphsight/dist/assets/chunk-55IACEB6-DBrRdN2r.js +1 -1
  15. graphsight-0.3.1/graphsight/dist/assets/chunk-727SXJPM-wS8WwDXi.js → graphsight-0.3.3/graphsight/dist/assets/chunk-727SXJPM-DXIyHY_I.js +1 -1
  16. graphsight-0.3.1/graphsight/dist/assets/chunk-AQP2D5EJ-MY0fo7mx.js → graphsight-0.3.3/graphsight/dist/assets/chunk-AQP2D5EJ-CpVN3Jq9.js +1 -1
  17. graphsight-0.3.1/graphsight/dist/assets/chunk-FMBD7UC4-CNVgh_MP.js → graphsight-0.3.3/graphsight/dist/assets/chunk-FMBD7UC4-BcfcBu_c.js +1 -1
  18. graphsight-0.3.1/graphsight/dist/assets/chunk-ND2GUHAM-r3utGEk6.js → graphsight-0.3.3/graphsight/dist/assets/chunk-ND2GUHAM-97e3NT_q.js +1 -1
  19. graphsight-0.3.1/graphsight/dist/assets/chunk-QZHKN3VN-CRKapwff.js → graphsight-0.3.3/graphsight/dist/assets/chunk-QZHKN3VN-CvkJ-p2W.js +1 -1
  20. graphsight-0.3.3/graphsight/dist/assets/classDiagram-4FO5ZUOK-COOkjiJx.js +1 -0
  21. graphsight-0.3.3/graphsight/dist/assets/classDiagram-v2-Q7XG4LA2-COOkjiJx.js +1 -0
  22. graphsight-0.3.1/graphsight/dist/assets/cose-bilkent-S5V4N54A-D8A0GZYU.js → graphsight-0.3.3/graphsight/dist/assets/cose-bilkent-S5V4N54A-BCjZSCuK.js +1 -1
  23. graphsight-0.3.1/graphsight/dist/assets/dagre-BM42HDAG-CdY1GieV.js → graphsight-0.3.3/graphsight/dist/assets/dagre-BM42HDAG-CQ9kc2Bc.js +1 -1
  24. graphsight-0.3.1/graphsight/dist/assets/diagram-2AECGRRQ-BmpqIsY_.js → graphsight-0.3.3/graphsight/dist/assets/diagram-2AECGRRQ-DXEZFSo1.js +1 -1
  25. graphsight-0.3.1/graphsight/dist/assets/diagram-5GNKFQAL-CGucdtV7.js → graphsight-0.3.3/graphsight/dist/assets/diagram-5GNKFQAL-BTy8UzN3.js +1 -1
  26. graphsight-0.3.1/graphsight/dist/assets/diagram-KO2AKTUF-D8UClmZ6.js → graphsight-0.3.3/graphsight/dist/assets/diagram-KO2AKTUF-CA4cYMGn.js +1 -1
  27. graphsight-0.3.1/graphsight/dist/assets/diagram-LMA3HP47-BbUB7zIV.js → graphsight-0.3.3/graphsight/dist/assets/diagram-LMA3HP47-BoSbIOJ1.js +1 -1
  28. graphsight-0.3.1/graphsight/dist/assets/diagram-OG6HWLK6-BLKvQFD6.js → graphsight-0.3.3/graphsight/dist/assets/diagram-OG6HWLK6-D1-r0nmx.js +1 -1
  29. graphsight-0.3.1/graphsight/dist/assets/erDiagram-TEJ5UH35-DhE3Yfeq.js → graphsight-0.3.3/graphsight/dist/assets/erDiagram-TEJ5UH35-WDvFx-37.js +1 -1
  30. graphsight-0.3.1/graphsight/dist/assets/flowDiagram-I6XJVG4X-BoPzRdHF.js → graphsight-0.3.3/graphsight/dist/assets/flowDiagram-I6XJVG4X-DxI0T3u0.js +1 -1
  31. graphsight-0.3.1/graphsight/dist/assets/ganttDiagram-6RSMTGT7-Cn2HPQDn.js → graphsight-0.3.3/graphsight/dist/assets/ganttDiagram-6RSMTGT7-HQRbliIj.js +2 -2
  32. graphsight-0.3.1/graphsight/dist/assets/gitGraphDiagram-PVQCEYII-e5mkpbyX.js → graphsight-0.3.3/graphsight/dist/assets/gitGraphDiagram-PVQCEYII-D57h7kXW.js +1 -1
  33. graphsight-0.3.3/graphsight/dist/assets/index-CC75LEyt.js +443 -0
  34. graphsight-0.3.3/graphsight/dist/assets/index-DFtqlyD9.css +1 -0
  35. graphsight-0.3.1/graphsight/dist/assets/infoDiagram-5YYISTIA-DRkiL_DQ.js → graphsight-0.3.3/graphsight/dist/assets/infoDiagram-5YYISTIA-CPKjaHwj.js +1 -1
  36. graphsight-0.3.1/graphsight/dist/assets/ishikawaDiagram-YF4QCWOH-_FUPaFzj.js → graphsight-0.3.3/graphsight/dist/assets/ishikawaDiagram-YF4QCWOH-BJiViB0g.js +1 -1
  37. graphsight-0.3.1/graphsight/dist/assets/journeyDiagram-JHISSGLW-BC6uAFP5.js → graphsight-0.3.3/graphsight/dist/assets/journeyDiagram-JHISSGLW-Ccp3wgiu.js +1 -1
  38. graphsight-0.3.1/graphsight/dist/assets/kanban-definition-UN3LZRKU-X9H1Bevu.js → graphsight-0.3.3/graphsight/dist/assets/kanban-definition-UN3LZRKU-BklZ74NC.js +1 -1
  39. graphsight-0.3.3/graphsight/dist/assets/linear-B1sogSza.js +1 -0
  40. graphsight-0.3.1/graphsight/dist/assets/mermaid.core-B4Rsz1_K.js → graphsight-0.3.3/graphsight/dist/assets/mermaid.core-DuwfFY7r.js +20 -20
  41. graphsight-0.3.1/graphsight/dist/assets/mindmap-definition-RKZ34NQL-BggN-jLg.js → graphsight-0.3.3/graphsight/dist/assets/mindmap-definition-RKZ34NQL-IECx9lJK.js +1 -1
  42. graphsight-0.3.1/graphsight/dist/assets/pieDiagram-4H26LBE5-MXE68O6T.js → graphsight-0.3.3/graphsight/dist/assets/pieDiagram-4H26LBE5-C60YSXkE.js +1 -1
  43. graphsight-0.3.1/graphsight/dist/assets/quadrantDiagram-W4KKPZXB-lrEZKCVn.js → graphsight-0.3.3/graphsight/dist/assets/quadrantDiagram-W4KKPZXB-BvkozqKd.js +1 -1
  44. graphsight-0.3.1/graphsight/dist/assets/requirementDiagram-4Y6WPE33-BFFGZPL_.js → graphsight-0.3.3/graphsight/dist/assets/requirementDiagram-4Y6WPE33-C4rIcCYr.js +1 -1
  45. graphsight-0.3.1/graphsight/dist/assets/sankeyDiagram-5OEKKPKP-D2rDi26n.js → graphsight-0.3.3/graphsight/dist/assets/sankeyDiagram-5OEKKPKP-Dx6_Vc61.js +1 -1
  46. graphsight-0.3.1/graphsight/dist/assets/sequenceDiagram-3UESZ5HK-Bit_NcSO.js → graphsight-0.3.3/graphsight/dist/assets/sequenceDiagram-3UESZ5HK-Bc2YJoPG.js +1 -1
  47. graphsight-0.3.1/graphsight/dist/assets/stateDiagram-AJRCARHV-yUP1OLyV.js → graphsight-0.3.3/graphsight/dist/assets/stateDiagram-AJRCARHV-DkhwseLE.js +1 -1
  48. graphsight-0.3.3/graphsight/dist/assets/stateDiagram-v2-BHNVJYJU-B3PSjsRr.js +1 -0
  49. graphsight-0.3.1/graphsight/dist/assets/timeline-definition-PNZ67QCA-DNKkG3d7.js → graphsight-0.3.3/graphsight/dist/assets/timeline-definition-PNZ67QCA-wF-Xzv0y.js +1 -1
  50. graphsight-0.3.1/graphsight/dist/assets/vennDiagram-CIIHVFJN-C7xsmX66.js → graphsight-0.3.3/graphsight/dist/assets/vennDiagram-CIIHVFJN-BwnMl_5c.js +1 -1
  51. graphsight-0.3.1/graphsight/dist/assets/wardley-L42UT6IY-rz2LOAhR.js → graphsight-0.3.3/graphsight/dist/assets/wardley-L42UT6IY-C1VV2FK3.js +1 -1
  52. graphsight-0.3.1/graphsight/dist/assets/wardleyDiagram-YWT4CUSO-_1bS5QK8.js → graphsight-0.3.3/graphsight/dist/assets/wardleyDiagram-YWT4CUSO-Cmi--wQX.js +1 -1
  53. graphsight-0.3.1/graphsight/dist/assets/xychartDiagram-2RQKCTM6-CVODa8Gv.js → graphsight-0.3.3/graphsight/dist/assets/xychartDiagram-2RQKCTM6-BCqUuVNv.js +1 -1
  54. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/index.html +25 -25
  55. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/server.py +112 -110
  56. {graphsight-0.3.1 → graphsight-0.3.3/graphsight.egg-info}/PKG-INFO +236 -204
  57. graphsight-0.3.3/graphsight.egg-info/SOURCES.txt +69 -0
  58. {graphsight-0.3.1 → graphsight-0.3.3}/pyproject.toml +40 -40
  59. {graphsight-0.3.1 → graphsight-0.3.3}/setup.cfg +4 -4
  60. {graphsight-0.3.1 → graphsight-0.3.3}/tests/test_server.py +86 -84
  61. graphsight-0.3.1/graphsight/dist/assets/channel-DKZXqgRh.js +0 -1
  62. graphsight-0.3.1/graphsight/dist/assets/classDiagram-4FO5ZUOK-DvcSHvlU.js +0 -1
  63. graphsight-0.3.1/graphsight/dist/assets/classDiagram-v2-Q7XG4LA2-DvcSHvlU.js +0 -1
  64. graphsight-0.3.1/graphsight/dist/assets/index-BAt7CdVk.css +0 -1
  65. graphsight-0.3.1/graphsight/dist/assets/index-Bi1lliDA.js +0 -483
  66. graphsight-0.3.1/graphsight/dist/assets/linear-L4AgCZnM.js +0 -1
  67. graphsight-0.3.1/graphsight/dist/assets/stateDiagram-v2-BHNVJYJU-CtmFDByB.js +0 -1
  68. graphsight-0.3.1/graphsight.egg-info/SOURCES.txt +0 -69
  69. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/cytoscape.esm-DTSO7Bv0.js +0 -0
  70. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/defaultLocale-DX6XiGOO.js +0 -0
  71. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/graph-CAnANduQ.js +0 -0
  72. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/init-Gi6I4Gst.js +0 -0
  73. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/katex-C5jXJg4s.js +0 -0
  74. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/layout-DGIYPm2g.js +0 -0
  75. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/assets/ordinal-Cboi1Yqb.js +0 -0
  76. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight/dist/favicon.svg +0 -0
  77. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight.egg-info/dependency_links.txt +0 -0
  78. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight.egg-info/entry_points.txt +0 -0
  79. {graphsight-0.3.1 → graphsight-0.3.3}/graphsight.egg-info/top_level.txt +0 -0
@@ -1,21 +1,21 @@
1
- MIT License
2
-
3
- Copyright (c) 2026 Arush Karnatak
4
-
5
- Permission is hereby granted, free of charge, to any person obtaining a copy
6
- of this software and associated documentation files (the "Software"), to deal
7
- in the Software without restriction, including without limitation the rights
8
- to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
- copies of the Software, and to permit persons to whom the Software is
10
- furnished to do so, subject to the following conditions:
11
-
12
- The above copyright notice and this permission notice shall be included in all
13
- copies or substantial portions of the Software.
14
-
15
- THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
- IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
- FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
- AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
- LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
- OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
- SOFTWARE.
1
+ MIT License
2
+
3
+ Copyright (c) 2026 Arush Karnatak
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
@@ -1,2 +1,2 @@
1
- recursive-include graphsight/dist *
2
- include LICENSE
1
+ recursive-include graphsight/dist *
2
+ include LICENSE
@@ -1,204 +1,236 @@
1
- Metadata-Version: 2.4
2
- Name: graphsight
3
- Version: 0.3.1
4
- Summary: See why your AI agent retrieved what it did — interactive graph viewer for agent retrieval traces. One command, zero dependencies, nothing leaves your machine.
5
- Author: Arush Karnatak
6
- License: MIT
7
- Project-URL: Repository, https://github.com/Kcodess2807/graphsight
8
- Project-URL: Documentation, https://github.com/Kcodess2807/graphsight/tree/main/graphsight
9
- Keywords: tracing,observability,rag,retrieval,agents,visualization,langgraph
10
- Classifier: Development Status :: 3 - Alpha
11
- Classifier: Intended Audience :: Developers
12
- Classifier: License :: OSI Approved :: MIT License
13
- Classifier: Programming Language :: Python :: 3
14
- Classifier: Programming Language :: Python :: 3.10
15
- Classifier: Programming Language :: Python :: 3.11
16
- Classifier: Programming Language :: Python :: 3.12
17
- Classifier: Programming Language :: Python :: 3.13
18
- Classifier: Topic :: Software Development :: Debuggers
19
- Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
- Requires-Python: >=3.10
21
- Description-Content-Type: text/markdown
22
- License-File: LICENSE
23
- Dynamic: license-file
24
-
25
- # graphsight
26
-
27
- [![PyPI](https://img.shields.io/pypi/v/graphsight.svg)](https://pypi.org/project/graphsight/)
28
- [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/graphsight/)
29
- [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Kcodess2807/graphsight/blob/main/graphsight/LICENSE)
30
-
31
- **See which retrieved documents your agent actually used — and which it ignored.**
32
-
33
- Your agent answered a question. Which documents did it actually pull? Which
34
- of those did the answer come from? What scores did they get, and how are they
35
- connected? Most stacks make you dig through logs. Graphsight renders the run
36
- as an **interactive graph in your browser** — one command, zero dependencies,
37
- nothing leaves your machine.
38
-
39
- ![Graphsight showing a retrieved-but-unused document](https://raw.githubusercontent.com/Kcodess2807/graphsight/main/docs/media/retrieved-vs-used.gif)
40
-
41
- *A real run. `PR #101` scored **0.910** — the highest of anything retrieved — and the answer
42
- never used it. `PR #412` scored **0.340** and is the one that answered.*
43
-
44
- ```bash
45
- pip install graphsight
46
- graphsight path/to/trace_state.json
47
- ```
48
-
49
- ## Retrieved vs. used
50
-
51
- The signal that isn't in your logs. When a trace carries the final answer,
52
- every retrieved item is scored by lexical overlap against it and rendered
53
- either **highlighted** (surfaced in the answer) or **dimmed** with the label
54
- *"retrieved, unused."* That splits the two classic retrieval failures at a
55
- glance:
56
-
57
- - **Right document retrieved, ignored by the model** → a dimmed node with a
58
- high retrieval score. Your retriever worked; your prompt or context order
59
- didn't.
60
- - **Wrong document trusted** → a highlighted node that shouldn't be.
61
-
62
- The overlap is a lexical heuristic, labeled as such (threshold 0.2). No LLM
63
- re-reads your evidence, and no score is invented — a trace with no answer
64
- attached makes no usage claims at all.
65
-
66
- ## What else you get
67
-
68
- - **Every retrieved item as a typed node** — PR, Service, Person, Ticket,
69
- Document, Repo, Library, Team, Tool — with its retrieval score.
70
- - **Relational paths between results** — *person → authored → PR →
71
- resolves → issue* — the chain of evidence, not just a ranked list.
72
- - **An inspector on every node**: underlying content, score, source link.
73
- - **The execution timeline** of the run: each agent step, each retriever
74
- call, per-span timings, and which retrieval arm (vector / graph) produced
75
- the results.
76
-
77
- ## Requirements
78
-
79
- | | |
80
- |---|---|
81
- | Python | ≥ 3.10 |
82
- | Runtime dependencies | **none** (stdlib only) |
83
- | Platforms | Windows, macOS, Linux |
84
- | Browser | any modern browser |
85
-
86
- ## Usage
87
-
88
- ```
89
- graphsight [trace] [--port PORT] [--no-browser]
90
- ```
91
-
92
- | Argument | Default | Description |
93
- |---|---|---|
94
- | `trace` | — | A `trace_state.json` file, **or a directory of them** (e.g. `.graphsight/`) to browse run history. Optional — omit to open the import page and drag-and-drop or paste JSON instead. |
95
- | `--port` | `4630` | Local port to serve on. |
96
- | `--no-browser` | off | Start the server without opening a browser window. |
97
-
98
- The server binds to `127.0.0.1` only and runs until you press `Ctrl+C`.
99
-
100
- ## Run history
101
-
102
- Point `graphsight` at a directory and it becomes a run browser — every
103
- trace listed by query and time, one click to open:
104
-
105
- ```bash
106
- graphsight .graphsight/
107
- ```
108
-
109
- The [graphsight-langgraph](https://pypi.org/project/graphsight-langgraph/)
110
- `capture()` helper appends every agent run there automatically, so your
111
- debugging history accumulates with zero ceremony — no setup, no database.
112
-
113
- Because the history is a directory of plain files, you can **compare two
114
- runs side by side**: what the retrieval returned before a prompt change and
115
- after it, which items appeared or vanished, and which flipped between used
116
- and ignored. That is usually the fastest way to answer "what did my edit
117
- actually do to retrieval?"
118
-
119
- ## Sharing traces with your team
120
-
121
- A trace is one self-contained JSON file — no account or backend needed to
122
- share it:
123
-
124
- - **Send the file.** A teammate with `graphsight` installed runs
125
- `graphsight trace.json`. Works in a DM, a ticket attachment, a CI
126
- artifact.
127
- - **Link it.** A deployed Graphsight frontend opens any publicly reachable
128
- trace via `…/memory/import?src=<url-to-json>` — host the JSON on a gist
129
- or artifact store and share the link. (The host must allow cross-origin
130
- GETs; raw gists do.)
131
- - **Commit it.** Trace files in the repo next to the incident or PR they
132
- explain make retrieval debugging part of the review record.
133
-
134
- ## Producing traces
135
-
136
- Graphsight renders any file matching its trace JSON contract. Current
137
- producers:
138
-
139
- - **[graphsight-langgraph](https://pypi.org/project/graphsight-langgraph/)** —
140
- instrument any [LangGraph](https://github.com/langchain-ai/langgraph)
141
- agent with a single callback handler, or trace a GitHub repository in one
142
- command:
143
-
144
- ```bash
145
- pip install "graphsight-langgraph[example]"
146
- graphsight-github-trace langchain-ai/langgraph "who fixed the recent streaming bugs?"
147
- graphsight graphsight_out/trace_state.json
148
- ```
149
-
150
- - **The Graphsight graph-memory engine** — the backend this project grew out
151
- of: GitHub events become a live knowledge graph with typed, timestamped
152
- edges (`AUTHORED`, `RESOLVES`, `TOUCHES`), queried by a hybrid
153
- vector + graph router. Its `/api/trace` responses are the same shape. See
154
- the [main repository](https://github.com/Kcodess2807/graphsight).
155
-
156
- Adapters for LlamaIndex and raw OpenTelemetry spans are planned; all
157
- producers emit the same schema and render in this same viewer.
158
-
159
- ### Writing your own producer
160
-
161
- The minimum contract is small — a JSON object with:
162
-
163
- ```jsonc
164
- {
165
- "query": "the question that was asked", // required, string
166
- "graph": {
167
- "nodes": [{ "id", "label", "type", "score", "meta": { "snippet", "sourceUrl" } }],
168
- "edges": [{ "id", "source", "target", "relation", "confidence" }]
169
- },
170
- "steps": [ /* execution timeline, optional */ ],
171
- "metrics": { "queryTimeSec": 0.004 } // optional
172
- }
173
- ```
174
-
175
- Node positions are computed client-side; emitters never deal with layout.
176
- The complete schema and a reference emitter live in the
177
- [graphsight-langgraph source](https://github.com/Kcodess2807/graphsight/tree/main/graphsight-langgraph).
178
-
179
- ## Security and privacy
180
-
181
- - The dependency list is empty by design: the UI is a bundled static build
182
- (Vite + React + React Flow) served by Python's stdlib `http.server`.
183
- - Binds to `127.0.0.1` — not reachable from other machines.
184
- - No accounts, no telemetry, no outbound network calls. Your traces stay on
185
- your disk.
186
-
187
- ## Troubleshooting
188
-
189
- | Symptom | Cause / fix |
190
- |---|---|
191
- | `Address already in use` | Another process holds the port — pass `--port 4631`. |
192
- | Browser doesn't open | Some environments (SSH, WSL, containers) can't launch one — start with `--no-browser` and open the printed URL yourself. |
193
- | `Bundled UI missing` error | Broken installation — `pip install --force-reinstall graphsight`. |
194
- | Page loads but trace doesn't | The JSON didn't match the contract — the import page shows the specific validation error. |
195
-
196
- ## Links
197
-
198
- - Source & issue tracker: [github.com/Kcodess2807/graphsight](https://github.com/Kcodess2807/graphsight)
199
- - LangGraph adapter: [graphsight-langgraph on PyPI](https://pypi.org/project/graphsight-langgraph/)
200
- - Beta test script: [BETA.md](https://github.com/Kcodess2807/graphsight/blob/main/BETA.md)
201
-
202
- ## License
203
-
204
- MIT © Arush Karnatak
1
+ Metadata-Version: 2.4
2
+ Name: graphsight
3
+ Version: 0.3.3
4
+ Summary: See why your AI agent retrieved what it did — interactive graph viewer for agent retrieval traces. One command, zero dependencies, nothing leaves your machine.
5
+ Author: Arush Karnatak
6
+ License: MIT
7
+ Project-URL: Repository, https://github.com/Kcodess2807/graphsight
8
+ Project-URL: Documentation, https://github.com/Kcodess2807/graphsight/tree/main/graphsight
9
+ Keywords: tracing,observability,rag,retrieval,agents,visualization,langgraph
10
+ Classifier: Development Status :: 3 - Alpha
11
+ Classifier: Intended Audience :: Developers
12
+ Classifier: License :: OSI Approved :: MIT License
13
+ Classifier: Programming Language :: Python :: 3
14
+ Classifier: Programming Language :: Python :: 3.10
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Debuggers
19
+ Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
20
+ Requires-Python: >=3.10
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Dynamic: license-file
24
+
25
+ # graphsight
26
+
27
+ [![PyPI](https://img.shields.io/pypi/v/graphsight.svg)](https://pypi.org/project/graphsight/)
28
+ [![Python 3.10+](https://img.shields.io/badge/python-3.10+-blue.svg)](https://pypi.org/project/graphsight/)
29
+ [![License: MIT](https://img.shields.io/badge/license-MIT-yellow.svg)](https://github.com/Kcodess2807/graphsight/blob/main/graphsight/LICENSE)
30
+
31
+ **See which retrieved documents your agent actually used, and which it ignored.**
32
+
33
+ Your agent answered a question. Which documents did it actually pull? Which
34
+ of those did the answer come from? What scores did they get, and how are they
35
+ connected? Most stacks make you dig through logs. Graphsight renders the run
36
+ as an **interactive graph in your browser**, one command, zero dependencies,
37
+ nothing leaves your machine.
38
+
39
+ ![Graphsight showing a retrieved-but-unused document](https://raw.githubusercontent.com/Kcodess2807/graphsight/main/docs/media/retrieved-vs-used.gif)
40
+
41
+ *A real run. `PR #101` scored **0.910**, the highest of anything retrieved, and the answer
42
+ never used it. `PR #412` scored **0.340** and is the one that answered.*
43
+
44
+ **Jump to:** [start here](#start-here) ·
45
+ [retrieved vs. used](#retrieved-vs-used) ·
46
+ [usage](#usage) ·
47
+ [producing traces](#producing-traces) ·
48
+ [troubleshooting](#troubleshooting)
49
+
50
+ ## Start here
51
+
52
+ **New to Graphsight? Read [Your first trace](https://github.com/Kcodess2807/graphsight/blob/main/docs/FIRST_TRACE.md)**,
53
+ a 10-minute walkthrough with a complete runnable example.
54
+
55
+ `graphsight` is the **viewer**. It needs a trace to open, and the tracer is a separate
56
+ package, so the full path from nothing is three steps:
57
+
58
+ ```bash
59
+ pip install graphsight graphsight-langgraph
60
+ ```
61
+
62
+ ```python
63
+ from graphsight_langgraph import LangGraphTracer, capture
64
+
65
+ tracer = LangGraphTracer()
66
+ result = graph.invoke(inputs, config={"callbacks": [tracer]})
67
+ capture(tracer, query="why is checkout failing?", answer=result["answer"])
68
+ ```
69
+
70
+ ```bash
71
+ graphsight .graphsight/ # opens every run you've captured
72
+ ```
73
+
74
+ Passing `answer=` is what unlocks the used/ignored split below. Without it, every item
75
+ renders plain and no usage is claimed.
76
+
77
+ **Already have a trace file?** `graphsight path/to/trace_state.json` opens it directly.
78
+ **Want to see it work before writing any code?** `graphsight-github-trace` builds a real
79
+ trace from any public GitHub repo, see [Producing traces](#producing-traces).
80
+
81
+ ## Retrieved vs. used
82
+
83
+ The signal that isn't in your logs. When a trace carries the final answer,
84
+ every retrieved item is scored by lexical overlap against it and rendered
85
+ either **highlighted** (*"overlaps the answer"*) or **dimmed** (*"no lexical
86
+ trace in answer"*). The label states what was measured rather than what it
87
+ implies, because a chunk the model used as a negative constraint leaves no
88
+ words behind. Read that way, it splits the two classic retrieval failures at a
89
+ glance:
90
+
91
+ - **Right document retrieved, ignored by the model** → a dimmed node with a
92
+ high retrieval score. Your retriever worked; your prompt or context order
93
+ didn't.
94
+ - **Wrong document trusted** → a highlighted node that shouldn't be.
95
+
96
+ The overlap is a lexical heuristic, labeled as such (threshold 0.2). No LLM
97
+ re-reads your evidence, and no score is invented. A trace with no answer
98
+ attached makes no usage claims at all.
99
+
100
+ ## What else you get
101
+
102
+ - **Every retrieved item as a typed node**, PR, Service, Person, Ticket,
103
+ Document, Repo, Library, Team, Tool, with its retrieval score.
104
+ - **Relational paths between results**, *person → authored → PR →
105
+ resolves → issue*, the chain of evidence, not just a ranked list.
106
+ - **An inspector on every node**: underlying content, score, source link.
107
+ - **The question and the answer**, with every node marked as overlapping the
108
+ answer or not.
109
+
110
+ ## Requirements
111
+
112
+ | | |
113
+ |---|---|
114
+ | Python | ≥ 3.10 |
115
+ | Runtime dependencies | **none** (stdlib only) |
116
+ | Platforms | Windows, macOS, Linux |
117
+ | Browser | any modern browser |
118
+
119
+ ## Usage
120
+
121
+ ```
122
+ graphsight [trace] [--port PORT] [--no-browser]
123
+ ```
124
+
125
+ | Argument | Default | Description |
126
+ |---|---|---|
127
+ | `trace` | none | A `trace_state.json` file, **or a directory of them** (e.g. `.graphsight/`) to browse run history. Optional, omit to open the import page and drag-and-drop or paste JSON instead. |
128
+ | `--port` | `4630` | Local port to serve on. |
129
+ | `--no-browser` | off | Start the server without opening a browser window. |
130
+
131
+ The server binds to `127.0.0.1` only and runs until you press `Ctrl+C`.
132
+
133
+ ## Run history
134
+
135
+ Point `graphsight` at a directory and it becomes a run browser, every
136
+ trace listed by query and time, one click to open:
137
+
138
+ ```bash
139
+ graphsight .graphsight/
140
+ ```
141
+
142
+ The [graphsight-langgraph](https://pypi.org/project/graphsight-langgraph/)
143
+ `capture()` helper appends every agent run there automatically, so your
144
+ debugging history accumulates with zero ceremony, no setup, no database.
145
+
146
+ Because the history is a directory of plain files, you can **compare two
147
+ runs side by side**: what the retrieval returned before a prompt change and
148
+ after it, which items appeared or vanished, and which flipped between used
149
+ and ignored. That is usually the fastest way to answer "what did my edit
150
+ actually do to retrieval?"
151
+
152
+ ## Sharing traces with your team
153
+
154
+ A trace is one self-contained JSON file, no account or backend needed to
155
+ share it:
156
+
157
+ - **Send the file.** A teammate with `graphsight` installed runs
158
+ `graphsight trace.json`. Works in a DM, a ticket attachment, a CI
159
+ artifact.
160
+ - **Link it.** A deployed Graphsight frontend opens any publicly reachable
161
+ trace via `…/memory/import?src=<url-to-json>`, host the JSON on a gist
162
+ or artifact store and share the link. (The host must allow cross-origin
163
+ GETs; raw gists do.)
164
+ - **Commit it.** Trace files in the repo next to the incident or PR they
165
+ explain make retrieval debugging part of the review record.
166
+
167
+ ## Producing traces
168
+
169
+ Graphsight renders any file matching its trace JSON contract. Current
170
+ producers:
171
+
172
+ - **[graphsight-langgraph](https://pypi.org/project/graphsight-langgraph/)**
173
+ instruments any [LangGraph](https://github.com/langchain-ai/langgraph)
174
+ agent with a single callback handler, or trace a GitHub repository in one
175
+ command:
176
+
177
+ ```bash
178
+ pip install "graphsight-langgraph[example]"
179
+ graphsight-github-trace langchain-ai/langgraph "who fixed the recent streaming bugs?"
180
+ graphsight graphsight_out/trace_state.json
181
+ ```
182
+
183
+ - **The Graphsight graph-memory engine**, the backend this project grew out
184
+ of: GitHub PRs, issues, and commits become a knowledge graph with typed, timestamped
185
+ edges (`AUTHORED`, `RESOLVES`, `TOUCHES`), queried by a hybrid
186
+ vector + graph router. Its `/api/trace` responses are the same shape. See
187
+ the [main repository](https://github.com/Kcodess2807/graphsight).
188
+
189
+ Adapters for LlamaIndex and raw OpenTelemetry spans are planned; all
190
+ producers emit the same schema and render in this same viewer.
191
+
192
+ ### Writing your own producer
193
+
194
+ The minimum contract is small, a JSON object with:
195
+
196
+ ```jsonc
197
+ {
198
+ "query": "the question that was asked", // required, string
199
+ "graph": {
200
+ "nodes": [{ "id", "label", "type", "score", "meta": { "snippet", "sourceUrl" } }],
201
+ "edges": [{ "id", "source", "target", "relation", "confidence" }]
202
+ },
203
+ "metrics": { "queryTimeSec": 0.004 } // optional
204
+ }
205
+ ```
206
+
207
+ Node positions are computed client-side; emitters never deal with layout.
208
+ The complete schema and a reference emitter live in the
209
+ [graphsight-langgraph source](https://github.com/Kcodess2807/graphsight/tree/main/graphsight-langgraph).
210
+
211
+ ## Security and privacy
212
+
213
+ - The dependency list is empty by design: the UI is a bundled static build
214
+ (Vite + React + React Flow) served by Python's stdlib `http.server`.
215
+ - Binds to `127.0.0.1`, not reachable from other machines.
216
+ - No accounts, no telemetry, no outbound network calls. Your traces stay on
217
+ your disk.
218
+
219
+ ## Troubleshooting
220
+
221
+ | Symptom | Cause / fix |
222
+ |---|---|
223
+ | `Address already in use` | Another process holds the port, pass `--port 4631`. |
224
+ | Browser doesn't open | Some environments (SSH, WSL, containers) can't launch one, start with `--no-browser` and open the printed URL yourself. |
225
+ | `Bundled UI missing` error | Broken installation, `pip install --force-reinstall graphsight`. |
226
+ | Page loads but trace doesn't | The JSON didn't match the contract, the import page shows the specific validation error. |
227
+
228
+ ## Links
229
+
230
+ - Source & issue tracker: [github.com/Kcodess2807/graphsight](https://github.com/Kcodess2807/graphsight)
231
+ - LangGraph adapter: [graphsight-langgraph on PyPI](https://pypi.org/project/graphsight-langgraph/)
232
+ - Beta test script: [BETA.md](https://github.com/Kcodess2807/graphsight/blob/main/BETA.md)
233
+
234
+ ## License
235
+
236
+ MIT © Arush Karnatak