import streamlit as st from st_audiorec import st_audiorec import speech_recognition as sr import tempfile import os from dotenv import load_dotenv import google.generativeai as genai # ──────────────────────────────── # Load API Keys & Configure Gemini # ──────────────────────────────── load_dotenv() genai.configure(api_key=os.getenv("GOOGLE_API_KEY")) # ──────────────────────────────── # AI Prompt Functions # ──────────────────────────────── def get_follow_up_questions(transcript): prompt = f""" You are an AI interview assistant. Given the candidate's answer below, generate 3 insightful follow-up interview questions the interviewer should ask next. Please note, the input might also be the interviewer's question. If that is the case, ignore or do not respond. Rate the Candidate's answer too. Candidate's response: \"\"\"{transcript}\"\"\" Response Rating: Interviewer questions: """ model = genai.GenerativeModel('gemini-1.5-flash') response = model.generate_content(prompt) return response.text.strip() def get_final_report(transcript): prompt = f""" You are an AI interview assistant. Given the candidate's answer below, generate a report summarizing the candidate's responses, suitability, and overall performance. Candidate's response: \"\"\"{transcript}\"\"\" Candidate Rating: Interviewer Summary: """ model = genai.GenerativeModel('gemini-1.5-flash') response = model.generate_content(prompt) return response.text.strip() # ──────────────────────────────── # Streamlit UI # ──────────────────────────────── st.set_page_config(page_title="HireScope AI - Audio Transcriber", layout="centered") st.markdown("", unsafe_allow_html=True) st.markdown("", unsafe_allow_html=True) st.markdown("", unsafe_allow_html=True) # Initialize transcript history if "transcript_log" not in st.session_state: st.session_state.transcript_log = "" if "final_report" not in st.session_state: st.session_state.final_report = "" def hirescope_transcriber(): st.title('🎙️ HireScope AI') st.markdown("Record your voice to get real-time transcription and AI suggestions.") st.markdown("For the local app version, please visit https://github.com/JishnuSetia/HireScopeAI and follow the instructions") st.subheader("Instructions for Use:") st.markdown("- To ask a question, start recording your audio and also record candidate answer") st.markdown("- Stop recording when done") st.markdown("- Wait for a few seconds and AI will give you suggestions") st.markdown("- At the end of the interview, you can export the Transcript and an AI Generated Report") st.markdown("- You may have issues with audio input due to JavaScript. Preferably, please use the local version (https://github.com/JishnuSetia/HireScopeAI) as that can work with no potential issues at all") wav_audio_data = st_audiorec() if wav_audio_data is not None: with tempfile.NamedTemporaryFile(delete=False, suffix=".wav") as f: f.write(wav_audio_data) temp_wav_path = f.name recognizer = sr.Recognizer() with sr.AudioFile(temp_wav_path) as source: audio = recognizer.record(source) try: text = recognizer.recognize_google(audio) ai = get_follow_up_questions(text) # Append to transcript log st.session_state.transcript_log += f"Candidate: {text}\n\nAI: {ai}\n\n" except sr.UnknownValueError: st.session_state.transcript_log += "[Unintelligible Audio]\n\n" except sr.RequestError as e: st.error(f"Could not request results; {e}") # Display complete transcript log (non-editable) st.subheader("📄 Transcript Log") st.text_area("Transcription", st.session_state.transcript_log, height=300, disabled=True) # Export Buttons st.subheader("📤 Export Options") col1, col2 = st.columns(2) with col1: st.download_button( label="Download Transcript (.txt)", data=st.session_state.transcript_log, file_name="hirescope_transcript.txt", mime="text/plain" ) with col2: if st.button("Generate Final Report"): with st.spinner("Generating summary report..."): st.session_state.final_report = get_final_report(st.session_state.transcript_log) st.success("Summary ready! Click below to download.") if st.session_state.final_report: st.download_button( label="Download Final Report (.txt)", data=st.session_state.final_report, file_name="hirescope_final_report.txt", mime="text/plain" ) # Run the app if __name__ == '__main__': hirescope_transcriber()