Coverage for src / lexigram / ai / relay / gateway / module.py: 100%

14 statements  

« prev     ^ index     » next       coverage.py v7.13.5, created at 2026-08-08 23:08 +0800

1"""Relay gateway module for dependency injection.""" 

2 

3from __future__ import annotations 

4 

5from typing import TYPE_CHECKING 

6 

7from lexigram.contracts.ai.relay import RelayGatewayProtocol 

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

9 

10if TYPE_CHECKING: 

11 from lexigram.ai.relay.gateway.config import RelayGatewayConfig 

12 

13__all__ = ["RelayGatewayModule"] 

14 

15 

16@module 

17class RelayGatewayModule(Module): 

18 """Protocol-facing relay gateway module for Lexigram applications. 

19 

20 Provides the relay gateway behind the :class:`RelayGatewayProtocol` 

21 contract: channel selection, orchestration, upstream I/O, and SSE 

22 handling. The :class:`RelayGatewayProvider` composes the gateway 

23 from caller-owned config, conversion engine, and HTTP client. 

24 

25 Usage:: 

26 

27 from lexigram.ai.relay.gateway import RelayGatewayModule 

28 

29 @module( 

30 imports=[RelayGatewayModule.configure()] 

31 ) 

32 class AppModule(Module): 

33 pass 

34 """ 

35 

36 @classmethod 

37 def configure(cls, config: RelayGatewayConfig | None = None) -> DynamicModule: 

38 """Create a RelayGatewayModule with the built-in gateway routes. 

39 

40 Args: 

41 config: Static gateway configuration (channel table, model 

42 suffixes, auto-test flags, job TTL). Defaults to an empty 

43 configuration when omitted. 

44 

45 Returns: 

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

47 """ 

48 from lexigram.ai.relay.gateway.di.provider import RelayGatewayProvider 

49 from lexigram.ai.relay.gateway.operations.controls import RelayControlsService 

50 from lexigram.ai.relay.gateway.operations.health import RelayHealthService 

51 from lexigram.ai.relay.gateway.operations.metrics import RelayMetricsService 

52 

53 return DynamicModule( 

54 module=cls, 

55 providers=[RelayGatewayProvider(config=config)], 

56 exports=[ 

57 RelayGatewayProtocol, 

58 RelayHealthService, 

59 RelayMetricsService, 

60 RelayControlsService, 

61 ], 

62 )