Spaces:
Runtime error
Runtime error
Update main.py
Browse files
main.py
CHANGED
|
@@ -222,7 +222,81 @@ async def health():
|
|
| 222 |
"keys": len(API_KEYS),
|
| 223 |
"providers": list(PROVIDERS.keys()),
|
| 224 |
}
|
|
|
|
|
|
|
|
|
|
| 225 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 226 |
|
| 227 |
if __name__ == "__main__":
|
| 228 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|
|
|
|
| 222 |
"keys": len(API_KEYS),
|
| 223 |
"providers": list(PROVIDERS.keys()),
|
| 224 |
}
|
| 225 |
+
# ──────────────────────────────────────────
|
| 226 |
+
# 调试路由(排错用)
|
| 227 |
+
# ──────────────────────────────────────────
|
| 228 |
|
| 229 |
+
@app.get("/debug")
|
| 230 |
+
async def debug():
|
| 231 |
+
"""查看所有配置和路由,排错用"""
|
| 232 |
+
|
| 233 |
+
# 1. 检查环境变量
|
| 234 |
+
env_check = {}
|
| 235 |
+
for env_name in PROVIDER_MAP.keys():
|
| 236 |
+
val = os.getenv(env_name, "")
|
| 237 |
+
env_check[env_name] = "✅ 已设置" if val else "❌ 未设置"
|
| 238 |
+
|
| 239 |
+
api_keys_raw = os.getenv("API_KEYS", "")
|
| 240 |
+
|
| 241 |
+
# 2. 检查所有注册路由
|
| 242 |
+
routes = []
|
| 243 |
+
for route in app.routes:
|
| 244 |
+
if hasattr(route, "methods"):
|
| 245 |
+
routes.append({
|
| 246 |
+
"path": route.path,
|
| 247 |
+
"methods": list(route.methods),
|
| 248 |
+
})
|
| 249 |
+
|
| 250 |
+
# 3. 检查已加载的 Provider
|
| 251 |
+
providers_loaded = {}
|
| 252 |
+
for name, cfg in PROVIDERS.items():
|
| 253 |
+
providers_loaded[name] = {
|
| 254 |
+
"base_url": cfg["base_url"],
|
| 255 |
+
"models": cfg["models"],
|
| 256 |
+
"api_key": cfg["api_key"][:6] + "******", # 只显示前6位
|
| 257 |
+
}
|
| 258 |
+
|
| 259 |
+
return {
|
| 260 |
+
"① 环境变量检查": env_check,
|
| 261 |
+
"② API_KEYS设置": "✅ 已设置" if api_keys_raw else "❌ 未设置(这是导致401的原因)",
|
| 262 |
+
"③ 已加载Provider": providers_loaded,
|
| 263 |
+
"④ 已注册路由": routes,
|
| 264 |
+
"⑤ 内存中Key数量": len(API_KEYS),
|
| 265 |
+
}
|
| 266 |
+
|
| 267 |
+
|
| 268 |
+
@app.get("/debug/test-provider/{provider_name}")
|
| 269 |
+
async def test_provider(provider_name: str):
|
| 270 |
+
"""测试某个 Provider 是否能正常请求"""
|
| 271 |
+
|
| 272 |
+
if provider_name not in PROVIDERS:
|
| 273 |
+
return {
|
| 274 |
+
"status": "❌ 失败",
|
| 275 |
+
"reason": f"Provider '{provider_name}' 未加载",
|
| 276 |
+
"已加载的": list(PROVIDERS.keys()),
|
| 277 |
+
}
|
| 278 |
+
|
| 279 |
+
cfg = PROVIDERS[provider_name]
|
| 280 |
+
|
| 281 |
+
try:
|
| 282 |
+
async with httpx.AsyncClient(timeout=10) as client:
|
| 283 |
+
resp = await client.get(
|
| 284 |
+
f"{cfg['base_url']}/models",
|
| 285 |
+
headers={"Authorization": f"Bearer {cfg['api_key']}"},
|
| 286 |
+
)
|
| 287 |
+
return {
|
| 288 |
+
"status": "✅ 成功" if resp.status_code == 200 else f"⚠️ 状态码 {resp.status_code}",
|
| 289 |
+
"provider": provider_name,
|
| 290 |
+
"base_url": cfg["base_url"],
|
| 291 |
+
"status_code": resp.status_code,
|
| 292 |
+
"response": resp.json() if resp.status_code == 200 else resp.text[:200],
|
| 293 |
+
}
|
| 294 |
+
except Exception as e:
|
| 295 |
+
return {
|
| 296 |
+
"status": "❌ 请求失败",
|
| 297 |
+
"provider": provider_name,
|
| 298 |
+
"error": str(e),
|
| 299 |
+
}
|
| 300 |
|
| 301 |
if __name__ == "__main__":
|
| 302 |
uvicorn.run(app, host="0.0.0.0", port=7860)
|