BloxAIcore / data_structures.py
everydaycats's picture
Update data_structures.py
07a2d3f verified
from pydantic import BaseModel, Field
from typing import List, Dict, Optional, Union, Literal, Any
# --- ORCHESTRATION ---
class UserGoal(BaseModel):
user_id: str
project_id: str
goal_text: str
roblox_user_id: Optional[str] = "0"
image_base64: Optional[str] = Field(None, description="Base64 encoded context image.")
class RecallRequest(BaseModel):
project_id: str
user_feedback: Optional[str] = "What is the next step?"
class ResetRequest(BaseModel):
junior_instance_id: str
supervisor_instance_id: str
reason: str
# --- FEEDBACK LOOP ---
class SceneObjectState(BaseModel):
"""Represents a snapshot of an object currently in Roblox."""
id: str # The Name in Roblox
class_name: str
position: Dict[str, float]
size: Dict[str, float]
parent_name: str
class ProjectFeedback(BaseModel):
"""Data sent FROM the Plugin TO the Orchestrator."""
project_id: str
message: str
scene_snapshot: List[SceneObjectState] = []
task_id_completed: Optional[str] = None
status: Literal["SUCCESS", "FAILED"] = "SUCCESS"
# --- MATTER FORMAT ---
class Vector3(BaseModel):
x: float = 0.0
y: float = 0.0
z: float = 0.0
class BuildPayload(BaseModel):
id: str
class_name: str = "Part"
position: Vector3
rotation: Vector3 = Vector3()
size: Vector3
color_hex: str = "#A3A2A5"
anchored: bool = True
transparency: float = 0.0
material: str = "Plastic"
mesh_id: Optional[str] = None
texture_id: Optional[str] = None
class CSGPayload(BaseModel):
operation: Literal["Union", "Subtract"]
target_id: str
tool_ids: List[str]
class Attribute(BaseModel):
name: str
type: Literal["String", "Number", "Boolean", "Color3"]
value: Any
class ScriptPayload(BaseModel):
name: str
class_name: Literal["Script", "LocalScript", "ModuleScript"]
parent: str
attributes: List[Attribute] = []
source_code: str
class RiggingCommand(BaseModel):
part0_id: str
part1_id: str
joint_type: Literal["Weld", "Motor6D", "HingeConstraint", "BallSocketConstraint"]
position: Vector3
# --- PROJECT FLOW ---
class TaskNode(BaseModel):
task_id: str = Field(default_factory=lambda: "pending_id")
title: str
role_required: Literal[
"PROJECT_MANAGER",
"SUPERVISOR_WORLD",
"SUPERVISOR_SCRIPT",
"3D_ARTIST",
"CONCEPT_ARTIST",
"SCRIPTING_ENGINEER",
"ERRANDS"
]
instruction: str
status: Literal["PENDING", "IN_PROGRESS", "COMPLETED", "FAILED"] = "PENDING"
assigned_instance_id: Optional[str] = None
subtasks: List['TaskNode'] = []
class ProjectFlow(BaseModel):
project_id: str
is_finished: bool = False
next_task: Optional[TaskNode] = None
# --- COMMUNICATION ---
class AgentMessage(BaseModel):
id: str
from_agent: str
to_agents: List[str]
role: str
content: str
image_base64: Optional[str] = None
class GenerationRequest(BaseModel):
agent_type: str
agent_instance_id: str
conversation_partner_id: str
prompt: str
image_base64: Optional[str] = None
class ImageGenerationRequest(BaseModel):
agent_instance_id: str
prompt: str