Coverage for src/semware/config.py: 92%

25 statements  

« prev     ^ index     » next       coverage.py v7.10.6, created at 2025-09-09 02:15 -0700

1"""Configuration management for SemWare.""" 

2 

3from pathlib import Path 

4 

5from pydantic import Field 

6from pydantic_settings import SettingsConfigDict 

7 

8try: 

9 from pydantic_settings import BaseSettings 

10except ImportError: 

11 from pydantic import BaseSettings 

12 

13 

14class Settings(BaseSettings): 

15 """Application settings.""" 

16 

17 # API Configuration 

18 app_name: str = Field(default="SemWare", env="APP_NAME") 

19 app_version: str = Field(default="0.1.0", env="APP_VERSION") 

20 debug: bool = Field(default=False, env="DEBUG") 

21 

22 # API Key Authentication 

23 api_key: str = Field(default="your-secret-api-key", env="API_KEY") 

24 

25 # Database Configuration 

26 db_path: Path = Field(default=Path("./data"), env="DB_PATH") 

27 

28 # Model Configuration 

29 embedding_model_name: str = Field( 

30 default="all-MiniLM-L6-v2", env="EMBEDDING_MODEL_NAME" 

31 ) 

32 max_tokens_per_batch: int = Field(default=2000, env="MAX_TOKENS_PER_BATCH") 

33 embedding_dimension: int = Field(default=384, env="EMBEDDING_DIMENSION") 

34 

35 # Server Configuration 

36 host: str = Field(default="0.0.0.0", env="HOST") 

37 port: int = Field(default=8000, env="PORT") 

38 workers: int = Field(default=1, env="WORKERS") 

39 

40 # Logging Configuration 

41 log_level: str = Field(default="INFO", env="LOG_LEVEL") 

42 log_file: str | None = Field(default=None, env="LOG_FILE") 

43 

44 model_config = SettingsConfigDict( 

45 env_file=".env", 

46 env_file_encoding="utf-8", 

47 case_sensitive=False, 

48 extra="ignore", 

49 ) 

50 

51 

52def get_settings() -> Settings: 

53 """Get application settings.""" 

54 return Settings() 

55 

56 

57# Global settings instance 

58settings = get_settings()