Brian Watson
Update app.py
ba3d642
raw
history blame
6.35 kB
import gradio as gr
models = [
{"name": "Claudfuen 1", "url": "claudfuen/photorealistic-fuen-v1"},
{"name": "Deliberate", "url": "Masagin/Deliberate"},
{"name": "Seek Art Mega", "url": "coreco/seek.art_MEGA"},
{"name": "Realistic Vision 1.4", "url": "SG161222/Realistic_Vision_V1.4"},
{"name": "Dreamshaper", "url": "Lykon/DreamShaper"},
]
current_model = models[0]
text_gen = gr.Interface.load("spaces/Omnibus/MagicPrompt-Stable-Diffusion_link")
models2 = []
for model in models:
model_url = f"models/{model['url']}"
loaded_model = gr.Interface.load(model_url, live=True, preprocess=True)
models2.append(loaded_model)
def text_it(inputs, text_gen=text_gen):
return text_gen(inputs)
def set_model(current_model_index):
global current_model
current_model = models[current_model_index]
return gr.update(label=f"{current_model['name']}")
def send_it(inputs, model_choice):
proc = models2[model_choice]
return proc(inputs)
css = """
<style>
.searchable-dropdown {
position: relative;
}
.searchable-dropdown input {
width: 100%;
padding: 0.5rem;
border-radius: 5px;
border: 1px solid #ccc;
}
.searchable-dropdown select {
width: 100%;
padding: 0.5rem;
border-radius: 5px;
border: 1px solid #ccc;
position: absolute;
top: 0;
left: 0;
opacity: 0;
pointer-events: none;
}
</style>
"""
def make_dropdown_searchable(dropdown_id):
script = f"""
<script>
function makeDropdownSearchable(dropdownId) {{
const input = document.getElementById(dropdownId);
input.addEventListener("input", function() {{
const value = this.value.toLowerCase();
const options = Array.from(document.querySelectorAll(`#${dropdownId} option`));
let found = false;
for (let i = 0; i < options.length; i++) {{
const option = options[i];
const text = option.text.toLowerCase();
const match = text.includes(value);
option.style.display = match ? "block" : "none";
if (match) {{
found = true;
}}
}}
if (value && !found) {{
const firstOption = options[0];
if (firstOption) {{
firstOption.selected = true;
}}
}}
}});
}}
makeDropdownSearchable("{dropdown_id}");
</script>
"""
return gr.outputs.HTML(script)
with gr.Interface(
fn=text_it,
inputs="text",
outputs="text",
css=css,
capture_session=True
) as iface:
model_dropdown = gr.inputs.Dropdown(
label="Choose Model",
choices=[m["name"] for m in models],
type="index",
value=current_model["name"],
interactive=True,
component_id="model_dropdown"
I apologize for the incomplete code. It seems that there was an error in the last part. Here's the corrected code:
```python
import gradio as gr
models = [
{"name": "Claudfuen 1", "url": "claudfuen/photorealistic-fuen-v1"},
{"name": "Deliberate", "url": "Masagin/Deliberate"},
{"name": "Seek Art Mega", "url": "coreco/seek.art_MEGA"},
{"name": "Realistic Vision 1.4", "url": "SG161222/Realistic_Vision_V1.4"},
{"name": "Dreamshaper", "url": "Lykon/DreamShaper"},
]
current_model = models[0]
text_gen = gr.Interface.load("spaces/Omnibus/MagicPrompt-Stable-Diffusion_link")
models2 = []
for model in models:
model_url = f"models/{model['url']}"
loaded_model = gr.Interface.load(model_url, live=True, preprocess=True)
models2.append(loaded_model)
def text_it(inputs, text_gen=text_gen):
return text_gen(inputs)
def set_model(current_model_index):
global current_model
current_model = models[current_model_index]
return gr.outputs.Label(f"Current Model: {current_model['name']}")
def send_it(inputs, model_choice):
proc = models2[model_choice]
return proc(inputs)
css = """
<style>
.searchable-dropdown {
position: relative;
}
.searchable-dropdown input {
width: 100%;
padding: 0.5rem;
border-radius: 5px;
border: 1px solid #ccc;
}
.searchable-dropdown select {
width: 100%;
padding: 0.5rem;
border-radius: 5px;
border: 1px solid #ccc;
position: absolute;
top: 0;
left: 0;
opacity: 0;
pointer-events: none;
}
</style>
"""
def make_dropdown_searchable(dropdown_id):
script = f"""
<script>
function makeDropdownSearchable(dropdownId) {{
const input = document.getElementById(dropdownId);
input.addEventListener("input", function() {{
const value = this.value.toLowerCase();
const options = Array.from(document.querySelectorAll(`#${dropdownId} option`));
let found = false;
for (let i = 0; i < options.length; i++) {{
const option = options[i];
const text = option.text.toLowerCase();
const match = text.includes(value);
option.style.display = match ? "block" : "none";
if (match) {{
found = true;
}}
}}
if (value && !found) {{
const firstOption = options[0];
if (firstOption) {{
firstOption.selected = true;
}}
}}
}});
}}
makeDropdownSearchable("{dropdown_id}");
</script>
"""
return gr.outputs.HTML(script)
iface = gr.Interface(
fn=text_it,
inputs="text",
outputs="text",
css=css,
capture_session=True
)
model_dropdown = gr.inputs.Dropdown(
label="Choose Model",
choices=[m["name"] for m in models],
type="index",
value=current_model["name"],
interactive=True,
description="Select the model to use for text generation"
)
iface.add_input(model_dropdown, set_model)
iface.add_input("text", send_it, "output")
iface.launch()