refactor(proxy): 端点检查统一使用 proxy_config 替代 proxy_param

将 endpoint_checker、handler_adapter_base、gemini adapter 及
provider_query 中的 proxy_param 参数替换为 proxy_config,
通过 build_proxy_client_kwargs 统一构建代理客户端参数,
以支持 tunnel 模式代理。同时清理未使用的 import。
This commit is contained in:
fawney19
2026-02-27 22:41:31 +08:00
parent 8de2f41924
commit 5bfaee47cc
4 changed files with 15 additions and 25 deletions

View File

@@ -9,7 +9,6 @@ import asyncio
import json
from typing import Any
import httpx
from fastapi import APIRouter, Depends, HTTPException
from pydantic import BaseModel
from sqlalchemy.orm import Session, joinedload
@@ -36,7 +35,7 @@ from src.services.model.upstream_fetcher import (
get_adapter_for_format,
)
from src.services.provider.oauth_token import resolve_oauth_access_token
from src.services.proxy_node.resolver import resolve_effective_proxy, resolve_proxy_param
from src.services.proxy_node.resolver import resolve_effective_proxy
from src.utils.auth_utils import get_current_user
router = APIRouter(prefix="/api/admin/provider-query", tags=["Provider Query"])
@@ -807,7 +806,6 @@ async def test_model(
test_proxy = resolve_effective_proxy(
getattr(provider, "proxy", None), getattr(api_key, "proxy", None)
)
test_proxy_param = resolve_proxy_param(test_proxy)
logger.debug("[test-model] 开始端点测试...")
@@ -832,7 +830,7 @@ async def test_model(
auth_type=auth_type,
provider_type=p_type if p_type else None,
decrypted_auth_config=oauth_meta if oauth_meta else None,
proxy_param=test_proxy_param,
proxy_config=test_proxy,
)
def _response_has_error(resp: dict) -> bool:

View File

@@ -32,7 +32,6 @@ from src.core.api_format import (
redact_headers_for_log,
)
from src.core.logger import logger
from src.utils.ssl_utils import get_ssl_context
def _redact_headers(headers: dict[str, str]) -> dict[str, str]:
@@ -73,7 +72,7 @@ async def run_endpoint_check(
provider_id: str | None = None,
db: Any | None = None, # Session对象需要时才导入
user: Any | None = None, # User对象
proxy_param: Any | None = None, # httpx 可接受的代理参数
proxy_config: dict[str, Any] | None = None, # 原始代理配置(支持 tunnel 模式)
) -> dict[str, Any]:
"""
执行端点检查(重构版本,使用新的架构):
@@ -95,7 +94,7 @@ async def run_endpoint_check(
db=db,
user=user,
request_id=str(uuid.uuid4())[:8],
proxy_param=proxy_param,
proxy_config=proxy_config,
)
# 使用协调器执行检查
@@ -567,7 +566,7 @@ class EndpointCheckRequest:
user: Any | None = None
request_id: str | None = None
timeout: float = 30.0
proxy_param: Any | None = None # httpx 可接受的代理参数
proxy_config: dict[str, Any] | None = None # 原始代理配置(支持 tunnel 模式)
@dataclass
@@ -600,17 +599,10 @@ class HttpRequestExecutor:
try:
from src.services.proxy_node.resolver import build_proxy_client_kwargs
if request.proxy_param is not None:
# 调用方已提供解析好的代理参数,直接使用(跳过系统默认回退)
client_kwargs: dict[str, Any] = {
"timeout": self.timeout,
"verify": get_ssl_context(),
}
if request.proxy_param:
client_kwargs["proxy"] = request.proxy_param
else:
# 未提供代理参数,通过 build_proxy_client_kwargs 统一解析(含系统默认回退)
client_kwargs = build_proxy_client_kwargs(timeout=self.timeout)
# 统一通过 build_proxy_client_kwargs 构建(支持 tunnel 模式 + 普通代理 + 系统默认回退)
client_kwargs = build_proxy_client_kwargs(
proxy_config=request.proxy_config, timeout=self.timeout
)
async with httpx.AsyncClient(**client_kwargs) as client:
if is_stream:

View File

@@ -338,8 +338,8 @@ class HandlerAdapterBase(ApiAdapter):
auth_type: str | None = None,
provider_type: str | None = None,
decrypted_auth_config: dict[str, Any] | None = None,
# 代理参数
proxy_param: Any | None = None,
# 代理配置
proxy_config: dict[str, Any] | None = None,
) -> dict[str, Any]:
"""
测试模型连接性(非流式)
@@ -485,7 +485,7 @@ class HandlerAdapterBase(ApiAdapter):
provider_id=provider_id,
api_key_id=api_key_id,
model_name=effective_model_name,
proxy_param=proxy_param,
proxy_config=proxy_config,
)
# =========================================================================

View File

@@ -275,8 +275,8 @@ class GeminiChatAdapter(ChatAdapterBase):
auth_type: str | None = None,
provider_type: str | None = None,
decrypted_auth_config: dict[str, Any] | None = None,
# 代理参数(已解析,直接传递给 run_endpoint_check
proxy_param: Any | None = None,
# 代理配置
proxy_config: dict[str, Any] | None = None,
) -> dict[str, Any]:
"""测试 Gemini API 模型连接性(非流式)"""
from src.api.handlers.base.endpoint_checker import run_endpoint_check
@@ -371,7 +371,7 @@ class GeminiChatAdapter(ChatAdapterBase):
provider_id=provider_id,
api_key_id=api_key_id,
model_name=effective_model_name,
proxy_param=proxy_param,
proxy_config=proxy_config,
)