File size: 2,839 Bytes
8b02e7c
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
"""Example workflow using delegation MCP."""

import asyncio
from pathlib import Path

from delegation_mcp import DelegationConfig, OrchestratorRegistry, DelegationEngine


async def main():
    """Run example delegation workflow."""

    # Load configuration
    config_path = Path("config/delegation_rules.yaml")
    config = DelegationConfig.from_yaml(config_path)

    # Setup registry and engine
    registry = OrchestratorRegistry()
    engine = DelegationEngine(config, registry)

    # Register orchestrators
    for name, orch_config in config.orchestrators.items():
        registry.register(orch_config)

    print("=== Delegation MCP Example Workflow ===\n")

    # Example 1: Security audit (should delegate to Gemini)
    print("Example 1: Security Audit")
    result1 = await engine.process("Run a security audit on authentication module")
    print(f"  Primary: {result1.orchestrator}")
    print(f"  Delegated to: {result1.delegated_to}")
    print(f"  Rule matched: {result1.rule.pattern if result1.rule else 'None'}")
    print(f"  Success: {result1.success}\n")

    # Example 2: Refactoring (should delegate to Aider)
    print("Example 2: Refactoring")
    result2 = await engine.process("Refactor the database connection code")
    print(f"  Primary: {result2.orchestrator}")
    print(f"  Delegated to: {result2.delegated_to}")
    print(f"  Rule matched: {result2.rule.pattern if result2.rule else 'None'}")
    print(f"  Success: {result2.success}\n")

    # Example 3: Pull request (should delegate to Copilot if enabled)
    print("Example 3: Pull Request")
    result3 = await engine.process("Create a pull request for the new feature")
    print(f"  Primary: {result3.orchestrator}")
    print(f"  Delegated to: {result3.delegated_to}")
    print(f"  Rule matched: {result3.rule.pattern if result3.rule else 'None'}")
    print(f"  Success: {result3.success}\n")

    # Example 4: No rule match (uses primary orchestrator)
    print("Example 4: No Rule Match")
    result4 = await engine.process("Explain how async/await works in Python")
    print(f"  Primary: {result4.orchestrator}")
    print(f"  Delegated to: {result4.delegated_to}")
    print(f"  Rule matched: {result4.rule.pattern if result4.rule else 'None'}")
    print(f"  Success: {result4.success}\n")

    # Show statistics
    print("=== Statistics ===")
    stats = engine.get_statistics()
    print(f"Total queries: {stats['total']}")
    print(f"Delegations: {stats['delegations']}")
    print(f"Delegation rate: {stats['delegation_rate']:.1f}%")
    print(f"Success rate: {stats['success_rate']:.1f}%")
    print(f"Avg duration: {stats['avg_duration']:.2f}s")
    print(f"\nBy orchestrator:")
    for orch, count in stats['by_orchestrator'].items():
        print(f"  {orch}: {count}")


if __name__ == "__main__":
    asyncio.run(main())