Spaces:
Sleeping
Sleeping
| 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 | |
| from fastapi.responses import JSONResponse | |
| app = FastAPI() | |
| class Request(BaseModel): | |
| question: Optional[str] = "?" | |
| sheet_url: str | |
| page_content_column: str | |
| k: Optional[int] = 20 | |
| reload_collection: Optional[bool] = False | |
| id_column: Optional[str] = None | |
| synonyms: Optional[List[List[str]]] = None | |
| async def post_api(request: Request) -> JSONResponse: | |
| if request.id_column is not None: | |
| 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) | |
| if request.reload_collection: | |
| faq.delete_vectordb_current_collection(vectordb) | |
| 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) | |
| if request.id_column is not None: | |
| df_doc = util.remove_duplicates_by_column(df_doc, request.id_column) | |
| return JSONResponse(util.dataframe_to_dict(df_doc)) | |
| async def put_api(request: Request) -> bool: | |
| success = False | |
| if request.id_column is not None: | |
| 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) | |
| if request.reload_collection: | |
| faq.delete_vectordb_current_collection(vectordb) | |
| vectordb = faq.load_vectordb(request.sheet_url, request.page_content_column) | |
| success = True | |
| return success | |
| async def delete_vectordb_api() -> None: | |
| faq.delete_vectordb() | |
| def ask(sheet_url: str, page_content_column: str, k: int, reload_collection: bool, question: str): | |
| util.SPLIT_PAGE_BREAKS = False | |
| vectordb = faq.load_vectordb(sheet_url, page_content_column) | |
| if reload_collection: | |
| faq.delete_vectordb_current_collection(vectordb) | |
| vectordb = faq.load_vectordb(sheet_url, page_content_column) | |
| documents = faq.similarity_search(vectordb, question, k=k) | |
| df_doc = util.transform_documents_to_dataframe(documents) | |
| return util.dataframe_to_dict(df_doc), gr.Checkbox.update(False) | |
| with gr.Blocks() as block: | |
| sheet_url = gr.Textbox(label="Google Sheet URL") | |
| page_content_column = gr.Textbox(label="Question Column") | |
| k = gr.Slider(1, 30, step=1, label="K") | |
| reload_collection = gr.Checkbox(label="Reload Collection?") | |
| question = gr.Textbox(label="Question") | |
| ask_button = gr.Button("Ask") | |
| answer_output = gr.JSON(label="Answer") | |
| ask_button.click( | |
| ask, | |
| inputs=[sheet_url, page_content_column, k, reload_collection, question], | |
| outputs=[answer_output, reload_collection] | |
| ) | |
| app = gr.mount_gradio_app(app, block, path="/") | |
| if __name__ == "__main__": | |
| uvicorn.run(app, host="0.0.0.0", port=7860) | |