| import streamlit as st |
| from streamlit_option_menu import option_menu |
| from app_utils import switch_page |
| from PIL import Image |
| from streamlit_lottie import st_lottie |
| from typing import Literal |
| from dataclasses import dataclass |
| import json |
| import base64 |
| from langchain.memory import ConversationBufferMemory |
| from langchain.chains import ConversationChain, RetrievalQA |
| from langchain.prompts.prompt import PromptTemplate |
| from langchain.text_splitter import NLTKTextSplitter |
| from langchain.vectorstores import FAISS |
| import nltk |
| from prompts.prompts import templates |
| from langchain_google_genai import ChatGoogleGenerativeAI |
| import getpass |
| import os |
| from langchain_google_genai import GoogleGenerativeAIEmbeddings |
|
|
|
|
| if "GOOGLE_API_KEY" not in os.environ: |
| os.environ["GOOGLE_API_KEY"] = "AIzaSyD-61G3GhSY97O-X2AlpXGv1MYBBMRFmwg" |
|
|
| im = Image.open("icon.png") |
|
|
| def app(): |
| lan = st.selectbox("#### Language", ["English", "中文"]) |
|
|
| if lan == "English": |
| home_title = "AI Interviewer" |
| home_introduction = "Welcome to AI Interviewer, empowering your interview preparation with generative AI." |
|
|
| st.markdown( |
| "<style>#MainMenu{visibility:hidden;}</style>", |
| unsafe_allow_html=True |
| ) |
| st.image(im, width=100) |
| st.markdown(f"""# {home_title}""", unsafe_allow_html=True) |
| st.markdown("""\n""") |
| |
| st.markdown("Welcome to AI Interviewer! 👏 AI Interviewer is your personal interviewer powered by generative AI that conducts mock interviews." |
| "You can upload your resume and enter job descriptions, and AI Interviewer will ask you customized questions. Additionally, you can configure your own Interviewer!") |
| st.markdown("""\n""") |
| role = st.text_input("Enter your role") |
| if role: |
| st.markdown(f"Your role is {role}") |
|
|
| llm = ChatGoogleGenerativeAI( |
| model="gemini-pro") |
| prompt = f"Provide the tech stack and responsibilities for the top 3 job recommendations based on the role: {role}. " + """ |
| For each job recommendation, list the required tech stack and associated responsibilities without giving any title or role name. |
| Ensure the information is detailed and precise. |
| follwoing is for example purpose, have our response in this format: |
| |
| ] |
| |
| """ |
|
|
| analysis = llm.invoke(prompt) |
| st.write(analysis.content) |
|
|
| if 'tech_stack' not in st.session_state: |
| st.session_state.tech_stack = "" |
| if 'responsibilities' not in st.session_state: |
| st.session_state.responsibilities = "" |
|
|
| with st.form(key='input_form'): |
| tech_stack = st.text_input("Enter preferred tech stack", key='tech_stack') |
| responsibilities = st.text_input("Enter responsibilities", key='responsibilities') |
| difficulty_level = st.selectbox("Select difficulty level", ["Easy", "Medium", "Hard"], key='difficulty_level') |
| certification_link = " " |
| certification_link = st.text_input("Enter certification link (optional)", key='certification_link') |
| |
| submit_button = st.form_submit_button(label='Submit') |
|
|
|
|
| if submit_button: |
| if tech_stack and responsibilities: |
| llm2 = ChatGoogleGenerativeAI(model="gemini-pro") |
| prompt = f"""Tech stack: {tech_stack}\nResponsibilities: {responsibilities} |
| create a job description based on tech stack, responsibilities and give tech stack, responsibilities and qualifications for job description |
| example - |
| Tech stack: all technical stack here |
| Qualifications: all qualifications here |
| Responsibilities: all responsibilities here |
| """ |
| response = llm2.invoke(prompt) |
|
|
| |
|
|
| if certification_link: |
| jd = response.content + f"Difficulty Level of interview is: {difficulty_level}" + f"Person has done certifications, here is certification link: {certification_link}" |
| else: |
| jd = response.content + f"Difficulty Level of interview is: {difficulty_level}" |
| |
| if jd: |
| |
| with open("job_description.json", "w") as f: |
| json.dump(jd, f) |
| st.success("Job description saved successfully!") |
|
|
| llm3 = ChatGoogleGenerativeAI(model="gemini-pro") |
| prompt = f"The candidate is applying for {role} and selected this Tech stack: {tech_stack} " + """ |
| Create set of DSA questions based on tech stack |
| give the response in the following format: |
| [ |
| {"title": "Reverse String", "description": "Write a function that reverses a string."}, |
| {"title": "Find Max", "description": "Write a function that finds the maximum value in a list."}, |
| ... |
| ] |
| """ |
| response2 = llm3.invoke(prompt) |
| try: |
| codes = json.loads(response2.content) |
| with open("dsa_questions.json", "w") as f: |
| json.dump(codes, f) |
| st.success("DSA questions saved successfully!") |
| except json.JSONDecodeError as e: |
| st.error(f"Error decoding JSON: {e}") |