From 6fc397cb0089ec5af76ef4ecaf71988bdbcf3722 Mon Sep 17 00:00:00 2001 From: Ed_ Date: Sat, 16 May 2026 03:24:06 -0400 Subject: [PATCH] reduce inline imports in ai client --- src/ai_client.py | 17 ++++++----------- 1 file changed, 6 insertions(+), 11 deletions(-) diff --git a/src/ai_client.py b/src/ai_client.py index 59a3d2c5..addc58bb 100644 --- a/src/ai_client.py +++ b/src/ai_client.py @@ -14,13 +14,16 @@ during chat creation to avoid massive history bloat. # ai_client.py import anthropic from google import genai +from google.api_core import exceptions as gac from google.genai import types +from openai import OpenAI import asyncio import datetime import difflib import hashlib import json import os +from pathlib import Path as _P import requests # type: ignore[import-untyped] import sys import threading @@ -38,7 +41,8 @@ from src import performance_monitor from src import project_manager from src.tool_bias import ToolBiasEngine from src.models import ToolPreset, BiasProfile, Tool -from src.gemini_cli_adapter import GeminiCliAdapter as GeminiCliAdapter +from src.gemini_cli_adapter import GeminiCliAdapter +from src.tool_presets import ToolPresetManager _provider: str = "gemini" _model: str = "gemini-2.5-flash-lite" @@ -356,7 +360,6 @@ def _classify_anthropic_error(exc: Exception) -> ProviderError: def _classify_gemini_error(exc: Exception) -> ProviderError: body = str(exc).lower() try: - from google.api_core import exceptions as gac if isinstance(exc, gac.ResourceExhausted): return ProviderError("quota", "gemini", exc) if isinstance(exc, gac.TooManyRequests): @@ -586,7 +589,6 @@ def set_tool_preset(preset_name: Optional[str]) -> None: _active_tool_preset = None else: try: - from src.tool_presets import ToolPresetManager manager = ToolPresetManager() presets = manager.load_all() if preset_name in presets: @@ -617,7 +619,6 @@ def set_bias_profile(profile_name: Optional[str]) -> None: _active_bias_profile = None else: try: - from src.tool_presets import ToolPresetManager manager = ToolPresetManager() profiles = manager.load_all_bias_profiles() if profile_name in profiles: @@ -886,7 +887,6 @@ def _reread_file_items(file_items: list[dict[str, Any]]) -> tuple[list[dict[str, if path is None: refreshed.append(item) continue - from pathlib import Path as _P p = path if isinstance(path, _P) else _P(path) try: current_mtime = p.stat().st_mtime @@ -1033,8 +1033,7 @@ def _estimate_message_tokens(msg: dict[str, Any]) -> int: total_chars += len(text) inp = block.get("input") if isinstance(inp, dict): - import json as _json - total_chars += len(_json.dumps(inp, ensure_ascii=False)) + total_chars += len(json.dumps(inp, ensure_ascii=False)) elif isinstance(block, str): total_chars += len(block) est = max(1, int(total_chars / _CHARS_PER_TOKEN)) @@ -2082,7 +2081,6 @@ def _send_deepseek(md_content: str, user_message: str, base_dir: str, def _list_minimax_models(api_key: str) -> list[str]: try: - from openai import OpenAI client = OpenAI(api_key=api_key, base_url="https://api.minimax.io/v1") models_list = client.models.list() found = [m.id for m in models_list] @@ -2095,7 +2093,6 @@ def _list_minimax_models(api_key: str) -> list[str]: def _ensure_minimax_client() -> None: global _minimax_client if _minimax_client is None: - from openai import OpenAI creds = _load_credentials() api_key = creds.get("minimax", {}).get("api_key") if not api_key: @@ -2120,7 +2117,6 @@ def _send_minimax(md_content: str, user_message: str, base_dir: str, if not api_key: raise ValueError("MiniMax API key not found in credentials.toml") - from openai import OpenAI client = OpenAI(api_key=api_key, base_url="https://api.minimax.io/v1") with _minimax_history_lock: @@ -2574,7 +2570,6 @@ def run_subagent_summarization(file_path: str, content: str, is_code: bool, outl return f"ERROR: DeepSeek summarization failed: {e}" elif _provider == "gemini_cli": # Using the adapter for a one-off call - from src.gemini_cli_adapter import GeminiCliAdapter adapter = GeminiCliAdapter(binary_path="gemini") resp_data = adapter.send(prompt, model=_model) return resp_data.get("text", "")