import os import shutil import gradio as gr from uuid import uuid4 from requests import Session import urllib.parse API_URL = os.environ.get('API_URL') API_TOKEN = os.environ.get('API_TOKEN') class Client: def __init__(self): self.c = Session() self.c.headers.update({ 'Content-Type': 'application/json', 'Authorization': f'Bearer {API_TOKEN}' }) def send_message(self, input): res = self.c.post( API_URL, json={'message': {'text': input}} ) return res.json() def send_images(self, text, images): res = self.c.post( API_URL, json={'message': {'file': images, 'text': text}} ) return res.json() client = Client() def send_message(input, files): print('sending message', files) res = client.send_images(input, files) print(res) return res['message']['data'] def upload_files(files): if not os.path.exists('uploads'): os.makedirs('uploads') print('uploading files', files) file_urls = [] for file in files: file_urls.append( f'https://philipp-zettl-easybits-fal-lora.hf.space/gradio_api/file={urllib.parse.quote_plus(file)}' ) print(file_urls) return file_urls with gr.Blocks() as demo: gr.Markdown("## Demo") with gr.Row(equal_height=True): with gr.Column(): gr.Markdown("### Input") inpt = gr.Textbox(label="LoRA Key-Word") upload_button = gr.UploadButton("Upload Images", file_count='multiple', file_types=['image']) hidden_files = gr.State([]) upload_button.upload(upload_files, upload_button, hidden_files) with gr.Column(): gr.Markdown("### Output") output = gr.Textbox(lines=5, label="Output Text") with gr.Row(): send_button = gr.Button("Send") send_button.click(send_message, inputs=[inpt, hidden_files], outputs=[output]) demo.launch(share=True, allowed_paths=['uploads/*'])