mobenta commited on
Commit
bdf2f16
·
verified ·
1 Parent(s): c1ea847

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +22 -4
app.py CHANGED
@@ -15,6 +15,10 @@ import pandas as pd
15
  import numpy as np
16
  from scipy import stats
17
  import seaborn as sns
 
 
 
 
18
 
19
  # Configure logging
20
  logging.basicConfig(filename='debug.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
@@ -266,13 +270,25 @@ def comprehensive_investment_strategy():
266
  """
267
  return strategy
268
 
269
- def gradio_interface(ticker1, ticker2, ticker3, ticker4, start_date, end_date, query, analysis_type, interval, indicators):
 
 
 
 
 
 
 
 
 
270
  try:
271
  logging.debug(f"Starting gradio_interface with tickers: {ticker1}, {ticker2}, {ticker3}, {ticker4}, start_date: {start_date}, end_date: {end_date}, query: {query}, analysis_type: {analysis_type}, interval: {interval}")
272
 
273
  if analysis_type == 'Comprehensive Investment Strategy':
274
  return comprehensive_investment_strategy(), None
275
 
 
 
 
276
  tickers = [ticker.split(':')[0].strip() for ticker in [ticker1, ticker2, ticker3, ticker4] if ticker]
277
  chart_paths = []
278
  data_dict = {}
@@ -308,7 +324,6 @@ def gradio_interface(ticker1, ticker2, ticker3, ticker4, start_date, end_date, q
308
  else:
309
  return "At least two tickers are required for correlation analysis.", None
310
  else:
311
-
312
  # Single ticker analysis
313
  if chart_paths:
314
  insights = predict(Image.open(chart_paths[0]), query)
@@ -342,6 +357,8 @@ def gradio_app():
342
 
343
  8. **Enhanced Image Processing**: The app adds financial metrics and annotations to the generated charts, ensuring clear presentation of data.
344
 
 
 
345
  This tool leverages various analysis techniques to provide detailed insights into stock market trends, offering an interactive and educational experience for users.
346
  """)
347
 
@@ -498,16 +515,17 @@ def gradio_app():
498
 
499
  with gr.Row():
500
  indicators = gr.CheckboxGroup(label="Indicators", choices=['RSI', 'SMA21', 'SMA50', 'SMA200', 'VWAP', 'Bollinger Bands'], value=['SMA21', 'SMA50'])
501
- analysis_type = gr.Radio(label="Analysis Type", choices=['Single Ticker', 'Comparative Analysis', 'Trend Analysis', 'Correlation Analysis', 'Comprehensive Investment Strategy'], value='Single Ticker')
502
 
503
  query = gr.Textbox(label="Analysis Query", value="Analyze the price trends.")
 
504
  analyze_button = gr.Button("Analyze")
505
  output_image = gr.Image(label="Analysis Chart")
506
  output_text = gr.Textbox(label="Generated Insights", lines=10)
507
 
508
  analyze_button.click(
509
  fn=gradio_interface,
510
- inputs=[ticker1, ticker2, ticker3, ticker4, start_date, end_date, query, analysis_type, interval, indicators],
511
  outputs=[output_text, output_image]
512
  )
513
 
 
15
  import numpy as np
16
  from scipy import stats
17
  import seaborn as sns
18
+ import base64
19
+ from io import BytesIO
20
+
21
+
22
 
23
  # Configure logging
24
  logging.basicConfig(filename='debug.log', level=logging.DEBUG, format='%(asctime)s - %(levelname)s - %(message)s')
 
270
  """
271
  return strategy
272
 
273
+ def analyze_uploaded_image(image, query):
274
+ try:
275
+ logging.debug(f"Analyzing uploaded image with query: {query}")
276
+ insights = predict(image, query)
277
+ return insights, image
278
+ except Exception as e:
279
+ logging.error(f"Error analyzing uploaded image: {e}")
280
+ return f"Error analyzing uploaded image: {e}", None
281
+
282
+ def gradio_interface(ticker1, ticker2, ticker3, ticker4, start_date, end_date, query, analysis_type, interval, indicators, uploaded_image):
283
  try:
284
  logging.debug(f"Starting gradio_interface with tickers: {ticker1}, {ticker2}, {ticker3}, {ticker4}, start_date: {start_date}, end_date: {end_date}, query: {query}, analysis_type: {analysis_type}, interval: {interval}")
285
 
286
  if analysis_type == 'Comprehensive Investment Strategy':
287
  return comprehensive_investment_strategy(), None
288
 
289
+ if uploaded_image is not None:
290
+ return analyze_uploaded_image(uploaded_image, query)
291
+
292
  tickers = [ticker.split(':')[0].strip() for ticker in [ticker1, ticker2, ticker3, ticker4] if ticker]
293
  chart_paths = []
294
  data_dict = {}
 
324
  else:
325
  return "At least two tickers are required for correlation analysis.", None
326
  else:
 
327
  # Single ticker analysis
328
  if chart_paths:
329
  insights = predict(Image.open(chart_paths[0]), query)
 
357
 
358
  8. **Enhanced Image Processing**: The app adds financial metrics and annotations to the generated charts, ensuring clear presentation of data.
359
 
360
+ 9. **Custom Chart Analysis**: Users can upload their own chart images for analysis.
361
+
362
  This tool leverages various analysis techniques to provide detailed insights into stock market trends, offering an interactive and educational experience for users.
363
  """)
364
 
 
515
 
516
  with gr.Row():
517
  indicators = gr.CheckboxGroup(label="Indicators", choices=['RSI', 'SMA21', 'SMA50', 'SMA200', 'VWAP', 'Bollinger Bands'], value=['SMA21', 'SMA50'])
518
+ analysis_type = gr.Radio(label="Analysis Type", choices=['Single Ticker', 'Comparative Analysis', 'Trend Analysis', 'Correlation Analysis', 'Comprehensive Investment Strategy', 'Custom Chart Analysis'], value='Single Ticker')
519
 
520
  query = gr.Textbox(label="Analysis Query", value="Analyze the price trends.")
521
+ uploaded_image = gr.Image(label="Upload Custom Chart (optional)", type="pil")
522
  analyze_button = gr.Button("Analyze")
523
  output_image = gr.Image(label="Analysis Chart")
524
  output_text = gr.Textbox(label="Generated Insights", lines=10)
525
 
526
  analyze_button.click(
527
  fn=gradio_interface,
528
+ inputs=[ticker1, ticker2, ticker3, ticker4, start_date, end_date, query, analysis_type, interval, indicators, uploaded_image],
529
  outputs=[output_text, output_image]
530
  )
531