From 5c00be4edd24ac6b7d0ed0522100fb2e2c489567 Mon Sep 17 00:00:00 2001 From: Zixiao Wang Date: Fri, 24 Jan 2025 14:11:46 +0800 Subject: [PATCH] updated image and video upload --- __pycache__/pipeline_setup.cpython-312.pyc | Bin 583 -> 583 bytes endpoints/image.py | 65 +++--- endpoints/text.py | 24 +-- endpoints/video.py | 198 ++++++++----------- flagged/log.csv | 2 + flagged/prompts/fdd45d065153a29e7e3d/1.2.png | Bin 0 -> 44605 bytes pipeline_setup.py | 5 +- ui.py | 54 ++++- 8 files changed, 173 insertions(+), 175 deletions(-) create mode 100644 flagged/log.csv create mode 100644 flagged/prompts/fdd45d065153a29e7e3d/1.2.png diff --git a/__pycache__/pipeline_setup.cpython-312.pyc b/__pycache__/pipeline_setup.cpython-312.pyc index 6ed984458cf9e3d41ccda65187898c6704e9a3c5..e64fb630bf4143777d1d5b10d831b2a081a3a4cf 100644 GIT binary patch delta 58 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 literal 0 HcmV?d00001 diff --git a/pipeline_setup.py b/pipeline_setup.py index 46f4faf..4641409 100644 --- a/pipeline_setup.py +++ b/pipeline_setup.py @@ -9,8 +9,9 @@ pipe = pipeline( model, backend_config=TurbomindEngineConfig( model_format="awq", - tp=2, - device_ids=[0, 1], + # tp=2, + tp=4, + # device_ids=[0, 1], session_len=12864, max_batch_size=1, cache_max_entry_count=0.05, diff --git a/ui.py b/ui.py index 3263e18..edb62a2 100644 --- a/ui.py +++ b/ui.py @@ -1,9 +1,17 @@ -import gradio as gr +import os import asyncio +import gradio as gr +from gradio_image_prompter import ImagePrompter from endpoints.text import text_query from endpoints.image import image_query from endpoints.video import video_query +os.environ["CUDA_VISIBLE_DEVICES"] = "0,1" + +import torch +print("Available GPUs:", torch.cuda.device_count()) +print("Visible Devices:", [torch.cuda.get_device_name(i) for i in range(torch.cuda.device_count())]) + def setup_ui(): with gr.Blocks() as ui: gr.Markdown( @@ -32,13 +40,39 @@ def setup_ui(): with gr.Tab("Image Query"): gr.Markdown("### Submit an Image Query") with gr.Row(): - image_input = gr.File(label="Upload Image") + image_prompter = ImagePrompter(show_label=False) image_question_input = gr.Textbox(label="Your Question", placeholder="Type your question here...") image_button = gr.Button("Submit") image_output = gr.Textbox(label="Response", interactive=False) + + # async def handle_image_query(prompts, question): + # response = await image_query(prompts["image"], question) + # return response["response"] if "response" in response else response["error"] + + async def handle_image_query(prompts, question): + """ + Handles the image query and ensures that inputs are valid. + """ + try: + # Validate prompts + if prompts is None or "image" not in prompts: + return "No image provided. Please upload an image." + + image_data = prompts["image"] + + # Check if image_data is valid + if image_data is None: + return "Invalid image input. Please upload a valid image." + + # Call the `image_query` function + response = await image_query(image_data, question) + return response["response"] if "response" in response else response["error"] + except Exception as e: + return str(e) + image_button.click( - fn=lambda img, q: asyncio.run(image_query(img, q)), - inputs=[image_input, image_question_input], + fn=handle_image_query, + inputs=[image_prompter, image_question_input], outputs=[image_output] ) @@ -46,18 +80,24 @@ def setup_ui(): with gr.Tab("Video Query"): gr.Markdown("### Submit a Video Query") with gr.Row(): - video_input = gr.File(label="Upload Video") + video_input = gr.Video(label="Upload Video") video_question_input = gr.Textbox(label="Your Question", placeholder="Type your question here...") video_button = gr.Button("Submit") video_output = gr.Textbox(label="Response", interactive=False) + + async def handle_video_query(video, question): + response = await video_query(video, question) + return response.get("responses", response.get("error", "Error processing video.")) + video_button.click( - fn=lambda vid, q: asyncio.run(video_query(vid, q)), + fn=handle_video_query, inputs=[video_input, video_question_input], outputs=[video_output] ) + return ui if __name__ == "__main__": ui = setup_ui() - ui.launch(server_name="0.0.0.0", server_port=7860) \ No newline at end of file + ui.launch(server_name="0.0.0.0", server_port=8002)