from pydantic import BaseModel, Field class GenerateBrandAssetTool(BaseModel): """ Generates a brand asset (logo) programmatically based on geometric rules. This simulates a "Design Agent" that can create vector graphics. """ style: str = Field("eciton", description="The visual style (e.g., 'eciton', 'minimal').") format: str = Field("svg", description="Output format (currently only 'svg' supported).") async def execute(self) -> str: if self.style == "eciton": return self._generate_eciton_svg() else: return self._generate_fallback_svg() def _generate_eciton_svg(self) -> str: """ Generates the 'Project ECITON' logo: A geometric ant head formed by connected data nodes (hexagonal lattice). Colors: Cyan (#00f2ff) to Purple (#a855f7). Animation: Nodes pulse to symbolize 'living data'. """ width = 200 height = 200 # Define key nodes for an abstract ant head # (x, y, radius) nodes = [ (100, 100, 12), # Center Brain (70, 70, 8), # Left Eye (130, 70, 8), # Right Eye (60, 130, 6), # Left Mandible Base (140, 130, 6), # Right Mandible Base (80, 160, 4), # Left Mandible Tip (120, 160, 4), # Right Mandible Tip (100, 40, 6), # Top Antenna Base ] # Define connections (indices of nodes) links = [(0, 1), (0, 2), (0, 3), (0, 4), (0, 7), (1, 7), (2, 7), (3, 5), (4, 6), (1, 3), (2, 4)] svg_content = f''' ''' # Draw Links for start, end in links: x1, y1, _ = nodes[start] x2, y2, _ = nodes[end] svg_content += f'\n' # Draw Nodes with Pulse Animation for i, (cx, cy, r) in enumerate(nodes): # Vary animation timing for organic feel duration = 2 + (i % 3) * 0.5 svg_content += f''' ''' svg_content += """ """ return svg_content.strip() def _generate_fallback_svg(self) -> str: return ''