import spaces import gradio as gr from joycaption import stream_chat_mod, get_text_model, change_text_model, get_repo_gguf JC_TITLE_MD = "

JoyCaption Alpha One Mod

" JC_DESC_MD = """This space is mod of [fancyfeast/joy-caption-alpha-one](https://huggingface.co/spaces/fancyfeast/joy-caption-alpha-one), [Wi-zz/joy-caption-pre-alpha](https://huggingface.co/Wi-zz/joy-caption-pre-alpha). Thanks to [dominic1021](https://huggingface.co/dominic1021)""" css = """ .info {text-align:center; !important} """ with gr.Blocks(fill_width=True, css=css, delete_cache=(60, 3600)) as demo: gr.HTML(JC_TITLE_MD) with gr.Row(): with gr.Column(): with gr.Group(): jc_input_image = gr.Image(type="pil", label="Input Image", sources=["upload", "clipboard"], height=384) with gr.Row(): jc_caption_type = gr.Dropdown( choices=["descriptive", "training_prompt", "rng-tags"], label="Caption Type", value="descriptive", ) jc_caption_tone = gr.Dropdown( choices=["formal", "informal"], label="Caption Tone", value="formal", ) jc_caption_length = gr.Dropdown( choices=["any", "very short", "short", "medium-length", "long", "very long"] + [str(i) for i in range(20, 261, 10)], label="Caption Length", value="any", ) gr.Markdown("**Note:** Caption tone doesn't affect `rng-tags` and `training_prompt`.", elem_classes="info") with gr.Accordion("Advanced", open=False): with gr.Row(): jc_text_model = gr.Dropdown(label="LLM Model", info="You can enter a huggingface model repo_id to want to use.", choices=get_text_model(), value=get_text_model()[0], allow_custom_value=True, interactive=True, min_width=320) jc_gguf = gr.Dropdown(label=f"GGUF Filename", choices=[], value="", allow_custom_value=True, min_width=320, visible=False) jc_nf4 = gr.Checkbox(label="Use NF4 quantization", value=True) jc_text_model_button = gr.Button("Load Model", variant="secondary", visible=False) jc_use_inference_client = gr.Checkbox(label="Use Inference Client", value=False, visible=False) with gr.Row(): jc_tokens = gr.Slider(minimum=1, maximum=4096, value=300, step=1, label="Max tokens") jc_temperature = gr.Slider(minimum=0.1, maximum=4.0, value=0.6, step=0.1, label="Temperature") jc_topp = gr.Slider(minimum=0, maximum=2.0, value=0.9, step=0.01, label="Top-P") jc_run_button = gr.Button("Caption", variant="primary") with gr.Column(): jc_output_caption = gr.Textbox(label="Caption", show_copy_button=True) gr.Markdown(JC_DESC_MD, elem_classes="info") gr.LoginButton() gr.DuplicateButton(value="Duplicate Space for private use (This demo does not work on CPU. Requires GPU Space)") jc_run_button.click(fn=stream_chat_mod, inputs=[jc_input_image, jc_caption_type, jc_caption_tone, jc_caption_length, jc_tokens, jc_topp, jc_temperature, jc_text_model], outputs=[jc_output_caption]) jc_text_model.change(change_text_model, [jc_text_model, jc_use_inference_client, jc_gguf, jc_nf4], [jc_text_model], show_api=False) #jc_text_model_button.click(change_text_model, [jc_text_model, jc_use_inference_client, jc_gguf, jc_nf4], [jc_text_model], show_api=False) #jc_text_model.change(get_repo_gguf, [jc_text_model], [jc_gguf], show_api=False) #jc_use_inference_client.change(change_text_model, [jc_text_model, jc_use_inference_client], [jc_text_model], show_api=False) if __name__ == "__main__": #demo.queue() demo.launch()