import gradio as gr import requests import io from io import BytesIO import os from PIL import Image API_URL = "https://api-inference.huggingface.co/models/Kvikontent/kviimager2.0" api_key = os.environ.get('API_KEY') headers = {"Authorization": f"Bearer {api_key}"} class QueryError(Exception): pass def query(payload): try: assert type(payload) == dict response = requests.post(API_URL, headers=headers, json=payload) if not str(response.status_code).startswith("2"): raise QueryError(f"Query failed! Response status code was '{response.status_code}'") return response.content except AssertionError: print("Invalid Payload Error: Please provide a dictionary.") except RequestException as e: print("Request Failed: ", e) except ConnectionError as ce: print("Connection Error: Unable to connect to the API.", ce) except Timeout as t: print("Timeout Error: Request timed out while trying to reach the API.", t) except TooManyRedirects as tmr: print("Too Many Redirects Error: Exceeded maximum number of redirects.", tmr) except HTTPError as he: print("HTTP Error: Invalid HTTP response.", he) except QueryError as qe: print(qe) except Exception as ex: print("Unknown Error occurred: ", ex) def generate_images_from_prompt(prompt_text, num_images): images = [] for _ in range(num_images): image_bytes = query({"inputs": prompt_text}) img = BytesIO(image_bytes) pil_img = Image.open(img) images.append(pil_img) return images title = "KVIImager 2.0 Demo 🎨" description = "This app uses Hugging Face AI model to generate images based on the provided text prompt 🖼." input_prompt = gr.Textbox(label="Enter Prompt 📝", placeholder="E.g. 'A peaceful garden with a small cottage'") input_slider = gr.Slider(minimum=1, maximum=10, step=1, valuet=1, label="Number of Images per Prompt") output_generated_images = gr.Image(label="Generated Image", type="pil") iface = gr.Interface( fn=generate_images_from_prompt, inputs=[input_prompt, input_slider], outputs=output_generated_images, title=title, description=description, theme="soft" ) iface.launch()