Spaces:
Sleeping
Sleeping
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" | |
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) |