Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-agents/src/lexigram/ai/agents/strategies/strategy_registry.py: 81%

27 statements  

« prev     ^ index     » next       coverage.py v7.15.4, created at 2026-08-25 07:19 +0800

1"""Agent reasoning strategy registry. 

2 

3Maps strategy names (``"react"``, ``"reflexion"``, ``"plan-execute"``) 

4to strategy *classes* and instantiates on demand via 

5:meth:`~lexigram.primitives.registry.StrategyRegistry.instantiate`. 

6""" 

7 

8from __future__ import annotations 

9 

10from lexigram.logging import ( 

11 get_logger, 

12) 

13from lexigram.primitives.registry import StrategyRegistry 

14 

15logger = get_logger(__name__) 

16 

17 

18class AgentStrategyRegistry(StrategyRegistry): 

19 """Registry of agent reasoning strategy implementations. 

20 

21 Usage:: 

22 

23 registry = AgentStrategyRegistry.with_defaults() 

24 strategy = registry.instantiate("react", max_iterations=10) 

25 """ 

26 

27 def __init__(self) -> None: 

28 super().__init__(name="agent.strategies", allow_overwrite=True) 

29 

30 # ------------------------------------------------------------------ 

31 # Factory 

32 # ------------------------------------------------------------------ 

33 

34 @classmethod 

35 def with_defaults(cls) -> AgentStrategyRegistry: 

36 """Create a registry pre-populated with the built-in strategies. 

37 

38 Returns: 

39 A new registry with ``react``, ``plan-execute``, and 

40 ``reflexion`` strategies registered. 

41 """ 

42 instance = cls() 

43 instance._register_defaults() 

44 return instance 

45 

46 def _register_defaults(self) -> None: 

47 """Populate the registry with built-in strategy classes.""" 

48 from lexigram.ai.agents.strategies.function_calling import ( 

49 FunctionCallingStrategy, 

50 ) 

51 from lexigram.ai.agents.strategies.plan_execute import PlanAndExecuteStrategy 

52 from lexigram.ai.agents.strategies.react import ReActStrategy 

53 from lexigram.ai.agents.strategies.reflexion import ReflexionStrategy 

54 

55 self.register("react", ReActStrategy) 

56 self.register("function_calling", FunctionCallingStrategy) 

57 self.register("plan-execute", PlanAndExecuteStrategy) 

58 self.register("reflexion", ReflexionStrategy) 

59 

60 # ------------------------------------------------------------------ 

61 # Overrides 

62 # ------------------------------------------------------------------ 

63 

64 def default_strategies(self) -> dict[str, type]: 

65 """Return built-in strategy key → class mapping. 

66 

67 Returns: 

68 Dict mapping strategy name to its class. 

69 """ 

70 from lexigram.ai.agents.strategies.function_calling import ( 

71 FunctionCallingStrategy, 

72 ) 

73 from lexigram.ai.agents.strategies.plan_execute import PlanAndExecuteStrategy 

74 from lexigram.ai.agents.strategies.react import ReActStrategy 

75 from lexigram.ai.agents.strategies.reflexion import ReflexionStrategy 

76 

77 return { 

78 "react": ReActStrategy, 

79 "function_calling": FunctionCallingStrategy, 

80 "plan-execute": PlanAndExecuteStrategy, 

81 "reflexion": ReflexionStrategy, 

82 }