Spaces:
Running
Running
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() |