mirror of
https://github.com/RockChinQ/QChatGPT.git
synced 2024-11-16 03:32:33 +08:00
74 lines
2.0 KiB
Python
74 lines
2.0 KiB
Python
from __future__ import annotations
|
|
|
|
import pydantic
|
|
|
|
from ..core import app
|
|
from . import stage
|
|
from .resprule import resprule
|
|
from .bansess import bansess
|
|
from .cntfilter import cntfilter
|
|
from .process import process
|
|
from .longtext import longtext
|
|
from .respback import respback
|
|
from .wrapper import wrapper
|
|
from .preproc import preproc
|
|
from .ratelimit import ratelimit
|
|
from .msgtrun import msgtrun
|
|
|
|
|
|
# 请求处理阶段顺序
|
|
stage_order = [
|
|
"GroupRespondRuleCheckStage", # 群响应规则检查
|
|
"BanSessionCheckStage", # 封禁会话检查
|
|
"PreContentFilterStage", # 内容过滤前置阶段
|
|
"PreProcessor", # 预处理器
|
|
"ConversationMessageTruncator", # 会话消息截断器
|
|
"RequireRateLimitOccupancy", # 请求速率限制占用
|
|
"MessageProcessor", # 处理器
|
|
"ReleaseRateLimitOccupancy", # 释放速率限制占用
|
|
"PostContentFilterStage", # 内容过滤后置阶段
|
|
"ResponseWrapper", # 响应包装器
|
|
"LongTextProcessStage", # 长文本处理
|
|
"SendResponseBackStage", # 发送响应
|
|
]
|
|
|
|
|
|
class StageInstContainer():
|
|
"""阶段实例容器
|
|
"""
|
|
|
|
inst_name: str
|
|
|
|
inst: stage.PipelineStage
|
|
|
|
def __init__(self, inst_name: str, inst: stage.PipelineStage):
|
|
self.inst_name = inst_name
|
|
self.inst = inst
|
|
|
|
|
|
class StageManager:
|
|
ap: app.Application
|
|
|
|
stage_containers: list[StageInstContainer]
|
|
|
|
def __init__(self, ap: app.Application):
|
|
self.ap = ap
|
|
|
|
self.stage_containers = []
|
|
|
|
async def initialize(self):
|
|
"""初始化
|
|
"""
|
|
|
|
for name, cls in stage._stage_classes.items():
|
|
self.stage_containers.append(StageInstContainer(
|
|
inst_name=name,
|
|
inst=cls(self.ap)
|
|
))
|
|
|
|
for stage_containers in self.stage_containers:
|
|
await stage_containers.inst.initialize()
|
|
|
|
# 按照 stage_order 排序
|
|
self.stage_containers.sort(key=lambda x: stage_order.index(x.inst_name))
|