gmuse.config#
Configuration management for gmuse.
This module handles loading, validation, and merging of configuration from multiple sources:
CLI flags (highest priority)
config.toml file
Environment variables
Defaults (lowest priority)
The configuration is represented as a dictionary (ConfigDict) with string keys and values of various types depending on the setting.
Module Contents#
Functions#
Get the path to the configuration file using XDG Base Directory specification. |
|
Load configuration from TOML file. |
|
Load raw config file contents as text. |
|
Parse a CLI-provided raw value according to the expected key type. |
|
Validate an integer config value is within the allowed range. |
|
Validate a float config value is within the allowed range. |
|
Validate a string config value is one of the allowed choices. |
|
Validate a config value is a boolean. |
|
Validate a config value is a string or None. |
|
Parse an integer environment variable. |
|
Parse a float environment variable. |
|
Validate configuration values. |
|
Merge configuration from multiple sources with priority. |
|
Load a TOML document for round-trip editing. |
|
Update (or remove) a single key in the global config file. |
|
Load configuration from environment variables. |
Data#
Type alias for configuration dictionaries. |
|
Allowed values for the ‘format’ configuration option. |
|
Valid range for history_depth configuration. |
|
Valid range for timeout configuration (in seconds). |
|
Valid range for temperature configuration. |
|
Valid range for max_tokens configuration. |
|
Valid range for max_diff_bytes configuration. |
|
Valid range for max_message_length configuration. |
|
Valid range for max_chars configuration (characters). |
|
Valid range for chars_per_token configuration. |
|
Valid range for branch_max_length configuration. |
|
Default configuration values used when no override is provided. |
|
Allowlist of configuration keys that can be set via the CLI. |
|
Mapping from config keys to their overriding environment variables. |
API#
- gmuse.config.logger = 'get_logger(...)'#
- gmuse.config.ConfigDict = None#
Type alias for configuration dictionaries.
- gmuse.config.VALID_FORMATS: Final[frozenset[str]] = 'frozenset(...)'#
Allowed values for the ‘format’ configuration option.
- gmuse.config.HISTORY_DEPTH_MIN: Final[int] = 0#
- gmuse.config.HISTORY_DEPTH_MAX: Final[int] = 50#
Valid range for history_depth configuration.
- gmuse.config.TIMEOUT_MIN: Final[int] = 5#
- gmuse.config.TIMEOUT_MAX: Final[int] = 300#
Valid range for timeout configuration (in seconds).
- gmuse.config.TEMPERATURE_MIN: Final[float] = 0.0#
- gmuse.config.TEMPERATURE_MAX: Final[float] = 2.0#
Valid range for temperature configuration.
- gmuse.config.MAX_TOKENS_MIN: Final[int] = 1#
- gmuse.config.MAX_TOKENS_MAX: Final[int] = 100000#
Valid range for max_tokens configuration.
- gmuse.config.MAX_DIFF_BYTES_MIN: Final[int] = 1000#
- gmuse.config.MAX_DIFF_BYTES_MAX: Final[int] = 10000000#
Valid range for max_diff_bytes configuration.
- gmuse.config.MAX_MESSAGE_LENGTH_MIN: Final[int] = 10#
- gmuse.config.MAX_MESSAGE_LENGTH_MAX: Final[int] = 10000#
Valid range for max_message_length configuration.
- gmuse.config.MAX_CHARS_MIN: Final[int] = 1#
- gmuse.config.MAX_CHARS_MAX: Final[int] = 500#
Valid range for max_chars configuration (characters).
- gmuse.config.CHARS_PER_TOKEN_MIN: Final[int] = 1#
- gmuse.config.CHARS_PER_TOKEN_MAX: Final[int] = 10#
Valid range for chars_per_token configuration.
- gmuse.config.BRANCH_MAX_LENGTH_MIN: Final[int] = 20#
- gmuse.config.BRANCH_MAX_LENGTH_MAX: Final[int] = 200#
Valid range for branch_max_length configuration.
- gmuse.config.DEFAULTS: Final[gmuse.config.ConfigDict] = None#
Default configuration values used when no override is provided.
- gmuse.config.ALLOWED_CONFIG_KEYS: Final[frozenset[str]] = 'frozenset(...)'#
Allowlist of configuration keys that can be set via the CLI.
- gmuse.config.ENV_VAR_BY_KEY: Final[dict[str, str]] = None#
Mapping from config keys to their overriding environment variables.
- gmuse.config.get_config_path() pathlib.Path#
Get the path to the configuration file using XDG Base Directory specification.
- Returns:
Path to config.toml (e.g., ~/.config/gmuse/config.toml)
- Example:
>>> config_path = get_config_path() >>> print(config_path) /home/user/.config/gmuse/config.toml
- gmuse.config.load_config(config_path: Optional[pathlib.Path] = None) gmuse.config.ConfigDict#
Load configuration from TOML file.
- Args:
config_path: Path to config file, defaults to XDG location
- Returns:
Dictionary of configuration values (empty if file doesn’t exist)
- Raises:
ConfigError: If TOML file is invalid or cannot be read
- Example:
>>> config = load_config() >>> print(config.get("model")) gpt-4
- gmuse.config.load_config_raw(config_path: Optional[pathlib.Path] = None) str | None#
Load raw config file contents as text.
This is used by gmuse config view to display the file contents verbatim while still providing clear errors for unreadable files.
- Args:
config_path: Path to config file, defaults to XDG location.
- Returns:
The file contents if the file exists, otherwise None.
- Raises:
ConfigError: If the file exists but cannot be read.
- gmuse.config.parse_config_value(key: str, raw: str) Any#
Parse a CLI-provided raw value according to the expected key type.
- Args:
key: Configuration key (must be in DEFAULTS). raw: Raw user-provided value string.
- Returns:
Parsed Python value.
- Raises:
ConfigError: If the key is unknown or the value cannot be parsed.
- gmuse.config._validate_integer_range(config: gmuse.config.ConfigDict, key: str, min_val: int, max_val: int) None#
Validate an integer config value is within the allowed range.
- Args:
config: Configuration dictionary key: Configuration key to validate min_val: Minimum allowed value (inclusive) max_val: Maximum allowed value (inclusive)
- Raises:
ConfigError: If value is not an integer or out of range
- gmuse.config._validate_float_range(config: gmuse.config.ConfigDict, key: str, min_val: float, max_val: float) None#
Validate a float config value is within the allowed range.
- Args:
config: Configuration dictionary key: Configuration key to validate min_val: Minimum allowed value (inclusive) max_val: Maximum allowed value (inclusive)
- Raises:
ConfigError: If value is not a number or out of range
- gmuse.config._validate_string_choice(config: gmuse.config.ConfigDict, key: str, valid_choices: frozenset[str], allow_none: bool = False) None#
Validate a string config value is one of the allowed choices.
- Args:
config: Configuration dictionary key: Configuration key to validate valid_choices: Set of allowed string values allow_none: Whether None is a valid value
- Raises:
ConfigError: If value is not a string or not in valid choices
- gmuse.config._validate_boolean(config: gmuse.config.ConfigDict, key: str) None#
Validate a config value is a boolean.
- Args:
config: Configuration dictionary key: Configuration key to validate
- Raises:
ConfigError: If value is not a boolean
- gmuse.config._validate_optional_string(config: gmuse.config.ConfigDict, key: str) None#
Validate a config value is a string or None.
- Args:
config: Configuration dictionary key: Configuration key to validate
- Raises:
ConfigError: If value is not a string or None
- gmuse.config._parse_env_int(env_var: str, config_key: str) tuple[str, int] | None#
Parse an integer environment variable.
- Args:
env_var: Environment variable name (e.g., “GMUSE_TIMEOUT”) config_key: Configuration key name (e.g., “timeout”)
- Returns:
Tuple of (config_key, parsed_value) if valid, None otherwise
- gmuse.config._parse_env_float(env_var: str, config_key: str) tuple[str, float] | None#
Parse a float environment variable.
- Args:
env_var: Environment variable name (e.g., “GMUSE_TEMPERATURE”) config_key: Configuration key name (e.g., “temperature”)
- Returns:
Tuple of (config_key, parsed_value) if valid, None otherwise
- gmuse.config.validate_config(config: gmuse.config.ConfigDict) None#
Validate configuration values.
Checks that all configuration values are of the correct type and within valid ranges. Unknown keys are logged as warnings but do not cause errors.
- Args:
config: Configuration dictionary to validate
- Raises:
ConfigError: If any configuration value is invalid
- Example:
>>> config = {"history_depth": 5, "format": "conventional"} >>> validate_config(config) # No error >>> config = {"history_depth": -1} >>> validate_config(config) # Raises ConfigError
- gmuse.config.merge_config(cli_args: Optional[gmuse.config.ConfigDict] = None, config_file: Optional[gmuse.config.ConfigDict] = None, env_vars: Optional[gmuse.config.ConfigDict] = None) gmuse.config.ConfigDict#
Merge configuration from multiple sources with priority.
Priority (highest to lowest): 1. CLI arguments (cli_args) 2. Environment variables (env_vars) 3. Config file (config_file) 4. Defaults (DEFAULTS)
- Args:
cli_args: Configuration from CLI flags config_file: Configuration from config.toml env_vars: Configuration from environment variables
- Returns:
Merged configuration dictionary
- Example:
>>> cli = {"model": "gpt-4"} >>> file = {"model": "claude-3", "format": "conventional"} >>> merged = merge_config(cli_args=cli, config_file=file) >>> print(merged["model"]) # CLI wins gpt-4 >>> print(merged["format"]) # File value used conventional
- gmuse.config._load_toml_document(config_path: pathlib.Path)#
Load a TOML document for round-trip editing.
- Raises:
ConfigError: If the file cannot be read or TOML is invalid.
- gmuse.config._atomic_write_text(path: pathlib.Path, text: str) None#
- gmuse.config.update_config_key(key: str, value: Any, config_path: Optional[pathlib.Path] = None) pathlib.Path#
Update (or remove) a single key in the global config file.
This preserves unrelated settings and comments by using tomlkit round-trip editing and writes the file atomically.
- Args:
key: Config key to set. value: Parsed value. config_path: Optional path override (defaults to XDG location).
- Returns:
The path that was written.
- Raises:
ConfigError: On read/write errors or invalid TOML.
- gmuse.config.get_env_config() gmuse.config.ConfigDict#
Load configuration from environment variables.
- Environment variables:
GMUSE_MODEL: Model name
GMUSE_FORMAT: Message format
GMUSE_HISTORY_DEPTH: Number of commits for context
GMUSE_TIMEOUT: Request timeout in seconds
GMUSE_COPY: Copy to clipboard (true/false)
GMUSE_LEARNING: Enable learning mode (true/false)
GMUSE_LOG_FILE: Log file path
GMUSE_TEMPERATURE: LLM sampling temperature
GMUSE_MAX_TOKENS: Maximum tokens in response
GMUSE_MAX_DIFF_BYTES: Maximum diff size before truncation
GMUSE_MAX_MESSAGE_LENGTH: Maximum commit message length
GMUSE_MAX_CHARS: Optional maximum characters for generated message
GMUSE_INCLUDE_BRANCH: Include branch name as context (1/true/yes)
GMUSE_BRANCH_MAX_LENGTH: Maximum length for branch summary
- Returns:
Configuration dictionary from environment variables
- Example:
>>> os.environ["GMUSE_MODEL"] = "gpt-4" >>> config = get_env_config() >>> print(config["model"]) gpt-4