# Description: Gradio UI for Creating and Testing new Prompts # # Imports import logging import gradio as gr from App_Function_Libraries.Chat.Chat_Functions import chat from App_Function_Libraries.DB.DB_Manager import add_or_update_prompt from App_Function_Libraries.Prompt_Engineering.Prompt_Engineering import generate_prompt, test_generated_prompt from App_Function_Libraries.Utils.Utils import format_api_name, global_api_endpoints, default_api_endpoint # # Local Imports # ######################################################################################################################## # # Functions # Gradio tab for prompt suggestion and testing def create_prompt_suggestion_tab(): try: default_value = None if default_api_endpoint: if default_api_endpoint in global_api_endpoints: default_value = format_api_name(default_api_endpoint) else: logging.warning(f"Default API endpoint '{default_api_endpoint}' not found in global_api_endpoints") except Exception as e: logging.error(f"Error setting default API endpoint: {str(e)}") default_value = None with gr.TabItem("Prompt Suggestion/Creation", visible=True): gr.Markdown("# Generate and Test AI Prompts with the Metaprompt Approach") with gr.Row(): with gr.Column(): # Task and variable inputs task_input = gr.Textbox(label="Task Description", placeholder="E.g., Draft an email responding to a customer complaint") variables_input = gr.Textbox(label="Variables (comma-separated)", placeholder="E.g., CUSTOMER_COMPLAINT, COMPANY_NAME") # API-related inputs # Refactored API selection dropdown api_name_input = gr.Dropdown( choices=["None"] + [format_api_name(api) for api in global_api_endpoints], value=default_value, label="API for Analysis (Optional)" ) api_key_input = gr.Textbox(label="API Key", placeholder="Enter your API key (if required)", type="password") # Temperature slider for controlling randomness of generation temperature_input = gr.Slider(minimum=0, maximum=1, step=0.01, value=0.7, label="Temperature") # Button to generate the prompt generate_prompt_button = gr.Button("Generate Prompt") with gr.Column(): # Output for the generated prompt generated_prompt_output = gr.Textbox(label="Generated Prompt", interactive=False) # FIXME - figure this out # copy_button = gr.HTML(""" # # # """) # Section to test the generated prompt with gr.Row(): with gr.Column(): # Input to test the prompt with variable values variable_values_input = gr.Textbox(label="Variable Values (comma-separated)", placeholder="Enter variable values in order, comma-separated") test_prompt_button = gr.Button("Test Generated Prompt") with gr.Column(): # Output for the test result test_output = gr.Textbox(label="Test Output", interactive=False) # Section to save the generated prompt to the database with gr.Row(): with gr.Column(): prompt_title_input = gr.Textbox(label="Prompt Title", placeholder="Enter a title for this prompt") prompt_author_input = gr.Textbox(label="Author", placeholder="Enter the author's name") # New author field prompt_description_input = gr.Textbox(label="Prompt Description", placeholder="Enter a description", lines=3) save_prompt_button = gr.Button("Save Prompt to Database") save_prompt_output = gr.Textbox(label="Save Prompt Output", interactive=False) # Callback function to generate prompt def on_generate_prompt(api_name, api_key, task, variables, temperature): # Generate the prompt using the metaprompt approach and API generated_prompt = generate_prompt(api_name, api_key, task, variables, temperature) return generated_prompt # Callback function to test the generated prompt def on_test_prompt(api_name, api_key, generated_prompt, variable_values, temperature): # Test the prompt by filling in variable values test_result = test_generated_prompt(api_name, api_key, generated_prompt, variable_values, temperature) return test_result # Callback function to save the generated prompt to the database def on_save_prompt(title, author, description, generated_prompt): if not title or not generated_prompt: return "Error: Title and generated prompt are required." # Add the generated prompt to the database result = add_or_update_prompt(title, author, description, system_prompt="", user_prompt=generated_prompt, keywords=None) return result # Connect the button to the function that generates the prompt generate_prompt_button.click( fn=on_generate_prompt, inputs=[api_name_input, api_key_input, task_input, variables_input, temperature_input], outputs=[generated_prompt_output] ) # Connect the button to the function that tests the generated prompt test_prompt_button.click( fn=on_test_prompt, inputs=[api_name_input, api_key_input, generated_prompt_output, variable_values_input, temperature_input], outputs=[test_output] ) # Connect the save button to the function that saves the prompt to the database save_prompt_button.click( fn=on_save_prompt, inputs=[prompt_title_input, prompt_author_input, prompt_description_input, generated_prompt_output], outputs=[save_prompt_output] ) # Example chat function based on your API structure def chat_api_call(api_endpoint, api_key, input_data, prompt, temp, system_message=None): # Here you will call your chat function as defined previously response = chat(message=input_data, history=[], media_content={}, selected_parts=[], api_endpoint=api_endpoint, api_key=api_key, prompt=prompt, temperature=temp, system_message=system_message) return response # # End of Functions ########################################################################################################################