Spaces:
Running
Running
| """Factory for creating orchestrators.""" | |
| from typing import Any, Literal | |
| from src.orchestrator import JudgeHandlerProtocol, Orchestrator, SearchHandlerProtocol | |
| from src.utils.models import OrchestratorConfig | |
| def create_orchestrator( | |
| search_handler: SearchHandlerProtocol | None = None, | |
| judge_handler: JudgeHandlerProtocol | None = None, | |
| config: OrchestratorConfig | None = None, | |
| mode: Literal["simple", "magentic"] = "simple", | |
| ) -> Any: | |
| """ | |
| Create an orchestrator instance. | |
| Args: | |
| search_handler: The search handler (required for simple mode) | |
| judge_handler: The judge handler (required for simple mode) | |
| config: Optional configuration | |
| mode: "simple" for Phase 4 loop, "magentic" for ChatAgent-based multi-agent | |
| Returns: | |
| Orchestrator instance | |
| Note: | |
| Magentic mode does NOT use search_handler/judge_handler. | |
| It creates ChatAgent instances with internal LLMs that call tools directly. | |
| """ | |
| if mode == "magentic": | |
| try: | |
| from src.orchestrator_magentic import MagenticOrchestrator | |
| return MagenticOrchestrator( | |
| max_rounds=config.max_iterations if config else 10, | |
| ) | |
| except ImportError: | |
| # Fallback to simple if agent-framework not installed | |
| pass | |
| # Simple mode requires handlers | |
| if search_handler is None or judge_handler is None: | |
| raise ValueError("Simple mode requires search_handler and judge_handler") | |
| return Orchestrator( | |
| search_handler=search_handler, | |
| judge_handler=judge_handler, | |
| config=config, | |
| ) | |