Spaces:
Sleeping
Sleeping
import json | |
import logging | |
from typing import Any, Callable, Dict, Optional | |
logger = logging.getLogger(__name__) | |
def call_function_by_name( | |
func_dict: Dict[str, Callable], | |
func_name: str, | |
*args, | |
json_serialize_result: bool = False, | |
**kwargs | |
) -> Any: | |
""" | |
Call a function by its name from a dictionary of functions. | |
Args: | |
func_dict (dict): Dictionary mapping function names to callables. | |
func_name (str): Name of the function to call. | |
*args: Positional arguments to pass to the function. | |
json_serialize_result (bool): If True, returns JSON string of the result. | |
**kwargs: Keyword arguments to pass to the function. | |
Returns: | |
Any: The function's return value or error message string. | |
""" | |
func = func_dict.get(func_name) | |
if func is None: | |
error_msg = f"Function '{func_name}' not found." | |
logger.error(error_msg) | |
return error_msg | |
try: | |
result = func(*args, **kwargs) | |
if json_serialize_result: | |
try: | |
return json.dumps(result) | |
except (TypeError, ValueError) as json_err: | |
logger.warning(f"JSON serialization failed: {json_err}") | |
# Return raw result if serialization fails | |
return result | |
return result | |
except Exception as e: | |
error_msg = f"Error calling '{func_name}': {str(e)}" | |
logger.exception(error_msg) | |
return error_msg | |