Update app.py
Browse files
app.py
CHANGED
|
@@ -130,6 +130,49 @@ def reset_conversation():
|
|
| 130 |
st.session_state.conversation = []
|
| 131 |
st.session_state.messages = []
|
| 132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
# Function to process text with selected model
|
| 134 |
def process_text(user_name, text_input, selected_model, temp_values):
|
| 135 |
timestamp = datetime.now(pytz.utc).strftime('%Y-%m-%d %H:%M:%S %Z')
|
|
@@ -283,7 +326,7 @@ def main_column(column_name):
|
|
| 283 |
process_video(st.session_state.current_user['name'], video_input, text_input)
|
| 284 |
|
| 285 |
# Main Streamlit app
|
| 286 |
-
st.title("
|
| 287 |
|
| 288 |
# Sidebar
|
| 289 |
with st.sidebar:
|
|
@@ -319,50 +362,7 @@ with col1:
|
|
| 319 |
with col2:
|
| 320 |
main_column("Column 2")
|
| 321 |
|
| 322 |
-
# Function to generate filenames
|
| 323 |
-
def generate_filename(prompt, file_type):
|
| 324 |
-
central = pytz.timezone('US/Central')
|
| 325 |
-
safe_date_time = datetime.now(central).strftime("%m%d_%H%M")
|
| 326 |
-
replaced_prompt = prompt.replace(" ", "_").replace("\n", "_")
|
| 327 |
-
safe_prompt = "".join(x for x in replaced_prompt if x.isalnum() or x == "_")[:90]
|
| 328 |
-
return f"{safe_date_time}_{safe_prompt}.{file_type}"
|
| 329 |
-
|
| 330 |
-
# Function to create files
|
| 331 |
-
def create_file(filename, prompt, response, user_name, timestamp):
|
| 332 |
-
with open(filename, "w", encoding="utf-8") as f:
|
| 333 |
-
f.write(f"User: {user_name}\nTimestamp: {timestamp}\n\nPrompt:\n{prompt}\n\nResponse:\n{response}")
|
| 334 |
-
|
| 335 |
-
# Function to extract video frames
|
| 336 |
-
def extract_video_frames(video_path, seconds_per_frame=2):
|
| 337 |
-
base64Frames = []
|
| 338 |
-
video = cv2.VideoCapture(video_path)
|
| 339 |
-
total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
|
| 340 |
-
fps = video.get(cv2.CAP_PROP_FPS)
|
| 341 |
-
frames_to_skip = int(fps * seconds_per_frame)
|
| 342 |
-
curr_frame = 0
|
| 343 |
-
while curr_frame < total_frames - 1:
|
| 344 |
-
video.set(cv2.CAP_PROP_POS_FRAMES, curr_frame)
|
| 345 |
-
success, frame = video.read()
|
| 346 |
-
if not success:
|
| 347 |
-
break
|
| 348 |
-
_, buffer = cv2.imencode(".jpg", frame)
|
| 349 |
-
base64Frames.append(base64.b64encode(buffer).decode("utf-8"))
|
| 350 |
-
curr_frame += frames_to_skip
|
| 351 |
-
video.release()
|
| 352 |
-
return base64Frames, None
|
| 353 |
-
|
| 354 |
-
# Function to process audio for video
|
| 355 |
-
def process_audio_for_video(video_input):
|
| 356 |
-
try:
|
| 357 |
-
transcription = client.audio.transcriptions.create(
|
| 358 |
-
model="whisper-1",
|
| 359 |
-
file=video_input,
|
| 360 |
-
)
|
| 361 |
-
return transcription.text
|
| 362 |
-
except:
|
| 363 |
-
return ''
|
| 364 |
-
|
| 365 |
# Run the Streamlit app
|
| 366 |
if __name__ == "__main__":
|
| 367 |
-
st.markdown("*
|
| 368 |
-
st.markdown("\n
|
|
|
|
| 130 |
st.session_state.conversation = []
|
| 131 |
st.session_state.messages = []
|
| 132 |
|
| 133 |
+
# Function to generate filenames
|
| 134 |
+
def generate_filename(prompt, file_type):
|
| 135 |
+
central = pytz.timezone('US/Central')
|
| 136 |
+
safe_date_time = datetime.now(central).strftime("%m%d_%H%M")
|
| 137 |
+
replaced_prompt = prompt.replace(" ", "_").replace("\n", "_")
|
| 138 |
+
safe_prompt = "".join(x for x in replaced_prompt if x.isalnum() or x == "_")[:90]
|
| 139 |
+
return f"{safe_date_time}_{safe_prompt}.{file_type}"
|
| 140 |
+
|
| 141 |
+
# Function to create files
|
| 142 |
+
def create_file(filename, prompt, response, user_name, timestamp):
|
| 143 |
+
with open(filename, "w", encoding="utf-8") as f:
|
| 144 |
+
f.write(f"User: {user_name}\nTimestamp: {timestamp}\n\nPrompt:\n{prompt}\n\nResponse:\n{response}")
|
| 145 |
+
|
| 146 |
+
# Function to extract video frames
|
| 147 |
+
def extract_video_frames(video_path, seconds_per_frame=2):
|
| 148 |
+
base64Frames = []
|
| 149 |
+
video = cv2.VideoCapture(video_path)
|
| 150 |
+
total_frames = int(video.get(cv2.CAP_PROP_FRAME_COUNT))
|
| 151 |
+
fps = video.get(cv2.CAP_PROP_FPS)
|
| 152 |
+
frames_to_skip = int(fps * seconds_per_frame)
|
| 153 |
+
curr_frame = 0
|
| 154 |
+
while curr_frame < total_frames - 1:
|
| 155 |
+
video.set(cv2.CAP_PROP_POS_FRAMES, curr_frame)
|
| 156 |
+
success, frame = video.read()
|
| 157 |
+
if not success:
|
| 158 |
+
break
|
| 159 |
+
_, buffer = cv2.imencode(".jpg", frame)
|
| 160 |
+
base64Frames.append(base64.b64encode(buffer).decode("utf-8"))
|
| 161 |
+
curr_frame += frames_to_skip
|
| 162 |
+
video.release()
|
| 163 |
+
return base64Frames, None
|
| 164 |
+
|
| 165 |
+
# Function to process audio for video
|
| 166 |
+
def process_audio_for_video(video_input):
|
| 167 |
+
try:
|
| 168 |
+
transcription = client.audio.transcriptions.create(
|
| 169 |
+
model="whisper-1",
|
| 170 |
+
file=video_input,
|
| 171 |
+
)
|
| 172 |
+
return transcription.text
|
| 173 |
+
except:
|
| 174 |
+
return ''
|
| 175 |
+
|
| 176 |
# Function to process text with selected model
|
| 177 |
def process_text(user_name, text_input, selected_model, temp_values):
|
| 178 |
timestamp = datetime.now(pytz.utc).strftime('%Y-%m-%d %H:%M:%S %Z')
|
|
|
|
| 326 |
process_video(st.session_state.current_user['name'], video_input, text_input)
|
| 327 |
|
| 328 |
# Main Streamlit app
|
| 329 |
+
st.title("Personalized Real-Time Chat")
|
| 330 |
|
| 331 |
# Sidebar
|
| 332 |
with st.sidebar:
|
|
|
|
| 362 |
with col2:
|
| 363 |
main_column("Column 2")
|
| 364 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 365 |
# Run the Streamlit app
|
| 366 |
if __name__ == "__main__":
|
| 367 |
+
st.markdown("*by Aaron Wacker*")
|
| 368 |
+
st.markdown("\n[Aaron Wacker](https://huggingface.co/spaces/awacke1/).")
|