Linh Vuu commited on
Commit
6c75f18
1 Parent(s): a67164d

added files

Browse files
Files changed (4) hide show
  1. .gitattributes copy +35 -0
  2. .gitignore +1 -0
  3. app.py +117 -0
  4. requirements.txt +1 -0
.gitattributes copy ADDED
@@ -0,0 +1,35 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ *.7z filter=lfs diff=lfs merge=lfs -text
2
+ *.arrow filter=lfs diff=lfs merge=lfs -text
3
+ *.bin filter=lfs diff=lfs merge=lfs -text
4
+ *.bz2 filter=lfs diff=lfs merge=lfs -text
5
+ *.ckpt filter=lfs diff=lfs merge=lfs -text
6
+ *.ftz filter=lfs diff=lfs merge=lfs -text
7
+ *.gz filter=lfs diff=lfs merge=lfs -text
8
+ *.h5 filter=lfs diff=lfs merge=lfs -text
9
+ *.joblib filter=lfs diff=lfs merge=lfs -text
10
+ *.lfs.* filter=lfs diff=lfs merge=lfs -text
11
+ *.mlmodel filter=lfs diff=lfs merge=lfs -text
12
+ *.model filter=lfs diff=lfs merge=lfs -text
13
+ *.msgpack filter=lfs diff=lfs merge=lfs -text
14
+ *.npy filter=lfs diff=lfs merge=lfs -text
15
+ *.npz filter=lfs diff=lfs merge=lfs -text
16
+ *.onnx filter=lfs diff=lfs merge=lfs -text
17
+ *.ot filter=lfs diff=lfs merge=lfs -text
18
+ *.parquet filter=lfs diff=lfs merge=lfs -text
19
+ *.pb filter=lfs diff=lfs merge=lfs -text
20
+ *.pickle filter=lfs diff=lfs merge=lfs -text
21
+ *.pkl filter=lfs diff=lfs merge=lfs -text
22
+ *.pt filter=lfs diff=lfs merge=lfs -text
23
+ *.pth filter=lfs diff=lfs merge=lfs -text
24
+ *.rar filter=lfs diff=lfs merge=lfs -text
25
+ *.safetensors filter=lfs diff=lfs merge=lfs -text
26
+ saved_model/**/* filter=lfs diff=lfs merge=lfs -text
27
+ *.tar.* filter=lfs diff=lfs merge=lfs -text
28
+ *.tar filter=lfs diff=lfs merge=lfs -text
29
+ *.tflite filter=lfs diff=lfs merge=lfs -text
30
+ *.tgz filter=lfs diff=lfs merge=lfs -text
31
+ *.wasm filter=lfs diff=lfs merge=lfs -text
32
+ *.xz filter=lfs diff=lfs merge=lfs -text
33
+ *.zip filter=lfs diff=lfs merge=lfs -text
34
+ *.zst filter=lfs diff=lfs merge=lfs -text
35
+ *tfevents* filter=lfs diff=lfs merge=lfs -text
.gitignore ADDED
@@ -0,0 +1 @@
 
 
1
+ .streamlit
app.py ADDED
@@ -0,0 +1,117 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import openai
2
+ import time
3
+ import logging
4
+ import streamlit as st
5
+
6
+ openai_api_key = st.secrets["openai_api_key"]
7
+ client = openai.OpenAI(api_key = openai_api_key)
8
+ model = "gpt-3.5-turbo-16k"
9
+
10
+ # === Thread an empty thread
11
+ thread = client.beta.threads.create()
12
+ thread_id = thread.id
13
+
14
+ def wait_for_run_completion(client, thread_id, run_id, sleep_interval=5):
15
+ """
16
+ Waits for a run to complete and prints the elapsed time.:param client: The OpenAI client object.
17
+ :param thread_id: The ID of the thread.
18
+ :param run_id: The ID of the run.
19
+ :param sleep_interval: Time in seconds to wait between checks.
20
+ """
21
+ while True:
22
+ try:
23
+ run = client.beta.threads.runs.retrieve(thread_id = thread_id, run_id = run_id)
24
+ if run.completed_at:
25
+ elapsed_time = run.completed_at - run.created_at
26
+ formatted_elapsed_time = time.strftime(
27
+ "%H:%M:%S", time.gmtime(elapsed_time)
28
+ )
29
+ print(f"Run completed in {formatted_elapsed_time}")
30
+ logging.info(f"Run completed in {formatted_elapsed_time}")
31
+ # Get messages here once Run is completed!
32
+ messages = client.beta.threads.messages.list(thread_id=thread_id)
33
+ last_message = messages.data[0]
34
+ response = last_message.content[0].text.value
35
+ st.write(response)
36
+ break
37
+ except Exception as e:
38
+ logging.error(f"An error occurred while retrieving the run: {e}")
39
+ break
40
+ logging.info("Waiting for run to complete...")
41
+ time.sleep(sleep_interval)
42
+
43
+ def create_new_assistant():
44
+ personal_trainer_assis = client.beta.assistants.create(
45
+ name="Data Analyst",
46
+ instructions="""You are great at creating beautiful data visualizations. You analyze data present in .csv files, understand trends, and come up with data visualizations relevant to those trends. You also share a brief text summary of the trends observed.""",
47
+ model=model
48
+ )
49
+ print(f"Created new assistant with ID: {personal_trainer_assis.id}")
50
+ return personal_trainer_assis.id
51
+
52
+ def main():
53
+ # Streamlit interface
54
+ st.title("Data Analyst")
55
+
56
+ # Note that API key's running out of budget
57
+ contact_url = "https://www.linkedin.com/in/linhvuu"
58
+ st.write("If no result returns, it means I am running out of energy. Please contact [Linh Vuu](%s) to wake me up." % contact_url)
59
+
60
+ uploaded_file = st.file_uploader("Upload a CSV file for analysis", type=['csv'])
61
+
62
+ if uploaded_file is not None:
63
+
64
+ file_content = uploaded_file.read()
65
+
66
+ # Upload a file with an "assistants" purpose
67
+ file_array = [file_content]
68
+ file_id_array = []
69
+ for file in file_array:
70
+ file = client.files.create(
71
+ file = file_content,
72
+ purpose="assistants"
73
+ )
74
+ file_id_array.append(file.id)
75
+
76
+ print(file_id_array)
77
+
78
+ with st.form(key="user_input_form"):
79
+
80
+ question = st.text_input("Enter question:")
81
+ submit_button = st.form_submit_button(label="Response to my question above")
82
+
83
+ if submit_button:
84
+
85
+ # ==== Create a Message ====
86
+ message = question
87
+ message = client.beta.threads.messages.create(
88
+ thread_id = thread_id, role = "user", content = message, file_ids = file_id_array
89
+ )
90
+
91
+ # Define assistant_id before the try-except block
92
+ assistant_id = "asst_IY1VCWqTnQ2Uvj9zWHLXmblg"
93
+ run = None
94
+
95
+ # === Run our Assistant ===
96
+ try:
97
+ if assistant_id is None:
98
+ # If assistant_id is None, create a new assistant
99
+ assistant_id = create_new_assistant()
100
+
101
+ run = client.beta.threads.runs.create(
102
+ thread_id = thread_id,
103
+ assistant_id = assistant_id
104
+ )
105
+ except openai.NotFoundError:
106
+ # If assistant_id does not exist, create a new assistant and retry
107
+ assistant_id = create_new_assistant()
108
+ run = client.beta.threads.runs.create(
109
+ thread_id = thread_id,
110
+ assistant_id = assistant_id
111
+ )
112
+
113
+ # === Run ===
114
+ wait_for_run_completion(client=client, thread_id=thread_id, run_id=run.id)
115
+
116
+ if __name__ == "__main__":
117
+ main()
requirements.txt ADDED
@@ -0,0 +1 @@
 
 
1
+ openai