File size: 3,093 Bytes
152cd46
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
9afa683
152cd46
 
 
 
 
9afa683
152cd46
 
 
 
 
 
 
 
 
 
3fa499c
152cd46
793ba40
152cd46
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
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)