from base_agent import BaseAgent from models import AgentState from typing import AsyncGenerator import json class SequenceAnalysis(BaseAgent): async def __call__(self, state: AgentState) -> AsyncGenerator[str, None]: prompt_template = """ Conduct a comprehensive sequence analysis for the key workflow in: Project: {project_name} Description: {project_description} Use Cases: {actors_use_cases} Analysis Requirements: 1. Identify all participating components: - Primary actors (initiators) - Secondary systems/services - Internal components 2. For each interaction step specify: - Sender and receiver - Message content/type - Synchronization points - Alternative/error flows 3. Include timing considerations where relevant 4. Note any parallel/concurrent activities 5. Highlight critical system boundaries Format your response as: ### Workflow: [Workflow Name] #### Components: - [Component1] (type/role) - [Component2] (type/role) #### Main Flow: 1. [ComponentA] -> [ComponentB]: [Message/Purpose] - Preconditions: [required state] - Postconditions: [resulting state] - Variations: [alternate paths] 2. [ComponentB] --> [ComponentA]: [Response] ... #### Parallel Flows: - Concurrent with step 2: [Description] #### Error Handling: - At step 3: [Error Condition] → [Recovery Path] Example: ### Workflow: Order Processing #### Components: - Customer (primary actor) - OrderService (core system) - PaymentGateway (external service) #### Main Flow: 1. Customer -> OrderService: SubmitOrder(cart) - Preconditions: Cart not empty, user authenticated - Postconditions: Order pending payment - Variations: Invalid items → Rejection notice 2. OrderService -> PaymentGateway: ProcessPayment(details) ... """ async for chunk in self._stream_process( state=state, prompt_template=prompt_template, output_key="sequence_interactions", step_name="extract_sequence", project_name=state["project_name"], project_description=state["project_description"], actors_use_cases=state["actors_use_cases"] ): yield chunk