Files
2026-07-13 12:08:54 +08:00

67 lines
2.1 KiB
Python

from __future__ import annotations
from pydantic import BaseModel, Field
from typing import Any, Optional
class ExtractedEntity(BaseModel):
"""A single entity extracted from text by the LLM."""
entity_name: str = Field(
description="Name of the entity. Use title case for case-insensitive names."
)
entity_type: str = Field(description="Type/category of the entity.")
entity_description: str = Field(
description="Concise yet comprehensive description of the entity based on the input text."
)
class ExtractedRelationship(BaseModel):
"""A single relationship between two entities extracted from text."""
source_entity: str = Field(
description="Name of the source entity in the relationship."
)
target_entity: str = Field(
description="Name of the target entity in the relationship."
)
relationship_keywords: str = Field(
description="Comma-separated high-level keywords summarizing the relationship."
)
relationship_description: str = Field(
description="Concise explanation of the relationship between source and target entities."
)
class EntityExtractionResult(BaseModel):
"""Structured output format for entity and relationship extraction from text."""
entities: list[ExtractedEntity] = Field(
default_factory=list,
description="List of entities extracted from the input text.",
)
relationships: list[ExtractedRelationship] = Field(
default_factory=list,
description="List of relationships between entities extracted from the input text.",
)
class KnowledgeGraphNode(BaseModel):
id: str
labels: list[str]
properties: dict[str, Any] # anything else goes here
class KnowledgeGraphEdge(BaseModel):
id: str
type: Optional[str]
source: str # id of source node
target: str # id of target node
properties: dict[str, Any] # anything else goes here
class KnowledgeGraph(BaseModel):
nodes: list[KnowledgeGraphNode] = []
edges: list[KnowledgeGraphEdge] = []
is_truncated: bool = False