Spaces:
Build error
Build error
import copy | |
from typing import TYPE_CHECKING | |
from openhands.core.config import LLMConfig | |
from openhands.core.logger import openhands_logger as logger | |
if TYPE_CHECKING: | |
from litellm import ChatCompletionToolParam | |
def check_tools( | |
tools: list['ChatCompletionToolParam'], llm_config: LLMConfig | |
) -> list['ChatCompletionToolParam']: | |
"""Checks and modifies tools for compatibility with the current LLM.""" | |
# Special handling for Gemini models which don't support default fields and have limited format support | |
if 'gemini' in llm_config.model.lower(): | |
logger.info( | |
f'Removing default fields and unsupported formats from tools for Gemini model {llm_config.model} ' | |
"since Gemini models have limited format support (only 'enum' and 'date-time' for STRING types)." | |
) | |
# prevent mutation of input tools | |
checked_tools = copy.deepcopy(tools) | |
# Strip off default fields and unsupported formats that cause errors with gemini-preview | |
for tool in checked_tools: | |
if 'function' in tool and 'parameters' in tool['function']: | |
if 'properties' in tool['function']['parameters']: | |
for prop_name, prop in tool['function']['parameters'][ | |
'properties' | |
].items(): | |
# Remove default fields | |
if 'default' in prop: | |
del prop['default'] | |
# Remove format fields for STRING type parameters if the format is unsupported | |
# Gemini only supports 'enum' and 'date-time' formats for STRING type | |
if prop.get('type') == 'string' and 'format' in prop: | |
supported_formats = ['enum', 'date-time'] | |
if prop['format'] not in supported_formats: | |
logger.info( | |
f'Removing unsupported format "{prop["format"]}" for STRING parameter "{prop_name}"' | |
) | |
del prop['format'] | |
return checked_tools | |
return tools | |