feat: 新增图片上传专用代理,完善轮询与POW调用链路,重构POW与token传递

This commit is contained in:
TheSmallHanCat
2026-03-07 12:57:21 +08:00
parent ad554d900a
commit e7d91b31a7
12 changed files with 680 additions and 189 deletions

View File

@@ -129,8 +129,10 @@ class UpdateAdminConfigRequest(BaseModel):
auto_disable_on_401: Optional[bool] = None
class UpdateProxyConfigRequest(BaseModel):
proxy_enabled: bool
proxy_enabled: Optional[bool] = None
proxy_url: Optional[str] = None
image_upload_proxy_enabled: Optional[bool] = None
image_upload_proxy_url: Optional[str] = None
class TestProxyRequest(BaseModel):
test_url: Optional[str] = "https://sora.chatgpt.com"
@@ -166,6 +168,7 @@ class UpdateWatermarkFreeConfigRequest(BaseModel):
class UpdateCallLogicConfigRequest(BaseModel):
call_mode: Optional[str] = None # "default" or "polling"
polling_mode_enabled: Optional[bool] = None # Legacy support
poll_interval: Optional[float] = None # Progress polling interval (seconds)
class UpdatePowProxyConfigRequest(BaseModel):
pow_proxy_enabled: bool
@@ -943,7 +946,9 @@ async def get_proxy_config(token: str = Depends(verify_admin_token)) -> dict:
config = await proxy_manager.get_proxy_config()
return {
"proxy_enabled": config.proxy_enabled,
"proxy_url": config.proxy_url
"proxy_url": config.proxy_url,
"image_upload_proxy_enabled": config.image_upload_proxy_enabled,
"image_upload_proxy_url": config.image_upload_proxy_url
}
@router.post("/api/proxy/config")
@@ -953,7 +958,26 @@ async def update_proxy_config(
):
"""Update proxy configuration"""
try:
await proxy_manager.update_proxy_config(request.proxy_enabled, request.proxy_url)
current_config = await proxy_manager.get_proxy_config()
proxy_enabled = current_config.proxy_enabled if request.proxy_enabled is None else request.proxy_enabled
proxy_url = current_config.proxy_url if request.proxy_url is None else request.proxy_url
image_upload_proxy_enabled = (
current_config.image_upload_proxy_enabled
if request.image_upload_proxy_enabled is None
else request.image_upload_proxy_enabled
)
image_upload_proxy_url = (
current_config.image_upload_proxy_url
if request.image_upload_proxy_url is None
else request.image_upload_proxy_url
)
await proxy_manager.update_proxy_config(
proxy_enabled,
proxy_url,
image_upload_proxy_enabled,
image_upload_proxy_url
)
return {"success": True, "message": "Proxy configuration updated"}
except Exception as e:
raise HTTPException(status_code=400, detail=str(e))
@@ -1350,11 +1374,19 @@ async def get_call_logic_config(token: str = Depends(verify_admin_token)) -> dic
call_mode = getattr(config_obj, "call_mode", None)
if call_mode not in ("default", "polling"):
call_mode = "polling" if config_obj.polling_mode_enabled else "default"
poll_interval = getattr(config_obj, "poll_interval", 2.5)
try:
poll_interval = float(poll_interval)
except (TypeError, ValueError):
poll_interval = 2.5
if poll_interval <= 0:
poll_interval = 2.5
return {
"success": True,
"config": {
"call_mode": call_mode,
"polling_mode_enabled": call_mode == "polling"
"polling_mode_enabled": call_mode == "polling",
"poll_interval": poll_interval
}
}
@@ -1371,13 +1403,26 @@ async def update_call_logic_config(
if call_mode is None:
raise HTTPException(status_code=400, detail="Invalid call_mode")
await db.update_call_logic_config(call_mode)
poll_interval = request.poll_interval
if poll_interval is not None:
try:
poll_interval = float(poll_interval)
except (TypeError, ValueError):
raise HTTPException(status_code=400, detail="poll_interval must be a valid number")
if poll_interval <= 0:
raise HTTPException(status_code=400, detail="poll_interval must be greater than 0")
await db.update_call_logic_config(call_mode, poll_interval)
config.set_call_logic_mode(call_mode)
if poll_interval is not None:
config.set_poll_interval(poll_interval)
return {
"success": True,
"message": "Call logic configuration updated",
"call_mode": call_mode,
"polling_mode_enabled": call_mode == "polling"
"polling_mode_enabled": call_mode == "polling",
"poll_interval": config.poll_interval
}
except HTTPException:
raise