Spaces:
Runtime error
Runtime error
Commit
·
d58b4eb
1
Parent(s):
761a8b4
fixed the sidebar issue
Browse files- __pycache__/graph.cpython-313.pyc +0 -0
- app.log +42 -0
- app.py +250 -106
- setup.md +6 -0
__pycache__/graph.cpython-313.pyc
CHANGED
|
Binary files a/__pycache__/graph.cpython-313.pyc and b/__pycache__/graph.cpython-313.pyc differ
|
|
|
app.log
CHANGED
|
@@ -54842,3 +54842,45 @@ For troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/er
|
|
| 54842 |
2025-06-11 00:25:24:__main__:INFO: Starting the interface
|
| 54843 |
2025-06-11 00:26:09:__main__:INFO: Starting the interface
|
| 54844 |
2025-06-11 00:28:10:__main__:INFO: Starting the interface
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 54842 |
2025-06-11 00:25:24:__main__:INFO: Starting the interface
|
| 54843 |
2025-06-11 00:26:09:__main__:INFO: Starting the interface
|
| 54844 |
2025-06-11 00:28:10:__main__:INFO: Starting the interface
|
| 54845 |
+
2025-06-25 07:58:26:__main__:INFO: Starting the interface
|
| 54846 |
+
2025-06-25 07:58:53:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54847 |
+
2025-06-25 07:59:44:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54848 |
+
2025-06-25 07:59:49:__main__:ERROR: Exception occurred
|
| 54849 |
+
Traceback (most recent call last):
|
| 54850 |
+
File "C:\_projects\huggingface_agents\mcp-hacthon\DIY_agent\version0.0.2\DIY_assistant\app.py", line 115, in chat_fn
|
| 54851 |
+
async for stream_mode, chunk in graph.astream(
|
| 54852 |
+
...<56 lines>...
|
| 54853 |
+
yield output, gr.skip(), gr.skip()
|
| 54854 |
+
File "C:\_projects\huggingface_agents\mcp-hacthon\DIY_agent\version0.0.2\DIY_assistant\venv\Lib\site-packages\langgraph\pregel\__init__.py", line 2677, in astream
|
| 54855 |
+
raise GraphRecursionError(msg)
|
| 54856 |
+
langgraph.errors.GraphRecursionError: Recursion limit of 20 reached without hitting a stop condition. You can increase the limit by setting the `recursion_limit` config key.
|
| 54857 |
+
For troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/GRAPH_RECURSION_LIMIT
|
| 54858 |
+
2025-06-25 08:00:58:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54859 |
+
2025-06-25 08:01:24:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54860 |
+
2025-06-25 08:01:48:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54861 |
+
2025-06-25 08:02:22:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54862 |
+
2025-06-25 08:02:35:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54863 |
+
2025-06-25 08:03:34:__main__:ERROR: Exception occurred
|
| 54864 |
+
Traceback (most recent call last):
|
| 54865 |
+
File "C:\_projects\huggingface_agents\mcp-hacthon\DIY_agent\version0.0.2\DIY_assistant\app.py", line 115, in chat_fn
|
| 54866 |
+
async for stream_mode, chunk in graph.astream(
|
| 54867 |
+
...<56 lines>...
|
| 54868 |
+
yield output, gr.skip(), gr.skip()
|
| 54869 |
+
File "C:\_projects\huggingface_agents\mcp-hacthon\DIY_agent\version0.0.2\DIY_assistant\venv\Lib\site-packages\langgraph\pregel\__init__.py", line 2677, in astream
|
| 54870 |
+
raise GraphRecursionError(msg)
|
| 54871 |
+
langgraph.errors.GraphRecursionError: Recursion limit of 20 reached without hitting a stop condition. You can increase the limit by setting the `recursion_limit` config key.
|
| 54872 |
+
For troubleshooting, visit: https://python.langchain.com/docs/troubleshooting/errors/GRAPH_RECURSION_LIMIT
|
| 54873 |
+
2025-06-26 07:52:38:__main__:INFO: Starting the interface
|
| 54874 |
+
2025-06-26 07:53:03:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54875 |
+
2025-06-26 08:07:53:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54876 |
+
2025-06-26 08:08:07:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54877 |
+
2025-06-26 08:08:16:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54878 |
+
2025-06-26 08:08:34:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54879 |
+
2025-06-26 08:09:15:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54880 |
+
2025-06-26 08:09:33:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54881 |
+
2025-06-26 08:09:48:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54882 |
+
2025-06-26 08:09:50:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54883 |
+
2025-06-26 08:10:13:__main__:INFO: Starting the interface
|
| 54884 |
+
2025-06-26 08:10:16:__main__:INFO: Greeting added for new user via handle_initial_greeting_load.
|
| 54885 |
+
2025-06-26 08:10:39:__main__:INFO: Prompt: You are a helpful assistant.
|
| 54886 |
+
2025-06-26 08:10:51:__main__:INFO: Prompt: You are a helpful assistant.
|
app.py
CHANGED
|
@@ -592,111 +592,62 @@ if __name__ == "__main__":
|
|
| 592 |
str()
|
| 593 |
)
|
| 594 |
prompt_textbox.change(lambda prompt: prompt, inputs=[prompt_textbox], outputs=[current_prompt_state])
|
|
|
|
|
|
|
|
|
|
| 595 |
with gr.Sidebar() as sidebar:
|
| 596 |
-
@gr.render(inputs=[tab_edit_uuid_state, end_of_assistant_response_state, sidebar_names_state, current_uuid_state, chatbot, offloaded_tabs_data_storage])
|
| 597 |
-
def render_chats(tab_uuid_edit, end_of_chat_response, sidebar_summaries, active_uuid, messages, tabs):
|
| 598 |
-
current_tab_button_text = ""
|
| 599 |
-
if active_uuid not in sidebar_summaries:
|
| 600 |
-
current_tab_button_text = "Current Chat"
|
| 601 |
-
elif active_uuid not in tabs:
|
| 602 |
-
current_tab_button_text = sidebar_summaries[active_uuid]
|
| 603 |
-
if current_tab_button_text:
|
| 604 |
-
unique_id = f"current-tab-{active_uuid}-{uuid4()}"
|
| 605 |
-
gr.Button(
|
| 606 |
-
current_tab_button_text,
|
| 607 |
-
elem_classes=["chat-tab", "active"],
|
| 608 |
-
elem_id=unique_id # Add unique elem_id
|
| 609 |
-
)
|
| 610 |
-
for chat_uuid, tab in reversed(tabs.items()):
|
| 611 |
-
elem_classes = ["chat-tab"]
|
| 612 |
-
if chat_uuid == active_uuid:
|
| 613 |
-
elem_classes.append("active")
|
| 614 |
-
button_uuid_state = gr.State(chat_uuid)
|
| 615 |
-
with gr.Row():
|
| 616 |
-
clear_tab_button = gr.Button(
|
| 617 |
-
"🗑",
|
| 618 |
-
scale=0,
|
| 619 |
-
elem_classes=["tab-button-control"],
|
| 620 |
-
elem_id=f"delete-btn-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 621 |
-
)
|
| 622 |
-
clear_tab_button.click(
|
| 623 |
-
fn=delete_tab,
|
| 624 |
-
inputs=[
|
| 625 |
-
current_uuid_state,
|
| 626 |
-
button_uuid_state,
|
| 627 |
-
sidebar_names_state,
|
| 628 |
-
offloaded_tabs_data_storage
|
| 629 |
-
],
|
| 630 |
-
outputs=[
|
| 631 |
-
sidebar_names_state,
|
| 632 |
-
offloaded_tabs_data_storage,
|
| 633 |
-
chat_interface.chatbot_value
|
| 634 |
-
]
|
| 635 |
-
)
|
| 636 |
-
chat_button_text = sidebar_summaries.get(chat_uuid)
|
| 637 |
-
if not chat_button_text:
|
| 638 |
-
chat_button_text = str(chat_uuid)
|
| 639 |
-
if chat_uuid != tab_uuid_edit:
|
| 640 |
-
set_edit_tab_button = gr.Button(
|
| 641 |
-
"✎",
|
| 642 |
-
scale=0,
|
| 643 |
-
elem_classes=["tab-button-control"],
|
| 644 |
-
elem_id=f"edit-btn-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 645 |
-
)
|
| 646 |
-
set_edit_tab_button.click(
|
| 647 |
-
fn=lambda x: x,
|
| 648 |
-
inputs=[button_uuid_state],
|
| 649 |
-
outputs=[tab_edit_uuid_state]
|
| 650 |
-
)
|
| 651 |
-
chat_tab_button = gr.Button(
|
| 652 |
-
chat_button_text,
|
| 653 |
-
elem_id=f"chat-{chat_uuid}-{uuid4()}", # Add truly unique ID
|
| 654 |
-
elem_classes=elem_classes,
|
| 655 |
-
scale=2
|
| 656 |
-
)
|
| 657 |
-
chat_tab_button.click(
|
| 658 |
-
fn=switch_tab,
|
| 659 |
-
inputs=[
|
| 660 |
-
button_uuid_state,
|
| 661 |
-
offloaded_tabs_data_storage,
|
| 662 |
-
current_langgraph_state,
|
| 663 |
-
current_uuid_state,
|
| 664 |
-
chatbot,
|
| 665 |
-
prompt_textbox
|
| 666 |
-
],
|
| 667 |
-
outputs=[
|
| 668 |
-
current_langgraph_state,
|
| 669 |
-
current_uuid_state,
|
| 670 |
-
chat_interface.chatbot_value,
|
| 671 |
-
offloaded_tabs_data_storage,
|
| 672 |
-
prompt_textbox,
|
| 673 |
-
*followup_question_buttons
|
| 674 |
-
]
|
| 675 |
-
)
|
| 676 |
-
else:
|
| 677 |
-
chat_tab_text = gr.Textbox(
|
| 678 |
-
chat_button_text,
|
| 679 |
-
scale=2,
|
| 680 |
-
interactive=True,
|
| 681 |
-
show_label=False,
|
| 682 |
-
elem_id=f"edit-text-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 683 |
-
)
|
| 684 |
-
chat_tab_text.submit(
|
| 685 |
-
fn=submit_edit_tab,
|
| 686 |
-
inputs=[
|
| 687 |
-
button_uuid_state,
|
| 688 |
-
sidebar_names_state,
|
| 689 |
-
chat_tab_text
|
| 690 |
-
],
|
| 691 |
-
outputs=[
|
| 692 |
-
sidebar_names_state,
|
| 693 |
-
tab_edit_uuid_state
|
| 694 |
-
]
|
| 695 |
-
)
|
| 696 |
-
# )
|
| 697 |
-
# return chat_tabs, sidebar_summaries
|
| 698 |
new_chat_button = gr.Button("New Chat", elem_id="new-chat-button")
|
| 699 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 700 |
|
| 701 |
chat_interface = gr.ChatInterface(
|
| 702 |
chatbot=chatbot,
|
|
@@ -712,11 +663,204 @@ if __name__ == "__main__":
|
|
| 712 |
current_langgraph_state,
|
| 713 |
end_of_assistant_response_state
|
| 714 |
],
|
| 715 |
-
type="messages",
|
| 716 |
multimodal=multimodal,
|
| 717 |
textbox=textbox,
|
| 718 |
)
|
| 719 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 720 |
new_chat_button.click(
|
| 721 |
new_tab,
|
| 722 |
inputs=[
|
|
@@ -846,9 +990,9 @@ if __name__ == "__main__":
|
|
| 846 |
return current_prompt
|
| 847 |
|
| 848 |
|
| 849 |
-
|
| 850 |
|
| 851 |
-
demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
|
| 852 |
|
| 853 |
|
| 854 |
|
|
|
|
| 592 |
str()
|
| 593 |
)
|
| 594 |
prompt_textbox.change(lambda prompt: prompt, inputs=[prompt_textbox], outputs=[current_prompt_state])
|
| 595 |
+
|
| 596 |
+
MAX_CHATS_IN_SIDEBAR = 25
|
| 597 |
+
|
| 598 |
with gr.Sidebar() as sidebar:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 599 |
new_chat_button = gr.Button("New Chat", elem_id="new-chat-button")
|
| 600 |
+
|
| 601 |
+
# --- This is the "Component Pool" ---
|
| 602 |
+
# We create a fixed number of rows for our chats and hide them initially.
|
| 603 |
+
sidebar_chat_rows = []
|
| 604 |
+
for i in range(MAX_CHATS_IN_SIDEBAR):
|
| 605 |
+
with gr.Row(visible=False, elem_classes="chat-tab-row") as row:
|
| 606 |
+
# We need a gr.State to hold the unique ID for each chat in the list
|
| 607 |
+
chat_id_state = gr.State()
|
| 608 |
+
|
| 609 |
+
# The main button to switch to the chat
|
| 610 |
+
chat_button = gr.Button(scale=2)
|
| 611 |
+
|
| 612 |
+
# The delete button for the chat
|
| 613 |
+
delete_button = gr.Button("🗑", scale=0, elem_classes=["tab-button-control"])
|
| 614 |
+
|
| 615 |
+
sidebar_chat_rows.append({
|
| 616 |
+
"row": row,
|
| 617 |
+
"chat_id_state": chat_id_state,
|
| 618 |
+
"chat_button": chat_button,
|
| 619 |
+
"delete_button": delete_button
|
| 620 |
+
})
|
| 621 |
+
|
| 622 |
+
def update_sidebar_display(sidebar_summaries, all_tabs_data, active_uuid):
|
| 623 |
+
updates = []
|
| 624 |
+
|
| 625 |
+
# Use reversed to show the newest chats on top
|
| 626 |
+
chat_uuids_to_display = list(reversed(list(all_tabs_data.keys())))
|
| 627 |
+
|
| 628 |
+
for i in range(MAX_CHATS_IN_SIDEBAR):
|
| 629 |
+
if i < len(chat_uuids_to_display):
|
| 630 |
+
# If we have a chat for this slot, we make the row visible and update it.
|
| 631 |
+
chat_uuid = chat_uuids_to_display[i]
|
| 632 |
+
chat_name = sidebar_summaries.get(chat_uuid, f"Chat {i+1}")
|
| 633 |
+
|
| 634 |
+
elem_classes = ["chat-tab", "active"] if chat_uuid == active_uuid else ["chat-tab"]
|
| 635 |
+
|
| 636 |
+
updates.extend([
|
| 637 |
+
gr.update(visible=True), # Show the row
|
| 638 |
+
chat_uuid, # Set the UUID for this row
|
| 639 |
+
gr.update(value=chat_name, elem_classes=elem_classes), # Update the button text/style
|
| 640 |
+
gr.update(visible=True) # Show the delete button
|
| 641 |
+
])
|
| 642 |
+
else:
|
| 643 |
+
# If there's no chat for this slot, we hide the entire row.
|
| 644 |
+
updates.extend([
|
| 645 |
+
gr.update(visible=False), # Hide the row
|
| 646 |
+
None, # Clear the state
|
| 647 |
+
gr.update(value=""), # Clear button text
|
| 648 |
+
gr.update(visible=False) # Hide delete button
|
| 649 |
+
])
|
| 650 |
+
return updates
|
| 651 |
|
| 652 |
chat_interface = gr.ChatInterface(
|
| 653 |
chatbot=chatbot,
|
|
|
|
| 663 |
current_langgraph_state,
|
| 664 |
end_of_assistant_response_state
|
| 665 |
],
|
|
|
|
| 666 |
multimodal=multimodal,
|
| 667 |
textbox=textbox,
|
| 668 |
)
|
| 669 |
|
| 670 |
+
# --- Define all event listeners ONCE, outside of any update function ---
|
| 671 |
+
for components in sidebar_chat_rows:
|
| 672 |
+
# Event listener for switching to a different chat
|
| 673 |
+
components["chat_button"].click(
|
| 674 |
+
fn=switch_tab,
|
| 675 |
+
inputs=[
|
| 676 |
+
components["chat_id_state"], # The UUID of the clicked tab
|
| 677 |
+
offloaded_tabs_data_storage,
|
| 678 |
+
current_langgraph_state,
|
| 679 |
+
current_uuid_state,
|
| 680 |
+
chatbot,
|
| 681 |
+
prompt_textbox
|
| 682 |
+
],
|
| 683 |
+
outputs=[
|
| 684 |
+
current_langgraph_state,
|
| 685 |
+
current_uuid_state,
|
| 686 |
+
chat_interface.chatbot,
|
| 687 |
+
offloaded_tabs_data_storage,
|
| 688 |
+
prompt_textbox,
|
| 689 |
+
*followup_question_buttons,
|
| 690 |
+
]
|
| 691 |
+
)
|
| 692 |
+
|
| 693 |
+
# Event listener for deleting a chat
|
| 694 |
+
components["delete_button"].click(
|
| 695 |
+
fn=delete_tab,
|
| 696 |
+
inputs=[
|
| 697 |
+
current_uuid_state,
|
| 698 |
+
components["chat_id_state"], # The UUID of the tab to delete
|
| 699 |
+
sidebar_names_state,
|
| 700 |
+
offloaded_tabs_data_storage
|
| 701 |
+
],
|
| 702 |
+
outputs=[
|
| 703 |
+
sidebar_names_state,
|
| 704 |
+
offloaded_tabs_data_storage,
|
| 705 |
+
chat_interface.chatbot
|
| 706 |
+
]
|
| 707 |
+
)
|
| 708 |
+
|
| 709 |
+
# --- This section replaces the @gr.render decorator ---
|
| 710 |
+
# We trigger the update function whenever the underlying data changes.
|
| 711 |
+
sidebar_update_triggers = [
|
| 712 |
+
sidebar_names_state,
|
| 713 |
+
offloaded_tabs_data_storage,
|
| 714 |
+
current_uuid_state,
|
| 715 |
+
]
|
| 716 |
+
|
| 717 |
+
# The list of all components we need to update
|
| 718 |
+
sidebar_update_outputs = []
|
| 719 |
+
for comp_dict in sidebar_chat_rows:
|
| 720 |
+
sidebar_update_outputs.extend(comp_dict.values())
|
| 721 |
+
|
| 722 |
+
for trigger in sidebar_update_triggers:
|
| 723 |
+
trigger.change(
|
| 724 |
+
fn=update_sidebar_display,
|
| 725 |
+
inputs=[sidebar_names_state, offloaded_tabs_data_storage, current_uuid_state],
|
| 726 |
+
outputs=sidebar_update_outputs,
|
| 727 |
+
show_progress="hidden"
|
| 728 |
+
)
|
| 729 |
+
|
| 730 |
+
# Also trigger an update when the app loads
|
| 731 |
+
demo.load(
|
| 732 |
+
fn=update_sidebar_display,
|
| 733 |
+
inputs=[sidebar_names_state, offloaded_tabs_data_storage, current_uuid_state],
|
| 734 |
+
outputs=sidebar_update_outputs,
|
| 735 |
+
show_progress="hidden"
|
| 736 |
+
)
|
| 737 |
+
|
| 738 |
+
|
| 739 |
+
# with gr.Sidebar() as sidebar:
|
| 740 |
+
# @gr.render(inputs=[tab_edit_uuid_state, end_of_assistant_response_state, sidebar_names_state, current_uuid_state, chatbot, offloaded_tabs_data_storage])
|
| 741 |
+
# def render_chats(tab_uuid_edit, end_of_chat_response, sidebar_summaries, active_uuid, messages, tabs):
|
| 742 |
+
# current_tab_button_text = ""
|
| 743 |
+
# if active_uuid not in sidebar_summaries:
|
| 744 |
+
# current_tab_button_text = "Current Chat"
|
| 745 |
+
# elif active_uuid not in tabs:
|
| 746 |
+
# current_tab_button_text = sidebar_summaries[active_uuid]
|
| 747 |
+
# if current_tab_button_text:
|
| 748 |
+
# unique_id = f"current-tab-{active_uuid}-{uuid4()}"
|
| 749 |
+
# gr.Button(
|
| 750 |
+
# current_tab_button_text,
|
| 751 |
+
# elem_classes=["chat-tab", "active"],
|
| 752 |
+
# elem_id=unique_id # Add unique elem_id
|
| 753 |
+
# )
|
| 754 |
+
# for chat_uuid, tab in reversed(tabs.items()):
|
| 755 |
+
# elem_classes = ["chat-tab"]
|
| 756 |
+
# if chat_uuid == active_uuid:
|
| 757 |
+
# elem_classes.append("active")
|
| 758 |
+
# button_uuid_state = gr.State(chat_uuid)
|
| 759 |
+
# with gr.Row():
|
| 760 |
+
# clear_tab_button = gr.Button(
|
| 761 |
+
# "🗑",
|
| 762 |
+
# scale=0,
|
| 763 |
+
# elem_classes=["tab-button-control"],
|
| 764 |
+
# elem_id=f"delete-btn-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 765 |
+
# )
|
| 766 |
+
# clear_tab_button.click(
|
| 767 |
+
# fn=delete_tab,
|
| 768 |
+
# inputs=[
|
| 769 |
+
# current_uuid_state,
|
| 770 |
+
# button_uuid_state,
|
| 771 |
+
# sidebar_names_state,
|
| 772 |
+
# offloaded_tabs_data_storage
|
| 773 |
+
# ],
|
| 774 |
+
# outputs=[
|
| 775 |
+
# sidebar_names_state,
|
| 776 |
+
# offloaded_tabs_data_storage,
|
| 777 |
+
# chat_interface.chatbot_value
|
| 778 |
+
# ]
|
| 779 |
+
# )
|
| 780 |
+
# chat_button_text = sidebar_summaries.get(chat_uuid)
|
| 781 |
+
# if not chat_button_text:
|
| 782 |
+
# chat_button_text = str(chat_uuid)
|
| 783 |
+
# if chat_uuid != tab_uuid_edit:
|
| 784 |
+
# set_edit_tab_button = gr.Button(
|
| 785 |
+
# "✎",
|
| 786 |
+
# scale=0,
|
| 787 |
+
# elem_classes=["tab-button-control"],
|
| 788 |
+
# elem_id=f"edit-btn-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 789 |
+
# )
|
| 790 |
+
# set_edit_tab_button.click(
|
| 791 |
+
# fn=lambda x: x,
|
| 792 |
+
# inputs=[button_uuid_state],
|
| 793 |
+
# outputs=[tab_edit_uuid_state]
|
| 794 |
+
# )
|
| 795 |
+
# chat_tab_button = gr.Button(
|
| 796 |
+
# chat_button_text,
|
| 797 |
+
# elem_id=f"chat-{chat_uuid}-{uuid4()}", # Add truly unique ID
|
| 798 |
+
# elem_classes=elem_classes,
|
| 799 |
+
# scale=2
|
| 800 |
+
# )
|
| 801 |
+
# chat_tab_button.click(
|
| 802 |
+
# fn=switch_tab,
|
| 803 |
+
# inputs=[
|
| 804 |
+
# button_uuid_state,
|
| 805 |
+
# offloaded_tabs_data_storage,
|
| 806 |
+
# current_langgraph_state,
|
| 807 |
+
# current_uuid_state,
|
| 808 |
+
# chatbot,
|
| 809 |
+
# prompt_textbox
|
| 810 |
+
# ],
|
| 811 |
+
# outputs=[
|
| 812 |
+
# current_langgraph_state,
|
| 813 |
+
# current_uuid_state,
|
| 814 |
+
# chat_interface.chatbot_value,
|
| 815 |
+
# offloaded_tabs_data_storage,
|
| 816 |
+
# prompt_textbox,
|
| 817 |
+
# *followup_question_buttons
|
| 818 |
+
# ]
|
| 819 |
+
# )
|
| 820 |
+
# else:
|
| 821 |
+
# chat_tab_text = gr.Textbox(
|
| 822 |
+
# chat_button_text,
|
| 823 |
+
# scale=2,
|
| 824 |
+
# interactive=True,
|
| 825 |
+
# show_label=False,
|
| 826 |
+
# elem_id=f"edit-text-{chat_uuid}-{uuid4()}" # Add unique ID
|
| 827 |
+
# )
|
| 828 |
+
# chat_tab_text.submit(
|
| 829 |
+
# fn=submit_edit_tab,
|
| 830 |
+
# inputs=[
|
| 831 |
+
# button_uuid_state,
|
| 832 |
+
# sidebar_names_state,
|
| 833 |
+
# chat_tab_text
|
| 834 |
+
# ],
|
| 835 |
+
# outputs=[
|
| 836 |
+
# sidebar_names_state,
|
| 837 |
+
# tab_edit_uuid_state
|
| 838 |
+
# ]
|
| 839 |
+
# )
|
| 840 |
+
# # )
|
| 841 |
+
# # return chat_tabs, sidebar_summaries
|
| 842 |
+
# new_chat_button = gr.Button("New Chat", elem_id="new-chat-button")
|
| 843 |
+
# chatbot.clear(fn=clear, outputs=[current_langgraph_state, current_uuid_state])
|
| 844 |
+
|
| 845 |
+
# chat_interface = gr.ChatInterface(
|
| 846 |
+
# chatbot=chatbot,
|
| 847 |
+
# fn=chat_fn,
|
| 848 |
+
# additional_inputs=[
|
| 849 |
+
# current_langgraph_state,
|
| 850 |
+
# current_uuid_state,
|
| 851 |
+
# prompt_textbox,
|
| 852 |
+
# checkbox_search_enabled,
|
| 853 |
+
# checkbox_download_website_text,
|
| 854 |
+
# ],
|
| 855 |
+
# additional_outputs=[
|
| 856 |
+
# current_langgraph_state,
|
| 857 |
+
# end_of_assistant_response_state
|
| 858 |
+
# ],
|
| 859 |
+
# type="messages",
|
| 860 |
+
# multimodal=multimodal,
|
| 861 |
+
# textbox=textbox,
|
| 862 |
+
# )
|
| 863 |
+
|
| 864 |
new_chat_button.click(
|
| 865 |
new_tab,
|
| 866 |
inputs=[
|
|
|
|
| 990 |
return current_prompt
|
| 991 |
|
| 992 |
|
| 993 |
+
demo.launch(server_name="127.0.0.1", server_port=8080, share=True)
|
| 994 |
|
| 995 |
+
# demo.launch(server_name="0.0.0.0", server_port=7860, share=True)
|
| 996 |
|
| 997 |
|
| 998 |
|
setup.md
ADDED
|
@@ -0,0 +1,6 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
create a virtual enviremetn | windows --> python -m venv venv
|
| 2 |
+
activate the virtual environment | ./venv/scripts/activate
|
| 3 |
+
instll the requirements | pip install -r requirements.txt
|
| 4 |
+
run the project | gradio app.py
|
| 5 |
+
|
| 6 |
+
**make sure environment variable are set correctly**
|