Image Processing: From Theory to Practice
Ai mode for emacs.
preferably in markdow file
- Examine the following Python code snippet and provide a clear explanation of its functionality, including what each part does, any important concepts or techniques used, and potential outputs or behaviors.
import requests
from .config import Config
from .logger import log
from .storage import Storage
_model_catalog_cache: list[dict[str, str]] | None = None
_model_enum_items_cache: list[tuple[str, str, str]] | None = None
def clear_models_cache() -> None:
global _model_catalog_cache
global _model_enum_items_cache
_model_catalog_cache = None
_model_enum_items_cache = None
def _build_default_model_entry(model_type: str) -> dict[str, str]:
defaults = Config.DEFAULT_MODEL_DETAILS.get(model_type, {})
return {
"type": model_type,
"name": defaults.get("name", model_type.capitalize()),
"description": defaults.get("description", f"{model_type} model"),
}
def _get_default_model_catalog(model_types: list[str] | None = None) -> list[dict[str, str]]:
return [_build_default_model_entry(model_type) for model_type in (model_types or Config.DEFAULT_MODELS)]
def _prioritize_default_model(catalog: list[dict[str, str]]) -> list[dict[str, str]]:
preferred_type = Config.DEFAULT_MODEL_TYPE
preferred_index = next(
(index for index, model in enumerate(catalog) if model.get("type") == preferred_type),
None,
)
if preferred_index in (None, 0):
return catalog
preferred_model = catalog[preferred_index]
return [preferred_model, *catalog[:preferred_index], *catalog[preferred_index + 1 :]]
def _normalize_model_catalog(payload: dict) -> list[dict[str, str]]:
raw_model_types = payload.get("model_types", [])
raw_models = payload.get("models", [])
if isinstance(raw_models, list) and raw_models and all(isinstance(model, str) for model in raw_models):
return _get_default_model_catalog([model for model in raw_models if model])
models_by_type: dict[str, dict[str, str]] = {}
if isinstance(raw_models, list):
for raw_model in raw_models:
if not isinstance(raw_model, dict):
continue
model_type = str(raw_model.get("type", "")).strip()
if not model_type:
continue
default_entry = _build_default_model_entry(model_type)
models_by_type[model_type] = {
"type": model_type,
"name": str(raw_model.get("name") or default_entry["name"]),
"description": str(raw_model.get("description") or default_entry["description"]),
}
ordered_types: list[str] = []
if isinstance(raw_model_types, list):
for raw_type in raw_model_types:
model_type = str(raw_type).strip()
if model_type and model_type not in ordered_types:
ordered_types.append(model_type)
if not ordered_types:
ordered_types = list(models_by_type)
catalog: list[dict[str, str]] = []
seen: set[str] = set()
for model_type in ordered_types:
catalog.append(models_by_type.get(model_type, _build_default_model_entry(model_type)))
seen.add(model_type)
for model_type, model_info in models_by_type.items():
if model_type not in seen:
catalog.append(model_info)
return _prioritize_default_model(catalog or _get_default_model_catalog())
def get_model_catalog() -> list[dict[str, str]]:
global _model_catalog_cache
if _model_catalog_cache is not None:
return _model_catalog_cache
if not Storage.api_token:
_model_catalog_cache = _prioritize_default_model(_get_default_model_catalog())
return _model_catalog_cache
payload = {"api_token": Storage.api_token}
log.info("Fetching model catalog from server...")
try:
response = requests.get(Config.GET_MODELS_URL, params=payload, timeout=10)
if response.status_code == 200:
log.info("Model catalog fetched successfully, models: " + ", ".join(response.json().get("model_types", [])))
_model_catalog_cache = _normalize_model_catalog(response.json())
else:
log.error(f"Failed to get models: {response.status_code} {response.text}")
_model_catalog_cache = _prioritize_default_model(_get_default_model_catalog())
except Exception as exc:
log.error(f"Failed to get models: {exc}")
_model_catalog_cache = _prioritize_default_model(_get_default_model_catalog())
return _model_catalog_cache
def get_models_names() -> list[str]:
return [model["type"] for model in get_model_catalog()]
def get_model_enum_items(_self, _context) -> list[tuple[str, str, str]]:
global _model_enum_items_cache
_model_enum_items_cache = [
(model["type"], model["name"], model["description"]) for model in get_model_catalog()
]
return _model_enum_items_cache
def get_default_model_type() -> str:
catalog = get_model_catalog()
if catalog:
return catalog[0]["type"]
return Config.DEFAULT_MODELS[0]
def resolve_model_type(model_type: str) -> str:
model_names = get_models_names()
if model_type and model_type in model_names:
return model_type
return get_default_model_type()
Explanation of the Python Code
This script is designed to manage and retrieve a catalog of models, likely for use in an application or service. It utilizes caching to optimize repeated calls and incorporates logging for debugging purposes. The code is organized into several functions with specific responsibilities:
Key Components and Functions
Imports and Global Variables:
requests: Used for making HTTP requests.- Custom modules (
Config,logger,Storage) are imported, presumably containing configuration settings, logging utilities, and storage-related functionality (e.g., API token handling). - Two global variables
_model_catalog_cacheand_model_enum_items_cacheare declared to store cached data.
Cache Clearing Function:
def clear_models_cache() -> None: global _model_catalog_cache, _model_enum_items_cache _model_catalog_cache = None _model_enum_items_cache = None- This function resets both caches to
None, effectively clearing any stored model data.
- This function resets both caches to
Building Default Model Entry:
def _build_default_model_entry(model_type: str) -> dict[str, str]: defaults = Config.DEFAULT_MODEL_DETAILS.get(model_type, {}) return { "type": model_type, "name": defaults.get("name", model_type.capitalize()), "description": defaults.get("description", f"{model_type} model"), }- Constructs a dictionary representing a default model entry based on the provided
model_type, using configuration defaults for name and description.
- Constructs a dictionary representing a default model entry based on the provided
Default Model Catalog Retrieval:
def _get_default_model_catalog(model_types: list[str] | None = None) -> list[dict[str, str]]: return [_build_default_model_entry(model_type) for model_type in (model_types or Config.DEFAULT_MODELS)]- Generates a list of default model entries for the specified
model_typesor falls back toConfig.DEFAULT_MODELS.
- Generates a list of default model entries for the specified
Prioritizing Default Model:
def _prioritize_default_model(catalog: list[dict[str, str]]) -> list[dict[str, str]]: preferred_type = Config.DEFAULT_MODEL_TYPE preferred_index = next((index for index, model in enumerate(catalog) if model.get("type") == preferred_type), None) if preferred_index in (None, 0): return catalog return [catalog[preferred_index], *catalog[:preferred_index], *catalog[preferred_index + 1 :]]- Moves a model of
preferred_typeto the front of the catalog list if it exists.
- Moves a model of
Normalizing Model Catalog:
def _normalize_model_catalog(payload: dict) -> list[dict[str, str]]: # Logic for normalizing and prioritizing models based on payload data.- Processes input
payloadto create a normalized model catalog, handling cases where models are specified by type or name.
- Processes input
Fetching Model Catalog:
def get_model_catalog() -> list[dict[str, str]]: global _model_catalog_cache if _model_catalog_cache is not None: return _model_catalog_cache # Logic to fetch model catalog either from cache or server.- Returns the cached model catalog if available; otherwise, attempts to retrieve it from a server using an API token.
Getting Model Names:
def get_models_names() -> list[str]: return [model["type"] for model in get_model_catalog()]- Extracts and returns the types of all models in the catalog.
Model Enum Items Retrieval:
def get_model_enum_items(_self, _context) -> list[tuple[str, str, str]]: global _model_enum_items_cache # Logic to populate cache with model enum items.- Provides a tuple of
(type, name, description)for each model in the catalog.
- Provides a tuple of
Default Model Type Retrieval:
def get_default_model_type() -> str: catalog = get_model_catalog() if catalog: return catalog[0]["type"] return Config.DEFAULT_MODELS[0]- Returns the type of the first model in the catalog or defaults to the first model listed in
Config.DEFAULT_MODELS.
- Returns the type of the first model in the catalog or defaults to the first model listed in
Resolving Model Type:
def resolve_model_type(model_type: str) -> str: model_names = get_models_names() if model_type and model_type in model_names: return model_type return get_default_model_type()- Validates a requested
model_typeagainst available models; returns it if valid, otherwise defaults to the system’s default model type.
- Validates a requested
Summary
This script provides a comprehensive framework for managing model catalogs within an application. It includes caching mechanisms to reduce redundant API calls, logging for operational insights, and functions to normalize and prioritize model data based on configuration settings and user requests. The use of global variables for caching suggests that this module is designed for scenarios where state persistence across function calls is beneficial.
hi
Hello! How may I assist you today?