48 lines
1.3 KiB
Python
48 lines
1.3 KiB
Python
"""Shared utilities for VoxCPM nodes.
|
|
|
|
This module contains utility functions shared between voxcpm_nodes.py and voxcpm2_nodes.py
|
|
to avoid circular imports.
|
|
"""
|
|
|
|
import torch
|
|
|
|
# Global cache for model patchers (shared across all nodes)
|
|
VOXCPM_PATCHER_CACHE = {}
|
|
|
|
# Device type constants re-exported for convenience
|
|
# New code should import directly from modules.device_utils
|
|
from .device_utils import (
|
|
DEVICE_CPU,
|
|
DEVICE_CUDA,
|
|
DEVICE_MPS,
|
|
)
|
|
|
|
|
|
def set_seed(seed: int):
|
|
"""Set random seed for reproducibility.
|
|
|
|
Args:
|
|
seed: Seed value. Use -1 for random seed generation.
|
|
"""
|
|
if seed < 0:
|
|
# Use Python's random to generate a valid seed within torch's range
|
|
import random
|
|
seed = random.randint(0, 2**31 - 1) # Use 32-bit range for compatibility
|
|
torch.manual_seed(seed)
|
|
if torch.cuda.is_available():
|
|
torch.cuda.manual_seed_all(seed)
|
|
|
|
|
|
def is_voxcpm2_model(model_name: str, model_configs: dict) -> bool:
|
|
"""Check if the model is a VoxCPM2 variant.
|
|
|
|
Args:
|
|
model_name: Name of the model to check
|
|
model_configs: Dictionary of model configurations
|
|
|
|
Returns:
|
|
True if the model is VoxCPM2, False otherwise
|
|
"""
|
|
config = model_configs.get(model_name, {})
|
|
return config.get("architecture", "voxcpm") == "voxcpm2"
|