""" ROSA-QKV-1bit 交互式演示应用 - 主程序 """ import gradio as gr from constants import ROSA_CODE, ROSA_QUICK_CODE, GRADIO_MAJOR, MAX_DEMO_LEN from code_highlighting import build_plain_code_html from code_builder import build_code_html from algorithm import initialize_line_numbers from ui_styles import CSS from javascript_handler import JS_FUNC, get_js_boot from ui_handlers import on_demo, on_random # 初始化行号映射 LINE_NUMBERS = initialize_line_numbers(ROSA_CODE) # 构建代码 HTML CODE_HTML = build_code_html(ROSA_CODE, LINE_NUMBERS) QUICK_CODE_HTML = build_plain_code_html(ROSA_QUICK_CODE, "rosa-code-quick") # 获取 JavaScript 启动代码 JS_BOOT = get_js_boot(JS_FUNC) # 创建 Gradio 应用 demo_context = gr.Blocks(css=CSS, js=JS_BOOT) with demo_context as demo: # 页面标题 gr.HTML( '" ) # 输入行 with gr.Row(): q_text = gr.Textbox(label="q sequence", value="01010101010101010101", lines=1) k_text = gr.Textbox(label="k sequence", value="10100110100110100110", lines=1) v_text = gr.Textbox(label="v sequence", value="11001100110011001100", lines=1) # 控制行 with gr.Row(): length = gr.Slider(4, 20, value=20, step=1, label="Random length") random_btn = gr.Button("Randomize") demo_btn = gr.Button("Start Demo", variant="primary") speed = gr.Slider( 0.1, 10.0, value=2.0, step=0.05, label="Playback speed", elem_id="speed_slider", interactive=True, ) theme_toggle = gr.Checkbox( label="Dark mode", value=False, elem_id="theme_toggle", ) # 输出 out_text = gr.Textbox(label="Output", interactive=False) steps_json = gr.Textbox( visible=True, elem_id="steps_json", elem_classes=["rosa-hidden"], ) # 可视化和代码面板 gr.HTML( f'
' f'
' f'
' f"{CODE_HTML}" f'
' f"Fast version (click to expand)" f"{QUICK_CODE_HTML}" f"
" f"
" f"
" ) # 绑定事件处理器 random_btn.click(on_random, inputs=[length], outputs=[q_text, k_text, v_text]) def on_demo_with_lines(q, k, v): return on_demo(q, k, v, LINE_NUMBERS) demo_btn.click( on_demo_with_lines, inputs=[q_text, k_text, v_text], outputs=[steps_json, out_text], ) demo.load( on_demo_with_lines, inputs=[q_text, k_text, v_text], outputs=[steps_json, out_text], ) if __name__ == "__main__": launch_kwargs = {} if GRADIO_MAJOR >= 6: launch_kwargs = {"css": CSS, "js": JS_BOOT, "ssr_mode": False} demo.launch(**launch_kwargs)