Channel lazy load: discover_enabled() only imports enabled channel modules instead of all 18 modules with heavy SDKs (telegram, discord, slack, etc). discover_all() now delegates to discover_enabled(). Lazy OpenAI client: defer AsyncOpenAI() + httpx construction to _ensure_client() with asyncio.Lock double-checked locking. openai and httpx imports moved from module-level into _ensure_client(). Minor: lazy Nanobot/RunResult and CronService exports via __getattr__. Benchmark: 6910ms → 460ms (-93.3%)
19 lines
519 B
Python
19 lines
519 B
Python
"""Cron service for scheduled agent tasks."""
|
|
|
|
from nanobot.cron.types import CronJob, CronSchedule
|
|
|
|
__all__ = ["CronService", "CronJob", "CronSchedule"]
|
|
|
|
_LAZY = {"CronService": ".service"}
|
|
|
|
|
|
def __getattr__(name: str):
|
|
module_path = _LAZY.get(name)
|
|
if module_path is None:
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
from importlib import import_module
|
|
mod = import_module(module_path, __name__)
|
|
val = getattr(mod, name)
|
|
globals()[name] = val
|
|
return val
|