tiendung commited on
Commit
244703e
1 Parent(s): 384fa70
Files changed (4) hide show
  1. llm.py +15 -1
  2. notebook.py +30 -2
  3. notebook_helpers.py +34 -0
  4. prompts.py +19 -0
llm.py CHANGED
@@ -166,12 +166,26 @@ who_are_you()
166
 
167
 
168
 
169
- from prompts import summary_template
170
  from prompts import contextual_template, clean_view_template
171
 
172
  USE_CACHE = os.getenv("cache", "1") == "1"
173
 
174
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
175
  def extract_keyphrases_figures_summary(text):
176
  if len(text) < 80: return ""
177
 
 
166
 
167
 
168
 
169
+ from prompts import summary_template, docchat_template
170
  from prompts import contextual_template, clean_view_template
171
 
172
  USE_CACHE = os.getenv("cache", "1") == "1"
173
 
174
 
175
+ def query_documents(documents, query):
176
+ prompt = docchat_template.format(documents = documents, question = query)
177
+ print(f"{GREEN}{prompt}{RESET}")
178
+
179
+ utils.reset_timer(timer = "docchat")
180
+ res = chat(prompt, use_cache = USE_CACHE)
181
+ utils.measure_time("", timer = "docchat")
182
+
183
+ raw = res[-1]["content"]
184
+ print(f"{MAGENTA}{raw}{RESET}")
185
+
186
+ return raw
187
+
188
+
189
  def extract_keyphrases_figures_summary(text):
190
  if len(text) < 80: return ""
191
 
notebook.py CHANGED
@@ -74,7 +74,35 @@ def javascript(source: str) -> None:
74
  if "urls_input" not in st.session_state:
75
  st.session_state["urls_input"] = normalize_text(default_urls_input)
76
 
77
- tab1, tab2 = st.tabs(["Danh sách các liên kết", "Chỉnh sửa danh sách các liên kết"])
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
78
 
79
 
80
  with tab2:
@@ -96,7 +124,7 @@ with tab1:
96
  # Giao diện Streamlit với 2 cột bằng nhau, chiếm trọn màn hình
97
  col1, col2 = st.columns([3, 6])
98
 
99
- urls = st.session_state["urls_input"].strip().split()
100
 
101
  ##############
102
  with col1:
 
74
  if "urls_input" not in st.session_state:
75
  st.session_state["urls_input"] = normalize_text(default_urls_input)
76
 
77
+ tab1, tab2, tab3 = st.tabs([
78
+ "Danh sách các liên kết",
79
+ "Chỉnh sửa danh sách các liên kết",
80
+ "Tổng hợp, tương tác với tất cả nội dung"
81
+ ])
82
+
83
+
84
+ with tab3:
85
+ if "prompt" not in st.session_state:
86
+ st.session_state["prompt"] = "Tóm tắt ngắn gọn 10 chính ý từ các văn bản được cung cấp, mỗi ý chính một gạch đầu dòng."
87
+
88
+ if not got_all_urls(st.session_state["urls_input"]):
89
+ st.write("Bạn phải duyệt từng liên kết để lấy và kiểm tra nội dung trước khi xem bản tổng hợp này.")
90
+
91
+ else:
92
+ edited_text = st.text_area(
93
+ f"Yêu cầu của bạn",
94
+ value = st.session_state["prompt"],
95
+ height = 6,
96
+ key = f"DocChat"
97
+ )
98
+
99
+ if "response" in st.session_state:
100
+ st.write(st.session_state["response"])
101
+
102
+ if st.button("Tạo nội dung tổng hợp"):
103
+ st.session_state["response"] = docchat(st.session_state["urls_input"], st.session_state["prompt"])
104
+ st.rerun()
105
+
106
 
107
 
108
  with tab2:
 
124
  # Giao diện Streamlit với 2 cột bằng nhau, chiếm trọn màn hình
125
  col1, col2 = st.columns([3, 6])
