feat(agents): Phase 8.4-10.5 built-in plugins, bundled skills, coordinator
This commit is contained in:
86
backend/app/agents/transport/structured_io.py
Normal file
86
backend/app/agents/transport/structured_io.py
Normal file
@@ -0,0 +1,86 @@
|
||||
"""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
|
||||
Reference in New Issue
Block a user