Spaces:
Sleeping
Sleeping
| from langchain_openai import ChatOpenAI | |
| from langchain.chains import ConversationChain | |
| from langchain.memory import ConversationBufferWindowMemory | |
| from langchain.prompts import ( | |
| SystemMessagePromptTemplate, | |
| HumanMessagePromptTemplate, | |
| ChatPromptTemplate, | |
| MessagesPlaceholder | |
| ) | |
| import streamlit as st | |
| from utils import find_match, query_refiner, get_conversation_string | |
| from dotenv import load_dotenv | |
| import os | |
| load_dotenv() | |
| st.subheader("Aido-We assist Universities for recruiting International students") | |
| if 'responses' not in st.session_state: | |
| st.session_state['responses'] = ["How can I assist you?"] | |
| if 'requests' not in st.session_state: | |
| st.session_state['requests'] = [] | |
| llm = ChatOpenAI(model_name="gpt-4o-mini", api_key=os.getenv('OPENAI_API_KEY')) | |
| if 'buffer_memory' not in st.session_state: | |
| st.session_state.buffer_memory = ConversationBufferWindowMemory(k=3, return_messages=True) | |
| system_msg_template = SystemMessagePromptTemplate.from_template(template=""" | |
| You are a proficient International Student Analyst, specializing in analyzing global | |
| student trends to assist universities in understanding enrollment patterns, financial concerns, and academic outcomes. | |
| Use only the context provided to derive your responses. | |
| Do not rely on external knowledge. If the given context is insufficient, respond ONLY with: 'I don't know'""") | |
| human_msg_template = HumanMessagePromptTemplate.from_template(template="{input}") | |
| prompt_template = ChatPromptTemplate.from_messages( | |
| [system_msg_template, MessagesPlaceholder(variable_name="history"), human_msg_template]) | |
| conversation = ConversationChain(memory=st.session_state.buffer_memory, prompt=prompt_template, llm=llm, verbose=True) | |
| # container for chat history | |
| response_container = st.container() | |
| # container for text box | |
| textcontainer = st.container() | |
| with textcontainer: | |
| # Replace the single-line text input with a text area that expands | |
| query = st.text_area( | |
| "Query: ", | |
| key="input", | |
| height=100, # Initial height | |
| max_chars=None, # No character limit | |
| help="Type your question here.", | |
| placeholder="What are some concerns students from Algeria have about studying in the USA?" | |
| ) | |
| # Add a submit button to control when the query is processed | |
| submit_button = st.button("Submit") | |
| if submit_button and query: | |
| with st.spinner("typing..."): | |
| conversation_string = get_conversation_string() | |
| refined_query = query_refiner(conversation_string, query) | |
| st.subheader("Refined Query:") | |
| st.write(refined_query) | |
| context = find_match(refined_query) | |
| response = conversation.predict(input=f"Context:\n {context} \n\n Query:\n{query}") | |
| st.session_state.requests.append(query) | |
| st.session_state.responses.append(response) | |
| with response_container: | |
| if st.session_state['responses']: | |
| for i in range(len(st.session_state['responses'])): | |
| # Using Streamlit's native chat message functionality instead of streamlit_chat | |
| with st.chat_message("assistant"): | |
| st.write(st.session_state['responses'][i]) | |
| if i < len(st.session_state['requests']): | |
| with st.chat_message("user"): | |
| st.write(st.session_state["requests"][i]) |