| from typing import Optional, Dict, List |
| from dataclasses import dataclass, field, asdict |
|
|
| from .Entity import Entity |
|
|
| @dataclass |
| class Node: |
| id: str = '' |
| name: str = '' |
| node_type: str = '' |
| description: Optional[str] = None |
| declared_entities: List[dict] = field(default_factory=list) |
| called_entities: List[str] = field( default_factory=list) |
|
|
| def dict(self): |
| return {k: str(v) for k, v in asdict(self).items()} |
|
|
| @dataclass |
| class DirectoryNode(Node): |
| path: str = '' |
| node_type: str = 'directory' |
|
|
|
|
| @dataclass |
| class FileNode(Node): |
| path: str = '' |
| content: str = '' |
| node_type: str = 'file' |
| language : str = '' |
|
|
|
|
| @dataclass |
| class ChunkNode(FileNode): |
| node_type: str = 'chunk' |
| order_in_file: int = field(default_factory=int) |
| embedding : list = None |
|
|
| def get_field_to_embed(self) -> Optional[str]: |
| |
| |
| if self.description and self.description.strip(): |
| return self.description |
| return self.content |
|
|
|
|
| @dataclass |
| class EntityNode(Node): |
| entity_type: str = '' |
| declaring_chunk_ids: List[str] = field(default_factory=list) |
| calling_chunk_ids: List[str] = field(default_factory=list) |
| aliases: List[str] = field(default_factory=list) |
| node_type: str = 'entity' |
|
|
| def __post_init__(self): |
| |
| if not self.id and self.name: |
| self.id = self.name |
|
|
| def dict(self): |
| return {k: str(v) for k, v in asdict(self).items()} |
|
|
| def get_field_to_embed(self) -> Optional[str]: |
| return self.name |