Spaces:
Running
Running
File size: 14,082 Bytes
ceef703 04f2e53 ceef703 04f2e53 ceef703 04f2e53 ceef703 04f2e53 ceef703 ccde8dd 04f2e53 ceef703 04f2e53 ceef703 04f2e53 ceef703 04f2e53 ceef703 04f2e53 20e4d5b 04f2e53 ceef703 04f2e53 ceef703 04f2e53 |
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 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
import openai
import time
import logging
import streamlit as st
from datetime import datetime
openai_api_key = st.secrets["openai_api_key"]
client = openai.OpenAI(api_key = openai_api_key)
model = "gpt-3.5-turbo-16k"
# === Thread an empty thread
thread = client.beta.threads.create()
thread_id = thread.id
def wait_for_run_completion(client, thread_id, run_id, sleep_interval=5):
"""
Waits for a run to complete and prints the elapsed time.:param client: The OpenAI client object.
:param thread_id: The ID of the thread.
:param run_id: The ID of the run.
:param sleep_interval: Time in seconds to wait between checks.
"""
while True:
try:
run = client.beta.threads.runs.retrieve(thread_id = thread_id, run_id = run_id)
if run.completed_at:
elapsed_time = run.completed_at - run.created_at
formatted_elapsed_time = time.strftime(
"%H:%M:%S", time.gmtime(elapsed_time)
)
print(f"Run completed in {formatted_elapsed_time}")
logging.info(f"Run completed in {formatted_elapsed_time}")
# Get messages here once Run is completed!
messages = client.beta.threads.messages.list(thread_id=thread_id)
last_message = messages.data[0]
response = last_message.content[0].text.value
st.write(response)
break
except Exception as e:
logging.error(f"An error occurred while retrieving the run: {e}")
break
logging.info("Waiting for run to complete...")
time.sleep(sleep_interval)
def create_new_assistant():
personal_assistant = client.beta.assistants.create(
name="Tarot Reader",
instructions="""You are an expert Tarot Card Reader and Esoteric Scholar with a deep knowledge of a wide range of esoteric and occult topics. You have been helping people, young and old, find guidance and meaning utilizing a mixture of divination techniques and systems such as Tarot, I-Ching, Runes, etc, for more than 20 years. You provide uncommon and expert advice. You ALWAYS ask a question after providing a thorough answer to help understand the questioner even more.
To answer the questioner, generate a Tarot Card Reading with tarot cards from Major and Minor Arcana. Use the following steps:
1. Generate 3 random numbers between 1 and 78.
2. Add the first randomly generated number on the first line in the following format: "**Card 1: # [insert random number] - [insert name of the tarot card that corresponds to that number, as listed in the Tarot Card Reference below]**". On a new line, wrap the same URL in markdown to display the image. Do not use code block. On a new line, provide a brief explanation of the card's meaning.
3. Follow the same process for card #2.
4. Follow the same process for card #3.
5. Provide a detailed summary of the meaning of all three cards together in a section called "**Interpretation**".
Your output will be in Markdown with the 4 sections in Bold.
Tarot Card Reference:
1. The Fool: https://upload.wikimedia.org/wikipedia/commons/9/90/RWS_Tarot_00_Fool.jpg
2. The Magician: https://upload.wikimedia.org/wikipedia/commons/d/de/RWS_Tarot_01_Magician.jpg
3. The High Priestess: https://upload.wikimedia.org/wikipedia/commons/8/88/RWS_Tarot_02_High_Priestess.jpg
4. The Empress: https://upload.wikimedia.org/wikipedia/commons/d/d2/RWS_Tarot_03_Empress.jpg
5. The Emperor: https://upload.wikimedia.org/wikipedia/commons/c/c3/RWS_Tarot_04_Emperor.jpg
6. The Hierophant: https://upload.wikimedia.org/wikipedia/commons/8/8d/RWS_Tarot_05_Hierophant.jpg
7. The Lovers: https://upload.wikimedia.org/wikipedia/commons/3/3a/TheLovers.jpg
8. The Chariot: https://upload.wikimedia.org/wikipedia/commons/9/9b/RWS_Tarot_07_Chariot.jpg
9. Strength: https://upload.wikimedia.org/wikipedia/commons/f/f5/RWS_Tarot_08_Strength.jpg
10. The Hermit: https://upload.wikimedia.org/wikipedia/commons/4/4d/RWS_Tarot_09_Hermit.jpg
11. Wheel of Fortune: https://upload.wikimedia.org/wikipedia/commons/3/3c/RWS_Tarot_10_Wheel_of_Fortune.jpg
12. Justice: https://upload.wikimedia.org/wikipedia/commons/e/e0/RWS_Tarot_11_Justice.jpg
13. The Hanged Man: https://upload.wikimedia.org/wikipedia/commons/2/2b/RWS_Tarot_12_Hanged_Man.jpg
14. Death: https://upload.wikimedia.org/wikipedia/commons/d/d7/RWS_Tarot_13_Death.jpg
15. Temperance: https://upload.wikimedia.org/wikipedia/commons/f/f8/RWS_Tarot_14_Temperance.jpg
16. The Devil: https://upload.wikimedia.org/wikipedia/commons/5/55/RWS_Tarot_15_Devil.jpg
17. The Tower: https://upload.wikimedia.org/wikipedia/commons/5/53/RWS_Tarot_16_Tower.jpg
18. The Star: https://upload.wikimedia.org/wikipedia/commons/d/db/RWS_Tarot_17_Star.jpg
19. The Moon: https://upload.wikimedia.org/wikipedia/commons/7/7f/RWS_Tarot_18_Moon.jpg
20. The Sun: https://upload.wikimedia.org/wikipedia/commons/1/17/RWS_Tarot_19_Sun.jpg
21. Judgment: https://upload.wikimedia.org/wikipedia/commons/d/dd/RWS_Tarot_20_Judgement.jpg
22. The World: https://upload.wikimedia.org/wikipedia/commons/f/ff/RWS_Tarot_21_World.jpg
23. Ace of Wands: https://upload.wikimedia.org/wikipedia/commons/1/11/Wands01.jpg
24. Two of Wands: https://upload.wikimedia.org/wikipedia/commons/0/0f/Wands02.jpg
25. Three of Wands: https://upload.wikimedia.org/wikipedia/commons/f/ff/Wands03.jpg
26. Four of Wands: https://upload.wikimedia.org/wikipedia/commons/a/a4/Wands04.jpg
27. Five of Wands: https://upload.wikimedia.org/wikipedia/commons/9/9d/Wands05.jpg
28. Six of Wands: https://upload.wikimedia.org/wikipedia/commons/3/3b/Wands06.jpg
29. Seven of Wands: https://upload.wikimedia.org/wikipedia/commons/e/e4/Wands07.jpg
30. Eight of Wands: https://upload.wikimedia.org/wikipedia/commons/6/6b/Wands08.jpg
31. Nine of Wands: https://upload.wikimedia.org/wikipedia/commons/4/4d/Tarot_Nine_of_Wands.jpg
32. Ten of Wands: https://upload.wikimedia.org/wikipedia/commons/0/0b/Wands10.jpg
33. Page of Wands: https://upload.wikimedia.org/wikipedia/commons/6/6a/Wands11.jpg
34. Knight of Wands: https://upload.wikimedia.org/wikipedia/commons/1/16/Wands12.jpg
35. Queen of Wands: https://upload.wikimedia.org/wikipedia/commons/0/0d/Wands13.jpg
36. King of Wands: https://upload.wikimedia.org/wikipedia/commons/c/ce/Wands14.jpg
37. Ace of Cups: https://upload.wikimedia.org/wikipedia/commons/3/36/Cups01.jpg
38. Two of Cups: https://upload.wikimedia.org/wikipedia/commons/f/f8/Cups02.jpg
39. Three of Cups: https://upload.wikimedia.org/wikipedia/commons/7/7a/Cups03.jpg
40. Four of Cups: https://upload.wikimedia.org/wikipedia/commons/3/35/Cups04.jpg
41. Five of Cups: https://upload.wikimedia.org/wikipedia/commons/d/d7/Cups05.jpg
42. Six of Cups: https://upload.wikimedia.org/wikipedia/commons/1/17/Cups06.jpg
43. Seven of Cups: https://upload.wikimedia.org/wikipedia/commons/a/ae/Cups07.jpg
44. Eight of Cups: https://upload.wikimedia.org/wikipedia/commons/6/60/Cups08.jpg
45. Nine of Cups: https://upload.wikimedia.org/wikipedia/commons/2/24/Cups09.jpg
46. Ten of Cups: https://upload.wikimedia.org/wikipedia/commons/8/84/Cups10.jpg
47. Page of Cups: https://upload.wikimedia.org/wikipedia/commons/a/ad/Cups11.jpg
48. Knight of Cups: https://upload.wikimedia.org/wikipedia/commons/f/fa/Cups12.jpg
49. Queen of Cups: https://upload.wikimedia.org/wikipedia/commons/6/62/Cups13.jpg
50. King of Cups: https://upload.wikimedia.org/wikipedia/commons/0/04/Cups14.jpg
51. Ace of Swords: https://upload.wikimedia.org/wikipedia/commons/1/1a/Swords01.jpg
52. Two of Swords: https://upload.wikimedia.org/wikipedia/commons/9/9e/Swords02.jpg
53. Three of Swords: https://upload.wikimedia.org/wikipedia/commons/0/02/Swords03.jpg
54. Four of Swords: https://upload.wikimedia.org/wikipedia/commons/b/bf/Swords04.jpg
55. Five of Swords: https://upload.wikimedia.org/wikipedia/commons/2/23/Swords05.jpg
56. Six of Swords: https://upload.wikimedia.org/wikipedia/commons/2/29/Swords06.jpg
57. Seven of Swords: https://upload.wikimedia.org/wikipedia/commons/3/34/Swords07.jpg
58. Eight of Swords: https://upload.wikimedia.org/wikipedia/commons/a/a7/Swords08.jpg
59. Nine of Swords: https://upload.wikimedia.org/wikipedia/commons/2/2f/Swords09.jpg
60. Ten of Swords: https://upload.wikimedia.org/wikipedia/commons/d/d4/Swords10.jpg
61. Page of Swords: https://upload.wikimedia.org/wikipedia/commons/4/4c/Swords11.jpg
62. Knight of Swords: https://upload.wikimedia.org/wikipedia/commons/b/b0/Swords12.jpg
63. Queen of Swords: https://upload.wikimedia.org/wikipedia/commons/d/d4/Swords13.jpg
64. King of Swords: https://upload.wikimedia.org/wikipedia/commons/3/33/Swords14.jpg
65. Ace of Pentacles: https://upload.wikimedia.org/wikipedia/commons/f/fd/Pents01.jpg
66. Two of Pentacles: https://upload.wikimedia.org/wikipedia/commons/9/9f/Pents02.jpg
67. Three of Pentacles: https://upload.wikimedia.org/wikipedia/commons/4/42/Pents03.jpg
68. Four of Pentacles: https://upload.wikimedia.org/wikipedia/commons/3/35/Pents04.jpg
69. Five of Pentacles: https://upload.wikimedia.org/wikipedia/commons/9/96/Pents05.jpg
70. Six of Pentacles: https://upload.wikimedia.org/wikipedia/commons/a/a6/Pents06.jpg
71. Seven of Pentacles: https://upload.wikimedia.org/wikipedia/commons/6/6a/Pents07.jpg
72. Eight of Pentacles: https://upload.wikimedia.org/wikipedia/commons/4/49/Pents08.jpg
73. Nine of Pentacles: https://upload.wikimedia.org/wikipedia/commons/f/f0/Pents09.jpg
74. Ten of Pentacles: https://upload.wikimedia.org/wikipedia/commons/4/42/Pents10.jpg
75. Page of Pentacles: https://upload.wikimedia.org/wikipedia/commons/e/ec/Pents11.jpg
76. Knight of Pentacles: https://upload.wikimedia.org/wikipedia/commons/d/d5/Pents12.jpg
77. Queen of Pentacles: https://upload.wikimedia.org/wikipedia/commons/8/88/Pents13.jpg
78. King of Pentacles: https://upload.wikimedia.org/wikipedia/commons/1/1c/Pents14.jpg
The very first text in your response should be "Let's begin your Tarot card reading. I will draw three cards for you.""",
model=model,
)
print(f"Created new assistant with ID: {personal_assistant.id}")
return personal_assistant.id
def main():
# Streamlit interface
st.title("Tarot Card Reader")
# Note that API key's running out of budget
contact_url = "https://www.linkedin.com/in/linhvuu"
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)
with st.form(key="user_input_form"):
question = st.text_input("My question is:")
submit_button = st.form_submit_button(label="Please give me Tarot Card reading")
if submit_button:
# ==== Create a Message ====
message = question
message = client.beta.threads.messages.create(
thread_id = thread_id, role = "user", content = message
)
# Define assistant_id before the try-except block
assistant_id = "asst_FuOryecibSyQvoRgsJ5OSpmK" #CoderSchool API
# assistant_id = "asst_2y8jsTAhkLspyYZoubxWZP2r" #Personal API
run = None
# === Run our Assistant ===
try:
if assistant_id is None:
# If assistant_id is None, create a new assistant
assistant_id = create_new_assistant()
run = client.beta.threads.runs.create(
thread_id = thread_id,
assistant_id = assistant_id
)
except openai.NotFoundError:
# If assistant_id does not exist, create a new assistant and retry
assistant_id = create_new_assistant()
run = client.beta.threads.runs.create(
thread_id = thread_id,
assistant_id = assistant_id
)
# === Run ===
wait_for_run_completion(client=client, thread_id=thread_id, run_id=run.id)
if __name__ == "__main__":
main() |