22
33import logging
44import os
5- from typing import Any , Dict , List
5+ from typing import TYPE_CHECKING , Any , Dict , List , Optional
66
77import yaml
88from pydantic import BaseModel , Field
99
10+ if TYPE_CHECKING :
11+ from .models import EvaluationData
12+
1013# Global metric mapping sets (populated dynamically from system config)
1114TURN_LEVEL_METRICS : set [str ] = set ()
1215CONVERSATION_LEVEL_METRICS : set [str ] = set ()
2427]
2528
2629
27- def setup_environment_variables (config_path : str ):
30+ def setup_environment_variables (config_path : str ) -> None :
2831 """Early setup of environment variables from system config. Called before any other imports."""
2932 try :
3033 with open (config_path , "r" , encoding = "utf-8" ) as f :
@@ -44,18 +47,22 @@ def setup_environment_variables(config_path: str):
4447 os .environ ["LITELLM_LOG_LEVEL" ] = "ERROR"
4548
4649
47- def setup_logging (logging_config : Dict [str , Any ]):
50+ def setup_logging (logging_config : Dict [str , Any ]) -> logging . Logger :
4851 """Configure logging for application and packages."""
4952 # Get logging settings with new structure
5053 source_level = getattr (logging , logging_config .get ("source_level" , "INFO" ).upper ())
51- package_level = getattr (logging , logging_config .get ("package_level" , "WARNING" ).upper ())
54+ package_level = getattr (
55+ logging , logging_config .get ("package_level" , "WARNING" ).upper ()
56+ )
5257 log_format = logging_config .get (
5358 "format" , "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
5459 )
5560
5661 # Configure root logger for our application
5762 logging .basicConfig (
58- level = source_level , format = log_format , force = True # Override any existing configuration
63+ level = source_level ,
64+ format = log_format ,
65+ force = True , # Override any existing configuration
5966 )
6067
6168 # Set logging levels for packages using system configuration
@@ -85,7 +92,9 @@ def setup_logging(logging_config: Dict[str, Any]):
8592 override_level_obj = getattr (logging , override_level .upper ())
8693 logging .getLogger (package_name ).setLevel (override_level_obj )
8794 except AttributeError :
88- print (f"Warning: Invalid log level '{ override_level } ' for package '{ package_name } '" )
95+ print (
96+ f"Warning: Invalid log level '{ override_level } ' for package '{ package_name } '"
97+ )
8998
9099 # Get logger for our application
91100 logger = logging .getLogger ("lsc_eval" )
@@ -102,7 +111,7 @@ def setup_logging(logging_config: Dict[str, Any]):
102111 return logger
103112
104113
105- def populate_metric_mappings (metrics_metadata : Dict [str , Any ]):
114+ def populate_metric_mappings (metrics_metadata : Dict [str , Any ]) -> None :
106115 """Populate global metric mapping sets from system config metadata."""
107116 TURN_LEVEL_METRICS .clear ()
108117 CONVERSATION_LEVEL_METRICS .clear ()
@@ -120,7 +129,9 @@ def populate_metric_mappings(metrics_metadata: Dict[str, Any]):
120129 CONVERSATION_LEVEL_METRICS .add (metric_name )
121130
122131
123- def validate_metrics (turn_metrics : List [str ], conversation_metrics : List [str ]) -> List [str ]:
132+ def validate_metrics (
133+ turn_metrics : List [str ], conversation_metrics : List [str ]
134+ ) -> List [str ]:
124135 """Validate that provided metrics are recognized."""
125136 errors = []
126137
@@ -151,7 +162,9 @@ class SystemConfig(BaseModel):
151162 # Logging Configuration
152163 logging_source_level : str = Field (default = "INFO" )
153164 logging_package_level : str = Field (default = "WARNING" )
154- logging_format : str = Field (default = "%(asctime)s - %(name)s - %(levelname)s - %(message)s" )
165+ logging_format : str = Field (
166+ default = "%(asctime)s - %(name)s - %(levelname)s - %(message)s"
167+ )
155168 logging_show_timestamps : bool = Field (default = True )
156169 logging_package_overrides : Dict [str , str ] = Field (default_factory = dict )
157170
@@ -169,18 +182,22 @@ class SystemConfig(BaseModel):
169182 visualization_dpi : int = Field (default = 300 )
170183
171184 # Default metrics metadata from system config
172- default_turn_metrics_metadata : Dict [str , Dict [str , Any ]] = Field (default_factory = dict )
173- default_conversation_metrics_metadata : Dict [str , Dict [str , Any ]] = Field (default_factory = dict )
185+ default_turn_metrics_metadata : Dict [str , Dict [str , Any ]] = Field (
186+ default_factory = dict
187+ )
188+ default_conversation_metrics_metadata : Dict [str , Dict [str , Any ]] = Field (
189+ default_factory = dict
190+ )
174191
175192
176193class ConfigLoader :
177194 """Configuration loader for LSC Evaluation Framework."""
178195
179- def __init__ (self ):
196+ def __init__ (self ) -> None :
180197 """Initialize Config Loader."""
181- self .system_config = None
182- self .evaluation_data = None
183- self .logger = None
198+ self .system_config : Optional [ SystemConfig ] = None
199+ self .evaluation_data : Optional [ List [ EvaluationData ]] = None
200+ self .logger : Optional [ logging . Logger ] = None
184201
185202 def load_system_config (self , config_path : str ) -> SystemConfig :
186203 """Load system configuration from YAML file."""
@@ -229,7 +246,9 @@ def load_system_config(self, config_path: str) -> SystemConfig:
229246 visualization_dpi = visualization_config .get ("dpi" , 300 ),
230247 # Default metrics metadata from system config
231248 default_turn_metrics_metadata = metrics_metadata .get ("turn_level" , {}),
232- default_conversation_metrics_metadata = metrics_metadata .get ("conversation_level" , {}),
249+ default_conversation_metrics_metadata = metrics_metadata .get (
250+ "conversation_level" , {}
251+ ),
233252 )
234253
235254 self .logger .debug (
0 commit comments