|
|
| import gradio as gr |
| import config |
| import ui_layout |
|
|
| |
| |
| |
|
|
| def create_core_instruction_tab(initial_settings): |
| """创建“核心指令”选项卡及其组件""" |
| with gr.Tab("核心指令"): |
| gr.Markdown("### I. 输入创作要求") |
| prompt_instruction = gr.Textbox( |
| label="📝 具体要求 / 本次提示", |
| lines=5, |
| placeholder="生成新内容或继续写作/重写时请在此提供具体指示..." |
| ) |
| target_outline_section = gr.Textbox( |
| label="🎯 聚焦大纲章节/要点", |
| lines=3, |
| placeholder="从下方'提取标题'选择或手动输入...", |
| value=initial_settings["target_outline_section"] |
| ) |
| rewrite_instruction_textbox = gr.Textbox( |
| label="✍️ 输入具体重写/修改要求", |
| lines=2, |
| value=initial_settings["rewrite_instruction_textbox"] |
| ) |
| |
| return { |
| "prompt_instruction": prompt_instruction, |
| "target_outline_section": target_outline_section, |
| "rewrite_instruction_textbox": rewrite_instruction_textbox |
| } |
|
|
| def create_parameters_tab(initial_settings): |
| """创建“参数设定”选项卡及其组件""" |
| with gr.Tab("参数设定"): |
| gr.Markdown("### II. 特定参数设定") |
| genre = gr.Dropdown( |
| config.GENRE_CHOICES, label="✍️ 类型", value=initial_settings["genre"] |
| ) |
| style = gr.Dropdown( |
| config.STYLE_CHOICES, label="🎨 写作风格", value=initial_settings["style"] |
| ) |
| word_count = gr.Slider( |
| minimum=100, maximum=8000, value=initial_settings["word_count"], step=50, label="📄 字数 (最大请求Token受限)" |
| ) |
| temperature_slider = gr.Slider( |
| minimum=0.1, maximum=2.0, step=0.1, label="🌡️ Temperature (随机性)", value=initial_settings["temperature"] |
| ) |
| return { |
| "genre": genre, |
| "style": style, |
| "word_count": word_count, |
| "temperature_slider": temperature_slider |
| } |
|
|
| def create_core_elements_tab(initial_settings): |
| """创建“核心要素 (小说)”选项卡及其组件""" |
| with gr.Tab("核心要素 (小说)"): |
| gr.Markdown("### III. 核心要素设定 (小说类专属)") |
| initial_visibility = "小说" in initial_settings["genre"] |
| core_chars = gr.Textbox(label="👤 核心人物简介", lines=3, value=initial_settings["core_chars"], visible=initial_visibility) |
| core_setting = gr.Textbox(label="🌍 世界观/主要设定", lines=3, value=initial_settings["core_setting"], visible=initial_visibility) |
| core_plot = gr.Textbox(label="📈 核心情节要点", lines=3, value=initial_settings["core_plot"], visible=initial_visibility) |
| return { |
| "core_chars": core_chars, |
| "core_setting": core_setting, |
| "core_plot": core_plot |
| } |
|
|
| def create_files_save_tab(initial_settings): |
| """创建“文件与保存”选项卡及其组件""" |
| with gr.Tab("文件与保存"): |
| gr.Markdown("### IV. 大纲文件") |
| upload_btn = gr.File(label="📂 上传大纲 (.pdf, .docx, .txt)", file_types=config.FILE_TYPES) |
| outline_headings_display = gr.Dropdown(label="👀 提取到的标题列表 (供参考/复制)", choices=[], interactive=False) |
| gr.Markdown("---") |
| gr.Markdown("### VI. 手动保存/下载") |
| save_basename_textbox = gr.Textbox(label="📄 文件名", value=initial_settings["save_basename_textbox"], scale=2) |
| with gr.Row(): |
| save_format_dropdown = gr.Dropdown(choices=config.SAVE_FORMAT_CHOICES, value="Markdown (.md)", label="💾 下载格式", scale=2) |
| download_button = gr.Button("💻 下载到本地", scale=1) |
| save_to_drive_button = gr.Button("☁️ 手动另存到 Drive", scale=1) |
| save_status_display = gr.Markdown("") |
| download_file_output = gr.File(label="📎 下载链接", interactive=False) |
| gr.Markdown("---") |
| gr.Markdown("### VII. 应用设置") |
| save_settings_button = gr.Button("⚙️ 保存当前所有设置和历史到 Drive") |
| settings_save_status_display = gr.Markdown("") |
| return { |
| "upload_btn": upload_btn, |
| "outline_headings_display": outline_headings_display, |
| "save_basename_textbox": save_basename_textbox, |
| "save_format_dropdown": save_format_dropdown, |
| "download_button": download_button, |
| "save_to_drive_button": save_to_drive_button, |
| "save_status_display": save_status_display, |
| "download_file_output": download_file_output, |
| "save_settings_button": save_settings_button, |
| "settings_save_status_display": settings_save_status_display |
| } |
|
|
| def create_action_buttons(): |
| """创建执行操作按钮行""" |
| gr.Markdown("### V. 执行操作") |
| with gr.Row(): |
| generate_btn = gr.Button("🚀 生成新内容", variant="primary") |
| continue_btn = gr.Button("➡️ 继续写作") |
| rewrite_btn = gr.Button("✍️ 重写编辑后文本") |
| return { |
| "generate_btn": generate_btn, |
| "continue_btn": continue_btn, |
| "rewrite_btn": rewrite_btn |
| } |
|
|
| def create_output_area(initial_full_text): |
| """创建右侧输出区域""" |
| gr.Markdown("## AI 生成结果 (完整文稿)") |
| output_textbox = gr.Textbox( |
| label="💡 输出区域 (流式显示, 会自动保存)", |
| lines=35, |
| interactive=True, |
| value=initial_full_text, |
| show_copy_button=True |
| ) |
| return {"output_textbox": output_textbox} |
|
|
| print("✅ ui_layout.py created.") |
|
|