Files
JARVIS/backend/app/agents/transport/structured_io.py

87 lines
2.3 KiB
Python

"""Structured IO for typed input/output - Phase 10.2"""
from dataclasses import dataclass
from typing import Any, Generic, TypeVar
T = TypeVar("T")
@dataclass
class StructuredInput:
"""Structured input wrapper"""
skill_name: str
parameters: dict[str, Any]
metadata: dict[str, Any]
@dataclass
class StructuredOutput:
"""Structured output wrapper"""
skill_name: str
result: Any
success: bool
error: str | None = None
metadata: dict[str, Any] | None = None
class StructuredIO:
"""Handles structured input/output for agent communication"""
def parse_input(self, data: dict[str, Any]) -> StructuredInput:
"""Parse structured input from dictionary.
Args:
data: Dictionary containing skill_name, parameters, and metadata
Returns:
StructuredInput instance
Raises:
ValueError: If required fields are missing
"""
if not isinstance(data, dict):
raise ValueError("Input data must be a dictionary")
skill_name = data.get("skill_name")
if not skill_name:
raise ValueError("Missing required field: skill_name")
if not isinstance(skill_name, str):
raise ValueError("skill_name must be a string")
parameters = data.get("parameters")
if parameters is None:
raise ValueError("Missing required field: parameters")
if not isinstance(parameters, dict):
raise ValueError("parameters must be a dictionary")
metadata = data.get("metadata", {})
if not isinstance(metadata, dict):
raise ValueError("metadata must be a dictionary")
return StructuredInput(skill_name=skill_name, parameters=parameters, metadata=metadata)
def format_output(self, output: StructuredOutput) -> dict[str, Any]:
"""Format structured output to dictionary.
Args:
output: StructuredOutput instance
Returns:
Dictionary representation of the output
"""
result = {
"skill_name": output.skill_name,
"result": output.result,
"success": output.success,
}
if output.error is not None:
result["error"] = output.error
if output.metadata is not None:
result["metadata"] = output.metadata
return result