Transform unstructured text into NetworkX knowledge graphs using LLMs
Project description
VetGraph
Transform unstructured text into NetworkX knowledge graphs using LLMs
VetGraph is a provider-agnostic Python library that leverages Large Language Models to extract entities and relationships from unstructured text and construct knowledge graphs using NetworkX.
Features
- Provider-Agnostic — Works with OpenAI, Anthropic (Claude), Google Gemini, Ollama, and Azure OpenAI
- NetworkX Integration — Builds standard NetworkX directed graphs for powerful graph analysis
- Dual Visualization — Static plots with Matplotlib and interactive HTML visualizations with Pyvis
- Type Safety — Pydantic models with Instructor for robust structured outputs
- Flexible Extraction — Schema-constrained relationship types and multiple export formats
Installation
# Install with OpenAI support
pip install vetgraph[openai]
# Install with Anthropic support
pip install vetgraph[anthropic]
# Install with Gemini support
pip install vetgraph[gemini]
# Install with all providers
pip install vetgraph[all-providers]
# Basic installation (bring your own LLM client)
pip install vetgraph
Quick Start
OpenAI
from vetgraph import VetGraph
vg = VetGraph.from_openai(api_key="sk-...")
text = """
Albert Einstein was a theoretical physicist who developed the theory of relativity.
He was born in Germany and later moved to the United States. Einstein worked at
Princeton University and won the Nobel Prize in Physics in 1921.
"""
result = vg.add_text(text)
print(f"Extracted {result.get_triple_count()} triples")
vg.visualize("einstein_graph.html")
Anthropic Claude
from vetgraph import VetGraph
vg = VetGraph.from_anthropic(
api_key="sk-ant-...",
model="claude-3-5-sonnet-20241022"
)
result = vg.add_text("Marie Curie discovered radium and polonium.")
Google Gemini
from vetgraph import VetGraph
vg = VetGraph.from_gemini(
api_key="...",
model="gemini-2.5-flash"
)
result = vg.add_text("The Eiffel Tower is located in Paris, France.")
Ollama (Local, Free)
from vetgraph import VetGraph
vg = VetGraph.from_ollama(model="llama3.2")
result = vg.add_text("Python was created by Guido van Rossum.")
Usage
Schema-Constrained Extraction
Restrict extracted relationships to a predefined set of types:
from vetgraph import VetGraph
vg = VetGraph.from_openai(api_key="sk-...")
schema = ["works_for", "located_in", "developed_by", "invented"]
result = vg.add_text(
"Steve Jobs co-founded Apple in Cupertino.",
schema=schema
)
Graph Analysis with NetworkX
import networkx as nx
graph = vg.get_graph()
centrality = nx.degree_centrality(graph)
print("Most central nodes:",
sorted(centrality.items(), key=lambda x: x[1], reverse=True)[:5])
if nx.has_path(graph, "Einstein", "Princeton"):
path = nx.shortest_path(graph, "Einstein", "Princeton")
print("Path:", " -> ".join(path))
Graph Statistics
stats = vg.get_statistics()
print(f"Nodes: {stats['nodes']}")
print(f"Edges: {stats['edges']}")
print(f"Density: {stats['density']:.3f}")
print(f"Connected: {stats['is_connected']}")
print(f"Unique relations: {stats['unique_relations']}")
Visualization
# Interactive HTML visualization (default)
vg.visualize("graph.html")
# Pyvis with custom options
net = vg.visualize_interactive(
output_file="custom_graph.html",
height="800px",
width="100%",
notebook=False
)
# Matplotlib static plot
vg.visualize_matplotlib(
figsize=(15, 10),
node_color="lightcoral",
node_size=4000,
save_path="graph.png"
)
Saving and Loading Graphs
# Export in various formats
vg.save_graph("my_graph.json", format="json") # Node-link JSON
vg.save_graph("my_graph.graphml", format="graphml") # GraphML (XML)
vg.save_graph("my_graph.gexf", format="gexf") # GEXF (for Gephi)
vg.save_graph("my_graph.edgelist", format="edgelist") # Edge list
# Load a previously saved graph
vg.load_graph("my_graph.json", format="json")
Batch Processing
texts = [
"Leonardo da Vinci painted the Mona Lisa.",
"The Mona Lisa is displayed in the Louvre Museum.",
"The Louvre Museum is located in Paris."
]
for text in texts:
vg.add_text(text)
print(f"Total nodes: {vg.graph.number_of_nodes()}")
print(f"Total edges: {vg.graph.number_of_edges()}")
Custom Provider Configuration
from vetgraph import VetGraph, create_openai_client
client = create_openai_client(
api_key="sk-...",
base_url="https://custom-endpoint.com/v1"
)
vg = VetGraph(client=client, model="gpt-4o-mini")
Azure OpenAI
vg = VetGraph.from_azure_openai(
api_key="your-azure-key",
azure_endpoint="https://your-resource.openai.azure.com/",
model="gpt-4-deployment-name",
api_version="2024-02-01"
)
API Reference
Factory Methods
| Method | Description |
|---|---|
VetGraph.from_openai(api_key, model="gpt-4o-mini") |
Initialize with OpenAI |
VetGraph.from_anthropic(api_key, model="claude-3-5-sonnet-20241022") |
Initialize with Anthropic |
VetGraph.from_gemini(api_key, model="gemini-2.5-flash") |
Initialize with Google Gemini |
VetGraph.from_ollama(model="llama3.2") |
Initialize with Ollama |
VetGraph.from_azure_openai(...) |
Initialize with Azure OpenAI |
Core Methods
| Method | Description |
|---|---|
add_text(text, schema=None, temperature=0.3) |
Extract triples from text and add to graph |
get_graph() |
Return the underlying NetworkX DiGraph |
clear_graph() |
Remove all nodes and edges |
get_statistics() |
Return graph statistics as a dictionary |
Visualization Methods
| Method | Description |
|---|---|
visualize(output_path="graph.html") |
Create an interactive HTML visualization |
visualize_interactive(...) |
Create a Pyvis visualization with full options |
visualize_matplotlib(...) |
Create a static Matplotlib visualization |
Persistence Methods
| Method | Description |
|---|---|
save_graph(output_path, format="json") |
Export graph to file |
load_graph(input_path, format="json") |
Load graph from file |
Supported Models
OpenAI
gpt-4o-mini(default, recommended)gpt-4ogpt-4-turbo
Anthropic
claude-3-5-sonnet-20241022(default, recommended)claude-3-5-haiku-20241022claude-3-opus-20240229
Google Gemini
gemini-2.5-flash(default, recommended)gemini-2.5-progemini-2.0-flash
Ollama
llama3.2(default)llama3.1mistralmixtral- Any other locally installed Ollama model
Dependencies
- instructor — Structured outputs for LLMs
- NetworkX — Graph construction and analysis
- Pyvis — Interactive graph visualizations
- Pydantic — Data validation and type safety
Contributing
Contributions are welcome. Please submit a pull request or open an issue on GitHub.
License
MIT License. See the LICENSE file for details.
Contact
- Author: Vishesh Raju
- Email: visheshinus@gmail.com
- GitHub: github.com/Vishesh0-7/vetgraph
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file vetgraph-0.1.2.tar.gz.
File metadata
- Download URL: vetgraph-0.1.2.tar.gz
- Upload date:
- Size: 26.6 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
8bfdb9627ab08dc96a7590779ab92ebe6c3febaa5051b423f0eb87eb7162be4c
|
|
| MD5 |
316ec93141906cc4ad742b1e4164384c
|
|
| BLAKE2b-256 |
1bf6a5b14edf68293b3c570dba3dd0b719321a20c9b3d0151bd859c10f6fefa9
|
File details
Details for the file vetgraph-0.1.2-py3-none-any.whl.
File metadata
- Download URL: vetgraph-0.1.2-py3-none-any.whl
- Upload date:
- Size: 15.0 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.0
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
6560dd71d5c501e78865d9c05c67de9168fee749e9eba05701a798ddb22d17ea
|
|
| MD5 |
2b8c939579bb6a7b11ce36dfe1a94df2
|
|
| BLAKE2b-256 |
ee39bd6e156a07cc609f375136c9a56f84e8c8a029b7af0d72ec76a08377c2bd
|