Hieucyber2208 commited on
Commit
500b25a
·
verified ·
1 Parent(s): 070542e

Delete chatbot.py

Browse files
Files changed (1) hide show
  1. chatbot.py +0 -85
chatbot.py DELETED
@@ -1,85 +0,0 @@
1
- import pandas as pd
2
- from typing import Tuple, List, Dict, Any
3
- from src.utils.data_loader import load_restaurant_data
4
- from src.utils.query_parser import QueryParser
5
- from src.embeddings.embedder import Embedder
6
- from src.retrieval.vector_store import VectorStore
7
- from src.retrieval.keyword_filter import filter_restaurants
8
- from src.retrieval.hybrid_search import HybridRetriever
9
- from src.generation.llm import LLM
10
- from langchain_core.embeddings import Embeddings
11
-
12
- class LangChainEmbeddingWrapper(Embeddings):
13
- def __init__(self, embedder):
14
- self.embedder = embedder
15
-
16
- def embed_documents(self, texts: List[str]) -> List[List[float]]:
17
- return self.embedder.embed(texts).tolist()
18
-
19
- def embed_query(self, text: str) -> List[float]:
20
- return self.embedder.embed([text])[0].tolist()
21
-
22
- class RestaurantChatbot:
23
- def __init__(self, data_path: str = "data/restaurants.json"):
24
- """
25
- Initialize the restaurant chatbot.
26
-
27
- Args:
28
- data_path (str): Path to the restaurant JSON file.
29
- """
30
- self.df = load_restaurant_data(data_path)
31
- self.embedder = Embedder()
32
- self.embedding_wrapper = LangChainEmbeddingWrapper(self.embedder)
33
- self.vector_store = VectorStore(embedding_function=self.embedding_wrapper)
34
- self.llm = LLM()
35
- self.parser = QueryParser(self.df)
36
-
37
- embeddings = self.embedder.embed(self.df['text'].tolist())
38
- self.vector_store.add_documents(
39
- documents=self.df['text'].tolist(),
40
- embeddings=embeddings.tolist(),
41
- ids=[str(i) for i in self.df['id']]
42
- )
43
-
44
- self.retriever = HybridRetriever(self.df, self.vector_store, self.embedder)
45
-
46
- def answer(self, query: str) -> Tuple[str, List[Dict[str, Any]]]:
47
- """
48
- Process a user query and return a natural, concise response with recommended restaurants.
49
-
50
- Args:
51
- query (str): User query.
52
-
53
- Returns:
54
- Tuple[str, List[Dict[str, Any]]]: Natural response text and list of recommended restaurants.
55
- """
56
- parsed_query = self.parser.parse_query(query)
57
- filtered_df = filter_restaurants(self.df, parsed_query)
58
- description = parsed_query["description"] if parsed_query["description"] else query
59
-
60
- if filtered_df.empty:
61
- retrieved_docs = self.retriever.retrieve(description, self.df, top_k=3)
62
- else:
63
- retrieved_docs = self.retriever.retrieve(description, filtered_df, top_k=3)
64
-
65
- if not retrieved_docs:
66
- return "Mình không tìm được nhà hàng nào phù hợp. Bạn thử đổi tiêu chí xem, như mở rộng khoảng cách hoặc loại món ăn nhé!", []
67
-
68
- # Create context for LLM
69
- context = "\n".join([
70
- f"- {doc['name']} ({doc['cuisine']}): {', '.join(doc['dishes'])}. "
71
- f"Price: {doc['price_range']}, Distance: {doc['distance']} km, Rating: {doc['rating']}. "
72
- f"Description: {doc['description']}"
73
- for doc in retrieved_docs
74
- ])
75
-
76
- # Prompt for natural, consultant-like response
77
- prompt = (
78
- f"Bạn là một người tư vấn nhà hàng thân thiện. Dựa trên truy vấn và danh sách nhà hàng, hãy gợi ý ngắn gọn, tự nhiên, như trò chuyện với bạn bè, giải thích tại sao chọn các nhà hàng này (tập trung vào món ăn, giá, khoảng cách, hoặc đánh giá phù hợp với truy vấn). Không lặp lại truy vấn hoặc dùng ngôn ngữ kỹ thuật. Chỉ dùng thông tin từ danh sách nhà hàng.\n\n"
79
- f"Truy vấn: {query}\n\n"
80
- f"Danh sách nhà hàng:\n{context}\n\n"
81
- f"Phản hồi:"
82
- )
83
-
84
- response = self.llm.generate(prompt, max_length=200)
85
- return response, retrieved_docs