diff --git a/api/routes.py b/api/routes.py index 900848c1..b2c9453a 100644 --- a/api/routes.py +++ b/api/routes.py @@ -1,6 +1,5 @@ """FastAPI route handlers.""" -import json import logging import uuid diff --git a/cli/parser.py b/cli/parser.py index 1619acbe..a3b215aa 100644 --- a/cli/parser.py +++ b/cli/parser.py @@ -1,7 +1,7 @@ """CLI event parser for Claude Code CLI output.""" import logging -from typing import Dict, List, Optional +from typing import Dict, List logger = logging.getLogger(__name__) diff --git a/cli/session.py b/cli/session.py index cb1d21d0..99746a02 100644 --- a/cli/session.py +++ b/cli/session.py @@ -84,7 +84,7 @@ class CLISession: "--dangerously-skip-permissions", "--verbose", ] - logger.info(f"Starting new Claude session") + logger.info("Starting new Claude session") if self.allowed_dirs: for d in self.allowed_dirs: @@ -149,7 +149,7 @@ class CLISession: logger.error(f"Claude CLI Stderr: {stderr_text}") # Yield stderr as error event so it shows in UI if stderr_text: - logger.info(f"CLI_SESSION: Yielding error event from stderr") + logger.info("CLI_SESSION: Yielding error event from stderr") yield {"type": "error", "error": {"message": stderr_text}} return_code = await self.process.wait() diff --git a/messaging/base.py b/messaging/base.py index 0981c0b2..4517d6b8 100644 --- a/messaging/base.py +++ b/messaging/base.py @@ -1,7 +1,7 @@ """Abstract base class for messaging platforms.""" from abc import ABC, abstractmethod -from typing import Callable, Awaitable, Optional, Any, Protocol, Tuple, runtime_checkable +from typing import Callable, Awaitable, Optional, Protocol, Tuple, runtime_checkable from .models import IncomingMessage diff --git a/messaging/handler.py b/messaging/handler.py index 3bd7908e..d7b2c500 100644 --- a/messaging/handler.py +++ b/messaging/handler.py @@ -11,7 +11,7 @@ import asyncio import logging from typing import Optional, TYPE_CHECKING -from .base import MessagingPlatform, SessionManagerInterface, CLISession +from .base import MessagingPlatform, SessionManagerInterface from .models import IncomingMessage from .session import SessionStore from .tree_queue import TreeQueueManager, MessageNode, MessageState @@ -279,7 +279,7 @@ class ClaudeMessageHandler: elif parsed["type"] == "complete": if not any(components.values()): components["content"].append("Done.") - logger.info(f"HANDLER: Task complete, updating UI") + logger.info("HANDLER: Task complete, updating UI") # Always force final complete status to bypass flood wait await update_ui("✅ **Complete**", force=True) @@ -298,7 +298,7 @@ class ClaudeMessageHandler: f"HANDLER: Error event received: {error_msg[:200]}" ) components["errors"].append(error_msg) - logger.info(f"HANDLER: Updating UI with error status") + logger.info("HANDLER: Updating UI with error status") # Always force error status to bypass flood wait await update_ui("❌ **Error**", force=True) if tree: @@ -313,7 +313,7 @@ class ClaudeMessageHandler: self.platform.queue_edit_message( child.incoming.chat_id, child.status_message_id, - f"❌ **Cancelled:** Parent task failed", + "❌ **Cancelled:** Parent task failed", parse_mode="markdown", ) ) @@ -335,7 +335,7 @@ class ClaudeMessageHandler: self.platform.queue_edit_message( child.incoming.chat_id, child.status_message_id, - f"❌ **Cancelled:** Parent task was stopped", + "❌ **Cancelled:** Parent task was stopped", parse_mode="markdown", ) ) @@ -359,7 +359,7 @@ class ClaudeMessageHandler: self.platform.queue_edit_message( child.incoming.chat_id, child.status_message_id, - f"❌ **Cancelled:** Parent task failed", + "❌ **Cancelled:** Parent task failed", parse_mode="markdown", ) ) diff --git a/messaging/telegram.py b/messaging/telegram.py index 5ecfd80d..e987a51d 100644 --- a/messaging/telegram.py +++ b/messaging/telegram.py @@ -12,7 +12,7 @@ import os # This must be set BEFORE importing telegram.error os.environ["PTB_TIMEDELTA"] = "1" -from typing import Callable, Awaitable, Optional, Any, Dict +from typing import Callable, Awaitable, Optional, Any from .base import MessagingPlatform from .models import IncomingMessage diff --git a/providers/exceptions.py b/providers/exceptions.py index 9a694a35..d0099864 100644 --- a/providers/exceptions.py +++ b/providers/exceptions.py @@ -1,6 +1,6 @@ """Unified exception hierarchy for providers.""" -from typing import Optional, Any +from typing import Any class ProviderError(Exception): diff --git a/providers/logging_utils.py b/providers/logging_utils.py index 3d50170d..906aba3e 100644 --- a/providers/logging_utils.py +++ b/providers/logging_utils.py @@ -9,7 +9,7 @@ import json import logging import os from datetime import datetime -from typing import Any, Dict, List, Optional, Union +from typing import Any, Dict, List, Optional logger = logging.getLogger(__name__) diff --git a/providers/nvidia_mixins.py b/providers/nvidia_mixins.py index ee86fb13..6e3610be 100644 --- a/providers/nvidia_mixins.py +++ b/providers/nvidia_mixins.py @@ -10,7 +10,7 @@ NVIDIA NIM provider functionality: import json import logging -from typing import Any, Dict, AsyncIterator +from typing import Any, Dict from .utils import AnthropicToOpenAIConverter, map_stop_reason, extract_think_content from .exceptions import ( diff --git a/providers/nvidia_nim.py b/providers/nvidia_nim.py index 67ca724b..05fccc92 100644 --- a/providers/nvidia_nim.py +++ b/providers/nvidia_nim.py @@ -4,7 +4,7 @@ import logging import os import json import uuid -from typing import Dict, Any, AsyncIterator +from typing import Any, AsyncIterator import httpx from httpx import TimeoutException, ConnectTimeout @@ -16,15 +16,9 @@ from .utils import ( ThinkTagParser, HeuristicToolParser, ContentType, - extract_think_content, extract_reasoning_from_delta, - AnthropicToOpenAIConverter, ) from .exceptions import ( - AuthenticationError, - InvalidRequestError, - RateLimitError, - OverloadedError, APIError, ) from .nvidia_mixins import ( @@ -73,7 +67,7 @@ class NvidiaNimProvider( message_id = f"msg_{uuid.uuid4()}" sse = SSEBuilder(message_id, request.model, input_tokens) error_msg = "⏱️ Global rate limit active. Resuming now..." - logger.info(f"NIM_STREAM: Reactive block detected, notified user") + logger.info("NIM_STREAM: Reactive block detected, notified user") yield sse.message_start() for event in sse.emit_error(error_msg): yield event @@ -179,7 +173,7 @@ class NvidiaNimProvider( error_message = ( f"⏱️ API Timeout ({timeout_type}): Request exceeded time limit" ) - logger.info(f"NIM_STREAM: Emitting SSE error event for timeout") + logger.info("NIM_STREAM: Emitting SSE error event for timeout") except Exception as e: logger.error(f"NIM_ERROR: {type(e).__name__}: {e}") error_occurred = True diff --git a/providers/utils/sse_builder.py b/providers/utils/sse_builder.py index a1411135..44177fff 100644 --- a/providers/utils/sse_builder.py +++ b/providers/utils/sse_builder.py @@ -2,7 +2,7 @@ import json from dataclasses import dataclass, field -from typing import Optional, Dict, Any, Iterator, List +from typing import Optional, Dict, Any, Iterator try: import tiktoken diff --git a/tests/test_api.py b/tests/test_api.py index 0e6c16b6..be8ce4e7 100644 --- a/tests/test_api.py +++ b/tests/test_api.py @@ -1,4 +1,3 @@ -import pytest from fastapi.testclient import TestClient from api.app import app from api.dependencies import get_provider diff --git a/tests/test_cli.py b/tests/test_cli.py index 4b775a80..bf1749df 100644 --- a/tests/test_cli.py +++ b/tests/test_cli.py @@ -2,7 +2,6 @@ import pytest import asyncio -import json import os from unittest.mock import AsyncMock, MagicMock, patch diff --git a/tests/test_config.py b/tests/test_config.py index 7811ff7e..70669b73 100644 --- a/tests/test_config.py +++ b/tests/test_config.py @@ -1,7 +1,5 @@ """Tests for config/settings.py""" -import pytest -import os class TestSettings: diff --git a/tests/test_converter.py b/tests/test_converter.py index 315e7301..ee128b96 100644 --- a/tests/test_converter.py +++ b/tests/test_converter.py @@ -1,5 +1,4 @@ import json -import pytest from providers.utils.message_converter import AnthropicToOpenAIConverter # --- Mock Classes --- diff --git a/tests/test_dependencies.py b/tests/test_dependencies.py index 983933ea..ecb8af8a 100644 --- a/tests/test_dependencies.py +++ b/tests/test_dependencies.py @@ -1,5 +1,4 @@ import pytest -import asyncio from unittest.mock import AsyncMock, MagicMock, patch from api.dependencies import get_provider, get_settings, cleanup_provider from providers.nvidia_nim import NvidiaNimProvider diff --git a/tests/test_event_parser.py b/tests/test_event_parser.py index b26a04eb..0ebae82b 100644 --- a/tests/test_event_parser.py +++ b/tests/test_event_parser.py @@ -1,4 +1,3 @@ -import pytest from messaging.event_parser import parse_cli_event diff --git a/tests/test_handler.py b/tests/test_handler.py index 100cea95..adb63d77 100644 --- a/tests/test_handler.py +++ b/tests/test_handler.py @@ -1,8 +1,6 @@ import pytest -import asyncio from unittest.mock import AsyncMock, MagicMock, patch from messaging.handler import ClaudeMessageHandler -from messaging.models import IncomingMessage from messaging.tree_queue import MessageState diff --git a/tests/test_limiter.py b/tests/test_limiter.py index c2dd6fd8..71679a1b 100644 --- a/tests/test_limiter.py +++ b/tests/test_limiter.py @@ -4,7 +4,6 @@ import asyncio import time import os import logging -from unittest.mock import MagicMock # Set environment variables relative to test execution os.environ["MESSAGING_RATE_LIMIT"] = "1" diff --git a/tests/test_messaging.py b/tests/test_messaging.py index 970098bb..5f10bd6e 100644 --- a/tests/test_messaging.py +++ b/tests/test_messaging.py @@ -4,7 +4,7 @@ import pytest import json import os from datetime import datetime, timedelta -from unittest.mock import AsyncMock, MagicMock, patch, mock_open +from unittest.mock import patch # --- Existing Tests --- diff --git a/tests/test_model_utils.py b/tests/test_model_utils.py index d0f6c28a..ba20ee48 100644 --- a/tests/test_model_utils.py +++ b/tests/test_model_utils.py @@ -1,4 +1,3 @@ -import pytest from providers.model_utils import ( strip_provider_prefixes, is_claude_model, diff --git a/tests/test_nvidia_nim.py b/tests/test_nvidia_nim.py index 2f5f6a98..c061e036 100644 --- a/tests/test_nvidia_nim.py +++ b/tests/test_nvidia_nim.py @@ -4,12 +4,8 @@ import httpx from unittest.mock import MagicMock, AsyncMock, patch from providers.nvidia_nim import ( NvidiaNimProvider, - RateLimitError, APIError, - OverloadedError, ) -from providers.base import ProviderConfig -from providers.utils import ContentType # Mock data classes diff --git a/tests/test_parsers.py b/tests/test_parsers.py index c8bdb230..6aa30c82 100644 --- a/tests/test_parsers.py +++ b/tests/test_parsers.py @@ -1,4 +1,3 @@ -import pytest from providers.utils.think_parser import ThinkTagParser, ContentType from providers.utils.heuristic_tool_parser import HeuristicToolParser diff --git a/tests/test_provider_rate_limit.py b/tests/test_provider_rate_limit.py index d907a9bc..f5a32795 100644 --- a/tests/test_provider_rate_limit.py +++ b/tests/test_provider_rate_limit.py @@ -4,7 +4,6 @@ import asyncio import time import os import logging -from unittest.mock import MagicMock from providers.rate_limit import GlobalRateLimiter diff --git a/tests/test_reliability.py b/tests/test_reliability.py index e1d7d4b2..d4b8d810 100644 --- a/tests/test_reliability.py +++ b/tests/test_reliability.py @@ -1,5 +1,4 @@ import pytest -import asyncio from unittest.mock import AsyncMock, MagicMock, patch from messaging.telegram import TelegramPlatform from telegram.error import NetworkError, RetryAfter, TelegramError diff --git a/tests/test_request_utils.py b/tests/test_request_utils.py index 99155257..cc66d2c1 100644 --- a/tests/test_request_utils.py +++ b/tests/test_request_utils.py @@ -1,6 +1,5 @@ """Tests for api/request_utils.py module.""" -import pytest from unittest.mock import MagicMock from api.request_utils import ( diff --git a/tests/test_telegram.py b/tests/test_telegram.py index a7ef59f4..c565fa0c 100644 --- a/tests/test_telegram.py +++ b/tests/test_telegram.py @@ -1,8 +1,6 @@ import pytest -import asyncio from unittest.mock import AsyncMock, MagicMock, patch -from messaging.telegram import TelegramPlatform, TELEGRAM_AVAILABLE -from messaging.models import IncomingMessage +from messaging.telegram import TelegramPlatform @pytest.fixture diff --git a/tests/test_tree_queue.py b/tests/test_tree_queue.py index bdbcf3e6..7556ce55 100644 --- a/tests/test_tree_queue.py +++ b/tests/test_tree_queue.py @@ -2,7 +2,6 @@ import pytest import asyncio -from datetime import datetime from messaging.tree_queue import ( MessageState,