ardakshalkar's picture
removed codex
793ba40
import streamlit as st
from langchain_community.llms import OpenAI
import configparser
import os
from langchain_openai import OpenAIEmbeddings
from langchain_community.vectorstores import FAISS
from langchain_openai import ChatOpenAI
from langchain_core.prompts import ChatPromptTemplate
from langchain.chains import create_retrieval_chain
from langchain.chains.combine_documents import create_stuff_documents_chain
Config = configparser.ConfigParser()
Config.read("config.ini")
st.title('⚖️🔗 Поисковик по академической политике университета Narxoz')
st.markdown('Наш чатбот ответ на вопросы по правилам из академической политики университета Narxoz')
#openai_api_key = st.sidebar.text_input('OpenAI API Key', type='password')
#openai_api_key = Config.get('Pass','OpenaiKey')
openai_api_key = st.secrets['openai']
os.environ["OPENAI_API_KEY"] = openai_api_key
embeddings = OpenAIEmbeddings(model="text-embedding-3-large")
new_db = FAISS.load_local("AcademicPolicy", embeddings,allow_dangerous_deserialization= True)
retriever = new_db.as_retriever(search_type="similarity", search_kwargs={"k": 6})
llm = ChatOpenAI(model="gpt-3.5-turbo-0125")
system_prompt = (
"Вы бот который отвечает на вопросы по внутренним правилам университета Narxoz."
"Используйте следующий набор документов. "
"Если не знаете ответ, ответьте что вы не знаете. "
"Постарайте уложиться в три предложения."
"Университет Narxoz также подчиняется правилам Республики Казахстан"
"И входит в Болонскую систему образования"
"\n\n"
"{context}"
)
prompt = ChatPromptTemplate.from_messages(
[
("system", system_prompt),
("human", "{input}"),
]
)
question_answer_chain = create_stuff_documents_chain(llm, prompt)
rag_chain = create_retrieval_chain(retriever, question_answer_chain)
import firestore_util
@st.cache_resource
def load_firestore_connection_ref():
db = firestore_util.load_firestore()
doc_ref = db.collection('requests').document("client_queries")
return doc_ref
#doc_ref = load_firestore_connection_ref()
@st.cache_data
def generate_response(input_text):
response = rag_chain.invoke({"input": text})
#doc_ref.set({"query":input_text,"response":response['answer']})
return response
with st.form('my_form'):
text = st.text_area('Напишите свой вопрос:', '')
submitted = st.form_submit_button('Submit')
if submitted:
response = generate_response(text)
st.markdown(response['answer'])
print(response['context'])
for context in response['context']:
with st.expander(context.metadata['title']):
st.write(context.page_content)
#generate_response(text)