from threading import Thread import gradio as gr from gradio_client import Client as GrClient import inspect from gradio import routes from typing import List, Type import requests, os, re, asyncio, queue import math import time import datetime loop = asyncio.get_event_loop() gradio_client = GrClient(os.environ.get('GrClient_url'), serialize=False) # Monkey patch def get_types(cls_set: List[Type], component: str): docset = [] types = [] if component == "input": for cls in cls_set: doc = inspect.getdoc(cls) doc_lines = doc.split("\n") docset.append(doc_lines[1].split(":")[-1]) types.append(doc_lines[1].split(")")[0].split("(")[-1]) else: for cls in cls_set: doc = inspect.getdoc(cls) doc_lines = doc.split("\n") docset.append(doc_lines[-1].split(":")[-1]) types.append(doc_lines[-1].split(")")[0].split("(")[-1]) return docset, types routes.get_types = get_types q = queue.Queue() def chat(): while True: time.sleep(1) global q if not q.empty(): arr = q.get() start = time.time() print("응답 시작\nx:"+ arr[0] +"\nid:"+ arr[1] +"\ncdata:" + arr[2] + "\ncollback_url : " + arr[3]) result = gradio_client.predict( arr[0], # str representing input in 'User input' Textbox component arr[1], arr[2], fn_index=0 ) end = time.time() sec = (end - start) result_list = str(datetime.timedelta(seconds=sec)).split(".") print("응답 시간 : " + result_list[0] +"\nresult:"+ result) th_a = Thread(target = chat) th_a.daemon = True th_a.start() # App code def res(x, id, cdata, url): global q arr = [x, id, str(cdata.replace(",",", ")), url] q.put(arr) print("\n_Done\n\n") return "Done" with gr.Blocks() as demo: count = 0 aa = gr.Interface( fn=res, inputs=["text","text", "text", "text"], outputs="text", description="chat", ) demo.queue(max_size=32).launch(enable_queue=True)