From 68b24ff720fc1c46edd7451dd61c5e0a00697650 Mon Sep 17 00:00:00 2001 From: ogt Date: Thu, 9 Jul 2026 22:08:55 +0800 Subject: [PATCH] fix(agents): relax runtime readback fallback budgets --- .../services/ai_agent_autonomous_runtime_control.py | 4 ++-- ...ent_log_controlled_writeback_consumer_readback.py | 12 +++++++----- 2 files changed, 9 insertions(+), 7 deletions(-) diff --git a/apps/api/src/services/ai_agent_autonomous_runtime_control.py b/apps/api/src/services/ai_agent_autonomous_runtime_control.py index 30bb6f1fc..4348aa0d3 100644 --- a/apps/api/src/services/ai_agent_autonomous_runtime_control.py +++ b/apps/api/src/services/ai_agent_autonomous_runtime_control.py @@ -45,14 +45,14 @@ _DEPLOY_ATTEMPT_NOTE = "cd_internal_control_plane_readback_retry_20260628_2" _LIVE_READBACK_SCHEMA_VERSION = "ai_agent_autonomous_runtime_receipt_readback_v1" _DEFAULT_PROJECT_ID = "awoooi" _DEFAULT_LOOKBACK_HOURS = 24 -_LIVE_RUNTIME_RECEIPT_TIMEOUT_SECONDS = 5.0 +_LIVE_RUNTIME_RECEIPT_TIMEOUT_SECONDS = 8.0 _RUNTIME_RECEIPT_LOCK_TIMEOUT_SECONDS = 0.25 _RUNTIME_RECEIPT_DB_CONTEXT_TIMEOUT_SECONDS = 1.5 _RUNTIME_RECEIPT_DB_CONTEXT_EXIT_TIMEOUT_SECONDS = 0.25 _RUNTIME_RECEIPT_QUERY_BUDGET_SECONDS = 2.0 _RUNTIME_RECEIPT_SINGLE_QUERY_TIMEOUT_SECONDS = 0.45 _RUNTIME_RECEIPT_STATEMENT_TIMEOUT_MS = 400 -_LOG_CONTROLLED_WRITEBACK_CONSUMER_TIMEOUT_SECONDS = 2.0 +_LOG_CONTROLLED_WRITEBACK_CONSUMER_TIMEOUT_SECONDS = 4.0 _RUNTIME_RECEIPT_READBACK_CACHE_TTL_SECONDS = 20.0 _AUXILIARY_RUNTIME_RECEIPT_QUERY_NAMES = { "alert_operation_counts", diff --git a/apps/api/src/services/ai_agent_log_controlled_writeback_consumer_readback.py b/apps/api/src/services/ai_agent_log_controlled_writeback_consumer_readback.py index b0f4dda24..b90d68287 100644 --- a/apps/api/src/services/ai_agent_log_controlled_writeback_consumer_readback.py +++ b/apps/api/src/services/ai_agent_log_controlled_writeback_consumer_readback.py @@ -46,6 +46,8 @@ _DB_RETRY_DELAYS_SECONDS = (0.0,) _CONSUMER_DB_CONTEXT_TIMEOUT_SECONDS = 0.45 _CONSUMER_DB_CONTEXT_EXIT_TIMEOUT_SECONDS = 0.25 _CONSUMER_SINGLE_QUERY_TIMEOUT_SECONDS = 0.45 +_CONSUMER_DIRECT_CONNECT_TIMEOUT_SECONDS = 1.5 +_CONSUMER_DIRECT_QUERY_TIMEOUT_SECONDS = 0.75 _CONSUMER_TELEGRAM_CONTEXT_TIMEOUT_SECONDS = 0.75 _CONSUMER_STATEMENT_TIMEOUT_MS = 400 logger = get_logger(__name__) @@ -226,27 +228,27 @@ async def _load_consumer_rows_direct( conn = await asyncio.wait_for( asyncpg.connect(db_url), - timeout=_CONSUMER_DB_CONTEXT_TIMEOUT_SECONDS, + timeout=_CONSUMER_DIRECT_CONNECT_TIMEOUT_SECONDS, ) try: await asyncio.wait_for( conn.execute("SELECT set_config('app.project_id', $1, TRUE)", project_id), - timeout=_CONSUMER_SINGLE_QUERY_TIMEOUT_SECONDS, + timeout=_CONSUMER_DIRECT_QUERY_TIMEOUT_SECONDS, ) await asyncio.wait_for( conn.execute( "SET statement_timeout = " f"'{int(_CONSUMER_STATEMENT_TIMEOUT_MS)}ms'" ), - timeout=_CONSUMER_SINGLE_QUERY_TIMEOUT_SECONDS, + timeout=_CONSUMER_DIRECT_QUERY_TIMEOUT_SECONDS, ) dispatch_rows = await asyncio.wait_for( conn.fetch(_CONSUMER_DISPATCH_DIRECT_SQL, OPERATION_TYPE), - timeout=_CONSUMER_SINGLE_QUERY_TIMEOUT_SECONDS, + timeout=_CONSUMER_DIRECT_QUERY_TIMEOUT_SECONDS, ) consumer_rows = await asyncio.wait_for( conn.fetch(_CONSUMER_APPLY_DIRECT_SQL, CONSUMER_OPERATION_TYPE), - timeout=_CONSUMER_SINGLE_QUERY_TIMEOUT_SECONDS, + timeout=_CONSUMER_DIRECT_QUERY_TIMEOUT_SECONDS, ) return _result_rows(dispatch_rows), _result_rows(consumer_rows) finally: