| import gradio as gr |
| from gradio_client import Client |
| from PIL import Image |
| import os |
| import time |
| import traceback |
| import asyncio |
| from huggingface_hub import HfApi |
|
|
| |
| api_key = os.getenv('MY_API_KEY') |
| api = HfApi(token=api_key) |
|
|
| |
| repos = [ |
| "hsuwill000/Fluently-v4-LCM-openvino_0", |
| "hsuwill000/Fluently-v4-LCM-openvino_1", |
| "hsuwill000/Fluently-v4-LCM-openvino_2", |
| "hsuwill000/Fluently-v4-LCM-openvino_3", |
| "hsuwill000/Fluently-v4-LCM-openvino_4", |
| ] |
|
|
| class CustomClient(Client): |
| def __init__(self, *args, timeout=30, **kwargs): |
| super().__init__(*args, **kwargs) |
| self.timeout = timeout |
|
|
| def _request(self, method, url, **kwargs): |
| kwargs['timeout'] = self.timeout |
| return super()._request(method, url, **kwargs) |
|
|
| |
| count = 0 |
|
|
| async def infer_single_gradio(client, prompt): |
| global count |
| |
| inputs = { |
| "prompt": prompt, |
| |
| } |
|
|
| try: |
| |
| result = await asyncio.to_thread(client.predict, inputs, api_name="/infer") |
| |
| |
| image = Image.open(result) |
| |
| |
| filename = f"img_{count:08d}.jpg" |
| while os.path.exists(filename): |
| count += 1 |
| filename = f"img_{count:08d}.jpg" |
| |
| |
| image.save(filename) |
| print(f"Saved image as {filename}") |
| |
| |
| return image |
| |
| except Exception as e: |
| |
| print(f"An exception occurred: {str(e)}") |
| print("Stack trace:") |
| traceback.print_exc() |
| return None |
|
|
| async def infer_gradio(prompt: str, output_images: gr.Gallery): |
| |
| |
|
|
| |
| start_time = time.time() |
|
|
| |
| tasks = [] |
| for repo in repos: |
| runtime_info = api.get_space_runtime(repo) |
| if runtime_info.stage == 'APP_STARTING': |
| continue |
| if runtime_info.stage in ['SLEEPING', 'PAUSED']: |
| print(f"{repo} is now SLEEPING or PAUSED.") |
| api.restart_space(repo_id=repo) |
| continue |
| |
| client = CustomClient(repo, hf_token=api_key, timeout=300) |
| task = infer_single_gradio(client, prompt) |
| tasks.append(task) |
| |
| |
| results = await asyncio.gather(*tasks) |
|
|
| |
| end_time = time.time() |
| time_taken = end_time - start_time |
| print(f"Time taken to generate the image(s): {time_taken:.2f} seconds") |
|
|
| |
| return results |
|
|
| |
| with gr.Blocks() as demo: |
| with gr.Row(): |
| prompt_input = gr.Textbox( |
| label="Enter Your Prompt", |
| show_label="False", |
| placeholder="Type your prompt for image generation here", |
| lines=1, |
| interactive=True |
| ) |
| |
| |
| run_button = gr.Button("RUN") |
| |
| |
| output_images = gr.Gallery(label="Generated Images", elem_id="gallery", show_label=False) |
| |
| |
| run_button.click(infer_gradio, inputs=[prompt_input], outputs=output_images) |
|
|
| |
| demo.launch() |
|
|