mirror of
https://github.com/MemeMeow-Studio/MemeMeow.git
synced 2026-10-16 20:31:33 +08:00
59 lines
2.3 KiB
Python
59 lines
2.3 KiB
Python
"""Agent lane 的公共运行容量校验。
|
|
|
|
该模块位于 executor 公共快照中,后端和独立 executor 共用同一套容量语义。运行
|
|
并发只要求是正整数;全局、scope 和资源池之间的层级关系由调用方显式校验。Agent
|
|
队列不使用有限的背压容量作为拒绝门禁,具体部署资源由适配层和运行环境负责。
|
|
"""
|
|
|
|
from __future__ import annotations
|
|
|
|
from typing import Final
|
|
|
|
|
|
AGENT_BACKPRESSURE_DEFAULT: Final = 80
|
|
|
|
|
|
def validate_agent_backpressure(value: object) -> int:
|
|
"""校验旧 Agent 背压配置,供兼容读取使用。
|
|
|
|
该字段不再参与 Agent 运行并发或队列拒绝;保留校验函数是为了让旧部署和外部
|
|
调用方在迁移期间仍能读取其正整数配置,而不是把该值伪装成无限队列容量。
|
|
"""
|
|
if isinstance(value, bool) or not isinstance(value, int):
|
|
raise ValueError("agent_backpressure_invalid")
|
|
if value < 1:
|
|
raise ValueError("agent_backpressure_out_of_range")
|
|
return value
|
|
|
|
|
|
def validate_agent_concurrency(value: object, *, backpressure: object | None = None) -> int:
|
|
"""校验 Agent 运行并发并返回原始整数。
|
|
|
|
``backpressure`` 仅为旧调用方保留,不再参与校验;Agent 队列没有有限容量门禁。
|
|
需要表达 scope 或资源池不超过上层容量时,调用
|
|
:func:`validate_agent_concurrency_at_most`,避免误把队列预算当作运行上限。
|
|
"""
|
|
del backpressure
|
|
if isinstance(value, bool) or not isinstance(value, int) or value < 1:
|
|
raise ValueError("agent_concurrency_invalid")
|
|
return value
|
|
|
|
|
|
def validate_agent_concurrency_at_most(
|
|
value: object,
|
|
maximum: object,
|
|
*,
|
|
error_code: str = "agent_concurrency_exceeds_limit",
|
|
) -> int:
|
|
"""校验运行并发为正整数且不超过显式的上层容量。
|
|
|
|
``value`` 通常是 scope 或资源池容量,``maximum`` 是全局 Agent 或 lane 容量;
|
|
该关系只限制可运行任务数量,不限制 queued 任务数量。调用方可通过
|
|
``error_code`` 保持配置层和数据库层的稳定错误边界。
|
|
"""
|
|
candidate = validate_agent_concurrency(value)
|
|
ceiling = validate_agent_concurrency(maximum)
|
|
if candidate > ceiling:
|
|
raise ValueError(error_code)
|
|
return candidate
|