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="", 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)