feat: add runtime listen-only switch and API controls
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
Some checks failed
Pre-commit / run (ubuntu-latest) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_en (ubuntu-latest, 3.10) (push) Has been cancelled
Deploy Sphinx documentation to Pages / build_zh (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (macos-15, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (ubuntu-latest, 3.12) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.10) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.11) (push) Has been cancelled
Python Unittest Coverage / test (windows-latest, 3.12) (push) Has been cancelled
This commit is contained in:
@@ -20,6 +20,7 @@ from .logger import setup_logger
|
||||
from .observability import activity_event, build_trace_id
|
||||
from .orchestrator import Orchestrator
|
||||
from .rules import extract_image_urls, prefilter_message
|
||||
from .runtime_switch import is_listen_only
|
||||
|
||||
|
||||
class QingjianClient:
|
||||
@@ -214,6 +215,14 @@ class QingjianClient:
|
||||
return False
|
||||
|
||||
async def _handle_decision(self, data: dict, merged_msg: str, *, auto_quote: bool = False) -> None:
|
||||
if is_listen_only():
|
||||
activity_event(
|
||||
self.logger,
|
||||
"ai_reply_skipped",
|
||||
customer_id=data.get("from_id", "-"),
|
||||
reason="listen_only_mode",
|
||||
)
|
||||
return
|
||||
key = self._customer_key(data)
|
||||
trace_id = build_trace_id(data.get("acc_id", ""), data.get("from_id", ""), merged_msg)
|
||||
t0 = time.perf_counter()
|
||||
@@ -402,6 +411,15 @@ class QingjianClient:
|
||||
key = self._customer_key(patched)
|
||||
self._append_dialogue(key, "user", patched["msg"])
|
||||
|
||||
if is_listen_only():
|
||||
activity_event(
|
||||
self.logger,
|
||||
"ai_reply_skipped",
|
||||
customer_id=patched.get("from_id", "-"),
|
||||
reason="listen_only_mode",
|
||||
)
|
||||
return
|
||||
|
||||
# 硬编码:每个客户首条消息先快速回复“在的”
|
||||
if key not in self.first_msg_replied:
|
||||
await self.send_reply(patched, "在的")
|
||||
|
||||
Reference in New Issue
Block a user