File size: 2,217 Bytes
89dc8b2
 
 
1132b50
89dc8b2
e960d63
6c9d07b
89dc8b2
 
 
 
6323bc8
89dc8b2
 
 
 
 
 
6c9d07b
 
 
 
 
 
 
 
 
89dc8b2
6323bc8
e960d63
 
 
 
 
1132b50
6c9d07b
67bfb80
6c9d07b
 
67bfb80
1132b50
 
6c9d07b
4dc1d14
1132b50
 
6323bc8
 
 
 
 
e960d63
78aafcc
e960d63
 
89dc8b2
 
 
6323bc8
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
e960d63
6323bc8
e960d63
 
89dc8b2
 
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
from fastapi import FastAPI
from pydantic import BaseModel
import faq as faq
import util as util
import uvicorn
import gradio as gr
from typing import List, Optional

app = FastAPI()


class AskRequest(BaseModel):
    question: str
    sheet_url: str
    page_content_column: str
    k: int


class AskRequestEx(BaseModel):
    question: str
    sheet_url: str
    page_content_column: str
    k: int
    id_column: str
    synonyms: Optional[List[List[str]]] = None


@app.post("/api/v1/ask")
async def ask_api(request: AskRequest):
    return ask(
        request.sheet_url, request.page_content_column, request.k, request.question
    )


@app.post("/api/v2/ask")
async def ask_api(request: AskRequestEx):
    util.SPLIT_PAGE_BREAKS = True
    if request.synonyms is not None:
        util.SYNONYMS = request.synonyms
    vectordb = faq.load_vectordb(request.sheet_url, request.page_content_column)
    documents = faq.similarity_search(vectordb, request.question, k=request.k)
    df_doc = util.transform_documents_to_dataframe(documents)
    df_filter = util.remove_duplicates_by_column(df_doc, request.id_column)
    return util.dataframe_to_dict(df_filter)


@app.delete("/api/v1/")
async def delete_vectordb_api():
    return delete_vectordb()


def ask(sheet_url: str, page_content_column: str, k: int, question: str):
    util.SPLIT_PAGE_BREAKS = False
    vectordb = faq.load_vectordb(sheet_url, page_content_column)
    result = faq.similarity_search(vectordb, question, k=k)
    return result


def delete_vectordb():
    faq.delete_vectordb()


with gr.Blocks() as block:
    sheet_url = gr.Textbox(label="Google Sheet URL")
    page_content_column = gr.Textbox(label="Question Column")
    k = gr.Slider(2, 5, step=1, label="K")
    question = gr.Textbox(label="Question")
    ask_button = gr.Button("Ask")
    answer_output = gr.JSON(label="Answer")
    delete_button = gr.Button("Delete Vector DB")
    ask_button.click(
        ask,
        inputs=[sheet_url, page_content_column, k, question],
        outputs=answer_output,
    )
    delete_button.click(delete_vectordb)

app = gr.mount_gradio_app(app, block, path="/")


if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=7860)