Spaces:
Paused
Paused
| """ | |
| Configuration utilities for user role-based settings. | |
| """ | |
| from typing import Any, Dict, Optional | |
| from .models import UserRole | |
| from .api_config import ( | |
| CONFIG_FOR_ADMIN_HF_USERS, | |
| CONFIG_FOR_PRO_HF_USERS, | |
| CONFIG_FOR_STANDARD_HF_USERS, | |
| CONFIG_FOR_ANONYMOUS_USERS | |
| ) | |
| def get_config_value(role: UserRole, field: str, options: Optional[Dict[str, Any]] = None) -> Any: | |
| """ | |
| Get the appropriate config value for a user role. | |
| Args: | |
| role: The user role ('anon', 'normal', 'pro', 'admin') | |
| field: The config field name to retrieve | |
| options: Optional user-provided options that may override defaults | |
| Returns: | |
| The config value appropriate for the user's role with respect to | |
| min/max boundaries and user overrides. | |
| """ | |
| # Select the appropriate config based on user role | |
| if role == 'admin': | |
| config = CONFIG_FOR_ADMIN_HF_USERS | |
| elif role == 'pro': | |
| config = CONFIG_FOR_PRO_HF_USERS | |
| elif role == 'normal': | |
| config = CONFIG_FOR_STANDARD_HF_USERS | |
| else: # Anonymous users | |
| config = CONFIG_FOR_ANONYMOUS_USERS | |
| # Get the default value for this field from the config | |
| default_value = config.get(f"default_{field}", None) | |
| # For fields that have min/max bounds | |
| min_field = f"min_{field}" | |
| max_field = f"max_{field}" | |
| # Check if min/max constraints exist for this field | |
| has_constraints = min_field in config or max_field in config | |
| if not has_constraints: | |
| # For fields without constraints, just return the value from config | |
| return default_value | |
| # Get min and max values from config (if they exist) | |
| min_value = config.get(min_field, None) | |
| max_value = config.get(max_field, None) | |
| # If user provided options with this field | |
| if options and field in options: | |
| user_value = options[field] | |
| # Apply constraints if they exist | |
| if min_value is not None and user_value < min_value: | |
| return min_value | |
| if max_value is not None and user_value > max_value: | |
| return max_value | |
| # If within bounds, use the user's value | |
| return user_value | |
| # If no user value, return the default | |
| return default_value | |
| def get_game_master_prompt(role: UserRole, options: Optional[Dict[str, Any]] = None) -> str: | |
| """ | |
| Get the game master prompt for the given user role and options. | |
| Args: | |
| role: The user role ('anon', 'normal', 'pro', 'admin') | |
| options: Optional user-provided options that may contain game_master_prompt | |
| Returns: | |
| The game master prompt string, or empty string if not set | |
| """ | |
| # Check if user provided a custom game master prompt | |
| if options and 'game_master_prompt' in options: | |
| user_prompt = options['game_master_prompt'] | |
| if user_prompt and user_prompt.strip(): | |
| return user_prompt.strip() | |
| # Fall back to role-based default | |
| default_value = get_config_value(role, 'game_master_prompt', options) | |
| return default_value or "" |