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 }