import json import logging from fastapi import APIRouter, Request, HTTPException from fastapi.responses import StreamingResponse from TeacherHelper.Kit.TeacherHelper import ( generate_lesson_plan, generate_courseware, generate_homework ) # 创建路由器 router = APIRouter(prefix="/api", tags=["教师辅助工具"]) # 配置日志 logger = logging.getLogger(__name__) @router.post("/teacher/daoXueAn") async def generate_dao_xue_an(request: Request): """生成导学案接口""" try: # 解析请求体 body = await request.body() data = json.loads(body) if body else {} # 获取提示词参数,如果没有提供则使用默认值 system_prompt = data.get("system_prompt") user_prompt = data.get("user_prompt") # 生成导学案 content_generator = await generate_lesson_plan(system_prompt, user_prompt) # 定义SSE响应生成器 async def generate_sse_response(): try: yield "data: 开始生成导学案...\n\n" async for chunk in content_generator: yield f"data: {chunk}\n\n" yield "data: [DONE]\n\n" except Exception as e: logger.error(f"生成导学案时发生异常: {str(e)}") yield f"data: 生成导学案时发生异常: {str(e)}\n\n" # 返回SSE响应 return StreamingResponse( generate_sse_response(), media_type="text/event-stream", headers={"Cache-Control": "no-cache", "Connection": "keep-alive"} ) except json.JSONDecodeError: raise HTTPException(status_code=400, detail="无效的JSON格式") except Exception as e: logger.error(f"导学案接口异常: {str(e)}") raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}") @router.post("/teacher/jiaoAn") async def generate_jiao_an(request: Request): """生成教案接口""" try: # 解析请求体 body = await request.body() data = json.loads(body) if body else {} # 获取提示词参数,如果没有提供则使用默认值 system_prompt = data.get("system_prompt") user_prompt = data.get("user_prompt") # 生成教案 content_generator = await generate_lesson_plan(system_prompt, user_prompt) # 定义SSE响应生成器 async def generate_sse_response(): try: yield "data: 开始生成教案...\n\n" async for chunk in content_generator: yield f"data: {chunk}\n\n" yield "data: [DONE]\n\n" except Exception as e: logger.error(f"生成教案时发生异常: {str(e)}") yield f"data: 生成教案时发生异常: {str(e)}\n\n" # 返回SSE响应 return StreamingResponse( generate_sse_response(), media_type="text/event-stream", headers={"Cache-Control": "no-cache", "Connection": "keep-alive"} ) except json.JSONDecodeError: raise HTTPException(status_code=400, detail="无效的JSON格式") except Exception as e: logger.error(f"教案接口异常: {str(e)}") raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}") @router.post("/teacher/keJian") async def generate_ke_jian(request: Request): """生成课件接口""" try: # 解析请求体 body = await request.body() data = json.loads(body) if body else {} # 获取提示词参数,如果没有提供则使用默认值 system_prompt = data.get("system_prompt") user_prompt = data.get("user_prompt") # 生成课件 content_generator = await generate_courseware(system_prompt, user_prompt) # 定义SSE响应生成器 async def generate_sse_response(): try: yield "data: 开始生成课件...\n\n" async for chunk in content_generator: yield f"data: {chunk}\n\n" yield "data: [DONE]\n\n" except Exception as e: logger.error(f"生成课件时发生异常: {str(e)}") yield f"data: 生成课件时发生异常: {str(e)}\n\n" # 返回SSE响应 return StreamingResponse( generate_sse_response(), media_type="text/event-stream", headers={"Cache-Control": "no-cache", "Connection": "keep-alive"} ) except json.JSONDecodeError: raise HTTPException(status_code=400, detail="无效的JSON格式") except Exception as e: logger.error(f"课件接口异常: {str(e)}") raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}") @router.post("/teacher/zuoYe") async def generate_zuo_ye(request: Request): """生成作业接口""" try: # 解析请求体 body = await request.body() data = json.loads(body) if body else {} # 获取提示词参数,如果没有提供则使用默认值 system_prompt = data.get("system_prompt") user_prompt = data.get("user_prompt") material_path = data.get("material_path") # 生成作业 content_generator = await generate_homework(system_prompt, user_prompt, material_path) # 定义SSE响应生成器 async def generate_sse_response(): try: yield "data: 开始生成作业...\n\n" async for chunk in content_generator: yield f"data: {chunk}\n\n" yield "data: [DONE]\n\n" except Exception as e: logger.error(f"生成作业时发生异常: {str(e)}") yield f"data: 生成作业时发生异常: {str(e)}\n\n" # 返回SSE响应 return StreamingResponse( generate_sse_response(), media_type="text/event-stream", headers={"Cache-Control": "no-cache", "Connection": "keep-alive"} ) except json.JSONDecodeError: raise HTTPException(status_code=400, detail="无效的JSON格式") except Exception as e: logger.error(f"作业接口异常: {str(e)}") raise HTTPException(status_code=500, detail=f"服务器内部错误: {str(e)}")