uml / agents /code /class_diagram_generator.py
Mohammed Foud
Add application file
5a2d62e
from base_agent import BaseAgent
from models import AgentState
from typing import AsyncGenerator
import json
class ClassDiagramGenerator(BaseAgent):
async def __call__(self, state: AgentState) -> AsyncGenerator[str, None]:
prompt_template = """
Generate comprehensive PlantUML code for a class diagram based on the following domain analysis:
{entities_classes}
Instructions:
1. Include all classes with their complete attributes (visibility, type, constraints)
2. Use proper UML relationships with correct cardinality and labels:
- Inheritance: <|--
- Implementation: <|..
- Composition: *--
- Aggregation: o--
- Dependency: -->
3. For complex relationships, use association classes when needed
4. Include proper visibility markers:
- Public: +
- Private: -
- Protected: #
- Package: ~
5. Use advanced PlantUML features where appropriate:
- Abstract classes/interfaces
- Enumerations
- Stereotypes
- Notes and constraints
- Method signatures
6. Organize classes into packages if the domain suggests logical groupings
7. Use proper formatting with alignment and spacing
8. Include only the raw PlantUML code without explanations
Example Structure (DO NOT TREAT AS VARIABLES):
@startuml
package "Domain Model" {{
abstract class AbstractEntity {{
+ id: UUID {{readonly}}
# createdAt: DateTime
+ equals(other: Object): boolean {{abstract}}
}}
class User {{
+ username: String {{unique}}
+ email: String
- passwordHash: String
+ authenticate(password: String): boolean
}}
enum UserRole {{
ADMIN
MEMBER
GUEST
}}
User "1" *-- "0..*" Order : places >
User o-- UserRole : has >
(User, Order) .. OrderAssociation
class OrderAssociation {{
+ orderDate: DateTime
+ status: OrderStatus
}}
}}
note top of User
User represents all system users
with authentication capabilities
end note
@enduml
"""
async for chunk in self._stream_process(
state=state,
prompt_template=prompt_template,
output_key="class_diagram",
step_name="generate_class_diagram",
entities_classes=state["entities_classes"]
):
yield chunk