| """Utility functions for UI configuration management."""
|
| import logging
|
| from typing import Dict, Optional
|
|
|
| from ai_agent.utils.config import get_config, get_available_models_config
|
|
|
| log = logging.getLogger("ui.utils")
|
|
|
|
|
| def get_agent_model() -> Dict[str, Optional[str]]:
|
| """
|
| Get the default agent model configuration from config.yaml.
|
|
|
| Returns:
|
| Dictionary with 'name', 'base_url', and 'api_key_env' keys.
|
| Returns minimal default if config not available.
|
| """
|
| agent_model = get_config().agent_model
|
|
|
| return {
|
| "name": agent_model.name,
|
| "base_url": agent_model.base_url,
|
| "api_key_env": agent_model.api_key_env,
|
| }
|
|
|
|
|
| def get_available_models() -> Dict[str, Dict[str, Optional[str]]]:
|
| """
|
| Get available models from config.yaml for UI dropdown.
|
|
|
| Returns:
|
| Dictionary mapping display_name -> model config
|
| Returns minimal default if config not available.
|
| """
|
| available_models = get_available_models_config()
|
|
|
| model_configs = {}
|
| for model in available_models:
|
| display_name = model.get("display_name")
|
| if display_name:
|
| model_configs[display_name] = {
|
| "name": model.get("name"),
|
| "base_url": model.get("base_url"),
|
| "provider": model.get("provider", "Unknown"),
|
| "api_key_env": model.get("api_key_env", "OPENAI_API_KEY"),
|
| }
|
|
|
|
|
| if not model_configs:
|
| log.warning("No models found in config.yaml, using fallback")
|
| agent_model = get_agent_model()
|
| model_name = agent_model["name"]
|
| model_configs[model_name] = {
|
| "name": model_name,
|
| "base_url": agent_model["base_url"],
|
| "provider": "OpenAI",
|
| "api_key_env": agent_model["api_key_env"],
|
| }
|
|
|
| log.info(f"Loaded {len(model_configs)} models from config: {list(model_configs.keys())}")
|
| return model_configs
|
|
|
|
|
| def get_default_model_display_name() -> str:
|
| """
|
| Get the display name for the default agent model.
|
|
|
| Returns:
|
| Display name string that matches one of the available_models,
|
| or the agent_model name if not found in available_models.
|
| """
|
| agent_model = get_agent_model()
|
| agent_name = agent_model["name"]
|
| available = get_available_models()
|
|
|
|
|
| for display_name, config in available.items():
|
| if config["name"] == agent_name:
|
| return display_name
|
|
|
|
|
| log.warning(f"Agent model '{agent_name}' not found in available_models, using as-is")
|
| return agent_name
|
|
|