Spaces:
Running
Orchestrators Architecture
DeepCritical supports multiple orchestration patterns for research workflows.
Research Flows
IterativeResearchFlow
File: src/orchestrator/research_flow.py
Pattern: Generate observations β Evaluate gaps β Select tools β Execute β Judge β Continue/Complete
Agents Used:
KnowledgeGapAgent: Evaluates research completenessToolSelectorAgent: Selects tools for addressing gapsThinkingAgent: Generates observationsWriterAgent: Creates final reportJudgeHandler: Assesses evidence sufficiency
Features:
- Tracks iterations, time, budget
- Supports graph execution (
use_graph=True) and agent chains (use_graph=False) - Iterates until research complete or constraints met
Usage:
from src.orchestrator.research_flow import IterativeResearchFlow
flow = IterativeResearchFlow(
search_handler=search_handler,
judge_handler=judge_handler,
use_graph=False
)
async for event in flow.run(query):
# Handle events
pass
DeepResearchFlow
File: src/orchestrator/research_flow.py
Pattern: Planner β Parallel iterative loops per section β Synthesizer
Agents Used:
PlannerAgent: Breaks query into report sectionsIterativeResearchFlow: Per-section research (parallel)LongWriterAgentorProofreaderAgent: Final synthesis
Features:
- Uses
WorkflowManagerfor parallel execution - Budget tracking per section and globally
- State synchronization across parallel loops
- Supports graph execution and agent chains
Usage:
from src.orchestrator.research_flow import DeepResearchFlow
flow = DeepResearchFlow(
search_handler=search_handler,
judge_handler=judge_handler,
use_graph=True
)
async for event in flow.run(query):
# Handle events
pass
Graph Orchestrator
File: src/orchestrator/graph_orchestrator.py
Purpose: Graph-based execution using Pydantic AI agents as nodes
Features:
- Uses Pydantic AI Graphs (when available) or agent chains (fallback)
- Routes based on research mode (iterative/deep/auto)
- Streams
AgentEventobjects for UI
Node Types:
- Agent Nodes: Execute Pydantic AI agents
- State Nodes: Update or read workflow state
- Decision Nodes: Make routing decisions
- Parallel Nodes: Execute multiple nodes concurrently
Edge Types:
- Sequential Edges: Always traversed
- Conditional Edges: Traversed based on condition
- Parallel Edges: Used for parallel execution branches
Orchestrator Factory
File: src/orchestrator_factory.py
Purpose: Factory for creating orchestrators
Modes:
- Simple: Legacy orchestrator (backward compatible)
- Advanced: Magentic orchestrator (requires OpenAI API key)
- Auto-detect: Chooses based on API key availability
Usage:
from src.orchestrator_factory import create_orchestrator
orchestrator = create_orchestrator(
search_handler=search_handler,
judge_handler=judge_handler,
config={},
mode="advanced" # or "simple" or None for auto-detect
)
Magentic Orchestrator
File: src/orchestrator_magentic.py
Purpose: Multi-agent coordination using Microsoft Agent Framework
Features:
- Uses
agent-framework-core - ChatAgent pattern with internal LLMs per agent
MagenticBuilderwith participants: searcher, hypothesizer, judge, reporter- Manager orchestrates agents via
OpenAIChatClient - Requires OpenAI API key (function calling support)
- Event-driven: converts Magentic events to
AgentEventfor UI streaming
Requirements:
agent-framework-corepackage- OpenAI API key
Hierarchical Orchestrator
File: src/orchestrator_hierarchical.py
Purpose: Hierarchical orchestrator using middleware and sub-teams
Features:
- Uses
SubIterationMiddlewarewithResearchTeamandLLMSubIterationJudge - Adapts Magentic ChatAgent to
SubIterationTeamprotocol - Event-driven via
asyncio.Queuefor coordination - Supports sub-iteration patterns for complex research tasks
Legacy Simple Mode
File: src/legacy_orchestrator.py
Purpose: Linear search-judge-synthesize loop
Features:
- Uses
SearchHandlerProtocolandJudgeHandlerProtocol - Generator-based design yielding
AgentEventobjects - Backward compatibility for simple use cases
State Initialization
All orchestrators must initialize workflow state:
from src.middleware.state_machine import init_workflow_state
from src.services.embeddings import get_embedding_service
embedding_service = get_embedding_service()
init_workflow_state(embedding_service)
Event Streaming
All orchestrators yield AgentEvent objects:
Event Types:
started: Research startedsearch_complete: Search completedjudge_complete: Evidence evaluation completedhypothesizing: Generating hypothesessynthesizing: Synthesizing resultscomplete: Research completederror: Error occurred
Event Structure:
class AgentEvent:
type: str
iteration: int | None
data: dict[str, Any]
See Also
- Graph Orchestration - Graph-based execution details
- Graph Orchestration (Detailed) - Detailed graph architecture
- Workflows - Workflow diagrams and patterns
- Workflow Diagrams - Detailed workflow diagrams
- API Reference - Orchestrators - API documentation