import warnings import httpx with warnings.catch_warnings(): warnings.simplefilter('ignore') import litellm from openhands.core.config import LLMConfig, OpenHandsConfig from openhands.core.logger import openhands_logger as logger from openhands.llm import bedrock def get_supported_llm_models(config: OpenHandsConfig) -> list[str]: """Get all models supported by LiteLLM. This function combines models from litellm and Bedrock, removing any error-prone Bedrock models. Returns: list[str]: A sorted list of unique model names. """ litellm_model_list = litellm.model_list + list(litellm.model_cost.keys()) litellm_model_list_without_bedrock = bedrock.remove_error_modelId( litellm_model_list ) # TODO: for bedrock, this is using the default config llm_config: LLMConfig = config.get_llm_config() bedrock_model_list = [] if ( llm_config.aws_region_name and llm_config.aws_access_key_id and llm_config.aws_secret_access_key ): bedrock_model_list = bedrock.list_foundation_models( llm_config.aws_region_name, llm_config.aws_access_key_id.get_secret_value(), llm_config.aws_secret_access_key.get_secret_value(), ) model_list = litellm_model_list_without_bedrock + bedrock_model_list for llm_config in config.llms.values(): ollama_base_url = llm_config.ollama_base_url if llm_config.model.startswith('ollama'): if not ollama_base_url: ollama_base_url = llm_config.base_url if ollama_base_url: ollama_url = ollama_base_url.strip('/') + '/api/tags' try: ollama_models_list = httpx.get(ollama_url, timeout=3).json()['models'] # noqa: ASYNC100 for model in ollama_models_list: model_list.append('ollama/' + model['name']) break except httpx.HTTPError as e: logger.error(f'Error getting OLLAMA models: {e}') return list(sorted(set(model_list)))