mirror of
https://github.com/hansjone/oclaw.git
synced 2026-10-09 03:30:48 +08:00
Prefer hetero targets batch for multi-NE CLI instead of one-NE loops.
Co-authored-by: Cursor <cursoragent@cursor.com>
This commit is contained in:
parent
42092423fb
commit
25d09d78ce
8 changed files with 63 additions and 20 deletions
|
|
@ -134,22 +134,27 @@ def budget_block_payload(
|
|||
code = "cli_fail_budget_exceeded"
|
||||
hint = (
|
||||
f"execManagedNe already failed {fail_used}/{fail_budget} times this turn. "
|
||||
"Stop one-NE loops; use one execManagedNe(ne_ids|ume_ne_ids=..., commands=...) batch "
|
||||
"or summarize reachable failures — do not keep probing."
|
||||
"Stop one-NE loops; use ONE execManagedNe batch: "
|
||||
"ne_ids|ume_ne_ids + shared commands, or targets=[{ume_ne_id, commands},…] when commands differ — "
|
||||
"or summarize reachable failures; do not keep probing."
|
||||
if en
|
||||
else f"本轮 execManagedNe 已失败 {fail_used}/{fail_budget} 次。"
|
||||
"停止单台循环;改用一次 ne_ids/ume_ne_ids 批量,或汇总可达性失败,勿继续盲探。"
|
||||
"停止单台循环;改用一次 batch:"
|
||||
"同命令用 ne_ids/ume_ne_ids,每台命令不同用 targets=[{ume_ne_id, commands},…];"
|
||||
"或汇总可达性失败,勿继续盲探。"
|
||||
)
|
||||
err = "cli_fail_budget_exceeded"
|
||||
else:
|
||||
code = "cli_call_budget_exceeded"
|
||||
hint = (
|
||||
f"Single-NE execManagedNe budget exhausted ({single_used}/{single_budget} this turn). "
|
||||
"For more NEs call ONE execManagedNe with ne_ids[] or ume_ne_ids[] (shared commands). "
|
||||
"Do not loop one-NE execManagedNe."
|
||||
"For more NEs call ONE execManagedNe batch: "
|
||||
"ne_ids[]/ume_ne_ids[] + shared commands, OR targets=[{ume_ne_id|ne_id, commands:[…]}, …] "
|
||||
"when each NE needs different CLI. Do not loop one-NE execManagedNe."
|
||||
if en
|
||||
else f"单台 execManagedNe 预算已用尽(本轮 {single_used}/{single_budget})。"
|
||||
"更多网元请一次传入 ne_ids[] / ume_ne_ids[] 批量执行,禁止逐台循环。"
|
||||
"更多网元请一次 batch:同命令用 ne_ids[]/ume_ne_ids[];"
|
||||
"每台命令不同用 targets=[{ume_ne_id|ne_id, commands:[…]}, …]。禁止逐台循环。"
|
||||
)
|
||||
err = "cli_call_budget_exceeded"
|
||||
return {
|
||||
|
|
@ -164,6 +169,14 @@ def budget_block_payload(
|
|||
"read_timeout_sec": 90,
|
||||
"concurrency": 4,
|
||||
},
|
||||
"example_hetero_targets": {
|
||||
"targets": [
|
||||
{"ume_ne_id": "<huawei-id>", "commands": ["display optical-module brief"]},
|
||||
{"ume_ne_id": "<cisco-id>", "commands": ["show interface transceiver"]},
|
||||
],
|
||||
"read_timeout_sec": 90,
|
||||
"concurrency": 4,
|
||||
},
|
||||
"single_used": int(single_used),
|
||||
"single_budget": int(single_budget),
|
||||
"fail_used": int(fail_used),
|
||||
|
|
|
|||
|
|
@ -436,13 +436,14 @@ def _batch_cli_constraint(*, lang: str) -> str:
|
|||
is_en = str(lang or "").lower().startswith("en")
|
||||
if is_en:
|
||||
return (
|
||||
"Multi-NE CLI default: one execManagedNe with ne_ids[] or ume_ne_ids[] "
|
||||
"(or targets[]) + shared commands (server concurrent batch). "
|
||||
"Do not loop one-NE execManagedNe for the same show commands. Cap to top ~5–20."
|
||||
"Multi-NE CLI batch-first: one execManagedNe — same show → ne_ids[]/ume_ne_ids[] + shared commands; "
|
||||
"different CLI per NE → targets=[{ume_ne_id|ne_id, commands:[…]}, …] (server concurrent). "
|
||||
"Do not loop one-NE execManagedNe. Cap to top ~5–20."
|
||||
)
|
||||
return (
|
||||
"多台 CLI 默认:一次 execManagedNe 传 ne_ids[] / ume_ne_ids[](或 targets[])+ 共享 commands"
|
||||
"(服务端并发 batch)。禁止对同一 show 命令逐台循环。建议最多 top 5–20 台。"
|
||||
"多台 CLI 必须 batch-first、一次调用:同命令用 ne_ids[]/ume_ne_ids[] + 共享 commands;"
|
||||
"每台命令不同用 targets=[{ume_ne_id|ne_id, commands:[…]}, …](服务端并发)。"
|
||||
"禁止逐台循环。建议最多 top 5–20 台。"
|
||||
)
|
||||
|
||||
|
||||
|
|
|
|||
|
|
@ -63,7 +63,7 @@ Hard preferences:
|
|||
- Spreadsheet delivery: `ume_alarm_xlsx_report` or `write_xlsx(deliverable=true)` — never claim a file was sent without deliverable marking.
|
||||
- **Field default is English**: WhatsApp channel dispatch defaults to `lang=en`; user-visible replies must contain **zero CJK**. Translate Chinese tool fields before display.
|
||||
- Group chats default to **per-speaker session isolation** (members do not share dialogue memory within the same group).
|
||||
- Call `listCliTargets` at most once per session and reuse ids; for many NEs with the same show commands use one `execManagedNe(ne_ids|ume_ne_ids=..., commands=...)` (server concurrency) — do not loop one-NE calls; default `read_timeout_sec=60` — on timeout raise it, no blind retries.
|
||||
- Call `listCliTargets` at most once per session and reuse ids. Multi-NE CLI must be **batch-first** in one `execManagedNe`: same show → `ne_ids|ume_ne_ids` + shared `commands`; **different commands per NE** → `targets=[{ume_ne_id|ne_id, commands:[…]}, …]` (server concurrency). Do not loop one-NE calls. Default `read_timeout_sec=60` — on timeout raise it, no blind retries.
|
||||
- `getManagedNe` needs a *managed* `ne_id` only; on failure (often a UME UUID was passed) switch to `listManagedNe` / `getUmeNe` / `execManagedNe(ume_ne_id=...)` — no blind retries.
|
||||
- Replies like `YES` / `confirm` / `继续` / `please continue`: continue the previous unfinished task — do **not** re-ask for confirmation or restart the query.
|
||||
- On `tool_invalid_arguments`, fix args using the returned `example`; on timeout hints, raise `read_timeout_sec` or shrink commands.
|
||||
|
|
|
|||
|
|
@ -54,7 +54,7 @@
|
|||
- 用户要表格/Excel:`ume_alarm_xlsx_report` 或 `write_xlsx(deliverable=true)`;禁止只写文件不投递。
|
||||
- **现场默认英文**:WhatsApp 渠道默认 `lang=en`;英文会话回复不得含汉字;工具中文字段先翻译再展示。
|
||||
- 群聊默认按**发言人隔离会话**(同群不同人互不串上下文);勿假设「群共享一个对话记忆」。
|
||||
- `listCliTargets` 每会话最多查一次并复用 id;多台同命令用 `execManagedNe(ne_ids|ume_ne_ids=..., commands=...)` 一批并发,勿逐台循环;超时调 `read_timeout_sec`(默认 60),禁止盲重试。
|
||||
- `listCliTargets` 每会话最多查一次并复用 id。多台 CLI 必须 **batch-first、一次调用**:同命令用 `ne_ids|ume_ne_ids` + 共享 `commands`;**每台命令不同**用 `targets=[{ume_ne_id|ne_id, commands:[…]}, …]`(服务端并发)。禁止逐台循环。超时调 `read_timeout_sec`(默认 60),禁止盲重试。
|
||||
- `getManagedNe` 仅用纳管 `ne_id`;失败(常见:把 UME UUID 当 ne_id)→ `listManagedNe` / `getUmeNe` / `execManagedNe(ume_ne_id=...)`,勿盲重试。
|
||||
- 用户回复 `YES` / `confirm` / `确认` / `可以` / `继续` / `please continue`:直接承接上一未完成任务继续执行,**不要**再问一遍确认或重开查询。
|
||||
- 工具返回 `tool_invalid_arguments` 时按返回的 `example` 修正参数;返回超时 hint 时提高 `read_timeout_sec` 或减命令,禁止相同参数重试。
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue