import logging from typing import Optional from fastapi import APIRouter, HTTPException from pydantic import BaseModel import service.ai_text_ollama as ai_text logger = logging.getLogger(__name__) # 创建路由对象,可以统一设置前缀 (prefix) 和 标签 (tags) router = APIRouter( prefix="/api1/text", tags=["text"] ) class TranslationRequest(BaseModel): text: str @router.post("/translate") async def translate(request: TranslationRequest): if not request.text: raise HTTPException(status_code=400, detail="输入文本不能为空") try: final_result = ai_text.translate2zh(request.text) return {"original": request.text, "translation": final_result} except Exception as e: raise HTTPException(status_code=500, detail=str(e)) # 定义接收 JSON 的模型 class SummarizeRequest(BaseModel): text: str prompt: Optional[str] = "" # 允许 prompt 为空字符串或不传 @router.post("/summarize") async def get_summarize(request: SummarizeRequest): if not request.text.strip(): raise HTTPException(status_code=400, detail="输入文本不能为空") try: max_length = 256 combined_prompt = f""" 你是一个专业的视频内容分析师。请对以下识别结果进行精炼的中文总结。 要求字数不超过{max_length}字,语气客观专业: {request.text} """ result = ai_text.summarize(combined_prompt) return { "model_name": result['model_name'], "prompt": combined_prompt, "result": result['result'] } except Exception as e: raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}") @router.post("/tag") async def get_tag(request: SummarizeRequest): if not request.text.strip(): raise HTTPException(status_code=400, detail="输入文本不能为空") try: combined_prompt = f""" 你是一个专业的视频内容分析师。请从下方文本中提取出 1-10 个关键词标签。 限制条件: 1. 标签必须是中文。 2. 标签要包含:人物特征、动作行为、场景环境、氛围。 3. 严禁输出任何解释性文字,只输出标签。 4. 格式要求:标签之间用英文逗号分隔。 文本内容: {request.text} 标签结果: """ result = ai_text.summarize(combined_prompt) return { "model_name": result['model_name'], "prompt": combined_prompt, "result": result['result'] } except Exception as e: raise HTTPException(status_code=500, detail=f"总结失败: {str(e)}")