Run MAS to generate ideas
(self)
| 281 | |
| 282 | |
| 283 | async def generate_ideas(self): |
| 284 | """Run MAS to generate ideas""" |
| 285 | if self.session_id is None: |
| 286 | await self.load_task() |
| 287 | |
| 288 | async def status_callback(session_id, old_state, new_state): |
| 289 | # Agent transition logging is handled by OrchestrationAgent |
| 290 | pass |
| 291 | |
| 292 | while self.status != "completed": |
| 293 | try: |
| 294 | full_status = await self.interface.get_session_status(self.session_id) |
| 295 | self.status = full_status['state'] |
| 296 | iterations = full_status['iterations_completed'] |
| 297 | |
| 298 | if self.status == "awaiting_feedback": |
| 299 | if self.args.offline_feedback: |
| 300 | with open(self.args.offline_feedback, "r") as f: |
| 301 | feedback = json.load(f) |
| 302 | await self.interface.add_feedback(self.session_id, feedback) |
| 303 | self.logger.info(f"Feedback added: {feedback}") |
| 304 | |
| 305 | elif self.status == "completed": |
| 306 | self.logger.info("Idea generation completed") |
| 307 | break |
| 308 | |
| 309 | elif self.status == "error": |
| 310 | raise RuntimeError("Error in MAS session") |
| 311 | |
| 312 | self.logger.info(f"Running session {self.session_id}, iteration {iterations}") |
| 313 | self.status = await self.interface.run_session( |
| 314 | self.session_id, |
| 315 | status_callback=status_callback |
| 316 | ) |
| 317 | |
| 318 | except Exception as e: |
| 319 | self.logger.error(f"Error in session: {str(e)}") |
| 320 | raise |
| 321 | |
| 322 | top_ideas = await self.interface.get_top_ideas(self.session_id) |
| 323 | self.logger.info(f"Generated {len(top_ideas)} top ideas") |
| 324 | |
| 325 | # Add ideas to IdeaGraph (Long Memory) |
| 326 | if self.idea_graph is not None: |
| 327 | try: |
| 328 | # First, load all historical ideas to build the complete graph |
| 329 | self.logger.info("Loading historical ideas into IdeaGraph...") |
| 330 | self._load_historical_ideas_to_graph() |
| 331 | # Get graph statistics |
| 332 | stats = self.idea_graph.get_graph_stats() |
| 333 | self.logger.info(f"IdeaGraph stats: {stats['num_nodes']} nodes, {stats['num_edges']} edges") |
| 334 | |
| 335 | # Perform clustering if enough ideas |
| 336 | if stats['num_nodes'] >= 3: |
| 337 | self.logger.info("Clustering ideas in graph...") |
| 338 | self.idea_graph.cluster_ideas(method="louvain") |
| 339 | |
| 340 | # Log cluster summary |
no test coverage detected