Source code for ffai.Clients.model_defaults

# Copyright (c) 2025 Antonio Quinonez / Far Finer LLC
# SPDX-License-Identifier: MIT
# Contact: antquinonez@farfiner.com

"""Model defaults registry for LiteLLM-based clients.

Provides default configuration values (max_tokens, temperature, system_instructions)
for various AI models to simplify client configuration. Values are loaded from
config.yaml.
"""

from typing import Any

from ..config import get_config


def _get_generic_defaults() -> dict[str, Any]:
    """Get generic defaults from config."""
    config = get_config()
    return config.model_defaults.generic.copy()


def _get_model_defaults() -> dict[str, dict[str, Any]]:
    """Get model-specific defaults from config."""
    config = get_config()
    return config.model_defaults.models.copy()


GENERIC_DEFAULTS: dict[str, Any] = {}
MODEL_DEFAULTS: dict[str, dict[str, Any]] = {}


def _ensure_defaults_loaded() -> None:
    """Load defaults from config if not already loaded."""
    global GENERIC_DEFAULTS, MODEL_DEFAULTS
    if not GENERIC_DEFAULTS:
        GENERIC_DEFAULTS = _get_generic_defaults()
    if not MODEL_DEFAULTS:
        MODEL_DEFAULTS = _get_model_defaults()


[docs] def get_model_defaults(model_string: str) -> dict[str, Any]: """Get defaults for a model string. Args: model_string: LiteLLM model identifier (e.g., "azure/mistral-small-2503") Returns: Dictionary with default settings """ _ensure_defaults_loaded() if model_string in MODEL_DEFAULTS: return MODEL_DEFAULTS[model_string].copy() model_name = model_string.rsplit("/", maxsplit=1)[-1] if "/" in model_string else model_string for key, defaults in MODEL_DEFAULTS.items(): if model_name in key: return defaults.copy() return GENERIC_DEFAULTS.copy()
[docs] def register_model_defaults(model_string: str, defaults: dict[str, Any]) -> None: """Register custom defaults for a model. Args: model_string: LiteLLM model identifier defaults: Dictionary of default settings """ _ensure_defaults_loaded() MODEL_DEFAULTS[model_string] = defaults