Spaces:
Running
Running
Update app.py
Browse filesAdded stock stuff
app.py
CHANGED
@@ -17,6 +17,10 @@ from PIL import Image
|
|
17 |
from io import BytesIO
|
18 |
from pydantic import BaseModel
|
19 |
import pprint
|
|
|
|
|
|
|
|
|
20 |
|
21 |
load_dotenv(override=True)
|
22 |
key = os.getenv('OPENAI_API_KEY')
|
@@ -34,6 +38,8 @@ else:
|
|
34 |
dp = Path('/data')
|
35 |
dp.mkdir(exist_ok=True)
|
36 |
dataDir = '/data/'
|
|
|
|
|
37 |
|
38 |
speak_file = dataDir + "speek.wav"
|
39 |
|
@@ -56,6 +62,42 @@ class MathReasoning(BaseModel):
|
|
56 |
def Client():
|
57 |
return OpenAI(api_key = key)
|
58 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
59 |
def solve(prompt, chatType):
|
60 |
tokens_in = 0
|
61 |
tokens_out = 0
|
@@ -270,6 +312,12 @@ def chat(prompt, user_window, pwd_window, past, response, gptModel, uploaded_ima
|
|
270 |
(log_cnt, wav_cnt, other_cnt, others, log_list) = list_permanent_files()
|
271 |
response = f'{log_cnt} log files\n{wav_cnt} .wav files\n{other_cnt} Other files:\n{others}\nlogs: {str(log_list)}'
|
272 |
return [past, response, None, gptModel, uploaded_image_file]
|
|
|
|
|
|
|
|
|
|
|
|
|
273 |
if user_window in unames and pwd_window == pwdList[unames.index(user_window)]:
|
274 |
chatType = 'normal'
|
275 |
prompt = prompt.strip()
|
@@ -504,7 +552,6 @@ def show_help():
|
|
504 |
5.4 The image should appear. This can take some time with a slow internet connection and large image.
|
505 |
5.5 Tap the "Submit Prompt/Question" button to start the analysis. This initiates a chat dialog and
|
506 |
you can ask follow-up questions. However, the image is not re-analyzed for follow-up dialog.
|
507 |
-
|
508 |
Hints:
|
509 |
1. Better chat and image results are obtained by including detailed descriptions and instructions
|
510 |
in the prompt.
|
|
|
17 |
from io import BytesIO
|
18 |
from pydantic import BaseModel
|
19 |
import pprint
|
20 |
+
import pandas as pd
|
21 |
+
import yfinance as yf
|
22 |
+
from datetime import datetime, timedelta
|
23 |
+
|
24 |
|
25 |
load_dotenv(override=True)
|
26 |
key = os.getenv('OPENAI_API_KEY')
|
|
|
38 |
dp = Path('/data')
|
39 |
dp.mkdir(exist_ok=True)
|
40 |
dataDir = '/data/'
|
41 |
+
stock_data_path = dataDir + 'Stocks.txt'
|
42 |
+
|
43 |
|
44 |
speak_file = dataDir + "speek.wav"
|
45 |
|
|
|
62 |
def Client():
|
63 |
return OpenAI(api_key = key)
|
64 |
|
65 |
+
def get_stock_report():
|
66 |
+
stock_data = {}
|
67 |
+
global stock_data_path
|
68 |
+
with open(stock_data_path, 'rt') as fp:
|
69 |
+
lines = fp.readlines()
|
70 |
+
for line in lines:
|
71 |
+
(name, symbol, shares) = line.rstrip().split(',')
|
72 |
+
stock_data[symbol] = {"symbol": symbol, "name": name, "shares": shares, "closing": '0'}
|
73 |
+
for symbol in stock_data.keys():
|
74 |
+
stock_data[symbol]['closing'] = f'{get_last_closing(symbol):.2f}'
|
75 |
+
total_value = 0.0
|
76 |
+
rv = ''
|
77 |
+
for item in stock_data.values():
|
78 |
+
rv += str(item) + '\n'
|
79 |
+
total_value += float(item['closing']) * float(item['shares'])
|
80 |
+
rv += (f'\nTotal value = {total_value:.2f}')
|
81 |
+
return rv
|
82 |
+
|
83 |
+
def get_last_closing(symbol, timeout=10):
|
84 |
+
today = datetime.today()+timedelta(days=1)
|
85 |
+
five_days_ago = today - timedelta(days=5)
|
86 |
+
end = today.strftime('%Y-%m-%d')
|
87 |
+
start = five_days_ago.strftime('%Y-%m-%d')
|
88 |
+
df = yf.download(symbol,
|
89 |
+
start = start,
|
90 |
+
end = end,
|
91 |
+
progress = False,
|
92 |
+
timeout=timeout,
|
93 |
+
)
|
94 |
+
# print(df)
|
95 |
+
return df.iat[-1,1]
|
96 |
+
|
97 |
+
def create_stock_data_file(txt):
|
98 |
+
with open(stock_data_path, 'wt') as fp:
|
99 |
+
fp.write(txt)
|
100 |
+
|
101 |
def solve(prompt, chatType):
|
102 |
tokens_in = 0
|
103 |
tokens_out = 0
|
|
|
312 |
(log_cnt, wav_cnt, other_cnt, others, log_list) = list_permanent_files()
|
313 |
response = f'{log_cnt} log files\n{wav_cnt} .wav files\n{other_cnt} Other files:\n{others}\nlogs: {str(log_list)}'
|
314 |
return [past, response, None, gptModel, uploaded_image_file]
|
315 |
+
if prompt.startswith('stocks'):
|
316 |
+
response = get_stock_report()
|
317 |
+
return [past, response, None, gptModel, uploaded_image_file]
|
318 |
+
if prompt.startswith('stockload'):
|
319 |
+
create_stock_data_file(prompt[9:].lstrip())
|
320 |
+
return [past, 'Stock data file created', None, gptModel, uploaded_image_file]
|
321 |
if user_window in unames and pwd_window == pwdList[unames.index(user_window)]:
|
322 |
chatType = 'normal'
|
323 |
prompt = prompt.strip()
|
|
|
552 |
5.4 The image should appear. This can take some time with a slow internet connection and large image.
|
553 |
5.5 Tap the "Submit Prompt/Question" button to start the analysis. This initiates a chat dialog and
|
554 |
you can ask follow-up questions. However, the image is not re-analyzed for follow-up dialog.
|
|
|
555 |
Hints:
|
556 |
1. Better chat and image results are obtained by including detailed descriptions and instructions
|
557 |
in the prompt.
|