from typing import Optional from fastapi import BackgroundTasks, FastAPI from pydantic import BaseModel import json import time import random app = FastAPI() answer_dict = dict() class DialogInfo(BaseModel): q_id: str = None query: str = None history: list = [] @app.get("/") def read_root(): return {"Hello": "World!"} @app.get("/chatbot/dialoginfo") def read_dialog(dialogid: str): # return dialogid return answer_dict[dialogid] @app.get("/chatbot/finishquery") def read_dialog(dialogid: str): # return dialogid return random.choices([True, False], (0.3, 0.7))[0] def background_process(diainfo: DialogInfo): answer_dict[diainfo.q_id].q_id = diainfo.q_id answer_dict[diainfo.q_id].history = diainfo.history answer_dict[diainfo.q_id].query = diainfo.query for _ in range(5): answer_dict[diainfo.q_id].history = diainfo.history if diainfo.q_id.startswith('0'): answer_dict[diainfo.q_id].query = answer_dict[diainfo.q_id].query + 'i' elif diainfo.q_id.startswith('9'): answer_dict[diainfo.q_id].query = answer_dict[diainfo.q_id].query + 'o' time.sleep(0.5) print(answer_dict[diainfo.q_id]) @app.post("/chatbot/") def read_query(chat: DialogInfo, background_tasks: BackgroundTasks): answer_dict[chat.q_id] = chat background_tasks.add_task(background_process, chat) return {"code": 202, "msg": f"Query id {chat.q_id} accepted."}