eaglelandsonce's picture
Update app.py
fdbb275 verified
raw
history blame
7.33 kB
import streamlit as st
import requests
from pytube import YouTube
import os
from twelvelabs.models.task import Task
# Streamlit interface setup
st.title('12 Labs - Interview Insight Analyzer')
from twelvelabs import TwelveLabs
client = TwelveLabs(api_key=os.environ.get('TL_API_KEY'))
# Creating tabs,
tab1, tab2, tab3, tab4 = st.tabs(["Project Description", "Video Uploader", "Video Analyzer", "Unique Value Add"])
with tab1:
st.header("Project Description")
st.write("Here you can describe the project in detail.")
image_path = 'data/data_projectflow.png'
# Display the image
st.image(image_path, caption='Project Flow Diagram')
# Add more components as needed
with tab2:
# Function to download YouTube video
def download_youtube_video(url):
yt = YouTube(url)
stream = yt.streams.filter(file_extension='mp4').first()
video = stream.download()
return video
st.header('Video Upload and Processing (To Do)')
# Setup your Twelve Labs client
# Assuming 'client' is set up here (use your actual client initialization)
# client = TwelveLabsClient(api_key="your_api_key")
# Container for video input
with st.container():
st.write("Video Input")
video_file = st.file_uploader("Upload a video file", type=["mp4", "avi"])
youtube_url = st.text_input("Or paste a YouTube URL here:")
# Container for video processing output
with st.container():
st.write("Video Processing")
if st.button("Process Video"):
if video_file is not None:
video_path = video_file.name
with open(video_path, mode='wb') as f:
f.write(video_file.getbuffer())
elif youtube_url:
video_path = download_youtube_video(youtube_url)
else:
st.warning("Please upload a video file or enter a YouTube URL.")
st.stop()
print(f"Uploading {video_path}")
task = client.task.create(index_id="<YOUR_INDEX_ID>", file=video_path, language="en")
st.success(f"Task id={task.id}")
# Optional: Monitor the video indexing process
def on_task_update(task: Task):
st.write(f"Status={task.status}")
task.wait_for_done(callback=on_task_update)
if task.status != "ready":
st.error(f"Indexing failed with status {task.status}")
else:
st.success(f"Uploaded {video_path}. The unique identifier of your video is {task.video_id}.")
with tab3:
st.header("Video Analyzer")
st.write("Choose the number of issues you like to examine, and get feedback on how to improve for your next job interview.")
# Creating two columns for layout
col1, col2 = st.columns(2)
# Embedding YouTube video directly in the left column
with col1:
youtube_url = "https://www.youtube.com/watch?v=Uo0KjdDJr1c"
st.video(youtube_url)
# Using the right column for prompt modification and response
with col2:
# Input for modifying the prompt
prompt = st.text_input("Enter your prompt:",
"list the top 4 job interview mistakes and how to improve")
# Slider to adjust the number in the prompt
number = st.slider("Select the number of top mistakes:", min_value=1, max_value=10, value=4)
# Update the prompt with the chosen number
updated_prompt = prompt.replace("4", str(number))
# Button to send the request
if st.button("Summarize Video"):
BASE_URL = "https://api.twelvelabs.io/v1.2"
api_key = "tlk_3CPMVGM0ZPTKNT2TKQ3Y62TA7ZY9"
data = {
"video_id": "6636cf7fd1cd5a287c957cf5",
"type": "summary",
"prompt": updated_prompt
}
# Send the request
response = requests.post(f"{BASE_URL}/summarize", json=data, headers={"x-api-key": api_key})
# Check if the response is successful
if response.status_code == 200:
st.text_area("Summary:", response.json()['summary'], height=300)
else:
st.error("Failed to fetch summary: " + response.text)
# Run this script using the following command:
# streamlit run your_script_name.py
with tab4:
st.header("Top 20 - Unique Value Add")
import streamlit as st
# List of items
items = [
"Standardization and Fairness: Ensuring every candidate is treated equally improves legal compliance and internal fairness.",
"Improved Hiring Decisions: Objective, data-driven assessments lead to better hires, directly impacting organizational performance.",
"Time and Cost Efficiency: Reducing the time and resources required for hiring processes translates directly into cost savings.",
"Scalability: Ability to handle a high volume of interviews efficiently supports rapid scaling, critical for growth phases.",
"Integration with HR Systems: Streamlining recruitment into broader HR workflows enhances overall HR efficiency.",
"Predictive Analytics: Advanced analytics can forecast candidate success, improving long-term job fit and satisfaction.",
"Enhanced Candidate Experience: Providing immediate feedback can enhance reputation and attract quality candidates.",
"Remote Hiring Efficiency: Facilitates global talent acquisition, crucial for companies with a diverse geographic footprint.",
"Accessibility and Inclusiveness: Opens up opportunities for a wider pool of candidates, enhancing diversity.",
"Security and Privacy Compliance: Ensures handling of personal data safely and legally, protecting the company and candidate.",
"Data-Driven Insights: Offers deep insights into candidate behaviors, refining hiring criteria and outcomes.",
"Reduced Interviewer Bias: Minimizes human bias, directly contributing to a more diverse and innovative workforce.",
"Competitive Advantage: Attracting top talent by using cutting-edge technology enhances a company's market positioning.",
"Reduced Administrative Load: Automates tasks such as scheduling, increasing operational efficiency.",
"Continuous Improvement Loop: The system's ability to learn and adapt from each interview boosts long-term effectiveness.",
"Dynamic Questioning: Adapting questions in real-time ensures more relevant and revealing candidate responses.",
"Documentation and Review: Facilitates compliance and quality control in hiring processes.",
"AI-Driven Role Matching: Optimizes talent distribution within the organization by matching candidates to suitable roles.",
"Enhanced Employer Branding: Advances the company's image as innovative and candidate-focused.",
"Speed of Process: Accelerates the recruitment cycle, reducing downtime and improving responsiveness to staffing needs."
]
# Displaying items with numbering in a Streamlit text area
st.text_area("List of Items", "\n".join([f"{i+1}. {item}" for i, item in enumerate(items)]), height=600)