Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from src.tools.accent_tool import AccentAnalyzerTool | |
| from src.app.main_agent import create_agent | |
| from langchain_core.messages import HumanMessage, AIMessage | |
| import re | |
| import os | |
| st.set_page_config(page_title="Accent Analyzer Agent", page_icon="💬", layout="centered") | |
| st.warning("⚠️ High latency(~11min for 0:59s video) due to CPU usage. Once migrated to GPU, response time will improve significantly.") | |
| st.title("English Accent Analyzer (Conversational)") | |
| st.subheader("Ask me to analyze a video URL, e.g.: \n\n> *Analyze this video: https://github.com/ash-171/Data-mp4/raw/refs/heads/main/NWRNVTFlRGlnV0FfNDgwcA_out.mp4*") | |
| def load_tool_and_agent(): | |
| tool = AccentAnalyzerTool() | |
| analysis_agent, follow_up_agent = create_agent(tool) | |
| return tool, analysis_agent, follow_up_agent | |
| accent_tool_obj, analysis_agent, follow_up_agent = load_tool_and_agent() | |
| if "chat_history" not in st.session_state: | |
| st.session_state.chat_history = [] | |
| if hasattr(accent_tool_obj, "last_transcript") and accent_tool_obj.last_transcript: | |
| prompt_label = "Ask more about the video..." | |
| input_key = "followup" | |
| else: | |
| prompt_label = "Paste your prompt here..." | |
| input_key = "initial" | |
| user_input = st.chat_input(prompt_label, key=input_key) | |
| # Variable to defer assistant response | |
| deferred_response = None | |
| deferred_spinner_msg = "" | |
| if user_input: | |
| st.session_state.chat_history.append(HumanMessage(content=user_input)) | |
| if re.search(r'https?://\S+', user_input): | |
| accent_tool_obj.last_transcript = "" | |
| deferred_spinner_msg = "Analyzing new video..." | |
| def run_agent(): | |
| return analysis_agent.invoke(st.session_state.chat_history)[-1].content | |
| else: | |
| deferred_spinner_msg = "Responding based on transcript..." | |
| def run_agent(): | |
| return follow_up_agent.invoke(st.session_state.chat_history).content | |
| # Run response generation inside spinner after chat is rendered | |
| def process_response(): | |
| with st.spinner(deferred_spinner_msg): | |
| try: | |
| result = run_agent() | |
| except Exception as e: | |
| result = f"Error: {str(e)}" | |
| st.session_state.chat_history.append(AIMessage(content=result)) | |
| st.rerun() | |
| # Display full chat history (before running spinner) | |
| for msg in st.session_state.chat_history: | |
| with st.chat_message("user" if isinstance(msg, HumanMessage) else "assistant"): | |
| st.markdown(msg.content) | |
| # Only process response at the bottom, after chat is shown | |
| if user_input: | |
| process_response() |