Easy-Spaces / app.py
jkorstad's picture
Update app.py
3b02325 verified
import gradio as gr
import os
import shutil
from gradio_client import Client, handle_file
from smolagents import Tool, CodeAgent, HfApiModel
# import spaces - if using ZeroGPU
# Define tools from Spaces
spaces = [
{"repo_id": "black-forest-labs/FLUX.1-schnell",
"name": "image_generator",
"description": "Generate an image from a prompt"},
{"repo_id": "jamesliu1217/EasyControl_Ghibli",
"name": "Ghibli_style_Image_control",
"description": "Create Ghibli style image"},
]
tools = []
for space in spaces:
# Access repo_id, name, and description
repo_id = space['repo_id']
name = space.get('name', repo_id) # Use repo_id as name if not specified
description = space.get('description', '') # Use empty string if not specified
# Create Tool instance
tool = Tool.from_space(repo_id, name=name, description=description)
tools.append(tool)
# Define a custom tool
class CustomTool(Tool):
name = "custom_tool"
description = "A custom tool that processes input text"
inputs = {"input": {"type": "string", "description": "Some input text to process"}}
output_type = "string"
def forward(self, input: str):
return f"Processed: {input}"
tools.append(CustomTool())
# Initialize the model
model = HfApiModel(model_id="Qwen/Qwen2.5-Coder-32B-Instruct")
# Create the agent
agent = CodeAgent(tools=tools, model=model)
# Function to run the agent and return the image path
def generate_and_transform(prompt):
result = agent.run(prompt)
if isinstance(result, str): # Assuming result is a file path
# Copy the temporary file to a permanent location
permanent_path = "ghibli_output.webp"
shutil.copy(result, permanent_path)
return permanent_path
else:
raise ValueError("Unexpected result type from agent")
# Gradio interface function
def gradio_interface(prompt):
try:
image_path = generate_and_transform(prompt)
return image_path
except Exception as e:
return str(e)
# Create the Gradio app
with gr.Blocks() as app:
gr.Markdown("### Smolagent Image Generator with Ghibli Style")
with gr.Row():
prompt_input = gr.Textbox(label="Enter your prompt", placeholder="e.g., Generate an image of a dog and then make a Ghibli style version of that image")
submit_button = gr.Button("Generate")
output_image = gr.Image(label="Generated Image")
download_button = gr.File(label="Download Image")
# Connect the button to the function
def on_submit(prompt):
image_path = gradio_interface(prompt)
return image_path, image_path
submit_button.click(on_submit, inputs=prompt_input, outputs=[output_image, download_button])
# Launch the app
app.launch()