refactor(configs): remove unused settings

This commit is contained in:
2026-02-08 22:43:38 +08:00
parent 6c34a3cefb
commit 3ba3705ba6
5 changed files with 26 additions and 157 deletions

View File

@@ -1,22 +1,20 @@
from .models import (
ModelConfig,
VisualizationConfig,
OutputConfig,
FeatureCompressorConfig,
PoolingType,
)
from .loader import load_yaml, save_yaml, ConfigError
from .config import (
ConfigManager,
cfg_manager,
)
from .loader import ConfigError, load_yaml, save_yaml
from .models import (
Config,
ModelConfig,
OutputConfig,
PoolingType,
)
__all__ = [
# Models
"ModelConfig",
"VisualizationConfig",
"OutputConfig",
"FeatureCompressorConfig",
"Config",
"PoolingType",
# Loader
"load_yaml",

View File

@@ -4,14 +4,14 @@ from pathlib import Path
from typing import Optional
from .loader import load_yaml, save_yaml
from .models import FeatureCompressorConfig
from .models import Config
class ConfigManager:
"""Singleton configuration manager for unified config."""
_instance: Optional["ConfigManager"] = None
_config: Optional[FeatureCompressorConfig] = None
_config: Optional[Config] = None
def __new__(cls) -> "ConfigManager":
"""Singleton pattern - ensure only one instance exists."""
@@ -24,17 +24,17 @@ class ConfigManager:
self.config_dir = Path(__file__).parent
self.config_path = self.config_dir / "config.yaml"
def load(self) -> FeatureCompressorConfig:
def load(self) -> Config:
"""Load configuration from config.yaml file.
Returns:
Loaded and validated FeatureCompressorConfig instance
"""
config = load_yaml(self.config_path, FeatureCompressorConfig)
config = load_yaml(self.config_path, Config)
self._config = config
return config
def get(self) -> FeatureCompressorConfig:
def get(self) -> Config:
"""Get loaded configuration, auto-loading if not already loaded.
Returns:
@@ -50,7 +50,7 @@ class ConfigManager:
def save(
self,
config: Optional[FeatureCompressorConfig] = None,
config: Optional[Config] = None,
path: Optional[Path] = None,
) -> None:
"""Save configuration to YAML file.

View File

@@ -1,21 +1,7 @@
model:
name: "facebook/dinov2-large"
compression_dim: 256
pooling_type: "attention" # attention-based Top-K
top_k_ratio: 0.5 # Keep 50% of tokens
hidden_ratio: 2.0 # MLP hidden = compression_dim * 2
dropout_rate: 0.1
use_residual: true
device: "auto" # auto-detect GPU
visualization:
plot_theme: "plotly_white"
color_scale: "viridis"
point_size: 8
fig_width: 900
fig_height: 600
compression_dim: 512
device: "auto" # auto-detect GPU
output:
directory: "./outputs"
html_self_contained: true
png_scale: 2 # 2x resolution for PNG

View File

@@ -19,42 +19,17 @@ class ModelConfig(BaseModel):
name: str = "facebook/dinov2-large"
compression_dim: int = Field(
default=256, gt=0, description="Output feature dimension"
default=512, gt=0, description="Output feature dimension"
)
pooling_type: PoolingType = PoolingType.ATTENTION
top_k_ratio: float = Field(
default=0.5, ge=0, le=1, description="Ratio of tokens to keep"
)
hidden_ratio: float = Field(
default=2.0, gt=0, description="MLP hidden dim as multiple of compression_dim"
)
dropout_rate: float = Field(
default=0.1, ge=0, le=1, description="Dropout probability"
)
use_residual: bool = True
device: str = "auto"
class VisualizationConfig(BaseModel):
"""Configuration for visualization settings."""
model_config = ConfigDict(extra="ignore")
plot_theme: str = "plotly_white"
color_scale: str = "viridis"
point_size: int = Field(default=8, gt=0)
fig_width: int = Field(default=900, gt=0)
fig_height: int = Field(default=600, gt=0)
class OutputConfig(BaseModel):
"""Configuration for output settings."""
model_config = ConfigDict(extra="ignore")
directory: Path = Path(__file__).parent.parent.parent / "outputs"
html_self_contained: bool = True
png_scale: int = Field(default=2, gt=0)
@field_validator("directory", mode="after")
def convert_to_absolute(cls, v: Path) -> Path:
@@ -67,11 +42,10 @@ class OutputConfig(BaseModel):
return Path(__file__).parent.parent.parent / v
class FeatureCompressorConfig(BaseModel):
class Config(BaseModel):
"""Root configuration for the feature compressor."""
model_config = ConfigDict(extra="ignore")
model: ModelConfig
visualization: VisualizationConfig
output: OutputConfig