|
|
import json |
|
|
import sys |
|
|
import os |
|
|
import datetime |
|
|
from pathlib import Path |
|
|
current_dir = os.path.dirname(os.path.abspath(__file__)) |
|
|
sys.path.append(current_dir) |
|
|
from response_generator import ResponseGenerator |
|
|
from hybrid_rag import HybridRAG |
|
|
import uuid |
|
|
|
|
|
|
|
|
BASE_DIR = Path(__file__).resolve().parent.parent |
|
|
SESSIONS_DIR = BASE_DIR / "sessions" |
|
|
SESSIONS_DIR.mkdir(parents=True, exist_ok=True) |
|
|
|
|
|
hybrid_rag = HybridRAG() |
|
|
|
|
|
def feedback(is_like: bool, session_id: str): |
|
|
print(f"Feedback: {is_like} for session {session_id}") |
|
|
session_path = SESSIONS_DIR / f"{session_id}.json" |
|
|
with open(session_path, "r", encoding="utf-8") as f: |
|
|
session_data = json.load(f) |
|
|
session_data[0]["is_like"] = is_like |
|
|
with open(session_path, "w", encoding="utf-8") as f: |
|
|
json.dump([session_data], f, ensure_ascii=False, indent=2, sort_keys=True) |
|
|
|
|
|
def main(query: str, top_k: int = 20, top_n: int = 10): |
|
|
session_id = str(uuid.uuid4()) |
|
|
chunk_retrieved = hybrid_rag.get_results(query, top_k=top_k, top_n=top_n, session_id=session_id) |
|
|
response_generator = ResponseGenerator() |
|
|
response, user_prompt = response_generator.generate(query, chunk_retrieved) |
|
|
if session_id: |
|
|
session_data = { |
|
|
"query": query.strip(), |
|
|
"rag_results": chunk_retrieved, |
|
|
"response": response, |
|
|
"user_prompt": user_prompt, |
|
|
"timestamp": datetime.datetime.now().isoformat() |
|
|
} |
|
|
with open(SESSIONS_DIR / f"{session_id}.json", "w", encoding="utf-8") as f: |
|
|
json.dump([session_data], f, ensure_ascii=False, indent=2, sort_keys=True) |
|
|
return response, session_id |
|
|
|
|
|
if __name__ == "__main__": |
|
|
query = "Sinh viên không đóng học phí có được bảo vệ Khóa luận không?" |
|
|
res, session_id = main(query, top_k=20, top_n=10) |