Source code for promapp.ai_utils.utils

'''
Utility functions for discovering and managing AI utility functions
'''

import os
import importlib
import inspect
from pathlib import Path


[docs] def discover_utility_functions(): """ Discover all available utility functions in the ai_utils directory. Returns: list: List of tuples (function_path, display_name) for use in model choices """ utility_functions = [] ai_utils_dir = Path(__file__).parent # Iterate through all Python files in ai_utils directory for file_path in ai_utils_dir.glob('*.py'): # Skip __init__.py and utils.py itself if file_path.name in ['__init__.py', 'utils.py']: continue module_name = file_path.stem try: # Import the module module = importlib.import_module(f'promapp.ai_utils.{module_name}') # Find all callable functions in the module for name, obj in inspect.getmembers(module, inspect.isfunction): # Skip private functions if name.startswith('_'): continue # Build the full import path function_path = f'promapp.ai_utils.{module_name}.{name}' # Create a display name from the function name display_name = f'{module_name}.{name}' # Get docstring first line if available if obj.__doc__: first_line = obj.__doc__.strip().split('\n')[0] display_name = f'{display_name} - {first_line}' utility_functions.append((function_path, display_name)) except Exception: # Skip modules that can't be imported continue return sorted(utility_functions, key=lambda x: x[0])
[docs] def get_utility_function_choices(): """ Get choices for the utility_function_path field. Returns: list: List of tuples (value, label) for Django field choices """ return discover_utility_functions()