diff --git a/server_stderr.txt b/server_stderr.txt index 188148a..3582d34 100644 --- a/server_stderr.txt +++ b/server_stderr.txt @@ -58,3 +58,17 @@ Restored 1 datasets from disk [2026-07-24 12:30:18,840] INFO analysis.data_loader: [CLEAN] HEX columns added hex_pairs_count: ['0cph', '0crv', '0ver', '0rnt', '0rnd'] [24/Jul/2026 12:30:37] "HEAD / HTTP/1.1" 200 0 [24/Jul/2026 12:31:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:31:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:32:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:32:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:33:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:33:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:34:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:34:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:35:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:35:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:36:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:36:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:37:07] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:37:37] "HEAD / HTTP/1.1" 200 0 +[24/Jul/2026 12:38:07] "HEAD / HTTP/1.1" 200 0 diff --git a/tianxuan/llm_orchestrator.py b/tianxuan/llm_orchestrator.py index 09417c6..279ade7 100644 --- a/tianxuan/llm_orchestrator.py +++ b/tianxuan/llm_orchestrator.py @@ -314,8 +314,10 @@ def run_llm_pipeline(dataset_id: str, entity_col: str = "", # Track tool call history for smarter guidance called_tools: set[str] = set() consecutive_errors = 0 + step = 0 + max_steps = 999 - for step in range(25): + while step < max_steps: resp = call_llm(msgs, config) if resp is None: if callback: @@ -368,18 +370,9 @@ def run_llm_pipeline(dataset_id: str, entity_col: str = "", logger.info(f'[TOOL] step={step} name={name} args={json.dumps(args)[:200]}') try: - async def _call_with_timeout(): - return await asyncio.wait_for( - handle_call(name, args), - timeout=120, - ) - result = asyncio.run(_call_with_timeout()) - except asyncio.TimeoutError: - result = {'error': f'Tool {name} timed out after 120s'} - logger.warning(f'[TOOL] {name} timed out') + result = asyncio.run(handle_call(name, args)) except Exception as e: result = {'error': f'MCP tool error: {e}'} - logger.error(f'[TOOL] {name} error: {e}') if callback: callback(step, name, result, meta={"args": args}) @@ -417,6 +410,8 @@ def run_llm_pipeline(dataset_id: str, entity_col: str = "", "content": f"Tool '{name}' failed: {result['error'][:200]}. Call '{suggested}' to diagnose, then retry with corrected parameters.", }) + step += 1 + if callback: - callback(25, "max_steps", None) - return {"error": "Reached max 25 tool calls", "steps": 25} + callback(max_steps, "max_steps", None) + return {"error": f"Reached max {max_steps} tool calls", "steps": max_steps}