walaa2022 commited on
Commit
6339dac
·
verified ·
1 Parent(s): 6ef47af

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +61 -60
app.py CHANGED
@@ -92,66 +92,67 @@ class FinancialAnalyzer:
92
  return {}
93
 
94
  def extract_metrics(self, income_data, balance_data):
95
- """Extract and calculate key financial metrics"""
96
- try:
97
- metrics = {
98
- "Revenue": {
99
- "2025": self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2025"),
100
- "2021": self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2021")
101
- },
102
- "Profitability": {
103
- "Gross_Profit_2025": self.get_nested_value(income_data, "Cost and Gross Profit", "Gross Profit", "2025"),
104
- "Net_Earnings_2025": self.get_nested_value(income_data, "Profit Summary", "Net Earnings", "2025"),
105
- "Operating_Expenses_2025": self.get_nested_value(income_data, "Operating Expenses", "Total Operating Expenses", "2025")
106
- },
107
- "Balance_Sheet": {
108
- "Total_Assets_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Assets", "2025"),
109
- "Total_Liabilities_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Liabilities", "2025"),
110
- "Equity_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Shareholders_Equity", "2025")
111
- }
 
 
 
 
 
 
 
 
 
 
 
112
  }
113
-
114
- # Calculate additional metrics
115
- revenue_2025 = metrics["Revenue"]["2025"]
116
- if revenue_2025 != 0:
117
- metrics["Profitability"]["Gross_Margin"] = (metrics["Profitability"]["Gross_Profit_2025"] / revenue_2025) * 100
118
- metrics["Profitability"]["Net_Margin"] = (metrics["Profitability"]["Net_Earnings_2025"] / revenue_2025) * 100
119
-
120
- return metrics
121
- except Exception as e:
122
- print(f"Error extracting metrics: {str(e)}")
123
- return {}
124
-
125
- def get_nested_value(self, data, section, key, year):
126
- """Safely get nested dictionary value"""
127
- try:
128
- return data.get(section, {}).get(key, {}).get(year, 0)
129
- except:
130
- return 0
131
-
132
- def generate_analysis_prompt(self, metrics):
133
- """Create analysis prompt from metrics"""
134
- try:
135
- return f"""<human>
136
- Analyze these financial metrics for 2025 with a focus on business performance, trends, and risks:
137
-
138
- Revenue and Profitability:
139
- - Total Revenue: ${metrics['Revenue']['2025']:,.1f}M
140
- - Gross Profit: ${metrics['Profitability']['Gross_Profit_2025']:,.1f}M
141
- - Net Earnings: ${metrics['Profitability']['Net_Earnings_2025']:,.1f}M
142
- - Gross Margin: {metrics['Profitability'].get('Gross_Margin', 0):,.1f}%
143
- - Net Margin: {metrics['Profitability'].get('Net_Margin', 0):,.1f}%
144
-
145
- Balance Sheet Strength:
146
- - Total Assets: ${metrics['Balance_Sheet']['Total_Assets_2025']:,.1f}M
147
- - Total Liabilities: ${metrics['Balance_Sheet']['Total_Liabilities_2025']:,.1f}M
148
- - Shareholders' Equity: ${metrics['Balance_Sheet']['Equity_2025']:,.1f}M
149
-
150
- Explain key financial ratios and their implications. Discuss strategies for growth and risk mitigation.
151
- </human>"""
152
- except Exception as e:
153
- print(f"Error generating prompt: {str(e)}")
154
- return ""
155
 
156
  def generate_analysis(self, prompt):
157
  """Generate analysis using TinyLlama"""
@@ -160,7 +161,7 @@ Explain key financial ratios and their implications. Discuss strategies for grow
160
 