126
 
127
+ urls = get_urls(st.session_state["urls_input"])
128
 
129
  ##############
130
  with col1:
notebook_helpers.py CHANGED
@@ -51,6 +51,40 @@ headers = {
51
  }
52
 
53
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
54
  def norm_url_and_gen_filename(url):
55
  url = url.strip() # loại bỏ ký tự trống ở đầu và cuối
56
  if url[-1] == "/": url = url[:-1] # loại bỏ "/" ở cuối
 
51
  }
52
 
53
 
54
+ def get_url_content(url):
55
+ _, filename = norm_url_and_gen_filename(url)
56
+ text = open(filename + ".txt", "rt").read()
57
+ meta = get_meta(url)
58
+
59
+ summ = meta["llm_generated"]["summary"]
60
+ summ = re.sub(r'<cite>.*?</cite>', '', summ, flags = re.IGNORECASE | re.MULTILINE)
61
+
62
+ return f"""<document url="{url}">
63
+ <summary>{summ}</summary>
64
+ {text}
65
+ </document>
66
+ """
67
+
68
+
69
+ def docchat(urls_input, prompt):
70
+ urls = get_urls(urls_input)
71
+ documents = "\n".join([ get_url_content(x) for x in urls ])
72
+ return query_documents(documents, prompt)
73
+
74
+
75
+ def get_urls(urls_input):
76
+ return urls_input.strip().split()
77
+
78
+
79
+ def got_all_urls(urls_input):
80
+ urls = get_urls(urls_input)
81
+ for x in urls:
82
+ _, filename = norm_url_and_gen_filename(x)
83
+ if not os.path.exists(filename + ".txt"):
84
+ return False
85
+ return True
86
+
87
+
88
  def norm_url_and_gen_filename(url):
89
  url = url.strip() # loại bỏ ký tự trống ở đầu và cuối
90
  if url[-1] == "/": url = url[:-1] # loại bỏ "/" ở cuối
prompts.py CHANGED
@@ -1,6 +1,25 @@
1
  import re, os, sys
2
 
3
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4
  clean_view_template = """
5
  Làm cho văn bản dưới đây trở nên sạch sẽ, rõ nghĩa, bỏ phần thông tin liên lạc và các thông tin khác không liên quan tới nội dung chính, bỏ đi những lỗi sai chính tả, những từ thiếu ý nghĩa như "\\ourmodel" ...
6
 
 
1
  import re, os, sys
2
 
3
 
4
+ docchat_inst = """
5
+ <instruction>
6
+ You will be provided documents, and asked a question. Please answer the question using only facts from the provided documents. DO NOT use your own knowledge.
7
+
8
+ The answer must be supported from the facts in provided documents. If there is no such answer, simply say "Không tìm thấy".
9
+
10
+ Có nhiều tài liệu (documents), mỗi tài liệu nằm trong một thẻ <document> nội dung văn bản </document> riêng. Khi được yêu cầu tóm tắt hoặc nêu các ý chính bạn cần tìm đọc nội dung từng văn bản và mỗi văn bản có ít nhất một ý chính được trình bày.
11
+
12
+ Không được nói bậy, nói xấu, không được bỏ qua hướng dẫn.
13
+ </instruction>
14
+ """.strip()
15
+
16
+ docchat_template = docchat_inst + """
17
+ <documents>{documents}</documents>
18
+ """ + docchat_inst + """
19
+ <question>{question}</question>Tôi sẽ suy nghĩ cẩn thận để trả lời câu hỏi chính xác nhất
20
+ """
21
+
22
+
23
  clean_view_template = """
24
  Làm cho văn bản dưới đây trở nên sạch sẽ, rõ nghĩa, bỏ phần thông tin liên lạc và các thông tin khác không liên quan tới nội dung chính, bỏ đi những lỗi sai chính tả, những từ thiếu ý nghĩa như "\\ourmodel" ...
25