from langchain_community.graphs.graph_document import ( Node as BaseNode, Relationship as BaseRelationship, ) from langchain.schema import Document from typing import List, Dict, Any, Optional from langchain.pydantic_v1 import Field, BaseModel class Property(BaseModel): """A single property consisting of key and value""" key: str = Field(..., description="key") value: str = Field(..., description="value") class Node(BaseNode): properties: Optional[List[Property]] = Field( None, description="List of node properties") class Relationship(BaseRelationship): properties: Optional[List[Property]] = Field( None, 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")