161
  outputs = self.model.generate(
162
  inputs["input_ids"],
163
- max_new_tokens=500, # Generate up to 500 new tokens
164
  temperature=0.7,
165
  top_p=0.9,
166
  do_sample=True,
 
92
  return {}
93
 
94
  def extract_metrics(self, income_data, balance_data):
95
+ """Extract and calculate key financial metrics"""
96
+ try:
97
+ # Get current and previous year values for growth calculations
98
+ metrics = {
99
+ "Revenue": {
100
+ "2025": self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2025"),
101
+ "2024": self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2024"),
102
+ "2021": self.get_nested_value(income_data, "Revenue", "Total Net Revenue", "2021")
103
+ },
104
+ "Profitability": {
105
+ "Gross_Profit_2025": self.get_nested_value(income_data, "Cost and Gross Profit", "Gross Profit", "2025"),
106
+ "EBIT_2025": self.get_nested_value(income_data, "Profit Summary", "EBIT", "2025"),
107
+ "Net_Earnings_2025": self.get_nested_value(income_data, "Profit Summary", "Net Earnings", "2025"),
108
+ "Operating_Expenses_2025": self.get_nested_value(income_data, "Operating Expenses", "Total Operating Expenses", "2025")
109
+ },
110
+ "Balance_Sheet": {
111
+ "Total_Assets_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Assets", "2025"),
112
+ "Current_Assets_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Current_Assets", "2025"),
113
+ "Total_Liabilities_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Liabilities", "2025"),
114
+ "Current_Liabilities_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Current_Liabilities", "2025"),
115
+ "Equity_2025": self.get_nested_value(balance_data, "Key Totals", "Total_Shareholders_Equity", "2025"),
116
+ "Inventory_2025": self.get_nested_value(balance_data, "Balance Sheet Data 2021-2025", "Inventory", "2025"),
117
+ "Accounts_Receivable_2025": self.get_nested_value(balance_data, "Balance Sheet Data 2021-2025", "Accounts_Receivable", "2025"),
118
+ "Long_Term_Debt_2025": self.get_nested_value(balance_data, "Balance Sheet Data 2021-2025", "Long_Term_Debt", "2025")
119
+ },
120
+ "Cash_Flow": {
121
+ "Depreciation_2025": self.get_nested_value(income_data, "Operating Expenses", "Depreciation & Amortization", "2025"),
122
+ "Interest_Expense_2025": self.get_nested_value(income_data, "Profit Summary", "Interest Expense", "2025")
123
  }
124
+ }
125
+
126
+ # Calculate financial ratios
127
+ revenue_2025 = metrics["Revenue"]["2025"]
128
+ if revenue_2025 != 0:
129
+ # Profitability Ratios
130
+ metrics["Ratios"] = {
131
+ "Gross_Margin": (metrics["Profitability"]["Gross_Profit_2025"] / revenue_2025) * 100,
132
+ "Operating_Margin": (metrics["Profitability"]["EBIT_2025"] / revenue_2025) * 100,
133
+ "Net_Margin": (metrics["Profitability"]["Net_Earnings_2025"] / revenue_2025) * 100,
134
+
135
+ # Liquidity Ratios
136
+ "Current_Ratio": metrics["Balance_Sheet"]["Current_Assets_2025"] / metrics["Balance_Sheet"]["Current_Liabilities_2025"],
137
+ "Quick_Ratio": (metrics["Balance_Sheet"]["Current_Assets_2025"] - metrics["Balance_Sheet"]["Inventory_2025"]) / metrics["Balance_Sheet"]["Current_Liabilities_2025"],
138
+
139
+ # Efficiency Ratios
140
+ "Asset_Turnover": revenue_2025 / metrics["Balance_Sheet"]["Total_Assets_2025"],
141
+ "Receivables_Turnover": revenue_2025 / metrics["Balance_Sheet"]["Accounts_Receivable_2025"],
142
+
143
+ # Solvency Ratios
144
+ "Debt_to_Equity": metrics["Balance_Sheet"]["Total_Liabilities_2025"] / metrics["Balance_Sheet"]["Equity_2025"],
145
+ "Interest_Coverage": metrics["Profitability"]["EBIT_2025"] / metrics["Cash_Flow"]["Interest_Expense_2025"] if metrics["Cash_Flow"]["Interest_Expense_2025"] != 0 else 0,
146
+
147
+ # Growth Rates
148
+ "Revenue_Growth": ((metrics["Revenue"]["2025"] / metrics["Revenue"]["2024"]) - 1) * 100,
149
+ "5Year_Revenue_CAGR": ((metrics["Revenue"]["2025"] / metrics["Revenue"]["2021"]) ** (1/4) - 1) * 100
150
+ }
151
+
152
+ return metrics
153
+ except Exception as e:
154
+ print(f"Error extracting metrics: {str(e)}")
155
+ return {}
 
 
 
 
 
 
 
 
 
 
156
 
157
  def generate_analysis(self, prompt):
158
  """Generate analysis using TinyLlama"""
 
161
 
162
  outputs = self.model.generate(
163
  inputs["input_ids"],
164
+ max_new_tokens=800, # Increased from 500 to 800 for more detailed analysis
165
  temperature=0.7,
166
  top_p=0.9,
167
  do_sample=True,