#!/usr/bin/env python3 """ FinRobot Hugging Face Space Application A comprehensive AI Agent Platform for Financial Analysis using Large Language Models """ import streamlit as st import autogen from finrobot.utils import get_current_date, register_keys_from_json from finrobot.agents.workflow import SingleAssistant, SingleAssistantShadow import json import os from datetime import datetime # Page configuration st.set_page_config( page_title="FinRobot - AI Agent Platform for Financial Analysis", page_icon="🤖", layout="wide", initial_sidebar_state="expanded" ) # Custom CSS st.markdown(""" """, unsafe_allow_html=True) def initialize_finrobot(): """Initialize FinRobot with API configurations""" try: # Load OpenAI configuration with open("OAI_CONFIG_LIST", "r") as f: oai_config = json.load(f) llm_config = { "config_list": oai_config, "timeout": 120, "temperature": 0, } # Register API keys register_keys_from_json("config_api_keys") return llm_config except Exception as e: st.error(f"Error initializing FinRobot: {str(e)}") return None def create_market_analyst(llm_config): """Create Market Analyst agent""" return SingleAssistant( "Market_Analyst", llm_config, human_input_mode="NEVER", ) def create_financial_analyst(llm_config): """Create Financial Analyst agent for report writing""" return SingleAssistantShadow( "Expert_Investor", llm_config, max_consecutive_auto_reply=None, human_input_mode="TERMINATE", ) def main(): # Header st.markdown('

🤖 FinRobot

', unsafe_allow_html=True) st.markdown('

AI Agent Platform for Financial Analysis using LLMs

', unsafe_allow_html=True) # Sidebar st.sidebar.title("🎛️ Configuration") # Initialize FinRobot if 'llm_config' not in st.session_state: with st.spinner("Initializing FinRobot..."): st.session_state.llm_config = initialize_finrobot() if st.session_state.llm_config is None: st.error("❌ Failed to initialize FinRobot. Please check your configuration files.") return # Agent selection agent_type = st.sidebar.selectbox( "Select Agent Type", ["Market Forecaster", "Financial Analyst", "Trade Strategist"] ) st.sidebar.markdown("---") # Main content area if agent_type == "Market Forecaster": st.markdown('
', unsafe_allow_html=True) st.markdown("### 📈 Market Forecaster Agent") st.markdown("Predicts stock movements using company ticker, financials, and market news.") st.markdown('
', unsafe_allow_html=True) col1, col2 = st.columns([2, 1]) with col1: company_ticker = st.text_input("Company Ticker Symbol", value="AAPL", help="Enter stock ticker (e.g., AAPL, MSFT, NVDA)") analysis_type = st.selectbox("Analysis Type", ["Brief Analysis", "Detailed Analysis", "Risk Assessment"]) with col2: st.markdown("**Current Date:**") st.info(get_current_date()) if st.button("🚀 Analyze Stock", type="primary"): if company_ticker: with st.spinner("Analyzing stock..."): try: assistant = create_market_analyst(st.session_state.llm_config) message = f""" Use all the tools provided to retrieve information available for {company_ticker} upon {get_current_date()}. Analyze the positive developments and potential concerns of {company_ticker} with 2-4 most important factors respectively and keep them concise. Most factors should be inferred from company related news. Then make a rough prediction (e.g. up/down by 2-3%) of the {company_ticker} stock price movement for next week. Provide a summary analysis to support your prediction. """ # Note: In a real implementation, you would call assistant.chat(message) # For demo purposes, we'll show a placeholder st.success("✅ Analysis completed!") st.markdown(f""" **Analysis for {company_ticker}:** 📊 **Positive Developments:** - Strong quarterly earnings growth - New product launches driving revenue - Market expansion in emerging regions ⚠️ **Potential Concerns:** - Supply chain disruptions - Regulatory challenges - Competitive pressure 🔮 **Prediction:** Expected 2-3% upward movement next week *Note: This is a demo. In production, the agent would perform real analysis.* """) except Exception as e: st.error(f"Error during analysis: {str(e)}") else: st.warning("Please enter a company ticker symbol.") elif agent_type == "Financial Analyst": st.markdown('
', unsafe_allow_html=True) st.markdown("### 📋 Financial Analyst Agent") st.markdown("Generates comprehensive equity research reports from 10-K forms and financial data.") st.markdown('
', unsafe_allow_html=True) col1, col2 = st.columns([2, 1]) with col1: company_name = st.text_input("Company Name", value="Microsoft") fiscal_year = st.text_input("Fiscal Year", value="2023") with col2: st.markdown("**Report Features:**") st.markdown("• Financial statement analysis") st.markdown("• Risk assessment") st.markdown("• Performance visualization") st.markdown("• PDF generation") if st.button("📊 Generate Report", type="primary"): if company_name and fiscal_year: with st.spinner("Generating financial report..."): try: assistant = create_financial_analyst(st.session_state.llm_config) st.success("✅ Report generation completed!") st.markdown(f""" **Financial Report for {company_name} - {fiscal_year}** 📈 **Key Metrics:** - Revenue Growth: +15.2% - Net Income: +12.8% - Operating Margin: 42.1% 📊 **Financial Highlights:** - Strong cloud revenue growth - Improved operational efficiency - Strategic acquisitions contributing to growth ⚠️ **Risk Factors:** - Market competition - Regulatory changes - Economic uncertainties *Note: This is a demo. In production, the agent would generate a full PDF report.* """) except Exception as e: st.error(f"Error generating report: {str(e)}") else: st.warning("Please enter both company name and fiscal year.") elif agent_type == "Trade Strategist": st.markdown('
', unsafe_allow_html=True) st.markdown("### ⚡ Trade Strategist Agent") st.markdown("Advanced trading strategies with multimodal capabilities and real-time analysis.") st.markdown('
', unsafe_allow_html=True) col1, col2 = st.columns([2, 1]) with col1: strategy_type = st.selectbox("Strategy Type", ["Momentum", "Mean Reversion", "Arbitrage", "Portfolio Optimization"]) risk_level = st.select_slider("Risk Level", options=["Low", "Medium", "High"], value="Medium") with col2: st.markdown("**Strategy Features:**") st.markdown("• Real-time data analysis") st.markdown("• Risk management") st.markdown("• Portfolio optimization") st.markdown("• Performance tracking") if st.button("🎯 Generate Strategy", type="primary"): with st.spinner("Generating trading strategy..."): try: st.success("✅ Strategy generated successfully!") st.markdown(f""" **{strategy_type} Trading Strategy - {risk_level} Risk** 📊 **Strategy Overview:** - Entry signals based on technical indicators - Stop-loss and take-profit levels defined - Position sizing optimized for risk level 📈 **Expected Performance:** - Annual Return: 12-18% - Maximum Drawdown: 5-8% - Sharpe Ratio: 1.2-1.8 ⚙️ **Implementation:** - Automated execution ready - Real-time monitoring enabled - Risk controls active *Note: This is a demo. In production, the agent would provide detailed strategy parameters.* """) except Exception as e: st.error(f"Error generating strategy: {str(e)}") # Footer st.markdown("---") st.markdown("""

🤖 FinRobot - An Open-Source AI Agent Platform for Financial Analysis using Large Language Models

Built with ❤️ by AI4Finance Foundation

""", unsafe_allow_html=True) if __name__ == "__main__": main()