File size: 3,885 Bytes
d877f5a 74b5ebb d877f5a 5046452 d877f5a 761ae49 703e6fc 111b72c 6b5f037 5bf3b30 f9d919d fe124ca 3818a89 111b72c 0f89433 d877f5a 651f405 74b5ebb ff0123b 74b5ebb ff0123b 651f405 74b5ebb 89a35b5 74b5ebb 6b5f037 5bf3b30 572ca12 5bf3b30 74b5ebb 655703b 094500b cb39903 703e6fc ac0d8be 094500b 6354b1b 5bf3b30 d1c021a 572ca12 7a375af 74b5ebb 703e6fc 5711245 761ae49 655703b 761ae49 74b5ebb 761ae49 f9d919d 90abc51 408959d 5bf3b30 6b5f037 111b72c 5bf3b30 f9d919d 9a51839 ac0d8be 924963e fe124ca 9a51839 7a375af 9a51839 fe124ca 9a51839 ac0d8be 9a51839 ac0d8be fe124ca 9a51839 f9d919d 23586d1 90abc51 f9d919d 74b5ebb 761ae49 74b5ebb d877f5a 761ae49 5711245 74b5ebb 761ae49 0f89433 74b5ebb 761ae49 0f89433 6a7682d 761ae49 74b5ebb d877f5a 74b5ebb 111b72c d877f5a |
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 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
import json
import os
from datetime import datetime
from zoneinfo import ZoneInfo
import gradio as gr
from extract import extract
import app_util
from pgsoft.pgconst.const import service_list, functionality_list
from pgsoft.pghost import ais
from pgsoft.pgdate.date_utils import beijing
import call_pgai
from str_util import normalize_text
#######################
# proxy version
#######################
proxy_version = "1.0.0-2024-05-14-a"
t = datetime.now()
t = t.astimezone(ZoneInfo("Asia/Shanghai"))
print(f"[Beijing]: {t.replace(microsecond=0)}")
t = t.astimezone(ZoneInfo("America/Los_Angeles"))
print(f"[Seattle]: {t.replace(microsecond=0)}")
identity = os.environ.get("identity")
print(f"identity: {identity}")
if not identity:
identity = "watermelon"
ai = "stevez-ai-dev"
if identity in ais:
ai = ais[identity]
db_token = os.environ.get("db_token")
if db_token:
print(db_token[:5])
def run(hf_token, service, game, functionality, nlp_command):
"""
event handler
"""
# reuse hf_token field as json string
token, user, redirect, source, username, _ = extract(hf_token)
if user is None:
user = "__fake__"
# redirect all traffic to the proxy sever
global ai
if redirect is not None:
ai = redirect
ai_url = f"https://{ai}.hf.space"
if token is None or token == "":
return "please specify hf token"
if service not in service_list[1:]:
if game is None:
return "please specify which game"
if functionality is None:
return "please choose the AI functionality"
if functionality == "AI":
if nlp_command in ["", None]:
return "please make sure the command is not empty"
service_start = beijing()
print(f"<<<<<<<<<<<<<< service starts at {service_start} <<<<<<<<<<<<<<")
if service in ["download game", "upload game", "list games"]:
res = app_util.file_service(service, nlp_command, db_token)
if res is None:
outp = {"status": "Failure"}
else:
outp = {"status": "OK", "result": res}
else:
assert "games" in service_list
if service == "games":
print(f"{beijing()} [{user}] [{game}] {nlp_command}")
nlp_command = normalize_text(nlp_command)
call_pgai.from_cache = True
outp = call_pgai.call_pgai(
service,
game,
functionality,
nlp_command,
ai_url,
token,
)
if outp is None:
return "no output"
if isinstance(outp, str):
return outp
# add proxy version info to the output
outp["timestamp"] = beijing().__str__()
outp["proxy-version"] = proxy_version
outp["user"] = user
outp["username"] = username
outp["game"] = game
outp["source"] = source
outp["cache"] = call_pgai.from_cache
app_util.call_logger(outp, identity, token)
service_end = beijing()
timecost = service_end.timestamp() - service_start.timestamp()
print(
f">>>>>>>>>>>>>>> service ends at {service_end}, "
+ f"costs {timecost:.2f}s >>>>>>>>>>>>>>>\n"
)
return json.dumps(outp, indent=4)
demo = gr.Interface(
fn=run,
inputs=[
"text",
gr.Radio(
service_list,
value=service_list[0],
info="Shared services",
),
gr.Radio(
["house"],
value="house",
info="Which game you want the AI to support?",
),
gr.Radio(
functionality_list[:1],
value=functionality_list[0],
# label = "What do you want to do?",
info="What functionality?",
),
"text",
],
outputs="text",
title="Demo",
allow_flagging="never",
)
demo.launch()
|