Spaces:
Build error
Build error
UI changes
Browse files- app.py +28 -11
- fromage/models.py +1 -1
- share_btn.py +41 -0
app.py
CHANGED
|
@@ -1,5 +1,5 @@
|
|
| 1 |
import tempfile
|
| 2 |
-
from share_btn import community_icon_html, loading_icon_html, share_js
|
| 3 |
import huggingface_hub
|
| 4 |
import gradio as gr
|
| 5 |
from fromage import utils
|
|
@@ -15,7 +15,7 @@ os.environ["HF_HUB_ENABLE_HF_TRANSFER"] = "False"
|
|
| 15 |
css = """
|
| 16 |
#share-btn-container {
|
| 17 |
display: flex; padding-left: 0.5rem !important; padding-right: 0.5rem !important; background-color: #000000; justify-content: center; align-items: center; border-radius: 9999px !important; width: 13rem;
|
| 18 |
-
margin-top:
|
| 19 |
margin-left: auto;
|
| 20 |
flex: unset;
|
| 21 |
}
|
|
@@ -33,6 +33,22 @@ css = """
|
|
| 33 |
display: none !important;
|
| 34 |
}
|
| 35 |
#chatbot { min-height: 300px; }
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 36 |
"""
|
| 37 |
|
| 38 |
examples = [
|
|
@@ -133,7 +149,7 @@ def generate_for_prompt(input_text, state, ret_scale_factor, max_num_rets, num_w
|
|
| 133 |
# Set input image to None.
|
| 134 |
print('state', state, flush=True)
|
| 135 |
print('updated state', [conversation, chat_history, None], flush=True)
|
| 136 |
-
return [conversation, chat_history, None], conversation, gr.update(visible=True)
|
| 137 |
|
| 138 |
|
| 139 |
with gr.Blocks(css=css) as demo:
|
|
@@ -161,11 +177,11 @@ with gr.Blocks(css=css) as demo:
|
|
| 161 |
"Submit", interactive=True, variant="primary")
|
| 162 |
clear_last_btn = gr.Button("Undo")
|
| 163 |
clear_btn = gr.Button("Reset All")
|
|
|
|
|
|
|
|
|
|
| 164 |
with gr.Row(visible=False) as share_group:
|
| 165 |
-
|
| 166 |
-
community_icon = gr.HTML(community_icon_html)
|
| 167 |
-
loading_icon = gr.HTML(loading_icon_html)
|
| 168 |
-
share_button = gr.Button("Share to community", elem_id="share-btn")
|
| 169 |
|
| 170 |
|
| 171 |
with gr.Column(scale=0.3, min_width=200):
|
|
@@ -183,17 +199,18 @@ with gr.Blocks(css=css) as demo:
|
|
| 183 |
# ).style(grid=[2], height="auto")
|
| 184 |
|
| 185 |
text_input.submit(generate_for_prompt, [text_input, gr_state, ret_scale_factor,
|
| 186 |
-
max_ret_images, gr_max_len, gr_temperature], [gr_state, chatbot, share_group])
|
| 187 |
text_input.submit(lambda: "", None, text_input) # Reset chatbox.
|
| 188 |
submit_btn.click(generate_for_prompt, [text_input, gr_state, ret_scale_factor,
|
| 189 |
-
max_ret_images, gr_max_len, gr_temperature], [gr_state, chatbot, share_group])
|
| 190 |
submit_btn.click(lambda: "", None, text_input) # Reset chatbox.
|
| 191 |
|
| 192 |
image_btn.upload(upload_image, [gr_state, image_btn], [gr_state, chatbot])
|
| 193 |
clear_last_btn.click(reset_last, [gr_state], [gr_state, chatbot])
|
| 194 |
clear_btn.click(reset, [], [gr_state, chatbot])
|
| 195 |
share_button.click(None, [], [], _js=share_js)
|
|
|
|
| 196 |
|
| 197 |
|
| 198 |
-
|
| 199 |
-
demo.launch(debug=True, server_name="
|
|
|
|
| 1 |
import tempfile
|
| 2 |
+
from share_btn import community_icon_html, loading_icon_html, share_js, save_js
|
| 3 |
import huggingface_hub
|
| 4 |
import gradio as gr
|
| 5 |
from fromage import utils
|
|
|
|
| 15 |
css = """
|
| 16 |
#share-btn-container {
|
| 17 |
display: flex; padding-left: 0.5rem !important; padding-right: 0.5rem !important; background-color: #000000; justify-content: center; align-items: center; border-radius: 9999px !important; width: 13rem;
|
| 18 |
+
margin-top: 3px;
|
| 19 |
margin-left: auto;
|
| 20 |
flex: unset;
|
| 21 |
}
|
|
|
|
| 33 |
display: none !important;
|
| 34 |
}
|
| 35 |
#chatbot { min-height: 300px; }
|
| 36 |
+
#save-btn {
|
| 37 |
+
background-image: linear-gradient(to right bottom, rgba(130,217,244, 0.9), rgba(158,231,214, 1.0));
|
| 38 |
+
}
|
| 39 |
+
#save-btn:hover {
|
| 40 |
+
background-image: linear-gradient(to right bottom, rgba(130,217,244, 0.9), rgba(158,231,214, 1.0));
|
| 41 |
+
}
|
| 42 |
+
#share-btn-2 {
|
| 43 |
+
background-image: linear-gradient(to right bottom, rgba(130,217,244, 0.9), rgba(158,231,214, 1.0));
|
| 44 |
+
}
|
| 45 |
+
#share-btn-2:hover {
|
| 46 |
+
background-image: linear-gradient(to right bottom, rgba(130,217,244, 0.9), rgba(158,231,214, 1.0));
|
| 47 |
+
}
|
| 48 |
+
.message .user {
|
| 49 |
+
}
|
| 50 |
+
.message .bot {
|
| 51 |
+
}
|
| 52 |
"""
|
| 53 |
|
| 54 |
examples = [
|
|
|
|
| 149 |
# Set input image to None.
|
| 150 |
print('state', state, flush=True)
|
| 151 |
print('updated state', [conversation, chat_history, None], flush=True)
|
| 152 |
+
return [conversation, chat_history, None], conversation, gr.update(visible=True), gr.update(visible=True)
|
| 153 |
|
| 154 |
|
| 155 |
with gr.Blocks(css=css) as demo:
|
|
|
|
| 177 |
"Submit", interactive=True, variant="primary")
|
| 178 |
clear_last_btn = gr.Button("Undo")
|
| 179 |
clear_btn = gr.Button("Reset All")
|
| 180 |
+
with gr.Row(visible=False) as save_group:
|
| 181 |
+
save_button = gr.Button("💾 Save Conversation as .png", elem_id="save-btn")
|
| 182 |
+
|
| 183 |
with gr.Row(visible=False) as share_group:
|
| 184 |
+
share_button = gr.Button("🤗 Share to Community", elem_id="share-btn-2")
|
|
|
|
|
|
|
|
|
|
| 185 |
|
| 186 |
|
| 187 |
with gr.Column(scale=0.3, min_width=200):
|
|
|
|
| 199 |
# ).style(grid=[2], height="auto")
|
| 200 |
|
| 201 |
text_input.submit(generate_for_prompt, [text_input, gr_state, ret_scale_factor,
|
| 202 |
+
max_ret_images, gr_max_len, gr_temperature], [gr_state, chatbot, share_group, save_group])
|
| 203 |
text_input.submit(lambda: "", None, text_input) # Reset chatbox.
|
| 204 |
submit_btn.click(generate_for_prompt, [text_input, gr_state, ret_scale_factor,
|
| 205 |
+
max_ret_images, gr_max_len, gr_temperature], [gr_state, chatbot, share_group, save_group])
|
| 206 |
submit_btn.click(lambda: "", None, text_input) # Reset chatbox.
|
| 207 |
|
| 208 |
image_btn.upload(upload_image, [gr_state, image_btn], [gr_state, chatbot])
|
| 209 |
clear_last_btn.click(reset_last, [gr_state], [gr_state, chatbot])
|
| 210 |
clear_btn.click(reset, [], [gr_state, chatbot])
|
| 211 |
share_button.click(None, [], [], _js=share_js)
|
| 212 |
+
save_button.click(None, [], [], _js=save_js)
|
| 213 |
|
| 214 |
|
| 215 |
+
demo.queue(concurrency_count=1, api_open=False, max_size=16)
|
| 216 |
+
demo.launch(debug=True, server_name="0.0.0.0")
|
fromage/models.py
CHANGED
|
@@ -635,7 +635,7 @@ def load_fromage(embeddings_dir: str, model_args_path: str, model_ckpt_path: str
|
|
| 635 |
assert len(ret_token_idx) == 1, ret_token_idx
|
| 636 |
model_kwargs['retrieval_token_idx'] = ret_token_idx[0]
|
| 637 |
|
| 638 |
-
debug =
|
| 639 |
if debug:
|
| 640 |
model_kwargs['opt_version'] = 'facebook/opt-125m'
|
| 641 |
model_kwargs['visual_encoder'] = 'openai/clip-vit-base-patch32'
|
|
|
|
| 635 |
assert len(ret_token_idx) == 1, ret_token_idx
|
| 636 |
model_kwargs['retrieval_token_idx'] = ret_token_idx[0]
|
| 637 |
|
| 638 |
+
debug = False
|
| 639 |
if debug:
|
| 640 |
model_kwargs['opt_version'] = 'facebook/opt-125m'
|
| 641 |
model_kwargs['visual_encoder'] = 'openai/clip-vit-base-patch32'
|
share_btn.py
CHANGED
|
@@ -68,4 +68,45 @@ async () => {
|
|
| 68 |
shareIconEl.style.removeProperty('display');
|
| 69 |
loadingIconEl.style.display = 'none';
|
| 70 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
"""
|
|
|
|
| 68 |
shareIconEl.style.removeProperty('display');
|
| 69 |
loadingIconEl.style.display = 'none';
|
| 70 |
}
|
| 71 |
+
"""
|
| 72 |
+
|
| 73 |
+
save_js = """
|
| 74 |
+
async () => {
|
| 75 |
+
const html2canvas = (await import('https://cdnjs.cloudflare.com/ajax/libs/html2canvas/1.4.1/html2canvas.esm.js')).default;
|
| 76 |
+
|
| 77 |
+
function saveAs(uri, filename) {
|
| 78 |
+
var link = document.createElement('a');
|
| 79 |
+
if (typeof link.download === 'string') {
|
| 80 |
+
link.href = uri;
|
| 81 |
+
link.download = filename;
|
| 82 |
+
|
| 83 |
+
//Firefox requires the link to be in the body
|
| 84 |
+
document.body.appendChild(link);
|
| 85 |
+
|
| 86 |
+
//simulate click
|
| 87 |
+
link.click();
|
| 88 |
+
|
| 89 |
+
//remove the link when done
|
| 90 |
+
document.body.removeChild(link);
|
| 91 |
+
} else {
|
| 92 |
+
window.open(uri);
|
| 93 |
+
}
|
| 94 |
+
}
|
| 95 |
+
|
| 96 |
+
async function getImageFile(div) {
|
| 97 |
+
return new Promise((resolve, reject) =>
|
| 98 |
+
html2canvas(div)
|
| 99 |
+
.then((canvas) => {
|
| 100 |
+
const imageId = Date.now();
|
| 101 |
+
const fileName = "FROMAGe-" + imageId + ".jpg";
|
| 102 |
+
saveAs(canvas.toDataURL(), fileName);
|
| 103 |
+
})
|
| 104 |
+
|
| 105 |
+
)
|
| 106 |
+
}
|
| 107 |
+
const gradioEl = document.querySelector("gradio-app").shadowRoot || document.querySelector('body > gradio-app');
|
| 108 |
+
const chatbotEl = gradioEl.querySelector('#chatbot')
|
| 109 |
+
const imageFile = await getImageFile(chatbotEl);
|
| 110 |
+
console.log(imageFile);
|
| 111 |
+
}
|
| 112 |
"""
|