Spaces:
Sleeping
Sleeping
File size: 4,676 Bytes
9759eb6 945ee74 9759eb6 945ee74 9759eb6 945ee74 9759eb6 945ee74 9759eb6 945ee74 9759eb6 945ee74 9759eb6 945ee74 9759eb6 |
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 |
# Install required dependencies
!pip install gradio transformers torch
import numpy as np
import pandas as pd
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
import gradio as gr
# Load a free model from Hugging Face
model_name = "TinyLlama/TinyLlama-1.1B-Chat-v1.0" # Small model that works well for simple tasks
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)
# Financial knowledge base - simple templates and responses
financial_templates = {
"budget": "Here's a simple budget template based on the 50/30/20 rule:\n- 50% for needs (rent, groceries, utilities)\n- 30% for wants (dining out, entertainment)\n- 20% for savings and debt repayment",
"emergency_fund": "An emergency fund should ideally cover 3-6 months of expenses. Start with a goal of $1,000, then build from there.",
"debt": "Focus on high-interest debt first (like credit cards). Consider the debt avalanche (highest interest first) or debt snowball (smallest balance first) methods.",
"investing": "For beginners, consider index funds or ETFs for diversification. Time in the market beats timing the market.",
"retirement": "Take advantage of employer matches in retirement accounts - it's free money. Start early to benefit from compound interest."
}
# Define guided chat flow
def guided_response(user_message, chat_history):
# Check if we should use a template response
for key, template in financial_templates.items():
if key in user_message.lower():
return template
# For more general queries, use the AI model
prompt = f"""<human>I need financial advice: {user_message}</human>
<assistant>"""
inputs = tokenizer(prompt, return_tensors="pt")
outputs = model.generate(
inputs["input_ids"],
max_length=512,
temperature=0.7,
do_sample=True,
pad_token_id=tokenizer.eos_token_id
)
response = tokenizer.decode(outputs[0], skip_special_tokens=True)
# Extract just the assistant's response
if "<assistant>" in response:
response = response.split("<assistant>")[1].strip()
return response
# Create budget calculator function
def calculate_budget(monthly_income, housing, utilities, groceries, transportation):
total_needs = housing + utilities + groceries + transportation
needs_percent = (total_needs / monthly_income) * 100
available_for_wants = monthly_income * 0.3
available_for_savings = monthly_income * 0.2
return f"""Based on the 50/30/20 rule:
Current spending on needs: ${total_needs:.2f} ({needs_percent:.1f}% of income)
Recommended max for needs: ${monthly_income * 0.5:.2f} (50%)
Available for wants: ${available_for_wants:.2f} (30%)
Recommended for savings/debt: ${available_for_savings:.2f} (20%)
{'Your needs expenses are within recommended limits!' if needs_percent <= 50 else 'Your needs expenses exceed 50% of income. Consider areas to reduce spending.'}
"""
# Setup Gradio interface with tabs
with gr.Blocks() as app:
gr.Markdown("# Financial Advisor Bot")
with gr.Tab("Chat Advisor"):
chatbot = gr.Chatbot(height=400)
msg = gr.Textbox(label="Ask a question about personal finance")
clear = gr.Button("Clear")
def respond(message, chat_history):
bot_message = guided_response(message, chat_history)
chat_history.append((message, bot_message))
return "", chat_history
msg.submit(respond, [msg, chatbot], [msg, chatbot])
clear.click(lambda: None, None, chatbot, queue=False)
with gr.Tab("Budget Calculator"):
gr.Markdown("## 50/30/20 Budget Calculator")
with gr.Row():
income = gr.Number(label="Monthly Income (after tax)")
with gr.Row():
gr.Markdown("### Monthly Expenses (Needs)")
with gr.Row():
housing = gr.Number(label="Housing", value=0)
utilities = gr.Number(label="Utilities", value=0)
groceries = gr.Number(label="Groceries", value=0)
transport = gr.Number(label="Transportation", value=0)
calculate_btn = gr.Button("Calculate Budget")
output = gr.Textbox(label="Budget Analysis", lines=10)
calculate_btn.click(
calculate_budget,
inputs=[income, housing, utilities, groceries, transport],
outputs=output
)
# Launch the app in Colab
app.launch(share=True) # share=True creates a public link you can share with others |