chore(lint): make the repository ruff-clean under the strict select

Clear the deferred full-repo lint backlog so the whole tree passes the strict
ruff select (E,W,F,I,B,UP,C4,SIM). Mechanical fixes dominate: import sorting,
pep585/604 annotations, dropped dead imports, and whitespace. The few semantic
changes are behavior-preserving: declare __all__ on the agent_utils and
alpha_vantage re-export hubs; expand 'from x import *' to explicit names; use
immutable tuple defaults instead of mutable list defaults; contextlib.suppress
for try/except/pass; and narrow an over-broad assertRaises.
This commit is contained in:
Yijia-Xiao committed 2026-06-14 16:38:36 +00:00
1 parent cbc5f67d42
commit e3bc872982
59 files changed
+315 -293

No files matched your search

@@ -1,5 +1,5 @@
import re
from typing import Any, Optional
from typing import Any
from langchain_anthropic import ChatAnthropic
@@ -43,7 +43,7 @@ class NormalizedChatAnthropic(ChatAnthropic):
class AnthropicClient(BaseLLMClient):
"""Client for Anthropic Claude models."""
def __init__(self, model: str, base_url: Optional[str] = None, **kwargs):
def __init__(self, model: str, base_url: str | None = None, **kwargs):
super().__init__(model, base_url, **kwargs)
def get_llm(self) -> Any:
+2 -5
View File
@@ -11,10 +11,7 @@ prompts for it automatically instead of failing on first API call.
from __future__ import annotations
from typing import Optional
PROVIDER_API_KEY_ENV: dict[str, Optional[str]] = {
PROVIDER_API_KEY_ENV: dict[str, str | None] = {
"openai": "OPENAI_API_KEY",
"anthropic": "ANTHROPIC_API_KEY",
"google": "GOOGLE_API_KEY",
@@ -47,7 +44,7 @@ PROVIDER_API_KEY_ENV: dict[str, Optional[str]] = {
}
def get_api_key_env(provider: str) -> Optional[str]:
def get_api_key_env(provider: str) -> str | None:
"""Return the env var name for `provider`'s API key, or None if not applicable.
Unknown providers also return None — callers should treat that as
+2 -3
View File
@@ -1,10 +1,9 @@
import os
from typing import Any, Optional
from typing import Any
from langchain_openai import AzureChatOpenAI
from .base_client import BaseLLMClient, normalize_content
from .validators import validate_model
_PASSTHROUGH_KWARGS = (
"timeout", "max_retries", "api_key", "reasoning_effort", "temperature",
@@ -29,7 +28,7 @@ class AzureOpenAIClient(BaseLLMClient):
OPENAI_API_VERSION: API version (e.g. 2025-03-01-preview)
"""
def __init__(self, model: str, base_url: Optional[str] = None, **kwargs):
def __init__(self, model: str, base_url: str | None = None, **kwargs):
super().__init__(model, base_url, **kwargs)
def get_llm(self) -> Any:
+3 -3
View File
@@ -1,6 +1,6 @@
from abc import ABC, abstractmethod
from typing import Any, Optional
import warnings
from abc import ABC, abstractmethod
from typing import Any
def normalize_content(response):
@@ -25,7 +25,7 @@ def normalize_content(response):
class BaseLLMClient(ABC):
"""Abstract base class for LLM clients."""
def __init__(self, model: str, base_url: Optional[str] = None, **kwargs):
def __init__(self, model: str, base_url: str | None = None, **kwargs):
self.model = model
self.base_url = base_url
self.kwargs = kwargs
@@ -18,7 +18,6 @@ import re
from dataclasses import dataclass
from typing import Literal
StructuredMethod = Literal[
"function_calling", # uses tools; respects supports_tool_choice
"json_mode", # uses response_format={"type":"json_object"}
+2 -2
View File
@@ -1,11 +1,11 @@
from typing import Optional
from .base_client import BaseLLMClient
def create_llm_client(
provider: str,
model: str,
base_url: Optional[str] = None,
base_url: str | None = None,
**kwargs,
) -> BaseLLMClient:
"""Create an LLM client for the specified provider.
+2 -2
View File
@@ -1,4 +1,4 @@
from typing import Any, Optional
from typing import Any
from langchain_google_genai import ChatGoogleGenerativeAI
@@ -20,7 +20,7 @@ class NormalizedChatGoogleGenerativeAI(ChatGoogleGenerativeAI):
class GoogleClient(BaseLLMClient):
"""Client for Google Gemini models."""
def __init__(self, model: str, base_url: Optional[str] = None, **kwargs):
def __init__(self, model: str, base_url: str | None = None, **kwargs):
super().__init__(model, base_url, **kwargs)
def get_llm(self) -> Any:
+8 -10
View File
@@ -2,14 +2,12 @@
from __future__ import annotations
from typing import Dict, List, Tuple
ModelOption = Tuple[str, str]
ProviderModeOptions = Dict[str, Dict[str, List[ModelOption]]]
ModelOption = tuple[str, str]
ProviderModeOptions = dict[str, dict[str, list[ModelOption]]]
# Providers that serve many / frequently-changing models: offer only "Custom
# model ID" rather than a list that goes stale.
_CUSTOM_ONLY: Dict[str, List[ModelOption]] = {
_CUSTOM_ONLY: dict[str, list[ModelOption]] = {
"quick": [("Custom model ID", "custom")],
"deep": [("Custom model ID", "custom")],
}
@@ -18,7 +16,7 @@ _CUSTOM_ONLY: Dict[str, List[ModelOption]] = {
# Shared model list for GLM via Z.AI (international) and BigModel (China).
# Source: docs.z.ai (GLM Coding Plan supported models + LLM guides).
# All GLM 4.7+ entries support thinking mode via thinking={"type":"enabled"}.
_GLM_MODELS: Dict[str, List[ModelOption]] = {
_GLM_MODELS: dict[str, list[ModelOption]] = {
"quick": [
("GLM-5-Turbo - Fast, switchable thinking modes", "glm-5-turbo"),
("GLM-4.7 - Previous-gen flagship", "glm-4.7"),
@@ -44,7 +42,7 @@ _GLM_MODELS: Dict[str, List[ModelOption]] = {
# the backing model. Users who want a specific generation pick it
# explicitly; users who really want auto-latest can enter the alias via
# "Custom model ID".
_QWEN_MODELS: Dict[str, List[ModelOption]] = {
_QWEN_MODELS: dict[str, list[ModelOption]] = {
"quick": [
("Qwen 3.6 Flash - Latest fast, agentic coding + vision-language", "qwen3.6-flash"),
("Qwen 3.5 Flash - Previous-gen fast", "qwen3.5-flash"),
@@ -62,7 +60,7 @@ _QWEN_MODELS: Dict[str, List[ModelOption]] = {
# Shared model list for MiniMax's global and CN endpoints (same IDs).
# Full official lineup per platform.minimax.io/docs/api-reference/text-openai-api.
# All M2.x models share a 204,800-token context window.
_MINIMAX_MODELS: Dict[str, List[ModelOption]] = {
_MINIMAX_MODELS: dict[str, list[ModelOption]] = {
"quick": [
("MiniMax-M2.7-highspeed - Faster M2.7, 204K ctx, ~100 TPS", "MiniMax-M2.7-highspeed"),
("MiniMax-M2.5-highspeed - Previous-gen highspeed, 204K ctx", "MiniMax-M2.5-highspeed"),
@@ -198,12 +196,12 @@ MODEL_OPTIONS: ProviderModeOptions = {
}
def get_model_options(provider: str, mode: str) -> List[ModelOption]:
def get_model_options(provider: str, mode: str) -> list[ModelOption]:
"""Return shared model options for a provider and selection mode."""
return MODEL_OPTIONS[provider.lower()][mode]
def get_known_models() -> Dict[str, List[str]]:
def get_known_models() -> dict[str, list[str]]:
"""Build known model names from the shared CLI catalog."""
return {
provider: sorted(
-1
View File
@@ -2,7 +2,6 @@
from .model_catalog import get_known_models
# Providers whose model names are user-defined (local servers, relays, hosted
# OpenAI-compatible endpoints serving many models), so any model string is
# accepted without warning.