import gradio as gr from llm_models import get_text_image_pairs import time from tqdm import tqdm title_markdown = ("""
MoE-LLaVA🚀

الراوي


صانع القصص بالذكاء الاصطناعي التوليدي

""") def get_text_images_values(k, input_prompt): pages = int(k) segments_list, images_names = get_text_image_pairs(pages,input_prompt) return segments_list, images_names css = """ .gradio-container {direction: rtl} .gradio-container-4-18-0 .prose h1 {direction: rtl}; } """ with gr.Blocks(css=css) as demo: gr.Markdown(title_markdown) prompt = gr.Textbox(label="معلومات بسيطة عن القصة", info="أدخل بعض المعلومات عن القصة، مثلاً: خالد صبي في الرابعة من عمره، ويحب أن يصبح طياراً في المستقبل", placeholder="خالد صبي في الرابعة من عمره، ويحب أن يصبح طياراً في المستقبل", text_align="right", rtl=True, elem_classes="rtl-textbox", elem_id="rtl-textbox") with gr.Row(): max_textboxes = 10 # Define the max number of textboxed, so we will add the max number of textboxes and images to the layout def variable_outputs(k, segments_list): k = int(k) return [gr.Textbox(label= f"الصفحة رقم {i+1}", value=item, text_align="right", visible=True) for i, item in enumerate(segments_list)] + [gr.Textbox(visible=False, text_align="right", rtl=True)]*(max_textboxes-k) def variable_outputs_image(k,images_names): k = int(k) return [gr.Image(value=item, scale=1, visible=True) for item in images_names] + [gr.Image(scale=1,visible=False)]*(max_textboxes-k) with gr.Column(): s = gr.Slider(1, max_textboxes, value=1, step=1, info="أقصى عدد صفحات يمكن توليده هو 10 صفحات",label="كم عدد صفحات القصة التي تريدها؟") textboxes = [] imageboxes = [] for i in tqdm(range(max_textboxes)): with gr.Row(): i_t = gr.Image(visible=False) t = gr.Textbox(visible=False) imageboxes.append(i_t) textboxes.append(t) segment_list = gr.JSON(value=[],visible=False) images_list = gr.JSON(value=[], visible=False) submit = gr.Button(value="أنشئ القصة الآن") submit.click( fn=get_text_images_values, inputs=[s,prompt], outputs=[segment_list, images_list] ).then( fn=variable_outputs, inputs=[s, segment_list], outputs=textboxes, ).then( fn=variable_outputs_image, inputs=[s, images_list], outputs=imageboxes, ) demo.launch()