OraCatQAQ commited on
Commit
e40cdb9
·
1 Parent(s): 289605c

Enhance API key verification to include ADMIN_KEY check and return DEEPSIDER_TOKEN; improve error handling in create_chat_completion function.

Browse files
Files changed (1) hide show
  1. app.py +25 -12
app.py CHANGED
@@ -172,7 +172,23 @@ def verify_api_key(api_key: str = Header(..., alias="Authorization")):
172
  """验证API密钥"""
173
  if not api_key.startswith("Bearer "):
174
  raise HTTPException(status_code=401, detail="Invalid API key format")
175
- return api_key.replace("Bearer ", "")
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
 
177
  def map_openai_to_deepsider_model(model: str) -> str:
178
  """将OpenAI模型名称映射到DeepSider模型名称"""
@@ -350,7 +366,7 @@ async def list_models(api_key: str = Depends(verify_api_key)):
350
  @app.post("/v1/chat/completions")
351
  async def create_chat_completion(
352
  request: Request,
353
- api_key: str = Depends(verify_api_key)
354
  ):
355
  """创建聊天完成API - 支持普通请求和流式请求"""
356
  # 解析请求体
@@ -370,15 +386,12 @@ async def create_chat_completion(
370
  payload = {
371
  "model": deepsider_model,
372
  "prompt": prompt,
373
- "webAccess": "close", # 默认关闭网络访问
374
  "timezone": "Asia/Shanghai"
375
  }
376
 
377
- # 获取请求头(包含选择的token
378
- headers = get_headers(api_key)
379
- # 获取当前使用的token
380
- tokens = api_key.split(',')
381
- current_token_index = (TOKEN_INDEX - 1) % len(tokens) if len(tokens) > 0 else 0
382
 
383
  try:
384
  response = requests.post(
@@ -386,7 +399,7 @@ async def create_chat_completion(
386
  headers=headers,
387
  json=payload,
388
  stream=True,
389
- timeout=30 # 新增超时设置
390
  )
391
 
392
  # 新增调试日志
@@ -407,13 +420,13 @@ async def create_chat_completion(
407
  error_msg += f" - {response.text}"
408
 
409
  logger.error(error_msg)
410
- raise HTTPException(status_code=response.status_code, detail="API请求失败")
411
 
412
  # 处理流式或非流式响应
413
  if chat_request.stream:
414
  # 返回流式响应
415
  return StreamingResponse(
416
- stream_openai_response(response, request_id, chat_request.model, api_key, current_token_index),
417
  media_type="text/event-stream"
418
  )
419
  else:
@@ -438,7 +451,7 @@ async def create_chat_completion(
438
  # 返回OpenAI格式的完整响应
439
  return await generate_openai_response(full_response, request_id, chat_request.model)
440
 
441
- except requests.exTimeout as e:
442
  logger.error(f"请求超时: {str(e)}")
443
  raise HTTPException(status_code=504, detail="上游服务响应超时")
444
 
 
172
  """验证API密钥"""
173
  if not api_key.startswith("Bearer "):
174
  raise HTTPException(status_code=401, detail="Invalid API key format")
175
+
176
+ # 获取环境变量中的 ADMIN_KEY
177
+ admin_key = os.getenv("ADMIN_KEY")
178
+ if not admin_key:
179
+ raise HTTPException(status_code=500, detail="ADMIN_KEY not configured")
180
+
181
+ # 验证传入的 key 是否匹配 ADMIN_KEY
182
+ provided_key = api_key.replace("Bearer ", "").strip()
183
+ if provided_key != admin_key:
184
+ raise HTTPException(status_code=401, detail="Invalid API key")
185
+
186
+ # 验证通过后,返回 DEEPSIDER_TOKEN
187
+ deepsider_token = os.getenv("DEEPSIDER_TOKEN")
188
+ if not deepsider_token:
189
+ raise HTTPException(status_code=500, detail="DEEPSIDER_TOKEN not configured")
190
+
191
+ return deepsider_token
192
 
193
  def map_openai_to_deepsider_model(model: str) -> str:
194
  """将OpenAI模型名称映射到DeepSider模型名称"""
 
366
  @app.post("/v1/chat/completions")
367
  async def create_chat_completion(
368
  request: Request,
369
+ api_key: str = Depends(verify_api_key) # 这里返回的是 DEEPSIDER_TOKEN
370
  ):
371
  """创建聊天完成API - 支持普通请求和流式请求"""
372
  # 解析请求体
 
386
  payload = {
387
  "model": deepsider_model,
388
  "prompt": prompt,
389
+ "webAccess": "close",
390
  "timezone": "Asia/Shanghai"
391
  }
392
 
393
+ # 获取请求头(使用 DEEPSIDER_TOKEN
394
+ headers = get_headers(api_key) # api_key 现在是 DEEPSIDER_TOKEN
 
 
 
395
 
396
  try:
397
  response = requests.post(
 
399
  headers=headers,
400
  json=payload,
401
  stream=True,
402
+ timeout=30
403
  )
404
 
405
  # 新增调试日志
 
420
  error_msg += f" - {response.text}"
421
 
422
  logger.error(error_msg)
423
+ raise HTTPException(status_code=response.status_code, detail=error_msg)
424
 
425
  # 处理流式或非流式响应
426
  if chat_request.stream:
427
  # 返回流式响应
428
  return StreamingResponse(
429
+ stream_openai_response(response, request_id, chat_request.model, api_key, TOKEN_INDEX),
430
  media_type="text/event-stream"
431
  )
432
  else:
 
451
  # 返回OpenAI格式的完整响应
452
  return await generate_openai_response(full_response, request_id, chat_request.model)
453
 
454
+ except requests.Timeout as e:
455
  logger.error(f"请求超时: {str(e)}")
456
  raise HTTPException(status_code=504, detail="上游服务响应超时")
457