ThangNguyen27 commited on
Commit
daee4bb
1 Parent(s): 2c01641

Create app.py

Browse files
Files changed (1) hide show
  1. app.py +91 -0
app.py ADDED
@@ -0,0 +1,91 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ import streamlit as st
2
+ from langchain_google_genai import ChatGoogleGenerativeAI
3
+
4
+ llm = ChatGoogleGenerativeAI(
5
+ model="gemini-1.5-pro",
6
+ temperature=0,
7
+ max_tokens=None,
8
+ timeout=None,
9
+ max_retries=2,
10
+ # other params...
11
+ )
12
+ import os
13
+
14
+ fileNames = os.listdir("./data")
15
+ from langchain_text_splitters import RecursiveCharacterTextSplitter # type: ignore
16
+ #from langchain_community.document_loaders import PyPDFDirectoryLoader
17
+ from langchain_chroma import Chroma # type: ignore
18
+ from langchain_community.document_loaders import UnstructuredPDFLoader # type: ignore
19
+ path_dir = "data/"
20
+ docs = []
21
+ for item in fileNames:
22
+ pdf_loader = UnstructuredPDFLoader(path_dir + item)
23
+ docs += pdf_loader.load()
24
+
25
+ chunk_size = 1000
26
+ chunk_overlap = 200
27
+
28
+ separators: list[str] = [
29
+ "\n\n",
30
+ "\n",
31
+ " ",
32
+ ".",
33
+ ",",
34
+ "\u200b", # Zero-width space
35
+ "\uff0c", # Fullwidth comma
36
+ "\u3001", # Ideographic comma
37
+ "\uff0e", # Fullwidth full stop
38
+ "\u3002", # Ideographic full stop
39
+ "",
40
+ ]
41
+
42
+ char_splitter = RecursiveCharacterTextSplitter(
43
+ chunk_size=chunk_size,
44
+ chunk_overlap=chunk_overlap,
45
+ length_function=len,
46
+ is_separator_regex=False,
47
+ separators=separators
48
+ )
49
+
50
+ text_output = char_splitter.split_documents(docs)
51
+
52
+ from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings, HuggingFaceEmbeddings
53
+ from langchain.embeddings import OpenAIEmbeddings, HuggingFaceInstructEmbeddings, GPT4AllEmbeddings
54
+ embedding_model = HuggingFaceEmbeddings(model_name="keepitreal/vietnamese-sbert") #try to optimize
55
+ chroma_db = Chroma.from_documents(text_output, embedding=embedding_model)
56
+
57
+ retriever = chroma_db.as_retriever(search_kwargs = {"k":10}, max_tokens_limit=1024, search_type = "similarity")
58
+ def format_docs(docs):
59
+ for doc in docs:
60
+ return "\n\n".join(doc.page_content for doc in docs).strip()
61
+
62
+ #from langchain_core.runnables import RunnablePassthrough
63
+ from langchain_core.runnables import RunnablePassthrough, RunnableLambda
64
+
65
+
66
+ input_data = {
67
+ "context": retriever | format_docs,
68
+ "question": RunnablePassthrough()
69
+ }
70
+
71
+ from langchain import LLMChain
72
+ from langchain import PromptTemplate
73
+ template = "Bạn là một cố vấn học tập tại trường đại học Công Nghệ Thông Tin, một người nắm rõ các quy chế đào tạo, dựa vào ngữ cảnh sau để trả lời cho câu hỏi của sinh viên\n{context}\nĐây là lịch sử chat:{chat hisotry}\n### Câu hỏi:\n{question}\n### Trả lời:"
74
+
75
+
76
+ #prompt = PromptTemplate(template = template, input_variables=["context","chat_history","question"])
77
+ prompt = PromptTemplate(template = template, input_variables=["context", "question","chat history"])
78
+
79
+ rag_chain = (
80
+ input_data
81
+ | prompt
82
+ | llm
83
+ #| str_parser
84
+ )
85
+
86
+ query = st.text_area("Bạn muốn hỏi cố vấn học tập điều gì?")
87
+
88
+ if query:
89
+ result = rag_chain.invoke("Bảng xếp loại và thang điểm tương ứng")
90
+ st.json(result.content)
91
+