use graphrag_core::{
persistence::WorkspaceManager, ChunkId, Document, DocumentId, Entity, EntityId, KnowledgeGraph,
Relationship, TextChunk,
};
use indexmap::IndexMap;
fn main() -> Result<(), Box<dyn std::error::Error>> {
println!("đ GraphRAG Workspace Demo\n");
let workspace_dir = "./workspace_demo";
let workspace = WorkspaceManager::new(workspace_dir)?;
println!("â
Created workspace manager at: {}\n", workspace_dir);
let mut graph = KnowledgeGraph::new();
let doc = Document {
id: DocumentId::new("doc1".to_string()),
title: "Test Document".to_string(),
content: "This is a test document about Rust and GraphRAG.".to_string(),
metadata: IndexMap::new(),
chunks: vec![],
};
graph.add_document(doc)?;
let chunk = TextChunk::new(
ChunkId::new("chunk1".to_string()),
DocumentId::new("doc1".to_string()),
"This is a test document about Rust and GraphRAG.".to_string(),
0,
47,
);
graph.add_chunk(chunk)?;
let entity1 = Entity::new(
EntityId::new("rust".to_string()),
"Rust".to_string(),
"TECHNOLOGY".to_string(),
0.95,
);
graph.add_entity(entity1)?;
let entity2 = Entity::new(
EntityId::new("graphrag".to_string()),
"GraphRAG".to_string(),
"SYSTEM".to_string(),
0.9,
);
graph.add_entity(entity2)?;
let relationship = Relationship {
source: EntityId::new("rust".to_string()),
target: EntityId::new("graphrag".to_string()),
relation_type: "USES".to_string(),
confidence: 0.85,
context: vec![ChunkId::new("chunk1".to_string())],
embedding: None,
temporal_type: None,
temporal_range: None,
causal_strength: None,
};
graph.add_relationship(relationship)?;
println!("đ Created knowledge graph:");
println!(" - Entities: {}", graph.entity_count());
println!(" - Relationships: {}", graph.relationship_count());
println!(" - Documents: {}", graph.document_count());
println!(" - Chunks: {}\n", graph.chunks().count());
println!("đž Saving to workspace 'demo'...");
workspace.save_graph(&graph, "demo")?;
println!("â
Graph saved successfully!\n");
println!("đ Available workspaces:");
let workspaces = workspace.list_workspaces()?;
for (i, ws) in workspaces.iter().enumerate() {
println!(
" {}. {} ({} entities, {} relationships) - {} bytes",
i + 1,
ws.name,
ws.metadata.entity_count,
ws.metadata.relationship_count,
ws.size_bytes
);
}
println!();
println!("đĨ Loading from workspace 'demo'...");
let loaded_graph = workspace.load_graph("demo")?;
println!("â
Graph loaded successfully!\n");
println!("đ Loaded knowledge graph:");
println!(" - Entities: {}", loaded_graph.entity_count());
println!(" - Relationships: {}", loaded_graph.relationship_count());
println!(" - Documents: {}", loaded_graph.document_count());
println!(" - Chunks: {}\n", loaded_graph.chunks().count());
println!("đ Verifying data integrity...");
assert_eq!(graph.entity_count(), loaded_graph.entity_count());
assert_eq!(
graph.relationship_count(),
loaded_graph.relationship_count()
);
assert_eq!(graph.document_count(), loaded_graph.document_count());
println!("â
Data integrity verified!\n");
println!("đˇī¸ Entities in loaded graph:");
for entity in loaded_graph.entities() {
println!(
" - {} ({}) [confidence: {:.2}]",
entity.name, entity.entity_type, entity.confidence
);
}
println!();
println!("đ Relationships in loaded graph:");
for rel in loaded_graph.relationships() {
println!(
" - {} --[{}]--> {} [confidence: {:.2}]",
rel.source.0, rel.relation_type, rel.target.0, rel.confidence
);
}
println!();
println!("đ Demo completed successfully!");
println!("\nâšī¸ Workspace saved at: {}", workspace_dir);
println!(" You can inspect the files:");
println!(" - {}/demo/graph.json (knowledge graph)", workspace_dir);
println!(
" - {}/demo/metadata.toml (workspace metadata)",
workspace_dir
);
Ok(())
}