ChatDev/entity/graph_config.py
2026-01-07 16:24:01 +08:00

95 lines
2.8 KiB
Python
Executable File

"""GraphConfig wraps parsed graph definitions with runtime metadata."""
from dataclasses import dataclass, field
from pathlib import Path
from typing import Any, Dict, List, Optional
from entity.enums import LogLevel
from entity.configs import GraphDefinition, MemoryStoreConfig, Node, EdgeConfig
@dataclass
class GraphConfig:
definition: GraphDefinition
name: str
output_root: Path
log_level: LogLevel
metadata: Dict[str, Any] = field(default_factory=dict)
source_path: Optional[str] = None
vars: Dict[str, Any] = field(default_factory=dict)
@classmethod
def from_dict(
cls,
config: Dict[str, Any],
name: str,
output_root: Path | str,
*,
source_path: str | None = None,
vars: Dict[str, Any] | None = None,
) -> "GraphConfig":
definition = GraphDefinition.from_dict(config, path="graph")
return cls(
definition=definition,
name=name,
output_root=Path(output_root) if output_root else Path("WareHouse"),
log_level=definition.log_level,
metadata={},
source_path=source_path,
vars=dict(vars or {}),
)
@classmethod
def from_definition(
cls,
definition: GraphDefinition,
name: str,
output_root: Path | str,
*,
source_path: str | None = None,
vars: Dict[str, Any] | None = None,
) -> "GraphConfig":
return cls(
definition=definition,
name=name,
output_root=Path(output_root) if output_root else Path("WareHouse"),
log_level=definition.log_level,
metadata={},
source_path=source_path,
vars=dict(vars or {}),
)
def get_node_definitions(self) -> List[Node]:
return self.definition.nodes
def get_edge_definitions(self) -> List[EdgeConfig]:
return self.definition.edges
def get_memory_config(self) -> List[MemoryStoreConfig] | None:
return self.definition.memory
def get_organization(self) -> str:
return self.definition.organization or "DefaultOrg"
def get_source_path(self) -> str:
if self.source_path:
return self.source_path
return self.definition.id or "config.yaml"
def get_initial_instruction(self) -> str:
return self.definition.initial_instruction or ""
@property
def is_majority_voting(self) -> bool:
return self.definition.is_majority_voting
def to_dict(self) -> Dict[str, Any]:
return {
"name": self.name,
"output_root": str(self.output_root),
"log_level": self.log_level.value,
"metadata": self.metadata,
"graph": self.definition,
"vars": self.vars,
}