update message
Browse files- app/constants.py +29 -1
- app/message_processor.py +6 -6
- app/reranker.py +7 -7
- app/utils.py +23 -2
app/constants.py
CHANGED
@@ -118,7 +118,7 @@ VIETNAMESE_STOP_WORDS = {
|
|
118 |
"mà", "mỗi", "một", "nên", "nếu", "ngay", "như", "nhưng", "những",
|
119 |
"nơi", "nữa", "phải", "qua", "ra", "rằng", "rất", "rồi", "sau", "sẽ",
|
120 |
"thì", "trên", "trước", "từ", "từng", "và", "vẫn", "vào", "vậy", "về",
|
121 |
-
"vì", "việc", "với", "xong", "phạt", "xử", "xe"
|
122 |
# ... thêm các từ khác bạn muốn loại bỏ
|
123 |
}
|
124 |
|
@@ -156,4 +156,32 @@ SUMMARY_STATUS_MESSAGES = [
|
|
156 |
"Mình đang chốt lại các điểm chính để trả lời một cách trọn vẹn"
|
157 |
]
|
158 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
159 |
SHEET_RANGE = 'chat!A2:L'
|
|
|
118 |
"mà", "mỗi", "một", "nên", "nếu", "ngay", "như", "nhưng", "những",
|
119 |
"nơi", "nữa", "phải", "qua", "ra", "rằng", "rất", "rồi", "sau", "sẽ",
|
120 |
"thì", "trên", "trước", "từ", "từng", "và", "vẫn", "vào", "vậy", "về",
|
121 |
+
"vì", "việc", "với", "xong", "phạt", "xử", "xe"
|
122 |
# ... thêm các từ khác bạn muốn loại bỏ
|
123 |
}
|
124 |
|
|
|
156 |
"Mình đang chốt lại các điểm chính để trả lời một cách trọn vẹn"
|
157 |
]
|
158 |
|
159 |
+
# Processing status messages for Facebook notifications when processing/searching
|
160 |
+
PROCESSING_STATUS_MESSAGES = [
|
161 |
+
"Okie, mình kiểm tra lại thông tin liền nha!",
|
162 |
+
"Để mình rà lại chút, xong mình phản hồi ngay.",
|
163 |
+
"Mình đang xem lại phần này, xử lý xong báo bạn liền.",
|
164 |
+
"Mình check lại một chút cho chắc nhé!",
|
165 |
+
"Ok, mình đang xem lại để đảm bảo chính xác.",
|
166 |
+
"Mình xem lại thông tin rồi cập nhật bạn ngay.",
|
167 |
+
"Để mình xử lý phần này trước đã nhé!",
|
168 |
+
"Mình đang kiểm tra lại, sẽ báo liền khi xong.",
|
169 |
+
"Ok bạn, để mình coi lại rồi chốt luôn.",
|
170 |
+
"Mình đang coi lại nội dung này, có gì mình nói liền."
|
171 |
+
]
|
172 |
+
|
173 |
+
# Found regulations status messages for Facebook notifications when regulations are found
|
174 |
+
FOUND_REGULATIONS_MESSAGES = [
|
175 |
+
"Mình có thấy một vài quy định liên quan, đang xác minh lại và sẽ phản hồi sớm.",
|
176 |
+
"Tạm thời đã tra được một số quy định, mình đang kiểm tra thêm rồi cập nhật liền nhé.",
|
177 |
+
"Mình đang đối chiếu lại thông tin vừa tìm được, sẽ báo bạn ngay khi rõ.",
|
178 |
+
"Có một vài chỗ trong quy định mình đang xem lại cho chắc, sẽ phản hồi sớm thôi.",
|
179 |
+
"Mình đã tìm thấy một số điểm có liên quan, đang xác thực thêm để phản hồi cụ thể.",
|
180 |
+
"Thông tin bước đầu đã có, mình đang kiểm tra thêm rồi gửi lại ngay khi hoàn tất.",
|
181 |
+
"Mình đang kiểm tra kỹ hơn những gì vừa tìm được, sẽ gửi bạn sớm nhất có thể.",
|
182 |
+
"Một số quy định đang được mình rà lại lần nữa, sẽ phản hồi lại ngay khi rõ ràng.",
|
183 |
+
"Mình có dữ liệu sơ bộ rồi, đang xác minh thêm để đảm bảo chính xác trước khi trả lời.",
|
184 |
+
"Thông tin đang được mình kiểm tra lại lần cuối, mình sẽ cập nhật sớm nhất nhé."
|
185 |
+
]
|
186 |
+
|
187 |
SHEET_RANGE = 'chat!A2:L'
|
app/message_processor.py
CHANGED
@@ -2,8 +2,8 @@ from typing import Dict, Any, List
|
|
2 |
import asyncio
|
3 |
import traceback
|
4 |
from loguru import logger
|
5 |
-
import
|
6 |
-
from .
|
7 |
|
8 |
class MessageProcessor:
|
9 |
def __init__(self, channel):
|
@@ -120,14 +120,14 @@ class MessageProcessor:
|
|
120 |
return
|
121 |
# Gửi message Facebook, nếu lỗi token expired thì invalidate và thử lại một lần
|
122 |
try:
|
123 |
-
await self.channel.facebook.send_message(message=
|
124 |
except Exception as e:
|
125 |
if "expired" in str(e).lower():
|
126 |
logger.warning("[FACEBOOK] Token expired, invalidate and refresh")
|
127 |
self.channel.invalidate_page_token()
|
128 |
page_token = self.channel.get_page_token(force_refresh=True)
|
129 |
self.channel.facebook.update_context(page_id=page_id, page_token=page_token, sender_id=sender_id)
|
130 |
-
await self.channel.facebook.send_message(message="Ok, để mình check. Bạn chờ mình chút xíu nhé!")
|
131 |
else:
|
132 |
raise
|
133 |
|
@@ -256,7 +256,7 @@ class MessageProcessor:
|
|
256 |
async def format_search_results(self, question: str, matches: List[Dict[str, Any]], page_token: str, sender_id: str) -> str:
|
257 |
if not matches:
|
258 |
return "Không tìm thấy kết quả phù hợp."
|
259 |
-
await self.channel.facebook.send_message(message=
|
260 |
try:
|
261 |
reranked = await self.channel.reranker.rerank(question, matches, top_k=5)
|
262 |
if reranked:
|
@@ -328,7 +328,7 @@ class MessageProcessor:
|
|
328 |
"\n\nHãy trả lời ngắn gọn, dễ hiểu, trích dẫn rõ ràng thông tin từ các đoạn luật nếu cần."
|
329 |
f"\n\nCâu hỏi của người dùng: {question}\n"
|
330 |
)
|
331 |
-
await self.channel.facebook.send_message(message=f"... {
|
332 |
try:
|
333 |
answer = await self.channel.llm.generate_text(prompt)
|
334 |
if answer and answer.strip():
|
|
|
2 |
import asyncio
|
3 |
import traceback
|
4 |
from loguru import logger
|
5 |
+
from .constants import SUMMARY_STATUS_MESSAGES, PROCESSING_STATUS_MESSAGES, FOUND_REGULATIONS_MESSAGES
|
6 |
+
from .utils import get_random_message
|
7 |
|
8 |
class MessageProcessor:
|
9 |
def __init__(self, channel):
|
|
|
120 |
return
|
121 |
# Gửi message Facebook, nếu lỗi token expired thì invalidate và thử lại một lần
|
122 |
try:
|
123 |
+
await self.channel.facebook.send_message(message=get_random_message(PROCESSING_STATUS_MESSAGES))
|
124 |
except Exception as e:
|
125 |
if "expired" in str(e).lower():
|
126 |
logger.warning("[FACEBOOK] Token expired, invalidate and refresh")
|
127 |
self.channel.invalidate_page_token()
|
128 |
page_token = self.channel.get_page_token(force_refresh=True)
|
129 |
self.channel.facebook.update_context(page_id=page_id, page_token=page_token, sender_id=sender_id)
|
130 |
+
# await self.channel.facebook.send_message(message="Ok, để mình check. Bạn chờ mình chút xíu nhé!")
|
131 |
else:
|
132 |
raise
|
133 |
|
|
|
256 |
async def format_search_results(self, question: str, matches: List[Dict[str, Any]], page_token: str, sender_id: str) -> str:
|
257 |
if not matches:
|
258 |
return "Không tìm thấy kết quả phù hợp."
|
259 |
+
await self.channel.facebook.send_message(message=get_random_message(FOUND_REGULATIONS_MESSAGES))
|
260 |
try:
|
261 |
reranked = await self.channel.reranker.rerank(question, matches, top_k=5)
|
262 |
if reranked:
|
|
|
328 |
"\n\nHãy trả lời ngắn gọn, dễ hiểu, trích dẫn rõ ràng thông tin từ các đoạn luật nếu cần."
|
329 |
f"\n\nCâu hỏi của người dùng: {question}\n"
|
330 |
)
|
331 |
+
await self.channel.facebook.send_message(message=f"... {get_random_message(SUMMARY_STATUS_MESSAGES)} ...")
|
332 |
try:
|
333 |
answer = await self.channel.llm.generate_text(prompt)
|
334 |
if answer and answer.strip():
|
app/reranker.py
CHANGED
@@ -3,10 +3,10 @@ from .config import get_settings
|
|
3 |
from .gemini_client import GeminiClient
|
4 |
from loguru import logger
|
5 |
import asyncio
|
6 |
-
import random
|
7 |
import hashlib
|
8 |
import time
|
9 |
from .constants import BATCH_STATUS_MESSAGES
|
|
|
10 |
|
11 |
class Reranker:
|
12 |
def __init__(self, facebook_client=None):
|
@@ -245,12 +245,12 @@ class Reranker:
|
|
245 |
scored.append(doc)
|
246 |
|
247 |
# Gửi Facebook message sau khi hoàn thành
|
248 |
-
|
249 |
-
|
250 |
-
|
251 |
-
|
252 |
-
|
253 |
-
|
254 |
|
255 |
# Sort theo score và trả về top_k
|
256 |
scored = sorted(scored, key=lambda x: x['rerank_score'], reverse=True)
|
|
|
3 |
from .gemini_client import GeminiClient
|
4 |
from loguru import logger
|
5 |
import asyncio
|
|
|
6 |
import hashlib
|
7 |
import time
|
8 |
from .constants import BATCH_STATUS_MESSAGES
|
9 |
+
from .utils import get_random_message
|
10 |
|
11 |
class Reranker:
|
12 |
def __init__(self, facebook_client=None):
|
|
|
245 |
scored.append(doc)
|
246 |
|
247 |
# Gửi Facebook message sau khi hoàn thành
|
248 |
+
if self.facebook_client:
|
249 |
+
try:
|
250 |
+
message = get_random_message(BATCH_STATUS_MESSAGES)
|
251 |
+
await self.facebook_client.send_message(message=f"... {message} ...")
|
252 |
+
except Exception as e:
|
253 |
+
logger.error(f"[RERANK][FACEBOOK] Error sending batch message: {e}")
|
254 |
|
255 |
# Sort theo score và trả về top_k
|
256 |
scored = sorted(scored, key=lambda x: x['rerank_score'], reverse=True)
|
app/utils.py
CHANGED
@@ -1,7 +1,8 @@
|
|
1 |
import time
|
|
|
2 |
from functools import wraps
|
3 |
from loguru import logger
|
4 |
-
from typing import Any, Callable
|
5 |
import os
|
6 |
import asyncio
|
7 |
import httpx
|
@@ -136,4 +137,24 @@ async def call_endpoint_with_retry(client, url, payload, max_retries=3, base_tim
|
|
136 |
raise
|
137 |
except Exception as e:
|
138 |
logger.error(f"Other error: {e}")
|
139 |
-
raise
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
import time
|
2 |
+
import random
|
3 |
from functools import wraps
|
4 |
from loguru import logger
|
5 |
+
from typing import Any, Callable, List
|
6 |
import os
|
7 |
import asyncio
|
8 |
import httpx
|
|
|
137 |
raise
|
138 |
except Exception as e:
|
139 |
logger.error(f"Other error: {e}")
|
140 |
+
raise
|
141 |
+
|
142 |
+
def get_random_message(message_list: List[str]) -> str:
|
143 |
+
"""
|
144 |
+
Lấy ngẫu nhiên một message từ danh sách messages.
|
145 |
+
|
146 |
+
Args:
|
147 |
+
message_list (List[str]): Danh sách các messages có sẵn
|
148 |
+
|
149 |
+
Returns:
|
150 |
+
str: Message được chọn ngẫu nhiên, hoặc message mặc định nếu danh sách rỗng
|
151 |
+
|
152 |
+
Example:
|
153 |
+
>>> messages = ["Message 1", "Message 2", "Message 3"]
|
154 |
+
>>> get_random_message(messages)
|
155 |
+
"Message 2" # hoặc message khác ngẫu nhiên
|
156 |
+
"""
|
157 |
+
if not message_list:
|
158 |
+
return "Đang xử lý..."
|
159 |
+
|
160 |
+
return random.choice(message_list)
|