SmolFactory / config /__init__.py
Tonic's picture
fixes circular import
6995e18
"""
Configuration package for SmolLM3 and GPT-OSS training
"""
try:
from .train_smollm3 import SmolLM3Config, get_config as get_base_config
except Exception:
SmolLM3Config = None # type: ignore
def get_base_config(config_path: str): # type: ignore
raise ImportError("train_smollm3 not available")
try:
from .train_smollm3_openhermes_fr import SmolLM3ConfigOpenHermesFR, get_config as get_openhermes_fr_config
except Exception:
SmolLM3ConfigOpenHermesFR = None # type: ignore
get_openhermes_fr_config = None # type: ignore
try:
from .train_smollm3_openhermes_fr_a100_large import SmolLM3ConfigOpenHermesFRA100Large, get_config as get_a100_large_config
except Exception:
SmolLM3ConfigOpenHermesFRA100Large = None # type: ignore
get_a100_large_config = None # type: ignore
try:
from .train_smollm3_openhermes_fr_a100_multiple_passes import SmolLM3ConfigOpenHermesFRMultiplePasses, get_config as get_multiple_passes_config
except Exception:
SmolLM3ConfigOpenHermesFRMultiplePasses = None # type: ignore
get_multiple_passes_config = None # type: ignore
try:
from .train_smollm3_openhermes_fr_a100_max_performance import SmolLM3ConfigOpenHermesFRMaxPerformance, get_config as get_max_performance_config
except Exception:
SmolLM3ConfigOpenHermesFRMaxPerformance = None # type: ignore
get_max_performance_config = None # type: ignore
# GPT-OSS configurations
try:
from .train_gpt_oss_basic import GPTOSSBasicConfig, get_config as get_gpt_oss_basic_config
except Exception:
GPTOSSBasicConfig = None # type: ignore
get_gpt_oss_basic_config = None # type: ignore
try:
from .train_gpt_oss_multilingual_reasoning import (
GPTOSSMultilingualReasoningConfig,
get_config as get_gpt_oss_multilingual_reasoning_config,
)
except Exception:
GPTOSSMultilingualReasoningConfig = None # type: ignore
get_gpt_oss_multilingual_reasoning_config = None # type: ignore
try:
from .train_gpt_oss_h100_optimized import (
GPTOSSH100OptimizedConfig,
get_config as get_gpt_oss_h100_optimized_config,
)
except Exception:
GPTOSSH100OptimizedConfig = None # type: ignore
get_gpt_oss_h100_optimized_config = None # type: ignore
try:
from .train_gpt_oss_memory_optimized import (
GPTOSSMemoryOptimizedConfig,
get_config as get_gpt_oss_memory_optimized_config,
)
except Exception:
GPTOSSMemoryOptimizedConfig = None # type: ignore
get_gpt_oss_memory_optimized_config = None # type: ignore
from .train_gpt_oss_custom import GPTOSSEnhancedCustomConfig
# Pre-baked GPT-OSS configs exposing a `config` instance
from .train_gpt_oss_openhermes_fr import config as gpt_oss_openhermes_fr_config
from .train_gpt_oss_openhermes_fr_memory_optimized import (
config as gpt_oss_openhermes_fr_memory_optimized_config,
)
from .train_gpt_oss_medical_o1_sft import config as gpt_oss_medical_o1_sft_config
# Generic get_config function that can handle different config types
def get_config(config_path: str):
"""Generic get_config function that tries different config types"""
import os
import importlib.util as _importlib
if not os.path.exists(config_path):
# Fall back to base config accessor if available
return get_base_config(config_path) if get_base_config else None
# Try to determine config type based on filename
if "a100_large" in config_path:
return get_a100_large_config(config_path) if get_a100_large_config else None
elif "a100_multiple_passes" in config_path:
return get_multiple_passes_config(config_path) if get_multiple_passes_config else None
elif "a100_max_performance" in config_path:
return get_max_performance_config(config_path) if get_max_performance_config else None
elif "openhermes_fr" in config_path:
return get_openhermes_fr_config(config_path) if get_openhermes_fr_config else None
elif "gpt_oss" in config_path:
# Load GPT-OSS style config module dynamically and return its `config` instance if present
try:
spec = _importlib.spec_from_file_location("config_module", config_path)
module = _importlib.module_from_spec(spec)
assert spec is not None and spec.loader is not None
spec.loader.exec_module(module) # type: ignore
if hasattr(module, "config"):
return getattr(module, "config")
except Exception:
# Fallback to base config if dynamic load fails
pass
return get_base_config(config_path) if get_base_config else None
else:
return get_base_config(config_path) if get_base_config else None
__all__ = [
'SmolLM3Config',
'SmolLM3ConfigOpenHermesFR',
'SmolLM3ConfigOpenHermesFRA100Large',
'SmolLM3ConfigOpenHermesFRMultiplePasses',
'SmolLM3ConfigOpenHermesFRMaxPerformance',
# GPT-OSS classes and accessors
'GPTOSSBasicConfig',
'GPTOSSMultilingualReasoningConfig',
'GPTOSSH100OptimizedConfig',
'GPTOSSMemoryOptimizedConfig',
'GPTOSSEnhancedCustomConfig',
'get_gpt_oss_basic_config',
'get_gpt_oss_multilingual_reasoning_config',
'get_gpt_oss_h100_optimized_config',
'get_gpt_oss_memory_optimized_config',
# Pre-baked GPT-OSS config instances
'gpt_oss_openhermes_fr_config',
'gpt_oss_openhermes_fr_memory_optimized_config',
'gpt_oss_medical_o1_sft_config',
'get_config',
'get_base_config',
'get_openhermes_fr_config',
'get_a100_large_config',
'get_multiple_passes_config',
'get_max_performance_config',
]