import gradio as gr from tools.perplexity_tools import ( get_ai_research_papers, summarize_paper, get_citation, explain_concept, ) def chat_ui_interaction(query: str, chat_history: list, api_key: str, model: str): """Handles user queries in the chat UI, showing the agent's thought process.""" # Add user message to chat history chat_history.append(("user", query)) # Let the agent decide which tool to invoke thought_process = [] try: # Simulate the agent's thought process thought_process.append("🤔 Analyzing your query...") # Example: Decide which tool to use based on the query if "explain" in query.lower(): thought_process.append("🔍 Using the 'explain_concept' tool...") result = explain_concept(query, api_key, model) elif "summarize" in query.lower(): thought_process.append("📄 Using the 'summarize_paper' tool...") result = summarize_paper(query, api_key, model) elif "citation" in query.lower(): thought_process.append("📚 Using the 'get_citation' tool...") result = get_citation(query, api_key, model) else: thought_process.append("🔎 Using the 'get_ai_research_papers' tool...") result = get_ai_research_papers(query, api_key, model) # Add thought process to chat history for step in thought_process: chat_history.append(("assistant", step)) # Add final result to chat history chat_history.append(("assistant", result)) except Exception as e: chat_history.append(("assistant", f"Error: {str(e)}")) return chat_history def create_agentic_ui(input_api_key, model_dropdown): """Creates the Agentic UI (Chat UI) components.""" with gr.Column() as agentic_ui: gr.Markdown("# AI Research Assistant (Agentic Mode)") # Chat interface with gr.Row(): # Left column for threads (optional) with gr.Column(scale=1): gr.Markdown("### Threadss") threads = gr.Textbox(label="Threads", interactive=False) # Center column for chat messages with gr.Column(scale=3): chatbot = gr.Chatbot(label="Chat History", type="messages") # Use type="messages" chat_input = gr.Textbox(label="Your Message", placeholder="Type your message here...") chat_button = gr.Button("Send") # Handle chat interactions chat_button.click( fn=chat_ui_interaction, inputs=[chat_input, chatbot, input_api_key, model_dropdown], outputs=chatbot ) return agentic_ui