| |
| import gradio as gr |
|
|
| from ui.agent import respond |
| from ui.agent.system_prompt import BORDERLESS_SYSTEM_PROMPT |
| from ui.chat.defaults import DEFAULT_MAX_TOKENS, DEFAULT_TEMPERATURE, DEFAULT_TOP_P |
| from ui.chat.panel import SidebarChatInterface |
| from ui.globe import render_globe_panel |
| from ui.globe_commands import empty_globe_state |
| from ui.intake import render_intake_panel |
|
|
|
|
| def create_main_workspace( |
| history_container: gr.Column | None = None, |
| ) -> gr.ChatInterface: |
| """ |
| Compose the main workspace: globe panel, intake form, and chat. |
| """ |
| globe_state = gr.JSON(value=empty_globe_state(), visible=False, elem_id="globe-state") |
| chat_input = gr.MultimodalTextbox( |
| show_label=False, |
| placeholder="Create a prompt from the form, choose a demo, or type directly...", |
| file_count="multiple", |
| sources=["upload"], |
| lines=3, |
| max_lines=12, |
| elem_classes=["borderless-chat-input"], |
| render=False, |
| ) |
|
|
| with gr.Row(elem_classes=["borderless-main-workspace"], equal_height=True): |
| with gr.Column( |
| scale=7, |
| min_width=520, |
| elem_classes=["borderless-center-panel"], |
| ): |
| globe_column = gr.Column(elem_classes=["globe-column"]) |
| with globe_column: |
| render_globe_panel(height="70vh") |
|
|
| with gr.Column( |
| scale=4, |
| min_width=360, |
| elem_classes=["borderless-chat-panel"], |
| ): |
| render_intake_panel(chat_input) |
| chat = SidebarChatInterface( |
| respond, |
| multimodal=True, |
| chatbot=gr.Chatbot( |
| show_label=False, |
| container=False, |
| elem_classes=["borderless-chatbot"], |
| ), |
| textbox=chat_input, |
| history_container=history_container, |
| fill_height=True, |
| additional_inputs=[ |
| gr.State(BORDERLESS_SYSTEM_PROMPT), |
| gr.State(DEFAULT_MAX_TOKENS), |
| gr.State(DEFAULT_TEMPERATURE), |
| gr.State(DEFAULT_TOP_P), |
| globe_state, |
| ], |
| additional_outputs=[globe_state], |
| ) |
|
|
| globe_state.change( |
| fn=None, |
| inputs=[globe_state], |
| outputs=[], |
| js="(state) => { window.BorderlessGlobe?.applyState(state); return []; }", |
| queue=False, |
| ) |
| return chat |
|
|