Spaces:
Sleeping
Sleeping
| import streamlit as st | |
| import together | |
| import PyPDF2 | |
| import io | |
| # Initialize Together AI client | |
| client=together.Together(api_key="8969731d768db64b1406eaa5e70bae31bcb4cbf57719295a03aed2ebfa45fe51") | |
| def read_pdf(pdf_file): | |
| """Extract text from uploaded PDF file""" | |
| if pdf_file is not None: | |
| pdf_reader = PyPDF2.PdfReader(io.BytesIO(pdf_file.getvalue())) | |
| text = "" | |
| for page in pdf_reader.pages: | |
| text += page.extract_text() | |
| return text | |
| return None | |
| def get_ai_response(prompt): | |
| """Get response from Together AI API""" | |
| response = client.chat.completions.create( | |
| # prompt=prompt, | |
| model="meta-llama/Llama-3.2-11B-Vision-Instruct-Turbo", # or your preferred model | |
| messages=[{"role": "user", "content": prompt}], | |
| max_tokens=1024, | |
| temperature=0.7, | |
| ) | |
| print(response) | |
| return response.choices[0].message.content | |
| def create_prompt(resume_text, job_description, user_question): | |
| """Create prompt based on available information""" | |
| prompt = "You are a helpful career advisor. " | |
| if resume_text: | |
| prompt += f"\nResume Content:\n{resume_text}\n" | |
| if job_description: | |
| prompt += f"\nJob Description:\n{job_description}\n" | |
| prompt += f"\nUser Question: {user_question}\n" | |
| prompt += "\nPlease provide a detailed and helpful response: " | |
| return prompt | |
| # Streamlit UI | |
| st.title("Resume Bot Assistant") | |
| # Initialize session state for chat history | |
| if 'messages' not in st.session_state: | |
| st.session_state.messages = [] | |
| # Sidebar | |
| with st.sidebar: | |
| st.header("Upload Documents") | |
| # Resume upload | |
| resume_file = st.file_uploader("Upload Resume (PDF)", type=['pdf']) | |
| resume_text = None | |
| if resume_file: | |
| resume_text = read_pdf(resume_file) | |
| st.success("Resume uploaded successfully!") | |
| else: | |
| st.warning("Please upload your resume") | |
| # Job description input | |
| job_description = st.text_area("Enter Job Description") | |
| # Display chat messages | |
| for message in st.session_state.messages: | |
| with st.chat_message(message["role"]): | |
| st.markdown(message["content"]) | |
| # User input | |
| if prompt := st.chat_input("Ask a question about your resume or the job..."): | |
| # Add user message to chat history | |
| st.session_state.messages.append({"role": "user", "content": prompt}) | |
| with st.chat_message("user"): | |
| st.markdown(prompt) | |
| # Check if resume is uploaded | |
| if not resume_text: | |
| with st.chat_message("assistant"): | |
| error_message = "Please upload your resume first to get personalized advice." | |
| st.session_state.messages.append({"role": "assistant", "content": error_message}) | |
| st.markdown(error_message) | |
| else: | |
| # Generate AI response | |
| with st.chat_message("assistant"): | |
| with st.spinner("Thinking..."): | |
| # Create full prompt with context | |
| full_prompt = create_prompt(resume_text, job_description, prompt) | |
| response = get_ai_response(full_prompt) | |
| # Add assistant message to chat history | |
| st.session_state.messages.append({"role": "assistant", "content": response}) | |
| st.markdown(response) | |
| # Add a reset button | |
| if st.button("Reset Chat"): | |
| st.session_state.messages = [] | |
| st.experimental_rerun() |