|
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 |
|
import requests, json |
|
|
|
loop = asyncio.get_event_loop() |
|
gradio_client = GrClient(os.environ.get('GrClient_url'), serialize=False) |
|
|
|
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], |
|
|
|
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) |
|
|
|
data = {'outer': {'inner': 'value'}} |
|
|
|
data = { |
|
"version": "2.0", |
|
"template": { |
|
"outputs": [ |
|
{ |
|
"simpleText": { |
|
"text": result |
|
} |
|
} |
|
] |
|
} |
|
} |
|
response_collback = requests.post(arr[3], data=json.dumps(data)) |
|
print(response_collback) |
|
|
|
th_a = Thread(target = chat) |
|
th_a.daemon = True |
|
th_a.start() |
|
|
|
|
|
def res(x, id, cdata, url): |
|
global q |
|
|
|
arr = [x, id, str(cdata.replace(",",", ").rsplit(",", 1)[0]), 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) |