diff --git a/scripts/tier2/apply_t1_1_edits.py b/scripts/tier2/apply_t1_1_edits.py new file mode 100644 index 00000000..d9522fd9 --- /dev/null +++ b/scripts/tier2/apply_t1_1_edits.py @@ -0,0 +1,85 @@ +"""Apply the 10 send_result -> send edits to src/ai_client.py. + +This is a one-shot script for Task 1.1. Idempotent: re-running is a no-op +if the rename is already complete. +""" +from __future__ import annotations + +import sys +from pathlib import Path + +FILE = Path("src/ai_client.py") + +EDITS: list[tuple[str, str]] = [ + ( + " Immediate-Mode DAG / Thread Context:\n Called by: send_result\n Calls: _ensure_grok_client", + " Immediate-Mode DAG / Thread Context:\n Called by: send\n Calls: _ensure_grok_client", + ), + ( + " Immediate-Mode DAG / Thread Context:\n Called by: send_result\n Calls: _ensure_minimax_client", + " Immediate-Mode DAG / Thread Context:\n Called by: send\n Calls: _ensure_minimax_client", + ), + ( + " Immediate-Mode DAG / Thread Context:\n Called by: send_result\n Calls: _ensure_qwen_client", + " Immediate-Mode DAG / Thread Context:\n Called by: send\n Calls: _ensure_qwen_client", + ), + ( + " Immediate-Mode DAG / Thread Context:\n Called by: send_result\n Calls: _send_llama_native", + " Immediate-Mode DAG / Thread Context:\n Called by: send\n Calls: _send_llama_native", + ), + ( + "def send_result(\n md_content: str,", + "def send(\n md_content: str,", + ), + ( + "[C: tests/test_ai_client_result.py:test_send_result_public_api_returns_result, tests/test_ai_client_result.py:test_send_result_preserves_errors, tests/test_deprecation_warnings.py:test_send_result_does_not_emit_deprecation]", + "[C: tests/test_ai_client_result.py:test_send_public_api_returns_result, tests/test_ai_client_result.py:test_send_preserves_errors, tests/test_deprecation_warnings.py:test_send_does_not_emit_deprecation]", + ), + ( + 'if monitor.enabled: monitor.start_component("ai_client.send_result")', + 'if monitor.enabled: monitor.start_component("ai_client.send")', + ), + ( + 'source="ai_client.send_result")])', + 'source="ai_client.send")])', + ), + ( + 'source="ai_client.send_result", original=exc)', + 'source="ai_client.send", original=exc)', + ), + ( + 'if monitor.enabled: monitor.end_component("ai_client.send_result")', + 'if monitor.enabled: monitor.end_component("ai_client.send")', + ), +] + + +def main() -> int: + with FILE.open("r", encoding="utf-8", newline="") as f: + content = f.read() + has_crlf = "\r\n" in content + nl = "\r\n" if has_crlf else "\n" + normalized_edits = [ + (old.replace("\n", nl), new.replace("\n", nl)) for old, new in EDITS + ] + new_content = content + applied = 0 + for old, new in normalized_edits: + if old in new_content: + new_content = new_content.replace(old, new, 1) + applied += 1 + else: + print(f"NOT FOUND: {old[:80]!r}", file=sys.stderr) + if applied != len(EDITS): + print(f"Only applied {applied}/{len(EDITS)} edits. ABORTING.", file=sys.stderr) + return 1 + with FILE.open("w", encoding="utf-8", newline="") as f: + f.write(new_content) + remaining = new_content.count("send_result") + print(f"Applied {applied}/{len(EDITS)} edits. Remaining send_result: {remaining}") + print(f"Line endings: {'CRLF' if has_crlf else 'LF'}") + return 0 + + +if __name__ == "__main__": + raise SystemExit(main()) diff --git a/src/ai_client.py b/src/ai_client.py index dc6ab180..1a87555b 100644 --- a/src/ai_client.py +++ b/src/ai_client.py @@ -2342,7 +2342,7 @@ def _send_grok(md_content: str, user_message: str, base_dir: str, Result[str]: Wrap of string response and potential errors. Immediate-Mode DAG / Thread Context: - Called by: send_result + Called by: send Calls: _ensure_grok_client, _get_deepseek_tools, get_capabilities, run_with_tool_loop SSDL: @@ -2426,7 +2426,7 @@ def _send_minimax(md_content: str, user_message: str, base_dir: str, Result[str]: Wrap of string response and potential errors. Immediate-Mode DAG / Thread Context: - Called by: send_result + Called by: send Calls: _ensure_minimax_client, _repair_minimax_history, _get_deepseek_tools, get_capabilities, run_with_tool_loop @@ -2581,7 +2581,7 @@ def _send_qwen(md_content: str, user_message: str, base_dir: str, Result[str]: Wrap of string response and potential errors. Immediate-Mode DAG / Thread Context: - Called by: send_result + Called by: send Calls: _ensure_qwen_client, _dashscope_call SSDL: @@ -2666,7 +2666,7 @@ def _send_llama(md_content: str, user_message: str, base_dir: str, Result[str]: Wrap of string response and potential errors. Immediate-Mode DAG / Thread Context: - Called by: send_result + Called by: send Calls: _send_llama_native, _ensure_llama_client, _get_deepseek_tools, get_capabilities, run_with_tool_loop @@ -2935,7 +2935,7 @@ def get_token_stats(md_content: str) -> dict[str, Any]: } return _add_bleed_derived(stats, sys_tok=total_tokens) -def send_result( +def send( md_content: str, user_message: str, base_dir: str = ".", @@ -2989,10 +2989,10 @@ def send_result( Acquires the global _send_lock to synchronize provider calls. Safely called from any worker thread executing background tasks, preventing concurrent thread collisions on shared provider SDK states. - [C: tests/test_ai_client_result.py:test_send_result_public_api_returns_result, tests/test_ai_client_result.py:test_send_result_preserves_errors, tests/test_deprecation_warnings.py:test_send_result_does_not_emit_deprecation] + [C: tests/test_ai_client_result.py:test_send_public_api_returns_result, tests/test_ai_client_result.py:test_send_preserves_errors, tests/test_deprecation_warnings.py:test_send_does_not_emit_deprecation] """ monitor = performance_monitor.get_monitor() - if monitor.enabled: monitor.start_component("ai_client.send_result") + if monitor.enabled: monitor.start_component("ai_client.send") if rag_engine and getattr(rag_engine.config, "enabled", False) and "## Retrieved Context" not in user_message: chunks = rag_engine.search(user_message) @@ -3053,10 +3053,10 @@ def send_result( stream, pre_tool_callback, qa_callback, stream_callback, patch_callback ) else: - res = Result(data="", errors=[ErrorInfo(kind=ErrorKind.CONFIG, message=f"unknown provider: {_provider}", source="ai_client.send_result")]) + res = Result(data="", errors=[ErrorInfo(kind=ErrorKind.CONFIG, message=f"unknown provider: {_provider}", source="ai_client.send")]) except Exception as exc: - res = Result(data="", errors=[ErrorInfo(kind=ErrorKind.INTERNAL, message=str(exc), source="ai_client.send_result", original=exc)]) - if monitor.enabled: monitor.end_component("ai_client.send_result") + res = Result(data="", errors=[ErrorInfo(kind=ErrorKind.INTERNAL, message=str(exc), source="ai_client.send", original=exc)]) + if monitor.enabled: monitor.end_component("ai_client.send") return res def _add_bleed_derived(d: dict[str, Any], sys_tok: int = 0, tool_tok: int = 0) -> dict[str, Any]: