llama-models / app /function_caller.py
deniskiplimo816's picture
Upload 27 files
293ab16 verified
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