Private
Public Access
0
0

reduce inline imports in ai client

This commit is contained in:
2026-05-16 03:24:06 -04:00
parent b6e5ddbb49
commit 6fc397cb00
+6 -11
View File
@@ -14,13 +14,16 @@ during chat creation to avoid massive history bloat.
# ai_client.py # ai_client.py
import anthropic import anthropic
from google import genai from google import genai
from google.api_core import exceptions as gac
from google.genai import types from google.genai import types
from openai import OpenAI
import asyncio import asyncio
import datetime import datetime
import difflib import difflib
import hashlib import hashlib
import json import json
import os import os
from pathlib import Path as _P
import requests # type: ignore[import-untyped] import requests # type: ignore[import-untyped]
import sys import sys
import threading import threading
@@ -38,7 +41,8 @@ from src import performance_monitor
from src import project_manager from src import project_manager
from src.tool_bias import ToolBiasEngine from src.tool_bias import ToolBiasEngine
from src.models import ToolPreset, BiasProfile, Tool 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" _provider: str = "gemini"
_model: str = "gemini-2.5-flash-lite" _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: def _classify_gemini_error(exc: Exception) -> ProviderError:
body = str(exc).lower() body = str(exc).lower()
try: try:
from google.api_core import exceptions as gac
if isinstance(exc, gac.ResourceExhausted): if isinstance(exc, gac.ResourceExhausted):
return ProviderError("quota", "gemini", exc) return ProviderError("quota", "gemini", exc)
if isinstance(exc, gac.TooManyRequests): if isinstance(exc, gac.TooManyRequests):
@@ -586,7 +589,6 @@ def set_tool_preset(preset_name: Optional[str]) -> None:
_active_tool_preset = None _active_tool_preset = None
else: else:
try: try:
from src.tool_presets import ToolPresetManager
manager = ToolPresetManager() manager = ToolPresetManager()
presets = manager.load_all() presets = manager.load_all()
if preset_name in presets: if preset_name in presets:
@@ -617,7 +619,6 @@ def set_bias_profile(profile_name: Optional[str]) -> None:
_active_bias_profile = None _active_bias_profile = None
else: else:
try: try:
from src.tool_presets import ToolPresetManager
manager = ToolPresetManager() manager = ToolPresetManager()
profiles = manager.load_all_bias_profiles() profiles = manager.load_all_bias_profiles()
if profile_name in 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: if path is None:
refreshed.append(item) refreshed.append(item)
continue continue
from pathlib import Path as _P
p = path if isinstance(path, _P) else _P(path) p = path if isinstance(path, _P) else _P(path)
try: try:
current_mtime = p.stat().st_mtime current_mtime = p.stat().st_mtime
@@ -1033,8 +1033,7 @@ def _estimate_message_tokens(msg: dict[str, Any]) -> int:
total_chars += len(text) total_chars += len(text)
inp = block.get("input") inp = block.get("input")
if isinstance(inp, dict): 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): elif isinstance(block, str):
total_chars += len(block) total_chars += len(block)
est = max(1, int(total_chars / _CHARS_PER_TOKEN)) 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]: def _list_minimax_models(api_key: str) -> list[str]:
try: try:
from openai import OpenAI
client = OpenAI(api_key=api_key, base_url="https://api.minimax.io/v1") client = OpenAI(api_key=api_key, base_url="https://api.minimax.io/v1")
models_list = client.models.list() models_list = client.models.list()
found = [m.id for m in 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: def _ensure_minimax_client() -> None:
global _minimax_client global _minimax_client
if _minimax_client is None: if _minimax_client is None:
from openai import OpenAI
creds = _load_credentials() creds = _load_credentials()
api_key = creds.get("minimax", {}).get("api_key") api_key = creds.get("minimax", {}).get("api_key")
if not 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: if not api_key:
raise ValueError("MiniMax API key not found in credentials.toml") 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") client = OpenAI(api_key=api_key, base_url="https://api.minimax.io/v1")
with _minimax_history_lock: 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}" return f"ERROR: DeepSeek summarization failed: {e}"
elif _provider == "gemini_cli": elif _provider == "gemini_cli":
# Using the adapter for a one-off call # Using the adapter for a one-off call
from src.gemini_cli_adapter import GeminiCliAdapter
adapter = GeminiCliAdapter(binary_path="gemini") adapter = GeminiCliAdapter(binary_path="gemini")
resp_data = adapter.send(prompt, model=_model) resp_data = adapter.send(prompt, model=_model)
return resp_data.get("text", "") return resp_data.get("text", "")