| 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) |