Spaces:
Sleeping
Sleeping
Update app.py
Browse files
app.py
CHANGED
|
@@ -52,7 +52,7 @@ AUDIO_DIR = "audio_logs"
|
|
| 52 |
STATE_FILE = "user_state.txt"
|
| 53 |
CHAT_FILE = os.path.join(CHAT_DIR, "quest_log.md")
|
| 54 |
|
| 55 |
-
# Helpers
|
| 56 |
def format_timestamp(username=""):
|
| 57 |
now = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 58 |
return f"{now}-by-{username}"
|
|
@@ -87,33 +87,7 @@ def load_username():
|
|
| 87 |
return f.read().strip()
|
| 88 |
return None
|
| 89 |
|
| 90 |
-
#
|
| 91 |
-
def init_session_state():
|
| 92 |
-
defaults = {
|
| 93 |
-
'server_running': False, 'server_task': None, 'active_connections': {},
|
| 94 |
-
'chat_history': [], 'audio_cache': {}, 'last_transcript': "",
|
| 95 |
-
'username': None, 'score': 0, 'treasures': 0, 'location': START_LOCATION,
|
| 96 |
-
'speech_processed': False, 'players': {}, 'last_update': time.time(),
|
| 97 |
-
'update_interval': 20, 'x_pos': 0, 'z_pos': 0, 'move_left': False,
|
| 98 |
-
'move_right': False, 'move_up': False, 'move_down': False
|
| 99 |
-
}
|
| 100 |
-
for k, v in defaults.items():
|
| 101 |
-
if k not in st.session_state:
|
| 102 |
-
st.session_state[k] = v
|
| 103 |
-
# Ensure username is initialized immediately
|
| 104 |
-
if st.session_state.username is None:
|
| 105 |
-
saved_username = load_username()
|
| 106 |
-
if saved_username and saved_username in CHARACTERS:
|
| 107 |
-
st.session_state.username = saved_username
|
| 108 |
-
else:
|
| 109 |
-
st.session_state.username = random.choice(list(CHARACTERS.keys()))
|
| 110 |
-
asyncio.run(save_chat_entry(st.session_state.username, "🗺️ Begins the Rocky Mountain Quest!", CHARACTERS[st.session_state.username]["voice"]))
|
| 111 |
-
save_username(st.session_state.username)
|
| 112 |
-
|
| 113 |
-
# Call init_session_state immediately to ensure username is set
|
| 114 |
-
init_session_state()
|
| 115 |
-
|
| 116 |
-
# Audio Processing
|
| 117 |
async def async_edge_tts_generate(text, voice, username):
|
| 118 |
cache_key = f"{text[:100]}_{voice}"
|
| 119 |
if cache_key in st.session_state['audio_cache']:
|
|
@@ -132,7 +106,7 @@ def play_and_download_audio(file_path):
|
|
| 132 |
st.audio(file_path)
|
| 133 |
st.markdown(get_download_link(file_path), unsafe_allow_html=True)
|
| 134 |
|
| 135 |
-
# Chat and Quest Log
|
| 136 |
async def save_chat_entry(username, message, voice, is_markdown=False):
|
| 137 |
if not message.strip() or message == st.session_state.last_transcript:
|
| 138 |
return None, None
|
|
@@ -157,6 +131,32 @@ async def load_chat():
|
|
| 157 |
content = f.read().strip()
|
| 158 |
return content.split('\n')
|
| 159 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 160 |
# ArXiv Integration
|
| 161 |
async def perform_arxiv_search(query, username):
|
| 162 |
gradio_client = Client("awacke1/Arxiv-Paper-Search-And-QA-RAG-Pattern")
|
|
@@ -175,7 +175,7 @@ async def websocket_handler(websocket, path):
|
|
| 175 |
if room_id not in st.session_state.active_connections:
|
| 176 |
st.session_state.active_connections[room_id] = {}
|
| 177 |
st.session_state.active_connections[room_id][client_id] = websocket
|
| 178 |
-
username = st.session_state.username
|
| 179 |
st.session_state.players[client_id] = {
|
| 180 |
"username": username,
|
| 181 |
"x": random.uniform(-20, 20),
|
|
|
|
| 52 |
STATE_FILE = "user_state.txt"
|
| 53 |
CHAT_FILE = os.path.join(CHAT_DIR, "quest_log.md")
|
| 54 |
|
| 55 |
+
# Helpers
|
| 56 |
def format_timestamp(username=""):
|
| 57 |
now = datetime.now().strftime("%Y%m%d_%H%M%S")
|
| 58 |
return f"{now}-by-{username}"
|
|
|
|
| 87 |
return f.read().strip()
|
| 88 |
return None
|
| 89 |
|
| 90 |
+
# Audio Processing (Moved Up for save_chat_entry Dependency)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 91 |
async def async_edge_tts_generate(text, voice, username):
|
| 92 |
cache_key = f"{text[:100]}_{voice}"
|
| 93 |
if cache_key in st.session_state['audio_cache']:
|
|
|
|
| 106 |
st.audio(file_path)
|
| 107 |
st.markdown(get_download_link(file_path), unsafe_allow_html=True)
|
| 108 |
|
| 109 |
+
# Chat and Quest Log (Moved Up for init_session_state Dependency)
|
| 110 |
async def save_chat_entry(username, message, voice, is_markdown=False):
|
| 111 |
if not message.strip() or message == st.session_state.last_transcript:
|
| 112 |
return None, None
|
|
|
|
| 131 |
content = f.read().strip()
|
| 132 |
return content.split('\n')
|
| 133 |
|
| 134 |
+
# Session State Init (Now After All Dependencies)
|
| 135 |
+
def init_session_state():
|
| 136 |
+
defaults = {
|
| 137 |
+
'server_running': False, 'server_task': None, 'active_connections': {},
|
| 138 |
+
'chat_history': [], 'audio_cache': {}, 'last_transcript': "",
|
| 139 |
+
'username': None, 'score': 0, 'treasures': 0, 'location': START_LOCATION,
|
| 140 |
+
'speech_processed': False, 'players': {}, 'last_update': time.time(),
|
| 141 |
+
'update_interval': 20, 'x_pos': 0, 'z_pos': 0, 'move_left': False,
|
| 142 |
+
'move_right': False, 'move_up': False, 'move_down': False
|
| 143 |
+
}
|
| 144 |
+
for k, v in defaults.items():
|
| 145 |
+
if k not in st.session_state:
|
| 146 |
+
st.session_state[k] = v
|
| 147 |
+
# Ensure username is initialized immediately
|
| 148 |
+
if st.session_state.username is None:
|
| 149 |
+
saved_username = load_username()
|
| 150 |
+
if saved_username and saved_username in CHARACTERS:
|
| 151 |
+
st.session_state.username = saved_username
|
| 152 |
+
else:
|
| 153 |
+
st.session_state.username = random.choice(list(CHARACTERS.keys()))
|
| 154 |
+
asyncio.run(save_chat_entry(st.session_state.username, "🗺️ Begins the Rocky Mountain Quest!", CHARACTERS[st.session_state.username]["voice"]))
|
| 155 |
+
save_username(st.session_state.username)
|
| 156 |
+
|
| 157 |
+
# Call init_session_state immediately to ensure username is set
|
| 158 |
+
init_session_state()
|
| 159 |
+
|
| 160 |
# ArXiv Integration
|
| 161 |
async def perform_arxiv_search(query, username):
|
| 162 |
gradio_client = Client("awacke1/Arxiv-Paper-Search-And-QA-RAG-Pattern")
|
|
|
|
| 175 |
if room_id not in st.session_state.active_connections:
|
| 176 |
st.session_state.active_connections[room_id] = {}
|
| 177 |
st.session_state.active_connections[room_id][client_id] = websocket
|
| 178 |
+
username = st.session_state.username
|
| 179 |
st.session_state.players[client_id] = {
|
| 180 |
"username": username,
|
| 181 |
"x": random.uniform(-20, 20),
|