Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-agents/src/lexigram/ai/agents/module.py: 87%

15 statements  

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

1"""Agents module for dependency injection.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lexigram.contracts.ai import AgentExecutorProtocol, ToolRegistryProtocol 

8from lexigram.di.module import DynamicModule, Module, module 

9 

10if TYPE_CHECKING: 

11 from lexigram.ai.agents.config import AgentConfig 

12 

13 

14@module 

15class AgentsModule(Module): 

16 """Agent system module for Lexigram applications. 

17 

18 Provides agent execution, tool registry, and strategy support. 

19 

20 Usage:: 

21 

22 from lexigram.ai.agents import AgentsModule 

23 from lexigram.ai.agents.config import AgentConfig 

24 

25 @module( 

26 imports=[AgentsModule.configure(AgentConfig(...))] 

27 ) 

28 class AppModule(Module): 

29 pass 

30 """ 

31 

32 @classmethod 

33 def configure( 

34 cls, 

35 config: AgentConfig | None = None, 

36 enable_multi_agent: bool = False, 

37 ) -> DynamicModule: 

38 """Create an AgentsModule with explicit configuration. 

39 

40 Args: 

41 config: :class:`~lexigram.ai.agents.config.AgentConfig` or ``None`` 

42 for defaults. 

43 enable_multi_agent: Enable multi-agent orchestration support, 

44 allowing agents to delegate tasks to peer agents. Defaults to 

45 ``False``. 

46 

47 Returns: 

48 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

49 """ 

50 from lexigram.ai.agents.di.provider import AgentsProvider 

51 

52 return DynamicModule( 

53 module=cls, 

54 providers=[ 

55 AgentsProvider(config=config, enable_multi_agent=enable_multi_agent) 

56 ], 

57 exports=[ 

58 AgentExecutorProtocol, 

59 ToolRegistryProtocol, 

60 ], 

61 ) 

62 

63 @classmethod 

64 def stub(cls, config: AgentConfig | None = None) -> DynamicModule: 

65 """Create an AgentsModule suitable for unit and integration testing. 

66 

67 Uses in-memory or no-op agent implementations with minimal side 

68 effects. Multi-agent orchestration is disabled by default to keep 

69 the test container lightweight. 

70 

71 Args: 

72 config: Optional :class:`~lexigram.ai.agents.config.AgentConfig` 

73 override. Uses safe test defaults when ``None``. 

74 

75 Returns: 

76 A :class:`~lexigram.di.module.DynamicModule` descriptor. 

77 """ 

78 from lexigram.ai.agents.di.provider import AgentsProvider 

79 

80 return DynamicModule( 

81 module=cls, 

82 providers=[AgentsProvider(config=config, enable_multi_agent=False)], 

83 exports=[ 

84 AgentExecutorProtocol, 

85 ToolRegistryProtocol, 

86 ], 

87 ) 

88 

89 

90__all__ = ["AgentsModule"]