# Keywords.py # Purpose: This file contains the functions to create the Keywords tab in the Gradio UI. # # The Keywords tab allows the user to add, delete, view, and export keywords from the database. # # Imports: # # External Imports import gradio as gr from App_Function_Libraries.DB.Character_Chat_DB import view_char_keywords, add_char_keywords, delete_char_keyword, \ export_char_keywords_to_csv # # Internal Imports from App_Function_Libraries.DB.DB_Manager import add_keyword, delete_keyword, keywords_browser_interface, export_keywords_to_csv from App_Function_Libraries.DB.Prompts_DB import view_prompt_keywords, delete_prompt_keyword, \ export_prompt_keywords_to_csv from App_Function_Libraries.DB.RAG_QA_Chat_DB import view_rag_keywords, get_all_collections, \ get_keywords_for_collection, create_keyword_collection, add_keyword_to_collection, delete_rag_keyword, \ export_rag_keywords_to_csv # ###################################################################################################################### # # Functions: def create_export_keywords_tab(): with gr.TabItem("Export MediaDB Keywords", visible=True): with gr.Row(): with gr.Column(): export_keywords_button = gr.Button("Export Keywords") with gr.Column(): export_keywords_output = gr.File(label="Download Exported Keywords") export_keywords_status = gr.Textbox(label="Export Status") export_keywords_button.click( fn=export_keywords_to_csv, outputs=[export_keywords_status, export_keywords_output] ) def create_view_keywords_tab(): with gr.TabItem("View MediaDB Keywords", visible=True): gr.Markdown("# Browse MediaDB Keywords") with gr.Column(): browse_output = gr.Markdown() browse_button = gr.Button("View Existing Keywords") browse_button.click(fn=keywords_browser_interface, outputs=browse_output) def create_add_keyword_tab(): with gr.TabItem("Add MediaDB Keywords", visible=True): with gr.Row(): with gr.Column(): gr.Markdown("# Add Keywords to the Database") add_input = gr.Textbox(label="Add Keywords (comma-separated)", placeholder="Enter keywords here...") add_button = gr.Button("Add Keywords") with gr.Row(): add_output = gr.Textbox(label="Result") add_button.click(fn=add_keyword, inputs=add_input, outputs=add_output) def create_delete_keyword_tab(): with gr.Tab("Delete MediaDB Keywords", visible=True): with gr.Row(): with gr.Column(): gr.Markdown("# Delete Keywords from the Database") delete_input = gr.Textbox(label="Delete Keyword", placeholder="Enter keyword to delete here...") delete_button = gr.Button("Delete Keyword") with gr.Row(): delete_output = gr.Textbox(label="Result") delete_button.click(fn=delete_keyword, inputs=delete_input, outputs=delete_output) # # End of Media DB Keyword tabs ########################################################## ############################################################ # # Character DB Keyword functions def create_character_keywords_tab(): """Creates the Character Keywords management tab""" with gr.Tab("Character Keywords"): gr.Markdown("# Character Keywords Management") with gr.Tabs(): # View Character Keywords Tab with gr.TabItem("View Keywords"): with gr.Column(): refresh_char_keywords = gr.Button("Refresh Character Keywords") char_keywords_output = gr.Markdown() view_char_keywords() refresh_char_keywords.click( fn=view_char_keywords, outputs=char_keywords_output ) # Add Character Keywords Tab with gr.TabItem("Add Keywords"): with gr.Column(): char_name = gr.Textbox(label="Character Name") new_keywords = gr.Textbox(label="New Keywords (comma-separated)") add_char_keyword_btn = gr.Button("Add Keywords") add_char_result = gr.Markdown() add_char_keyword_btn.click( fn=add_char_keywords, inputs=[char_name, new_keywords], outputs=add_char_result ) # Delete Character Keywords Tab (New) with gr.TabItem("Delete Keywords"): with gr.Column(): delete_char_name = gr.Textbox(label="Character Name") delete_char_keyword_input = gr.Textbox(label="Keyword to Delete") delete_char_keyword_btn = gr.Button("Delete Keyword") delete_char_result = gr.Markdown() delete_char_keyword_btn.click( fn=delete_char_keyword, inputs=[delete_char_name, delete_char_keyword_input], outputs=delete_char_result ) # Export Character Keywords Tab (New) with gr.TabItem("Export Keywords"): with gr.Column(): export_char_keywords_btn = gr.Button("Export Character Keywords") export_char_file = gr.File(label="Download Exported Keywords") export_char_status = gr.Textbox(label="Export Status") export_char_keywords_btn.click( fn=export_char_keywords_to_csv, outputs=[export_char_status, export_char_file] ) # # End of Character Keywords tab ########################################################## ############################################################ # # RAG QA Keywords functions def create_rag_qa_keywords_tab(): """Creates the RAG QA Keywords management tab""" with gr.Tab("RAG QA Keywords"): gr.Markdown("# RAG QA Keywords Management") with gr.Tabs(): # View RAG QA Keywords Tab with gr.TabItem("View Keywords"): with gr.Column(): refresh_rag_keywords = gr.Button("Refresh RAG QA Keywords") rag_keywords_output = gr.Markdown() view_rag_keywords() refresh_rag_keywords.click( fn=view_rag_keywords, outputs=rag_keywords_output ) # Add RAG QA Keywords Tab with gr.TabItem("Add Keywords"): with gr.Column(): new_rag_keywords = gr.Textbox(label="New Keywords (comma-separated)") add_rag_keyword_btn = gr.Button("Add Keywords") add_rag_result = gr.Markdown() add_rag_keyword_btn.click( fn=add_keyword, inputs=new_rag_keywords, outputs=add_rag_result ) # Delete RAG QA Keywords Tab (New) with gr.TabItem("Delete Keywords"): with gr.Column(): delete_rag_keyword_input = gr.Textbox(label="Keyword to Delete") delete_rag_keyword_btn = gr.Button("Delete Keyword") delete_rag_result = gr.Markdown() delete_rag_keyword_btn.click( fn=delete_rag_keyword, inputs=delete_rag_keyword_input, outputs=delete_rag_result ) # Export RAG QA Keywords Tab (New) with gr.TabItem("Export Keywords"): with gr.Column(): export_rag_keywords_btn = gr.Button("Export RAG QA Keywords") export_rag_file = gr.File(label="Download Exported Keywords") export_rag_status = gr.Textbox(label="Export Status") export_rag_keywords_btn.click( fn=export_rag_keywords_to_csv, outputs=[export_rag_status, export_rag_file] ) # # End of RAG QA Keywords tab ########################################################## ############################################################ # # Prompt Keywords functions def create_prompt_keywords_tab(): """Creates the Prompt Keywords management tab""" with gr.Tab("Prompt Keywords"): gr.Markdown("# Prompt Keywords Management") with gr.Tabs(): # View Keywords Tab with gr.TabItem("View Keywords"): with gr.Column(): refresh_prompt_keywords = gr.Button("Refresh Prompt Keywords") prompt_keywords_output = gr.Markdown() refresh_prompt_keywords.click( fn=view_prompt_keywords, outputs=prompt_keywords_output ) # Add Keywords Tab (using existing prompt management functions) with gr.TabItem("Add Keywords"): gr.Markdown(""" To add keywords to prompts, please use the Prompt Management interface. Keywords can be added when creating or editing a prompt. """) # Delete Keywords Tab with gr.TabItem("Delete Keywords"): with gr.Column(): delete_prompt_keyword_input = gr.Textbox(label="Keyword to Delete") delete_prompt_keyword_btn = gr.Button("Delete Keyword") delete_prompt_result = gr.Markdown() delete_prompt_keyword_btn.click( fn=delete_prompt_keyword, inputs=delete_prompt_keyword_input, outputs=delete_prompt_result ) # Export Keywords Tab with gr.TabItem("Export Keywords"): with gr.Column(): export_prompt_keywords_btn = gr.Button("Export Prompt Keywords") export_prompt_status = gr.Textbox(label="Export Status", interactive=False) export_prompt_file = gr.File(label="Download Exported Keywords", interactive=False) def handle_export(): status, file_path = export_prompt_keywords_to_csv() if file_path: return status, file_path return status, None export_prompt_keywords_btn.click( fn=handle_export, outputs=[export_prompt_status, export_prompt_file] ) # # End of Prompt Keywords tab ############################################################ ############################################################ # # Meta-Keywords functions def create_meta_keywords_tab(): """Creates the Meta-Keywords management tab""" with gr.Tab("Meta-Keywords"): gr.Markdown("# Meta-Keywords Management") with gr.Tabs(): # View Meta-Keywords Tab with gr.TabItem("View Collections"): with gr.Column(): refresh_collections = gr.Button("Refresh Collections") collections_output = gr.Markdown() def view_collections(): try: collections, _, _ = get_all_collections() if collections: result = "### Keyword Collections:\n" for collection in collections: keywords = get_keywords_for_collection(collection) result += f"\n**{collection}**:\n" result += "\n".join([f"- {k}" for k in keywords]) result += "\n" return result return "No collections found." except Exception as e: return f"Error retrieving collections: {str(e)}" refresh_collections.click( fn=view_collections, outputs=collections_output ) # Create Collection Tab with gr.TabItem("Create Collection"): with gr.Column(): collection_name = gr.Textbox(label="Collection Name") create_collection_btn = gr.Button("Create Collection") create_result = gr.Markdown() def create_collection(name: str): try: create_keyword_collection(name) return f"Successfully created collection: {name}" except Exception as e: return f"Error creating collection: {str(e)}" create_collection_btn.click( fn=create_collection, inputs=collection_name, outputs=create_result ) # Add Keywords to Collection Tab with gr.TabItem("Add to Collection"): with gr.Column(): collection_select = gr.Textbox(label="Collection Name") keywords_to_add = gr.Textbox(label="Keywords to Add (comma-separated)") add_to_collection_btn = gr.Button("Add Keywords to Collection") add_to_collection_result = gr.Markdown() def add_keywords_to_collection(collection: str, keywords: str): try: keywords_list = [k.strip() for k in keywords.split(",") if k.strip()] for keyword in keywords_list: add_keyword_to_collection(collection, keyword) return f"Successfully added {len(keywords_list)} keywords to collection {collection}" except Exception as e: return f"Error adding keywords to collection: {str(e)}" add_to_collection_btn.click( fn=add_keywords_to_collection, inputs=[collection_select, keywords_to_add], outputs=add_to_collection_result ) # # End of Meta-Keywords tab ########################################################## # # End of Keywords.py ######################################################################################################################