from langchain_community.graphs.graph_document import ( Node as BaseNode, Relationship as BaseRelationship, ) from typing import List from pydantic import Field, BaseModel class Property(BaseModel): """A single property consisting of key and value.""" key: str = Field(..., description="Key of the property.") value: str = Field(..., description="Value of the property.") class Node(BaseNode): """Represents a graph node with properties.""" properties: List[Property] = Field( default_factory=list, description="List of node properties." ) class Relationship(BaseRelationship): """Represents a graph relationship with properties.""" properties: List[Property] = Field( default_factory=list, description="List of relationship properties." ) class KnowledgeGraph(BaseModel): """Generate a knowledge graph with entities and relationships.""" nodes: List[Node] = Field(..., description="List of nodes in the knowledge graph.") rels: List[Relationship] = Field( ..., description="List of relationships in the knowledge graph." ) class FileNode(Node): pass class ChunkNode(Node): pass