Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| from crewai import Agent, Task, Crew, LLM | |
| from crewai_tools import SerperDevTool | |
| from gtts import gTTS | |
| import speech_recognition as sr | |
| import os | |
| gemini_key=os.getenv("gemini_api") | |
| serper_key=os.getenv("serper_api") | |
| search_tool = SerperDevTool() | |
| recognizer = sr.Recognizer() | |
| def recognize_speech(): | |
| with sr.Microphone() as source: | |
| st.info("Listening... Speak now!") | |
| recognizer.adjust_for_ambient_noise(source) | |
| try: | |
| audio = recognizer.listen(source, timeout=5,stream=False) | |
| text = recognizer.recognize_google(audio) | |
| return text | |
| except sr.UnknownValueError: | |
| return "Sorry, could not understand the audio." | |
| except sr.RequestError: | |
| return "Could not request results, check your internet." | |
| def text_input(): | |
| text= st.text_input("Enter the answer") | |
| return (text) | |
| # Initialize LLM | |
| llm = LLM(model="gemini/gemini-1.5-flash", | |
| verbose=True, | |
| temperature=0.5, | |
| api_key=gemini_key) | |
| # Define Agents | |
| question_agent = Agent( | |
| role="interviewer", | |
| goal="Frame {number} questions based on the {job_description}", | |
| verbose=False, | |
| memory=True, | |
| backstory="You need to frame interview questions based on the job description.", | |
| llm=llm, | |
| tools=[search_tool], | |
| allow_delegation=True | |
| ) | |
| generator_agent = Agent( | |
| role="answer generator", | |
| goal="frame answer to {question} based on the {job_description}.", | |
| verbose=False, | |
| memory=True, | |
| backstory="you are expert in answering the question based on {job_description}.", | |
| llm=llm, | |
| tools=[search_tool], | |
| allow_delegation=True | |
| ) | |
| evaluation_agent = Agent( | |
| role="evulation", | |
| goal="frame answer to {question} based on the {job_description}.", | |
| verbose=False, | |
| memory=True, | |
| backstory="you are expert in answering the question based on {job_description}.", | |
| llm=llm, | |
| tools=[search_tool], | |
| allow_delegation=True | |
| ) | |
| # Define Tasks | |
| question_task = Task( | |
| description="Generate {number} interview questions based on the {job_description} .", | |
| expected_output="A list of {number} questions.", | |
| tools=[search_tool], | |
| agent=question_agent | |
| ) | |
| generator_task = Task( | |
| description="frame the answer to the {question} based on the {job_description}.", | |
| expected_output="Correct if the answer is right; otherwise, return the correct answer.", | |
| tools=[search_tool], | |
| agent=generator_agent | |
| ) | |
| evaluation_task = Task( | |
| description="frame the answer to the {question} based on the {job_description}.", | |
| expected_output="Correct if the answer is right; otherwise, return the correct answer.", | |
| tools=[search_tool], | |
| agent=generator_agent | |
| ) | |
| # Define Crews | |
| crew1 = Crew(agents=[question_agent], tasks=[question_task]) | |
| crew2 = Crew(agents=[generator_agent], tasks=[generator_task]) | |
| crew3 = Crew(agents=[evaluation_agent],tasks=[evaluation_task]) | |
| # Initialize Streamlit App | |
| st.title("Interview Preparation Bot") | |
| # *Reset function to clear all session variables* | |
| def reset_session(): | |
| st.session_state.job_description = "" | |
| st.session_state.number=1 | |
| st.session_state.questions = [] | |
| st.session_state.current_question_index = 0 | |
| st.session_state.answers = [] | |
| st.session_state.evaluations = [] | |
| st.session_state.completed = False | |
| # Initialize session state variables | |
| if "questions" not in st.session_state: | |
| reset_session() | |
| if "number" not in st.session_state: | |
| st.session_state.number = 1 | |
| # User Input | |
| st.session_state.job_description = st.text_input("Enter the Topic you need Practice", value=st.session_state.job_description) | |
| st.session_state.number = st.number_input("Enter the Number of Question you need",min_value=1,value=st.session_state.number) | |
| # Button to Generate Questions | |
| if st.button("Start") and st.session_state.job_description and st.session_state.number: | |
| result = crew1.kickoff(inputs={"job_description": st.session_state.job_description,'number':st.session_state.number}) | |
| st.session_state.questions = [q.strip(' ```') for q in result.raw.split("\n") if q.strip()] | |
| st.session_state.current_question_index = 0 | |
| st.session_state.answers = [] | |
| st.session_state.evaluations = [] | |
| st.session_state.completed = False | |
| # # Display Questions One by One | |
| if st.session_state.questions and st.session_state.current_question_index < len(st.session_state.questions): | |
| question = st.session_state.questions[st.session_state.current_question_index] | |
| st.write(f"*Question {st.session_state.current_question_index + 1}:* {question}") | |
| tts = gTTS(question, lang="en") | |
| tts.save("response.mp3") | |
| audio_file = open("response.mp3", "rb") | |
| audio_bytes = audio_file.read() | |
| st.audio(audio_bytes, format="audio/mp3") | |
| # User enters answer | |
| type=st.radio("select the type",["Answer with voice ","Answer by type"]) | |
| if type=="Answer with voice ": | |
| output="" | |
| if st.button("Start Recording"): | |
| output = recognize_speech() | |
| st.write("Transcription: ", output) | |
| elif type=="Answer by type": | |
| output=st.text_input(f"Enter your answer for Question ") | |
| # st.session_state.answers .append(st.session_state.current_question_index + 1) | |
| answer=answer = f"{st.session_state.current_question_index + 1}{output}" | |
| # answer = st.text_input(f"Enter your answer for Question {st.session_state.current_question_index + 1}") | |
| if st.button("Submit Answer") and answer: | |
| # Evaluate Answer | |
| result2 = crew2.kickoff(inputs={"job_description": st.session_state.job_description, "question": question, "answer": answer}) | |
| evaluation_result = result2.raw | |
| # Store answer and evaluation | |
| st.session_state.answers.append(answer) | |
| st.session_state.evaluations.append(evaluation_result) | |
| # Move to the next question | |
| st.session_state.current_question_index += 1 | |
| # If all questions are answered, mark as completed | |
| if st.session_state.current_question_index == len(st.session_state.questions)-1: | |
| st.session_state.completed = True | |
| col1,col2=st.columns(2) | |
| # Show Evaluations After All Answers | |
| if st.session_state.completed: | |
| with col2: | |
| if st.button("Review The Answers"): | |
| st.write("### Final Evaluation:") | |
| for i in range(len(st.session_state.questions)-1): | |
| st.write(f"*Q{i+1}:* {st.session_state.questions[i]}") | |
| st.write(f"*Your Answer:* {st.session_state.answers[i]}") | |
| st.write(f"*Evaluation:* {st.session_state.evaluations[i]}") | |
| st.write("---") | |