import streamlit as st import pandas as pd import plotly.express as px import plotly.graph_objects as go import torch import re import io import docx import json from pypdf import PdfReader from transformers import AutoTokenizer, AutoModelForCausalLM # ─── 1. AI ENGINE SETUP ─────────────────────────────────────────────────── @st.cache_resource def load_ai_model(): MODEL_ID = "Qwen/Qwen2.5-1.5B-Instruct" tokenizer = AutoTokenizer.from_pretrained(MODEL_ID) model = AutoModelForCausalLM.from_pretrained( MODEL_ID, device_map="cpu", torch_dtype=torch.float32, trust_remote_code=True ) return tokenizer, model def ask_ai(system_prompt, user_prompt): tokenizer, model = load_ai_model() messages = [ {"role": "system", "content": system_prompt}, {"role": "user", "content": user_prompt} ] text = tokenizer.apply_chat_template(messages, tokenize=False, add_generation_prompt=True) model_inputs = tokenizer([text], return_tensors="pt").to(model.device) with torch.no_grad(): generated_ids = model.generate(**model_inputs, max_new_tokens=512, temperature=0.1) response = tokenizer.decode(generated_ids[0][len(model_inputs.input_ids[0]):], skip_special_tokens=True) return response # ─── 2. FILE PROCESSING ─────────────────────────────────────────────────── def extract_text_from_file(uploaded_file): text = "" try: if uploaded_file.name.endswith('.pdf'): reader = PdfReader(uploaded_file) for page in reader.pages: text += page.extract_text() + "\n" elif uploaded_file.name.endswith('.docx'): doc = docx.Document(io.BytesIO(uploaded_file.read())) text = "\n".join([para.text for para in doc.paragraphs]) except Exception as e: st.error(f"Error reading {uploaded_file.name}: {e}") return text # ─── 3. UI & STYLING ────────────────────────────────────────────────────── st.set_page_config(page_title="Smart ATS AI", page_icon="✨", layout="wide") st.markdown(""" """, unsafe_allow_html=True) if 'current_page' not in st.session_state: st.session_state.current_page = 'landing' if 'results' not in st.session_state: st.session_state.results = None # ─── PAGE 1: LANDING ────────────────────────────────────────────────────── if st.session_state.current_page == 'landing': col1, col2 = st.columns([1.1, 0.9]) with col1: st.markdown('