Coverage for /home/admin/Documents/AI/applications/lexigram-dev/lexigram/experimental/ai/lexigram-ai-feedback/src/lexigram/ai/feedback/config.py: 94%

16 statements  

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

1"""Feedback configuration for Lexigram.""" 

2 

3from __future__ import annotations 

4 

5from dataclasses import dataclass 

6from typing import TYPE_CHECKING, ClassVar, cast 

7 

8from lexigram.ai.feedback import constants as const 

9from lexigram.config import ( 

10 BaseConfig, 

11) 

12from lexigram.validation import ConfigDict, Field 

13 

14if TYPE_CHECKING: 

15 from lexigram.contracts.core.config import ConfigIssue, Environment 

16 

17 

18@dataclass(init=False) 

19class FeedbackConfig(BaseConfig): 

20 """Configuration for AI feedback collection. 

21 

22 Loaded from the ``ai_feedback:`` key in application.yaml, with environment 

23 variable overrides via ``LEX_AI_FEEDBACK__*`` prefix. 

24 """ 

25 

26 config_section: ClassVar[str] = "ai_feedback" 

27 

28 model_config: ClassVar[ConfigDict] = cast( 

29 "ConfigDict", 

30 { 

31 "env_prefix": const.ENV_PREFIX, 

32 "env_nested_delimiter": const.ENV_NESTED_DELIMITER, 

33 "extra": "ignore", 

34 }, 

35 ) 

36 

37 enabled: bool = Field( 

38 default=True, description="Master on/off switch for all feedback collection" 

39 ) 

40 async_processing: bool = Field( 

41 default=True, 

42 description="Process feedback handlers asynchronously in the background", 

43 ) 

44 store_raw_payloads: bool = Field( 

45 default=False, 

46 description="Persist raw incoming feedback payloads for auditing", 

47 ) 

48 

49 def validate_for_environment( 

50 self, env: Environment | None = None 

51 ) -> list[ConfigIssue]: 

52 """Check config is safe for the target environment.""" 

53 return [] 

54 

55 

56__all__ = ["FeedbackConfig"]