Files
FastGPT/python/api/api.py
不做了睡大觉 9f889d8806 Create Python API (#457)
* 更新镜像

* 更新镜像信息

* 更新镜像信息

* Create openai_api.py

* Create requirements.txt

* Create README.md

* 添加python接口

* Delete python directory

* Create README.md

* Create Python API

* 文件结构化

* 文件结构化
2023-11-09 11:52:53 +08:00

75 lines
2.3 KiB
Python

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))