|
|
|
|
|
|
|
|
|
|
|
|
|
from dataclasses import dataclass |
|
from typing import Any, Dict, Optional |
|
|
|
from llm_transparency_tool.routes.graph_node import GraphNode, NodeType |
|
|
|
|
|
class UiGraphNode(GraphNode): |
|
@staticmethod |
|
def from_json(json: Dict[str, Any]) -> Optional["UiGraphNode"]: |
|
try: |
|
layer = json["cell"]["layer"] |
|
token = json["cell"]["token"] |
|
type = NodeType(json["item"]) |
|
return UiGraphNode(layer, token, type) |
|
except (TypeError, KeyError): |
|
return None |
|
|
|
|
|
@dataclass |
|
class UiGraphEdge: |
|
source: UiGraphNode |
|
target: UiGraphNode |
|
weight: float |
|
|
|
@staticmethod |
|
def from_json(json: Dict[str, Any]) -> Optional["UiGraphEdge"]: |
|
try: |
|
source = UiGraphNode.from_json(json["from"]) |
|
target = UiGraphNode.from_json(json["to"]) |
|
if source is None or target is None: |
|
return None |
|
weight = float(json["weight"]) |
|
return UiGraphEdge(source, target, weight) |
|
except (TypeError, KeyError): |
|
return None |
|
|
|
|
|
@dataclass |
|
class GraphSelection: |
|
node: Optional[UiGraphNode] |
|
edge: Optional[UiGraphEdge] |
|
|
|
@staticmethod |
|
def from_json(json: Dict[str, Any]) -> Optional["GraphSelection"]: |
|
try: |
|
node = UiGraphNode.from_json(json["node"]) |
|
edge = UiGraphEdge.from_json(json["edge"]) |
|
return GraphSelection(node, edge) |
|
except (TypeError, KeyError): |
|
return None |
|
|