Plugin Resource Utilities

Utilities for analyzing plugin configurations and resource requirements

Plugin Type Detection

Helper functions to determine if a plugin is local vs API-based.


source

is_local_plugin

 is_local_plugin (plugin_meta)

Check if a plugin is local (vs API-based).

Type Details
plugin_meta Plugin metadata with config_schema attribute
Returns bool True if plugin is local, False if API-based

Example plugin metadata structure:

# Local plugin (works with any metadata object with config_schema)
local_plugin = PluginMetadata(
    name="whisper",
    config_schema={
        "properties": {
            "model_id": {"type": "string"},
            "device": {"type": "string"}
        }
    }
)

# API-based plugin  
api_plugin = PluginMetadata(
    name="openai-whisper",
    config_schema={
        "properties": {
            "api_key": {"type": "string"},  # Presence of api_key indicates API-based
            "model": {"type": "string"}
        }
    }
)

Compatibility: These utilities are compatible with: - PluginMetadata from cjm-fasthtml-plugins - SimplePluginRegistry from cjm-fasthtml-settings - UnifiedPluginRegistry from cjm-fasthtml-plugins - Any custom object with a config_schema attribute

GPU Detection

Helper functions to determine if a plugin will use GPU resources.


source

uses_gpu_device

 uses_gpu_device (plugin_config:Dict[str,Any])

Check if a plugin is configured to use GPU.

Type Details
plugin_config Dict The plugin’s current configuration
Returns bool True if plugin will use GPU, False otherwise
# Example: Check various device configurations
configs = [
    {"device": "cuda"},
    {"device": "cuda:0"},
    {"device": "cpu"},
    {"device": "auto"},
    {"device": "mps"},
    {}  # No device specified
]

for config in configs:
    device = config.get("device", "(not specified)")
    uses_gpu = uses_gpu_device(config)
    print(f"Device '{device}': GPU={uses_gpu}")
Device 'cuda': GPU=True
Device 'cuda:0': GPU=True
Device 'cpu': GPU=False
Device 'auto': GPU=True
Device 'mps': GPU=True
Device '(not specified)': GPU=False

Resource Identifier Extraction

Extract the plugin resource identifier (model ID, model path, etc.) from configuration.


source

get_plugin_resource_identifier

 get_plugin_resource_identifier (plugin_config:Dict[str,Any])

Extract the plugin resource identifier from plugin configuration. Checks common plugin resource configuration keys like ‘resource_id’, ‘model_id’, ‘model’, ‘model_name’, etc.

Type Details
plugin_config Dict The plugin’s configuration
Returns Optional Plugin resource identifier string, or None if not found
# Example: Extract resource identifiers from different configs
configs = [
    {"model_id": "whisper-large-v3", "device": "cuda"},
    {"model": "llama-3.1-8b", "device": "auto"},
    {"model_path": "/models/custom-model", "device": "cpu"},
    {"device": "cuda"}  # No resource ID
]

for config in configs:
    resource_id = get_plugin_resource_identifier(config)
    print(f"Config {config}: Resource ID = {resource_id}")
Config {'model_id': 'whisper-large-v3', 'device': 'cuda'}: Resource ID = whisper-large-v3
Config {'model': 'llama-3.1-8b', 'device': 'auto'}: Resource ID = llama-3.1-8b
Config {'model_path': '/models/custom-model', 'device': 'cpu'}: Resource ID = /models/custom-model
Config {'device': 'cuda'}: Resource ID = None

Resource Comparison

Compare two plugin configurations to determine if they use the same resource.


source

compare_plugin_resources

 compare_plugin_resources (config1:Dict[str,Any], config2:Dict[str,Any])

Compare two plugin configurations to see if they use the same plugin resource.

Type Details
config1 Dict First plugin configuration
config2 Dict Second plugin configuration
Returns bool True if both configs specify the same plugin resource, False otherwise
# Example: Compare configurations
config_a = {"model_id": "whisper-large-v3", "device": "cuda"}
config_b = {"model_id": "whisper-large-v3", "device": "cpu"}  # Same resource, different device
config_c = {"model_id": "whisper-medium", "device": "cuda"}  # Different resource

print(f"A vs B (same resource): {compare_plugin_resources(config_a, config_b)}")
print(f"A vs C (different resource): {compare_plugin_resources(config_a, config_c)}")
print(f"B vs C (different resource): {compare_plugin_resources(config_b, config_c)}")
A vs B (same resource): True
A vs C (different resource): False
B vs C (different resource): False

Combined Resource Requirements

Get comprehensive resource requirements for a plugin.


source

get_plugin_resource_requirements

 get_plugin_resource_requirements (plugin_id:str, plugin_registry,
                                   plugin_config:Optional[Dict[str,Any]]=N
                                   one)

Get resource requirements for a plugin.

Type Default Details
plugin_id str Unique plugin ID
plugin_registry Plugin registry instance with get_plugin, load_plugin_config methods
plugin_config Optional None Optional plugin configuration
Returns Dict Dictionary with resource requirement information (is_local, uses_gpu, plugin_resource, device)

This function is the main entry point for getting plugin resource information. It combines all the other utility functions to provide a complete picture of a plugin’s resource requirements.