FinsightX / ui /streamlit_app.py
Raahulthakur's picture
Update ui/streamlit_app.py
8e6aa10 verified
import sys
import os
import streamlit as st
import pandas as pd
sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "..")))
from agents.equity_analyst import answer_equity_question
from agents.news_summarizer import summarize_market_news
from agents.macro_strategist import analyze_macro_trends
from agents.quant_backtester import run_simple_backtest
from agents.regu_radar import monitor_regulatory_changes
from agents.client_advisor import advise_client
st.set_page_config(page_title="FinSightX", layout="wide")
st.title("FinSightX: AI-Powered Financial Agent Suite")
agent = st.sidebar.selectbox(
"Choose Agent",
[
"Home",
"Equity Analyst",
"News Summarizer",
"Macro Strategist",
"Quant Backtester",
"ReguRadar",
"Client Advisor"
]
)
if agent == "Home":
st.header("A Multi-Agent Financial Intelligence Assistant")
st.markdown("""
A **modular industry-grade application** where agents collaborate to handle:
- **Equity Research**
- **News Summarization**
- **Macroeconomic Analysis**
- **Quantitative Backtesting**
- **Regulatory Updates**
- **Client Portfolio Q&A**
""")
elif agent == "Equity Analyst":
st.subheader("Equity Analyst")
st.markdown("""
### Role:
Analyzes individual stocks or companies using:
- Financial filings (e.g., 10-K, 10-Q)
- Earnings call summaries
- Market sentiment
### Capabilities:
- Retrieve documents from a knowledge base using **AutoRAG**
- Run sentiment analysis (FinBERT)
- Generate insight using LLM (Groq Mistral)
- Summarize risks, opportunities, and outlook
### Example Use Cases:
- "What’s the market sentiment around Tesla this quarter?"
- "Give me an analysis of Apple’s earnings call."
""")
query = st.text_input("Enter your financial query about a stock or company:")
if st.button("Analyze"):
with st.spinner("Analyzing equity..."):
response = answer_equity_question(query)
st.markdown(response)
elif agent == "News Summarizer":
st.subheader("News Summarizer")
st.markdown("""
### Role:
Digest and summarize **real-time or bulk market news** to extract insights and relevance.
### Capabilities:
- Accept raw headlines or long-form articles
- Retrieve context (e.g., related documents or sectors)
- Summarize using LLM (via Groq or fallback)
### Use Cases:
- "Summarize today’s financial news relevant to energy stocks."
- "Give me a brief on Nvidia's latest product announcement."
""")
news = st.text_area("Paste financial news or headlines:")
if st.button("Summarize News"):
with st.spinner("Summarizing..."):
summary = summarize_market_news(news)
st.markdown(summary)
elif agent == "Macro Strategist":
st.subheader("Macro Trend Forecaster")
st.markdown("""
### Role:
Analyzes **macroeconomic indicators** and helps in trend forecasting.
### Capabilities:
- Forecasts economic time series (CPI, GDP, unemployment) using `neuralprophet`
- Returns structured future outlooks
- Used in multi-agent reasoning for “market climate”
### Use Cases:
- "Forecast US inflation for the next 3 months."
- "What does the GDP trend look like post-2023?"
""")
st.markdown("Upload a time series CSV with columns `ds` (date) and `y` (value).")
uploaded_file = st.file_uploader("Upload CSV", type=["csv"])
if uploaded_file:
df = pd.read_csv(uploaded_file)
if st.button("Forecast"):
with st.spinner("Forecasting..."):
forecast_result = analyze_macro_trends(df)
st.write("Forecasted Value:")
st.json(forecast_result)
elif agent == "Quant Backtester":
st.subheader("Quant Strategy Backtester")
st.markdown("""
### Role:
Tests trading strategies on historical price data.
### Capabilities:
- Define and run strategies using `bt` or `vectorbt`
- Simple moving average crossovers, rebalancing, etc.
- Return backtest performance metrics
### Use Cases:
- "Backtest an SMA crossover on AAPL from 2020 to 2023."
- "Run a balanced ETF strategy on SPY, QQQ, and VTI."
> This agent focuses on backtesting, not execution or portfolio construction (those can be added later).
""")
tickers = st.text_input("Enter tickers (comma-separated)", value="AAPL,MSFT")
sma_short = st.number_input("Short SMA", value=20)
sma_long = st.number_input("Long SMA", value=50)
if st.button("Run Backtest"):
with st.spinner("Backtesting strategy..."):
result = run_simple_backtest(
tickers=[t.strip() for t in tickers.split(",")],
sma_short=sma_short,
sma_long=sma_long
)
st.write("Backtest completed. Check your terminal/logs for output.")
st.markdown("Note: Visual performance plots not yet integrated in Streamlit.")
elif agent == "ReguRadar":
st.subheader("ReguRadar – Regulatory Monitor")
st.markdown("""
### Role:
Monitors and interprets **regulatory updates** that may affect sectors, firms, or compliance requirements.
### Capabilities:
- AutoRAG over legal and regulatory filings (e.g., RBI circulars, SEC rules)
- LLM summarization to extract impact
- Optional: track historical regulatory shifts
### Use Cases:
- "Has the RBI changed anything that affects crypto investors?"
- "Summarize the SEC’s latest ESG compliance memo."
""")
reg_query = st.text_area("Paste a regulatory update or query:")
if st.button("Analyze Regulation"):
with st.spinner("Scanning for relevance..."):
reg_response = monitor_regulatory_changes(reg_query)
st.markdown(reg_response)
elif agent == "Client Advisor":
st.subheader("Client Advisor")
st.markdown("""
### Role:
Acts as a **virtual financial advisor**, helping individual users based on their queries and emotional tone.
### Capabilities:
- Understand user intent + emotion using FinBERT
- Generate personalized advice using Groq LLM
- Can be expanded into user profile tracking (e.g., risk appetite, goals)
### Use Cases:
- "Should I invest in tech during a recession? I’m scared of losing money."
- "I’ve retired and need a low-risk investment plan."
> In the future, this can evolve into a memory-based portfolio coach.
""")
user_msg = st.text_area("What does your client say?")
if st.button("Advise"):
with st.spinner("Analyzing sentiment and crafting advice..."):
advice = advise_client(user_msg)
st.markdown(advice)