File size: 1,865 Bytes
d1ed09d
 
594ffdd
fa9a2fa
810bf3f
d1ed09d
594ffdd
d1ed09d
 
 
fa9a2fa
 
 
d1ed09d
24e24f3
594ffdd
755230a
 
 
ee3b1c9
594ffdd
 
1fef6b4
594ffdd
fa9a2fa
810bf3f
fa9a2fa
bf4af03
fa9a2fa
 
 
 
 
594ffdd
aa8c944
1a55407
aa8c944
 
 
 
810bf3f
d1ed09d
755230a
d1ed09d
755230a
 
fa9a2fa
aa8c944
bfc464c
594ffdd
bfc464c
594ffdd
bfc464c
41da63d
594ffdd
41da63d
594ffdd
 
1ef8927
d1ed09d
e178c81
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
import os
from pathlib import Path
import json, base64, time
from datetime import datetime

import gradio as gr
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
import uvicorn

import spaces
from spaces.zero.client import _get_token

app = FastAPI()

# Create and mount a static directory if needed
static_dir = Path("./static")
static_dir.mkdir(parents=True, exist_ok=True)
app.mount("/static", StaticFiles(directory="static"), name="static")

# Remove or override the default GRADIO_ROOT_PATH
os.environ["GRADIO_ROOT_PATH"] = "/assets"

@spaces.GPU(duration=4*60)
def process_text(text):
    time.sleep(10)
    return text.upper()

def process_and_save(request: gr.Request, text):
    token = _get_token(request)
    payload = token.split('.')[1]
    payload = f"{payload}{'=' * ((4 - len(payload) % 4) % 4)}"
    payload = json.loads(base64.urlsafe_b64decode(payload).decode())
    print(f"Token payload: {payload}")

    processed_text = process_text(text)
    timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
    file_path = static_dir / f"output_{timestamp}.txt"
    with open(file_path, "w") as f:
        f.write(processed_text)
    return gr.File(value=str(file_path))

process_and_save.zerogpu = True

with gr.Blocks() as demo:
    text_input = gr.Textbox(label="Enter some text")
    submit_btn = gr.Button("Process and Download")
    output = gr.File(label="Download Processed File")

    submit_btn.click(fn=process_and_save, inputs=[text_input], outputs=output)

# Mount Gradio app with SSR
app = gr.mount_gradio_app(app, demo, path="/", ssr_mode=True)

# Make sure assets are served from /assets
assets_dir = Path("./assets")
assets_dir.mkdir(parents=True, exist_ok=True)
app.mount("/assets", StaticFiles(directory=str(assets_dir)), name="assets")

if __name__ == "__main__":
    uvicorn.run(app, host="0.0.0.0", port=7860)