pi-multi-viewers 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +2 -0
- package/meeting_engine.py +4 -1
- package/meeting_fs.py +6 -2
- package/mv_cli.py +4 -1
- package/observability.py +1 -1
- package/package.json +1 -1
- package/start_discussion.py +3 -2
package/README.md
CHANGED
|
@@ -94,6 +94,8 @@ ls viewers/
|
|
|
94
94
|
scripts/mv.sh --prepare "<主题>" # spec = question.md(+background.md)
|
|
95
95
|
scripts/mv.sh --start <spec目录> # 启动(自动挂载主 session;默认 budget 模式)
|
|
96
96
|
# 可选:--fork-mode compaction|budget|full(见上表;一般不调)
|
|
97
|
+
# 可选:--max-meeting 15 --max-rr 7 --stall-timeout 600
|
|
98
|
+
# (配额:建环境时固化进 protocol.json,之后不可改;meeting 配额是"每 agent")
|
|
97
99
|
# 可选:--extension-policy mc-tools|none|all(默认 mc-tools = agents 带 MC 的只读检索工具
|
|
98
100
|
# ctx_search;none = 零扩展、零依赖;all = 走 pi 默认发现。缺 MC 时 mc-tools 可见降级)
|
|
99
101
|
# 高级:--agents "a,b" 起一次性视角(不建 viewers/ 时用;prompt 入口不传它)
|
package/meeting_engine.py
CHANGED
|
@@ -36,6 +36,7 @@ from meeting_fs import (
|
|
|
36
36
|
read_protocol, cat_batch, remove_message, write_text, file_size,
|
|
37
37
|
bare_of_base, bare_of_workdir, log,
|
|
38
38
|
RESULT_MD, RESULT_MD_MIN_BYTES, DEFAULT_STALL_TIMEOUT,
|
|
39
|
+
DEFAULT_MAX_MEETING, DEFAULT_MAX_RR,
|
|
39
40
|
)
|
|
40
41
|
from meeting_core import (
|
|
41
42
|
meeting_speak_count as core_meeting_speak_count,
|
|
@@ -503,7 +504,9 @@ def _commit_result_md(workdir, agent, subject):
|
|
|
503
504
|
log(agent, "result.md 无改动——跳过 commit(幂等)")
|
|
504
505
|
|
|
505
506
|
|
|
506
|
-
def agent_loop(workdir, agent, responder,
|
|
507
|
+
def agent_loop(workdir, agent, responder,
|
|
508
|
+
max_meeting=DEFAULT_MAX_MEETING,
|
|
509
|
+
max_rr=DEFAULT_MAX_RR,
|
|
507
510
|
poll_interval=POLL_INTERVAL,
|
|
508
511
|
stall_timeout=DEFAULT_STALL_TIMEOUT):
|
|
509
512
|
"""主状态机(v2)。responder 注入:响应一轮并返回是否产出。
|
package/meeting_fs.py
CHANGED
|
@@ -47,8 +47,12 @@ def result_path(base):
|
|
|
47
47
|
"""
|
|
48
48
|
return f"{base}-{RESULT_MD}"
|
|
49
49
|
|
|
50
|
-
#
|
|
51
|
-
#
|
|
50
|
+
# 协议参数默认值(gen_protocol 固化进 protocol.json)——**唯一声明点**:
|
|
51
|
+
# CLI default、engine 签名默认、observability 的兜底读取都引用这里
|
|
52
|
+
# (此前 10/7 在三处各写一遍,改一处不改另一处就会漂移)。
|
|
53
|
+
DEFAULT_MAX_MEETING = 15 # meeting 阶段**每 agent** 发言配额
|
|
54
|
+
DEFAULT_MAX_RR = 7 # RR 阶段轮次配额
|
|
55
|
+
# 无进展超时兜底(秒)——同上(engine/fake_agent 的签名默认与 CLI default 同源)。
|
|
52
56
|
DEFAULT_STALL_TIMEOUT = 600
|
|
53
57
|
|
|
54
58
|
# thinking 档位缺省值——**唯一声明点**:models.md 的 variant 槽(缺省)
|
package/mv_cli.py
CHANGED
|
@@ -45,6 +45,8 @@ USAGE = f"""用法:
|
|
|
45
45
|
{PROG} --prepare "<问题>" [--background "<背景>"] [--agents "a,b,c"|4]
|
|
46
46
|
{PROG} --start <spec目录> [--fork-mode compaction|budget|full]
|
|
47
47
|
{PROG} --start <spec目录> [--extension-policy none|mc-tools|all]
|
|
48
|
+
{PROG} --start <spec目录> [--max-meeting N] [--max-rr N] [--stall-timeout S]
|
|
49
|
+
# 配额:建环境时固化进 protocol.json(默认 15 / 7 / 600)
|
|
48
50
|
{PROG} --status [dir]
|
|
49
51
|
{PROG} --report [dir]
|
|
50
52
|
{PROG} --wait [dir]
|
|
@@ -57,7 +59,8 @@ USAGE = f"""用法:
|
|
|
57
59
|
mv-<PI_SESSION_ID>-* 最新;无匹配则报错要求显式传目录)
|
|
58
60
|
|
|
59
61
|
默认参数:
|
|
60
|
-
agents=a,b,c max-meeting=
|
|
62
|
+
agents=a,b,c max-meeting=15 max-rr=7 # 默认值的权威在 python argparse;
|
|
63
|
+
# 配额可在 --start 时传(建环境时固化,运行中不可改)
|
|
61
64
|
|
|
62
65
|
--agents: 逗号分隔名称列表(如 "x,y")或纯数字(如 4 → 生成 a..d);
|
|
63
66
|
human 是保留名,不能作为参与者
|
package/observability.py
CHANGED
|
@@ -284,7 +284,7 @@ def build_report(base):
|
|
|
284
284
|
# msgs 由上方流程段一次读取提供(同一读取派生四段)。
|
|
285
285
|
lasts = {a: (msgs[a][-1] if msgs[a] else None) for a in agents}
|
|
286
286
|
types = {a: (lasts[a].get("type") if lasts[a] else None) for a in agents}
|
|
287
|
-
quota_meeting = proto.get("maxMeetingRounds",
|
|
287
|
+
quota_meeting = proto.get("maxMeetingRounds", meeting_fs.DEFAULT_MAX_MEETING)
|
|
288
288
|
quota_rr = proto.get("maxRRRounds", 7)
|
|
289
289
|
out.append("配额:meeting " + "、".join(
|
|
290
290
|
f"{a} {meeting_core.meeting_speak_count(msgs, a)}/{quota_meeting}"
|
package/package.json
CHANGED
package/start_discussion.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
python3 start_discussion.py --dir mymeet --topic "主题" --agents a,b \
|
|
6
6
|
[--stances '{"a": "立场1", "b": "立场2"}'] [--start] \
|
|
7
7
|
[--extension-policy none|mc-tools|all] \
|
|
8
|
-
[--models '{"a": "provider/model"}'] [--max-meeting
|
|
8
|
+
[--models '{"a": "provider/model"}'] [--max-meeting 15] [--max-rr 7]
|
|
9
9
|
|
|
10
10
|
复杂内容用 spec 规格目录(设计 16,与 CLI 内容参数互斥):
|
|
11
11
|
1. 生成骨架: python3 start_discussion.py --spec-gen myspec --agents a,b,c
|
|
@@ -532,7 +532,8 @@ def main():
|
|
|
532
532
|
parser.add_argument("--questions", default=None, help="待回答问题(|分隔,对齐 RR)")
|
|
533
533
|
parser.add_argument("--models", default=None, help='JSON: {"a": "provider/model"}')
|
|
534
534
|
parser.add_argument("--result-writer", default=None, help="resultWriter(默认最后一位参与者)")
|
|
535
|
-
parser.add_argument("--max-meeting", type=int, default=
|
|
535
|
+
parser.add_argument("--max-meeting", type=int, default=meeting_fs.DEFAULT_MAX_MEETING,
|
|
536
|
+
help="meeting 阶段发言配额(每 agent)")
|
|
536
537
|
parser.add_argument("--max-rr", type=int, default=7, help="RR 阶段轮次配额(starter)")
|
|
537
538
|
parser.add_argument("--stall-timeout", type=int,
|
|
538
539
|
default=meeting_fs.DEFAULT_STALL_TIMEOUT,
|