2026-05-30 21:53:09 +08:00
|
|
|
_LAZY_IMPORTS = {
|
|
|
|
|
"AgentError": "yuxi.channel.domain.event",
|
|
|
|
|
"MessageBlocked": "yuxi.channel.domain.event",
|
|
|
|
|
"MessageReceived": "yuxi.channel.domain.event",
|
|
|
|
|
"MessageReplied": "yuxi.channel.domain.event",
|
|
|
|
|
"ABORT_CODE_TO_HTTP": "yuxi.channel.domain.exception",
|
|
|
|
|
"AgentCrashError": "yuxi.channel.domain.exception",
|
|
|
|
|
"ChannelError": "yuxi.channel.domain.exception",
|
|
|
|
|
"RecoverableError": "yuxi.channel.domain.exception",
|
|
|
|
|
"UnrecoverableError": "yuxi.channel.domain.exception",
|
|
|
|
|
"CallNext": "yuxi.channel.domain.middleware",
|
|
|
|
|
"Configurable": "yuxi.channel.domain.middleware",
|
|
|
|
|
"Middleware": "yuxi.channel.domain.middleware",
|
|
|
|
|
"Attachment": "yuxi.channel.domain.model",
|
|
|
|
|
"ChannelBinding": "yuxi.channel.domain.model",
|
|
|
|
|
"ChannelCapabilities": "yuxi.channel.domain.model",
|
|
|
|
|
"ChannelSession": "yuxi.channel.domain.model",
|
|
|
|
|
"ChannelType": "yuxi.channel.domain.model",
|
|
|
|
|
"DispatchResult": "yuxi.channel.domain.model",
|
|
|
|
|
"MessagePriority": "yuxi.channel.domain.model",
|
|
|
|
|
"MessageType": "yuxi.channel.domain.model",
|
|
|
|
|
"OutboxEntry": "yuxi.channel.domain.model",
|
|
|
|
|
"Peer": "yuxi.channel.domain.model",
|
|
|
|
|
"SendResult": "yuxi.channel.domain.model",
|
|
|
|
|
"StreamChatRequest": "yuxi.channel.domain.model",
|
|
|
|
|
"UnifiedMessage": "yuxi.channel.domain.model",
|
|
|
|
|
"AgentPort": "yuxi.channel.domain.port",
|
|
|
|
|
"BotLoopGuardPort": "yuxi.channel.domain.port",
|
|
|
|
|
"KeywordMatcherPort": "yuxi.channel.domain.port",
|
|
|
|
|
"CachePort": "yuxi.channel.domain.port",
|
|
|
|
|
"ChannelAdapterPort": "yuxi.channel.domain.port",
|
2026-05-31 17:38:33 +08:00
|
|
|
"ChannelRouteContributorPort": "yuxi.channel.domain.port",
|
2026-05-30 21:53:09 +08:00
|
|
|
"CircuitBreakerPort": "yuxi.channel.domain.port",
|
|
|
|
|
"ConfigReloadPort": "yuxi.channel.domain.port",
|
|
|
|
|
"ContentFilterPort": "yuxi.channel.domain.port",
|
|
|
|
|
"DomainEvent": "yuxi.channel.domain.port",
|
|
|
|
|
"EventPublisherPort": "yuxi.channel.domain.port",
|
|
|
|
|
"FilterResult": "yuxi.channel.domain.port",
|
|
|
|
|
"MetricsPort": "yuxi.channel.domain.port",
|
|
|
|
|
"QueuePort": "yuxi.channel.domain.port",
|
|
|
|
|
"RateLimitPort": "yuxi.channel.domain.port",
|
|
|
|
|
"SignatureVerifyPort": "yuxi.channel.domain.port",
|
|
|
|
|
"SsePushPort": "yuxi.channel.domain.port",
|
|
|
|
|
"WsConnectionPort": "yuxi.channel.domain.port",
|
|
|
|
|
"BindingRepositoryPort": "yuxi.channel.domain.repository",
|
|
|
|
|
"ChannelMessageData": "yuxi.channel.domain.repository",
|
|
|
|
|
"MessageLogData": "yuxi.channel.domain.repository",
|
|
|
|
|
"MessageLogQuery": "yuxi.channel.domain.repository",
|
|
|
|
|
"MessageLogRepositoryPort": "yuxi.channel.domain.repository",
|
|
|
|
|
"MessageRepositoryPort": "yuxi.channel.domain.repository",
|
|
|
|
|
"OutboxRepositoryPort": "yuxi.channel.domain.repository",
|
|
|
|
|
"SessionRepositoryPort": "yuxi.channel.domain.repository",
|
|
|
|
|
"MessageContext": "yuxi.channel.domain.service",
|
|
|
|
|
"Span": "yuxi.channel.domain.service",
|
|
|
|
|
"Pipeline": "yuxi.channel.domain.service",
|
|
|
|
|
"PipelineBuilder": "yuxi.channel.domain.service",
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __getattr__(name: str):
|
|
|
|
|
if name in _LAZY_IMPORTS:
|
|
|
|
|
module = __import__(_LAZY_IMPORTS[name], fromlist=[name])
|
|
|
|
|
return getattr(module, name)
|
|
|
|
|
raise AttributeError(f"module {__name__!r} has no attribute {name!r}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def __dir__():
|
|
|
|
|
return sorted(set(globals()) | set(_LAZY_IMPORTS.keys()))
|