from functools import cache
from gradio_client import Client
from pgsoft.pgdate.date_utils import beijing
import json

from_cache = True


@cache
def call_ai(service, game, functionality, nlp_command, url, hf_token):
    calling_start = beijing()
    print(f"calling ai starts at {calling_start}")
    try:
        client = Client(
            url,
            hf_token=hf_token,
            verbose=False,
        )
        res = client.predict(
            service,
            game,
            functionality,
            nlp_command,  # hidden,
            api_name="/predict",
        )
    except Exception as e:
        return (
            f"{type(e)}, {str(e)}. \nyou may want to make "
            + "sure your hf_token is correct"
        )
    calling_end = beijing()
    timecost = calling_end.timestamp() - calling_start.timestamp()
    print(f"calling ai ends at {calling_end}, costs {timecost:.2f}s")
    outp = json.loads(res)
    global from_cache
    from_cache = False
    return outp