From 849119ee6ebf39962823da11c01ddd72a03ff0ae Mon Sep 17 00:00:00 2001 From: Spark Date: Wed, 4 Mar 2026 20:15:30 +0800 Subject: [PATCH 1/2] fix: replace print statements with proper logging in dingtalk_bot extension Replace all print() statements in _send_dingtalk_message method with ten_env.log_info() and ten_env.log_error() for proper logging. This ensures logs are handled consistently with the rest of the TEN framework extension logging pattern instead of going to stdout. --- .../dingtalk_bot_tool_python/extension.py | 28 +++++++++---------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python/extension.py b/ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python/extension.py index 3b77bf25fc..fef8141490 100644 --- a/ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python/extension.py +++ b/ai_agents/agents/ten_packages/extension/dingtalk_bot_tool_python/extension.py @@ -235,7 +235,7 @@ async def run_tool( ) result = self._send_dingtalk_message( - self.config.access_token, self.config.secret, content + ten_env, self.config.access_token, self.config.secret, content ) ten_env.log_info( f"[DingTalkBotExtension] DingTalk API response: {json.dumps(result, indent=2)}" @@ -270,26 +270,26 @@ async def run_tool( return None def _send_dingtalk_message( - self, access_token: str, secret: str, content: str + self, ten_env: AsyncTenEnv, access_token: str, secret: str, content: str ) -> dict: """ Sends a message to a DingTalk bot. """ - print("[DingTalkBotExtension._send_dingtalk_message] Starting...") - print( + ten_env.log_info("[DingTalkBotExtension._send_dingtalk_message] Starting...") + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] access_token length: {len(access_token)}" ) - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] secret length: {len(secret) if secret else 0}" ) - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] content: {content}" ) webhook_url = ( f"https://oapi.dingtalk.com/robot/send?access_token={access_token}" ) - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Base webhook_url: {webhook_url[:80]}..." ) @@ -303,38 +303,38 @@ def _send_dingtalk_message( ).digest() sign = urllib.parse.quote_plus(base64.b64encode(hmac_code)) webhook_url = f"{webhook_url}×tamp={timestamp}&sign={sign}" - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Added signature, timestamp: {timestamp}" ) headers = {"Content-Type": "application/json;charset=utf-8"} data = {"msgtype": "text", "text": {"content": content}} - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Request data: {json.dumps(data, indent=2)}" ) try: - print( + ten_env.log_info( "[DingTalkBotExtension._send_dingtalk_message] Sending POST request..." ) response = requests.post( webhook_url, headers=headers, data=json.dumps(data), timeout=10 ) - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Response status code: {response.status_code}" ) - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Response text: {response.text}" ) response.raise_for_status() result = response.json() - print( + ten_env.log_info( f"[DingTalkBotExtension._send_dingtalk_message] Response JSON: {json.dumps(result, indent=2)}" ) return result except requests.exceptions.RequestException as e: - print( + ten_env.log_error( f"[DingTalkBotExtension._send_dingtalk_message] Exception occurred: {type(e).__name__}: {str(e)}" ) return {"errcode": -1, "errmsg": str(e)} From 00cd545d56f5cebc339a974a6d59ffb7b45c03d0 Mon Sep 17 00:00:00 2001 From: Spark Date: Fri, 6 Mar 2026 08:12:29 +0800 Subject: [PATCH 2/2] fix: improve exception handling in tencent tts speech synthesizer - Replace bare except with specific exceptions (json.JSONDecodeError, ValueError) - Use explicit chunk_size=None instead of None for clarity in iter_content These changes improve code quality by: 1. Catching only expected exceptions instead of all exceptions 2. Making the code more readable with explicit parameter name --- .../extension/tencent_tts_python/src/speech_synthesizer.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ai_agents/agents/ten_packages/extension/tencent_tts_python/src/speech_synthesizer.py b/ai_agents/agents/ten_packages/extension/tencent_tts_python/src/speech_synthesizer.py index 09e6ff2438..8802bb4d80 100644 --- a/ai_agents/agents/ten_packages/extension/tencent_tts_python/src/speech_synthesizer.py +++ b/ai_agents/agents/ten_packages/extension/tencent_tts_python/src/speech_synthesizer.py @@ -88,7 +88,7 @@ def synthesis(self, text): data = None response = dict() response["session_id"] = session_id - for chunk in r.iter_content(None): + for chunk in r.iter_content(chunk_size=None): if data is None: try: rsp = json.loads(chunk) @@ -96,7 +96,7 @@ def synthesis(self, text): response["Message"] = rsp["Response"]["Error"]["Message"] self.listener.on_fail(response) return - except: + except (json.JSONDecodeError, ValueError): data = chunk response["data"] = data self.listener.on_message(response)