File size: 2,541 Bytes
0f2cd64
f4c8d5e
 
 
 
 
 
 
6351d67
f4c8d5e
6024be4
 
 
 
 
 
 
aa05778
 
 
 
f4c8d5e
 
 
 
 
 
 
 
 
 
 
 
 
d958958
7e3780d
d958958
f4c8d5e
e5e556a
0f2cd64
 
 
 
d958958
e5e556a
aa05778
 
 
 
e5e556a
93c60e9
e5e556a
f4c8d5e
aa05778
f4c8d5e
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43a47b5
f4c8d5e
43a47b5
 
a032a3b
aec9d8a
f4c8d5e
5189e82
a032a3b
93c60e9
5189e82
43a47b5
 
aec9d8a
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
from fastapi import FastAPI, File, UploadFile, Request
from pydantic import BaseModel
from pathlib import Path
from fastapi import Form
from fastapi.responses import JSONResponse
from langchain.text_splitter import RecursiveCharacterTextSplitter
from PyPDF2 import PdfReader
from fastapi import Depends
#在FastAPI中,Depends()函数用于声明依赖项

import random
import string
import sys
import timeit
import datetime
import io

import os
from dotenv import load_dotenv
load_dotenv()

def generate_random_string(length):
    letters = string.ascii_lowercase
    return ''.join(random.choice(letters) for i in range(length))  

app = FastAPI()

class FileToProcess(BaseModel):
    uploaded_file: UploadFile = File(...)

@app.get("/")
async def home():
    return "API Working!"

@app.post("/fastapi_file_upload_process")
#async def upload_file(username: str, file_to_process: FileToProcess = Depends()):
async def pdf_file_qa_process(username: str, request: Request, file_to_process: FileToProcess = Depends()):    
    uploaded_file = file_to_process.uploaded_file
    print("File received:"+uploaded_file.filename)

    username = request.query_params.get("username")
    filename = request.query_params.get("filename")
    print(username)
    print(filename)   
        
    random_string = generate_random_string(20)
    file_path = Path.cwd() / random_string
    file_path.mkdir(parents=True, exist_ok=True)
    file_saved_in_api = file_path / uploaded_file.filename
    print(file_saved_in_api)
    print(file_saved_in_api.resolve())
    
    with open(file_saved_in_api, "wb+") as file_object:
        file_object.write(uploaded_file.file.read())   

    text_splitter = RecursiveCharacterTextSplitter(        
        #separator = "\n",
        chunk_size = 500,
        chunk_overlap  = 100, #striding over the text
        length_function = len,
    )        

    doc_reader = PdfReader(file_saved_in_api)
    raw_text = ''
    for i, page in enumerate(doc_reader.pages):
        text = page.extract_text()
        if text:
            raw_text += text
    temp_texts = text_splitter.split_text(raw_text)
    
    print(temp_texts)
    print()
    
    api_call_msg={"INFO": f"File '{file_saved_in_api}' saved to your profile."}    
    print(api_call_msg)

    print(api_call_msg["INFO"])
    print()
    print(api_call_msg["INFO"].replace("uploaded_file", uploaded_file.filename))

    print("API call finished...")

    #return {"INFO": f"File '{uploaded_file.filename}' saved to your profile."}
    return api_call_msg