Skip to main content
Glama
config.py6.32 kB
"""Configuration for quality scoring system.""" import os from dataclasses import dataclass from typing import Optional @dataclass class QualityConfig: """Configuration for quality scoring system with local-first defaults.""" # System control enabled: bool = True # AI provider selection # Options: 'local' (ONNX only), 'groq', 'gemini', 'auto' (try all), 'none' (implicit only) ai_provider: str = 'local' # Local ONNX model settings local_model: str = 'nvidia-quality-classifier-deberta' local_device: str = 'auto' # auto|cpu|cuda|mps|directml # Cloud API settings (optional, user opt-in) groq_api_key: Optional[str] = None gemini_api_key: Optional[str] = None # Quality boost (AI + implicit signals combination) boost_enabled: bool = False boost_weight: float = 0.3 # Weight for implicit signals when combining with AI # Fallback scoring (DeBERTa primary, MS-MARCO rescue for technical content) # NOTE: Fallback mode not recommended - MS-MARCO is query-relevance model, not quality classifier fallback_enabled: bool = False deberta_threshold: float = 0.4 # Lowered from 0.6 to accept more technical content (v8.50.0) ms_marco_threshold: float = 0.7 # If DeBERTa low AND MS-MARCO >= this, use MS-MARCO (rescue) @classmethod def from_env(cls) -> 'QualityConfig': """Load configuration from environment variables.""" return cls( enabled=os.getenv('MCP_QUALITY_SYSTEM_ENABLED', 'true').lower() == 'true', ai_provider=os.getenv('MCP_QUALITY_AI_PROVIDER', 'local'), local_model=os.getenv('MCP_QUALITY_LOCAL_MODEL', 'ms-marco-MiniLM-L-6-v2'), local_device=os.getenv('MCP_QUALITY_LOCAL_DEVICE', 'auto'), groq_api_key=os.getenv('GROQ_API_KEY'), gemini_api_key=os.getenv('GEMINI_API_KEY'), boost_enabled=os.getenv('MCP_QUALITY_BOOST_ENABLED', 'false').lower() == 'true', boost_weight=float(os.getenv('MCP_QUALITY_BOOST_WEIGHT', '0.3')), fallback_enabled=os.getenv('MCP_QUALITY_FALLBACK_ENABLED', 'false').lower() == 'true', deberta_threshold=float(os.getenv('MCP_QUALITY_DEBERTA_THRESHOLD', '0.6')), ms_marco_threshold=float(os.getenv('MCP_QUALITY_MSMARCO_THRESHOLD', '0.7')) ) def validate(self) -> bool: """Validate configuration settings.""" if self.ai_provider not in ['local', 'groq', 'gemini', 'auto', 'none']: raise ValueError(f"Invalid ai_provider: {self.ai_provider}") if self.local_device not in ['auto', 'cpu', 'cuda', 'mps', 'directml']: raise ValueError(f"Invalid local_device: {self.local_device}") if not 0.0 <= self.boost_weight <= 1.0: raise ValueError(f"boost_weight must be between 0.0 and 1.0, got {self.boost_weight}") # Validate fallback thresholds if not 0.0 <= self.deberta_threshold <= 1.0: raise ValueError(f"deberta_threshold must be between 0.0 and 1.0, got {self.deberta_threshold}") if not 0.0 <= self.ms_marco_threshold <= 1.0: raise ValueError(f"ms_marco_threshold must be between 0.0 and 1.0, got {self.ms_marco_threshold}") # Validate multi-model support for fallback if self.fallback_enabled: models = [m.strip() for m in self.local_model.split(',')] if len(models) < 2: raise ValueError( "Fallback mode requires at least 2 models in local_model (comma-separated), " f"got: {self.local_model}" ) # Validate each model exists for model in models: if model not in SUPPORTED_MODELS: raise ValueError( f"Unknown model '{model}' in local_model. " f"Supported models: {list(SUPPORTED_MODELS.keys())}" ) # Warn if cloud providers selected but no API keys if self.ai_provider == 'groq' and not self.groq_api_key: raise ValueError("Groq provider selected but GROQ_API_KEY not set") if self.ai_provider == 'gemini' and not self.gemini_api_key: raise ValueError("Gemini provider selected but GEMINI_API_KEY not set") return True @property def use_local_only(self) -> bool: """Check if using local-only scoring.""" return self.ai_provider in ['local', 'none'] @property def can_use_groq(self) -> bool: """Check if Groq API is available.""" return self.groq_api_key is not None and self.ai_provider in ['groq', 'auto'] @property def can_use_gemini(self) -> bool: """Check if Gemini API is available.""" return self.gemini_api_key is not None and self.ai_provider in ['gemini', 'auto'] # Model registry for supported ONNX models SUPPORTED_MODELS = { 'nvidia-quality-classifier-deberta': { 'hf_name': 'nvidia/quality-classifier-deberta', 'type': 'classifier', # 3-class classification (Low/Medium/High) 'size_mb': 450, 'inputs': ['input_ids', 'attention_mask'], # No token_type_ids 'output_classes': ['low', 'medium', 'high'], 'description': 'Absolute quality assessment (recommended, eliminates self-matching bias)' }, 'ms-marco-MiniLM-L-6-v2': { 'hf_name': 'cross-encoder/ms-marco-MiniLM-L-6-v2', 'type': 'cross-encoder', # Query-document relevance ranking 'size_mb': 23, 'inputs': ['input_ids', 'attention_mask', 'token_type_ids'], 'output_classes': None, # Continuous score via sigmoid 'description': 'Legacy relevance ranker (has self-matching bias, use for relative ranking only)' } } def validate_model_selection(model_name: str) -> dict: """ Validate model selection and return model config. Args: model_name: Name of the model to validate Returns: Model configuration dictionary Raises: ValueError: If model_name is not supported """ if model_name not in SUPPORTED_MODELS: raise ValueError( f"Unsupported model: {model_name}. " f"Supported models: {list(SUPPORTED_MODELS.keys())}" ) return SUPPORTED_MODELS[model_name]

Latest Blog Posts

MCP directory API

We provide all the information about MCP servers via our MCP API.

curl -X GET 'https://glama.ai/api/mcp/v1/servers/doobidoo/mcp-memory-service'

If you have feedback or need assistance with the MCP directory API, please join our Discord server