mirror of
https://github.com/labring/FastGPT.git
synced 2025-12-21 01:07:28 +08:00
Create Python API (#457)
* 更新镜像 * 更新镜像信息 * 更新镜像信息 * Create openai_api.py * Create requirements.txt * Create README.md * 添加python接口 * Delete python directory * Create README.md * Create Python API * 文件结构化 * 文件结构化
This commit is contained in:
74
python/api/api.py
Normal file
74
python/api/api.py
Normal file
@@ -0,0 +1,74 @@
|
||||
import os
|
||||
from fastapi import FastAPI, File, UploadFile
|
||||
from fastapi.responses import JSONResponse
|
||||
from pydantic import BaseModel
|
||||
from services.office2txt import office_to_txt
|
||||
from typing import List
|
||||
from fastapi import HTTPException
|
||||
from services.fetch import get_summary
|
||||
import aiofiles
|
||||
import queue
|
||||
import uuid
|
||||
|
||||
|
||||
# 请求模型
|
||||
class SummaryRequest(BaseModel):
|
||||
url: str
|
||||
level: int
|
||||
|
||||
# 响应模型
|
||||
class SummaryResponse(BaseModel):
|
||||
url: str
|
||||
title: str
|
||||
summary: str
|
||||
|
||||
class ExtractedText(BaseModel):
|
||||
text: str
|
||||
|
||||
|
||||
# 文件转文本
|
||||
async def process_file(file: UploadFile):
|
||||
file_ext = os.path.splitext(file.filename)[1].lower()
|
||||
if file_ext not in ['.docx', '.pdf', '.doc', '.txt']:
|
||||
return JSONResponse(content={"error": "Unsupported file format"}, status_code=400)
|
||||
|
||||
# 生成唯一的文件名
|
||||
unique_filename = f"{uuid.uuid4()}{file_ext}"
|
||||
|
||||
try:
|
||||
# 读取文件内容并保存到唯一命名的文件中
|
||||
async with aiofiles.open(unique_filename, "wb") as out_file:
|
||||
while True:
|
||||
contents = await file.read(1024) # 以块的方式读取文件
|
||||
if not contents:
|
||||
break
|
||||
await out_file.write(contents)
|
||||
|
||||
# 文件处理逻辑,注意传入新的唯一文件名
|
||||
extracted_text = office_to_txt(unique_filename)
|
||||
print(extracted_text)
|
||||
return {"text": extracted_text}
|
||||
except Exception as e:
|
||||
return JSONResponse(content={"error": str(e)}, status_code=500)
|
||||
finally:
|
||||
# 清理:删除临时保存的唯一命名文件
|
||||
if os.path.exists(unique_filename):
|
||||
os.remove(unique_filename)
|
||||
|
||||
|
||||
|
||||
# 定义一个处理网页摘要的函数
|
||||
async def process_summary(request):
|
||||
if request.level < 0:
|
||||
raise HTTPException(status_code=400, detail="Level must be non-negative.")
|
||||
try:
|
||||
# 使用定义的函数来获取网页摘要
|
||||
summaries = get_summary(request.url, request.level)
|
||||
# 将结果转换为响应模型列表
|
||||
print(summaries)
|
||||
return [SummaryResponse(url=url, title=title, summary=summary) for url, title, summary in summaries]
|
||||
except Exception as e:
|
||||
raise HTTPException(status_code=500, detail=str(e))
|
||||
|
||||
|
||||
|
||||
Reference in New Issue
Block a user