# chat_ui.py import os import json import streamlit as st from agent import generate_response # updated: flat repo, no chatbot/ from base_prompts import ( # updated: flat repo, no prompts/ greeting_prompt, info_collection_prompt, tech_stack_prompt, dynamic_generation_prompt, exit_keywords, exit_message, ) # Save candidate info to JSON def save_candidate_data(candidate): os.makedirs("data", exist_ok=True) file_path = os.path.join("data", "candidates.json") try: with open(file_path, "r") as f: data = json.load(f) except: data = [] data.append(candidate) with open(file_path, "w") as f: json.dump(data, f, indent=2) def render_chat_interface(): st.set_page_config(page_title="TalentScout Hiring Assistant", layout="centered") st.markdown( "

🤖 TalentScout Hiring Assistant

", unsafe_allow_html=True, ) # Initialize states if "conversation" not in st.session_state: st.session_state.conversation = [] if "ended" not in st.session_state: st.session_state.ended = False if "started" not in st.session_state: st.session_state.started = False if "user_info" not in st.session_state: st.session_state.user_info = {} if "tech_stack_collected" not in st.session_state: st.session_state.tech_stack_collected = False # Greeting if not st.session_state.started: st.markdown( f"
Assistant:
{greeting_prompt}
", unsafe_allow_html=True, ) if st.button("Begin"): st.session_state.started = True st.rerun() return # Collect user info if not st.session_state.user_info: st.markdown(info_collection_prompt, unsafe_allow_html=True) with st.form("candidate_info"): full_name = st.text_input("Full Name") email = st.text_input("Email Address") phone = st.text_input("Phone Number") years_exp = st.text_input("Years of Experience") location = st.text_input("Current Location") desired_pos = st.text_input("Desired Position") submitted = st.form_submit_button("Save & Continue") if submitted: st.session_state.user_info = { "Full Name": full_name, "Email": email, "Phone": phone, "Experience": years_exp, "Location": location, "Desired Position": desired_pos, } save_candidate_data(st.session_state.user_info) st.rerun() return # Collect tech stack if not st.session_state.tech_stack_collected: st.markdown(tech_stack_prompt, unsafe_allow_html=True) tech_stack = st.text_input("Tech Stack (comma separated)") if st.button("Submit Tech Stack"): st.session_state.user_info["Tech Stack"] = tech_stack st.session_state.tech_stack_collected = True bot_msg = ( f"Thanks, {st.session_state.user_info['Full Name']}! " f"Based on your tech stack, here are some questions:" ) st.session_state.conversation.append(("bot", bot_msg)) # ✅ Fixed: only user prompt prompt = dynamic_generation_prompt(tech_stack) questions = generate_response([("user", prompt)]) st.session_state.conversation.append(("bot", questions)) st.rerun() return # Main conversation loop if not st.session_state.ended: for role, msg in st.session_state.conversation: role_class = "bot" if role == "bot" else "user" label = "Assistant" if role == "bot" else "You" st.markdown( f"
{label}:
{msg}
", unsafe_allow_html=True, ) with st.form("chat_form", clear_on_submit=True): user_input = st.text_input("Your reply", placeholder="Type here...") send = st.form_submit_button("Send") if send and user_input.strip(): st.session_state.conversation.append(("user", user_input.strip())) if any(exit_word in user_input.lower() for exit_word in exit_keywords): st.session_state.conversation.append(("bot", exit_message)) st.session_state.ended = True else: bot_reply = generate_response([("user", user_input.strip())]) st.session_state.conversation.append(("bot", bot_reply)) st.rerun() else: st.success("✅ Session ended. Refresh the page to start again.")