--- title: FinAI-Agent emoji: πŸ’° colorFrom: indigo colorTo: green sdk: streamlit app_file: app.py python_version: "3.13" # ← specify your Python version pinned: false --- # Finance-Agent πŸ€–πŸ’° [![Python](https://img.shields.io/badge/python-3.13-blue.svg)](https://www.python.org/) [![Streamlit](https://img.shields.io/badge/Streamlit-App-red)](https://streamlit.io/) [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](LICENSE) --- ## πŸš€ What Is This? **Finance-Agent** is your chat-native **CFO co-pilot**. Ask plain-English questions about your company’s Excel ledger, and get **instant answers with context + charts**. --- ## TRY IT NOW!! https://huggingface.co/spaces/Sbboss/FinAIAgent ![Demo](content/img.png) --- ### Example You ➜ β€œCompare EBITDA and cash runway for Q1 vs Q2, convert EUR to USD.” Agent ➜ β€œEBITDA Q1: $1.42 M, Q2: $1.65 M (+16.4 %). Cash runway improved from 7.1 β†’ 8.3 months.” --- ## ✨ Feature Tour - **Natural-Language Querying** β€” Gemini 2.5 Flash interprets finance jargon and casual questions alike. - **Dynamic Tool Routing** β€” LangChain React agent picks one or more of 7 custom Python tools (revenue variance, gross-margin %, OpEx breakdown…). - **Smart Currency Handling** β€” Detects EUR rows, fetches FX sheet, normalizes to USD. - **Date Inference** β€” β€œThis year”, β€œlast 3 months”, β€œJun’25” β†’ precise periods. - **Chart Factory** β€” Generates PNGs via Matplotlib (line, bar, area, stacked). - **Streamlit UI** β€” Slack-style sidebar, message persistence, spinner feedback. - **Excel Plug-and-Play** β€” Works with a single `data.xlsx` containing 4 sheets: `actuals`, `budget`, `cash`, `fx`. - **Fallback PythonREPL** β€” If no tool fits, agent writes ad-hoc Pandas code. - **Pytest Suite** β€” Automated tests for tool selection, calc accuracy, caching, and rendering. - **One-click Deploy** β€” Just `streamlit run app.py`. --- ## πŸ—οΈ Architecture ```text β”Œβ”€β”€β”€β”€β”€β”€β”€β”€ Chat UI (Streamlit) ───────┐ β”‚ User Input + Chat History β”‚ β”‚ ↓ finance_agent.invoke() β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ β–Ό β”Œβ”€β”€ LangChain AgentExecutor ──────────────┐ β”‚ Prompt (system + history + input) β”‚ β”‚ LLM: Gemini 2.5 Flash β”‚ β”‚ React tool-calling loop β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”¬β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ β”‚ selects & runs β”Œβ”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”΄β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β” β”‚ Custom Tools β”‚ β”‚ β€’ get_revenue_variance β”‚ β”‚ β€’ get_gross_margin_pct β”‚ β”‚ β€’ get_opex_breakdown β”‚ β”‚ β€’ get_ebitda_proxy β”‚ β”‚ β€’ get_cash_runway β”‚ β”‚ β€’ plot_chart β”‚ β”‚ β€’ code_analysis (PythonREPL) β”‚ β””β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”€β”˜ ``` --- ## πŸ“‚ Folder Structure ```text finance-agent/ β”œβ”€ agent/ β”‚ β”œβ”€ agent.py # creates cached AgentExecutor β”‚ β”œβ”€ utils.py # numeric calculations β”‚ └─ tests/ # pytest suite β”œβ”€ data.xlsx # sample ledger β”œβ”€ app.py # Streamlit front-end β”œβ”€ requirements.txt └─ .streamlit/ └─ secrets.toml # custom theme & font ``` --- ## βš™οΈ Installation ```bash git clone https://github.com/Sbboss/FinAIAgent.git cd FinAIAgent python -m venv .venv && source .venv/bin/activate pip install -r requirements.txt streamlit run app.py ``` πŸƒ Quick Start Drop your company ledger into data.xlsx with sheets: actuals, budget, cash, fx. 1. Run the app: ```bash streamlit run app.py ``` 2. Ask away: ``` β€œTrend gross margin % monthly for 2024.” β€œWhy did revenue miss budget in Nov 25?” β€œHow many months of runway if burn stays flat?” ``` πŸ‘‰ Charts appear inline; numeric answers include deltas vs budget and YOY. ___ πŸ”¬ Testing ``` pytest -v ``` Covers: Tool parameter validation Correct tool selection via intermediate steps Currency conversion accuracy Streamlit image rendering Caching behaviour (st.cache_resource) --- πŸ› οΈ Configuration | Setting | File / Env | Default | | ---------------------- | ------------------------ | --------------------- | | Google Gemini API key | `GOOGLE_API_KEY` | put in `secrets.toml` | | Excel file path | `data.xlsx` | β€” | | LLM temperature | agent | `0.2` | --- πŸŒ… Roadmap * πŸ”„ CSV and SQL connectors * πŸ—ƒοΈ Vector memory for conversation continuity * 🌐 Multi-LLM failover (Gemini β†’ GPT-4o) * πŸ“ˆ Automatic dashboard snapshots to PDF * πŸ’¬ Slack / Teams integration * πŸŽ₯ Demo GIF: live chat β†’ chart β†’ answer --- πŸ™Œ Contributing 1. Fork & branch (feat/your-feature) 2. Add tests (pytest -k your_test) 3. Submit PR with concise description βœ… All significant changes must pass CI and keep coverage β‰₯ 95%. --- πŸ“ License MIT β€” see [LICENSE](LICENSE) Finance-Agent turns spreadsheets into strategy. Ask. Analyze. Act. ⚑ ---