删除冗余代码

This commit is contained in:
zzh
2025-07-16 00:13:30 +09:00
parent 470fc37f26
commit abae90b16d
3 changed files with 26 additions and 41 deletions
+11 -22
View File
@@ -1,8 +1,7 @@
from fastapi import APIRouter, Depends, HTTPException, Request from fastapi import APIRouter, Depends, HTTPException
from fastapi.responses import StreamingResponse, JSONResponse from fastapi.responses import StreamingResponse, JSONResponse
from copy import deepcopy from copy import deepcopy
import asyncio import asyncio
import json
from app.config.config import settings from app.config.config import settings
from app.log.logger import get_gemini_logger from app.log.logger import get_gemini_logger
from app.core.security import SecurityService from app.core.security import SecurityService
@@ -101,7 +100,6 @@ async def list_models(
async def generate_content( async def generate_content(
model_name: str, model_name: str,
request: GeminiRequest, request: GeminiRequest,
raw_request: Request,
_=Depends(security_service.verify_key_or_goog_api_key), _=Depends(security_service.verify_key_or_goog_api_key),
api_key: str = Depends(get_next_working_key), api_key: str = Depends(get_next_working_key),
key_manager: KeyManager = Depends(get_key_manager), key_manager: KeyManager = Depends(get_key_manager),
@@ -115,26 +113,17 @@ async def generate_content(
# 检测是否为原生Gemini TTS请求 # 检测是否为原生Gemini TTS请求
is_native_tts = False is_native_tts = False
if "tts" in model_name.lower(): if "tts" in model_name.lower() and request.generationConfig:
try: # 直接从解析后的request对象获取TTS配置
raw_body = await raw_request.body() response_modalities = request.generationConfig.responseModalities or []
raw_data = json.loads(raw_body.decode('utf-8')) speech_config = request.generationConfig.speechConfig or {}
# 检查是否包含原生TTS配置(responseModalities和speechConfig # 如果包含AUDIO模态和语音配置,则认为是原生TTS请求
generation_config = raw_data.get("generationConfig", {}) if "AUDIO" in response_modalities and speech_config:
response_modalities = generation_config.get("responseModalities", []) is_native_tts = True
speech_config = generation_config.get("speechConfig", {}) logger.info("Detected native Gemini TTS request")
logger.info(f"TTS responseModalities: {response_modalities}")
# 如果包含AUDIO模态和语音配置,则认为是原生TTS请求 logger.info(f"TTS speechConfig: {speech_config}")
if "AUDIO" in response_modalities and speech_config:
is_native_tts = True
logger.info("Detected native Gemini TTS request")
logger.info(f"Raw request data for native TTS: {json.dumps(raw_data, indent=2, ensure_ascii=False)}")
# 将TTS字段添加到请求对象中
setattr(request, '_raw_tts_data', raw_data)
except Exception as e:
logger.warning(f"Failed to parse request for native TTS detection: {e}")
logger.info(f"Using API key: {api_key}") logger.info(f"Using API key: {api_key}")
+6 -7
View File
@@ -53,11 +53,10 @@ python -m uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload
```python ```python
# app/router/gemini_routes.py 中的智能检测逻辑 # app/router/gemini_routes.py 中的智能检测逻辑
if "tts" in model_name.lower(): if "tts" in model_name.lower() and request.generationConfig:
# 检查是否包含原生TTS配置 # 直接从解析后的request对象获取TTS配置
generation_config = raw_data.get("generationConfig", {}) response_modalities = request.generationConfig.responseModalities or []
response_modalities = generation_config.get("responseModalities", []) speech_config = request.generationConfig.speechConfig or {}
speech_config = generation_config.get("speechConfig", {})
# 如果包含AUDIO模态和语音配置,则认为是原生TTS请求 # 如果包含AUDIO模态和语音配置,则认为是原生TTS请求
if "AUDIO" in response_modalities and speech_config: if "AUDIO" in response_modalities and speech_config:
@@ -210,14 +209,14 @@ TTSGenerationConfig
1. **请求接收**:系统接收到API请求 1. **请求接收**:系统接收到API请求
2. **智能检测** 2. **智能检测**
- 检查模型名称是否包含 "tts" - 检查模型名称是否包含 "tts"
- 如果是TTS模型,解析请求体检查是否包含 `responseModalities: ["AUDIO"]``speechConfig` - 如果是TTS模型,`request.generationConfig` 检查是否包含 `responseModalities: ["AUDIO"]``speechConfig`
3. **服务选择** 3. **服务选择**
- **原生TTS请求**:使用 `TTSGeminiChatService` 增强服务 - **原生TTS请求**:使用 `TTSGeminiChatService` 增强服务
- **普通请求**:使用原有 `GeminiChatService` - **普通请求**:使用原有 `GeminiChatService`
4. **请求处理** 4. **请求处理**
- **原生TTS**:使用 `_handle_tts_request()` 特殊处理 - **原生TTS**:使用 `_handle_tts_request()` 特殊处理
- **其他请求**:使用标准 `generate_content()` 方法 - **其他请求**:使用标准 `generate_content()` 方法
5. **字段处理**:从原始HTTP请求体提取TTS字段(`responseModalities`, `speechConfig` 5. **字段处理**:从 `request.generationConfig` 直接获取TTS字段(`responseModalities`, `speechConfig`
6. **API调用**:构建优化的payload并调用Gemini API 6. **API调用**:构建优化的payload并调用Gemini API
7. **自动回退**:如果原生TTS处理失败,自动回退到标准服务 7. **自动回退**:如果原生TTS处理失败,自动回退到标准服务
8. **响应处理** 8. **响应处理**
+9 -12
View File
@@ -85,21 +85,18 @@ class TTSGeminiChatService(GeminiChatService):
if payload["generationConfig"] is None: if payload["generationConfig"] is None:
payload["generationConfig"] = {} payload["generationConfig"] = {}
# 从原始请求中提取TTS相关字段 # 从request.generationConfig直接获取TTS相关字段
if hasattr(request, '_raw_tts_data'): if request.generationConfig:
raw_data = getattr(request, '_raw_tts_data')
raw_generation_config = raw_data.get("generationConfig", {})
# 添加TTS特定字段 # 添加TTS特定字段
if "responseModalities" in raw_generation_config: if request.generationConfig.responseModalities:
payload["generationConfig"]["responseModalities"] = raw_generation_config["responseModalities"] payload["generationConfig"]["responseModalities"] = request.generationConfig.responseModalities
logger.info(f"Added responseModalities: {raw_generation_config['responseModalities']}") logger.info(f"Added responseModalities: {request.generationConfig.responseModalities}")
if "speechConfig" in raw_generation_config: if request.generationConfig.speechConfig:
payload["generationConfig"]["speechConfig"] = raw_generation_config["speechConfig"] payload["generationConfig"]["speechConfig"] = request.generationConfig.speechConfig
logger.info(f"Added speechConfig: {raw_generation_config['speechConfig']}") logger.info(f"Added speechConfig: {request.generationConfig.speechConfig}")
else: else:
logger.warning("No raw TTS data found in request, TTS fields may be missing") logger.warning("No generationConfig found in request, TTS fields may be missing")
logger.info(f"TTS payload before API call: {payload}") logger.info(f"TTS payload before API call: {payload}")