datbkpro commited on
Commit
e92eac1
·
verified ·
1 Parent(s): 8cc3acd

Update ui/tabs.py

Browse files
Files changed (1) hide show
  1. ui/tabs.py +118 -25
ui/tabs.py CHANGED
@@ -36,62 +36,155 @@ def create_all_tabs(audio_service: AudioService, chat_service: ChatService,
36
  with gr.Tab("🌐 Language Info"): # NEW TAB
37
  create_language_info_tab(rag_system.multilingual_manager)
38
  def create_rag_tab(rag_system: EnhancedRAGSystem, wikipedia_processor: WikipediaProcessor):
39
- gr.Markdown("## Upload data sẵn")
 
40
 
41
  with gr.Row():
42
  with gr.Column(scale=1):
43
- gr.Markdown("### 📤 Upload dữ liệu")
44
  file_upload = gr.File(
45
- label="Tải lên file",
46
  file_types=['.txt', '.csv', '.json'],
47
- file_count="single"
 
48
  )
49
  upload_btn = gr.Button("📤 Upload Data", variant="primary")
50
- upload_status = gr.Textbox(label="Trạng thái Upload", interactive=False)
 
 
 
 
51
 
52
  gr.Markdown("### 📊 Thống kê Database")
53
  stats_btn = gr.Button("📊 Database Stats", variant="secondary")
54
- stats_display = gr.Textbox(label="Thống kê", interactive=False, lines=5)
 
 
 
 
55
 
56
- gr.Markdown("### 🔍 Tìm kiếm Database")
 
57
  search_query = gr.Textbox(
58
  label="Tìm kiếm trong database",
59
- placeholder="Nhập từ khóa để tìm kiếm..."
60
  )
61
  search_btn = gr.Button("🔍 Tìm kiếm", variant="secondary")
62
-
63
- with gr.Column(scale=2):
64
- gr.Markdown("### 📋 Kết quả tìm kiếm RAG")
65
- rag_results = gr.JSON(label="Tài liệu tham khảo tìm được")
66
 
67
  def upload_wikipedia_file(file):
 
68
  if file is None:
69
- return "Vui lòng chọn file để upload"
70
 
71
  try:
 
 
 
 
 
 
 
72
  documents = wikipedia_processor.process_uploaded_file(file.name)
73
 
74
  if not documents:
75
- return "Không tìm thấy dữ liệu nào trong file."
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
76
 
77
- metadatas = [{"source": "wikipedia", "type": "knowledge", "file": file.name, "language": "vi"} for _ in documents]
78
  rag_system.add_documents(documents, metadatas)
79
 
80
- stats = rag_system.get_collection_stats()
81
- return f"✅ Đã thêm {len(documents)} documents Wikipedia vào RAG database. Tổng số documents: {stats['total_documents']}"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
82
 
83
  except Exception as e:
84
- return f"❌ Lỗi xử lý file Wikipedia: {str(e)}"
 
 
85
 
86
- def search_database(query):
87
- """Hàm wrapper để tìm kiếm với top_k mặc định"""
88
- if not query or query.strip() == "":
89
- return []
90
- return rag_system.semantic_search(query, top_k=3)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
91
 
 
92
  upload_btn.click(upload_wikipedia_file, inputs=[file_upload], outputs=[upload_status])
93
- stats_btn.click(rag_system.get_collection_stats, inputs=[], outputs=[stats_display])
94
- search_btn.click(search_database, inputs=[search_query], outputs=[rag_results])
95
  def create_audio_tab(audio_service: AudioService):
96
  gr.Markdown("## Nói chuyện với AI (Đa ngôn ngữ)")
97
  audio_input, transcription_output, response_output, tts_audio_output, process_button = create_audio_components()
 
36
  with gr.Tab("🌐 Language Info"): # NEW TAB
37
  create_language_info_tab(rag_system.multilingual_manager)
38
  def create_rag_tab(rag_system: EnhancedRAGSystem, wikipedia_processor: WikipediaProcessor):
39
+ """Tạo tab RAG với debug chi tiết"""
40
+ gr.Markdown("## 📚 Upload Dữ Liệu Wikipedia")
41
 
42
  with gr.Row():
43
  with gr.Column(scale=1):
44
+ gr.Markdown("### 📤 Upload Dữ Liệu")
45
  file_upload = gr.File(
46
+ label="Tải lên file (TXT, CSV, JSON)",
47
  file_types=['.txt', '.csv', '.json'],
48
+ file_count="single",
49
+ type="filepath"
50
  )
51
  upload_btn = gr.Button("📤 Upload Data", variant="primary")
52
+ upload_status = gr.Textbox(
53
+ label="Trạng thái Upload",
54
+ interactive=False,
55
+ lines=5
56
+ )
57
 
58
  gr.Markdown("### 📊 Thống kê Database")
59
  stats_btn = gr.Button("📊 Database Stats", variant="secondary")
60
+ stats_display = gr.Textbox(
61
+ label="Thống kê",
62
+ interactive=False,
63
+ lines=6
64
+ )
65
 
66
+ with gr.Column(scale=2):
67
+ gr.Markdown("### 🔍 Tìm kiếm & Kiểm tra")
68
  search_query = gr.Textbox(
69
  label="Tìm kiếm trong database",
70
+ placeholder="Nhập từ khóa để kiểm tra dữ liệu..."
71
  )
72
  search_btn = gr.Button("🔍 Tìm kiếm", variant="secondary")
73
+ rag_results = gr.JSON(
74
+ label="Kết quả tìm kiếm",
75
+ show_label=True
76
+ )
77
 
78
  def upload_wikipedia_file(file):
79
+ """Xử lý upload file với debug đầy đủ"""
80
  if file is None:
81
+ return "Vui lòng chọn file để upload"
82
 
83
  try:
84
+ print(f"🔄 Bắt đầu upload file: {file.name}")
85
+
86
+ # Kiểm tra file tồn tại
87
+ if not os.path.exists(file.name):
88
+ return f"❌ File không tồn tại: {file.name}"
89
+
90
+ # Xử lý file
91
  documents = wikipedia_processor.process_uploaded_file(file.name)
92
 
93
  if not documents:
94
+ return "Không thể trích xuất dữ liệu từ file. File có thể trống hoặc định dạng không đúng."
95
+
96
+ print(f"✅ Đã xử lý {len(documents)} documents")
97
+
98
+ # Tạo metadata
99
+ metadatas = []
100
+ for i, doc in enumerate(documents):
101
+ metadata = {
102
+ "source": "uploaded_file",
103
+ "type": "knowledge",
104
+ "file_name": os.path.basename(file.name),
105
+ "language": "vi",
106
+ "doc_id": i,
107
+ "length": len(doc)
108
+ }
109
+ metadatas.append(metadata)
110
+
111
+ # Thêm vào RAG system
112
+ old_stats = rag_system.get_collection_stats()
113
+ old_count = old_stats['total_documents']
114
 
 
115
  rag_system.add_documents(documents, metadatas)
116
 
117
+ # Lấy thống kê mới
118
+ new_stats = rag_system.get_collection_stats()
119
+ new_count = new_stats['total_documents']
120
+
121
+ success_msg = f"""
122
+ ✅ UPLOAD THÀNH CÔNG!
123
+
124
+ 📁 File: {os.path.basename(file.name)}
125
+ 📄 Documents xử lý: {len(documents)}
126
+ 📊 Documents thêm vào: {new_count - old_count}
127
+ 🏷️ Tổng documents: {new_count}
128
+ 🔤 Embeddings: {new_stats['embedding_count']}
129
+ 🌐 Ngôn ngữ: {new_stats['language_distribution']}
130
+
131
+ 💡 Bạn có thể tìm kiếm ngay để kiểm tra dữ liệu!
132
+ """
133
+ return success_msg
134
 
135
  except Exception as e:
136
+ error_msg = f"❌ LỖI UPLOAD: {str(e)}"
137
+ print(f"UPLOAD ERROR: {traceback.format_exc()}")
138
+ return error_msg
139
 
140
+ def get_rag_stats():
141
+ """Lấy thống chi tiết"""
142
+ try:
143
+ stats = rag_system.get_collection_stats()
144
+ return f"""
145
+ 📊 THỐNG KÊ RAG DATABASE:
146
+
147
+ • 📄 Tổng documents: {stats['total_documents']}
148
+ • 🔤 Số embeddings: {stats['embedding_count']}
149
+ • 📐 Dimension: {stats['embedding_dimension']}
150
+ • 🌐 Phân bố ngôn ngữ: {stats['language_distribution']}
151
+ • ✅ Trạng thái: {stats['status']}
152
+ • 🏷️ Tên: {stats['name']}
153
+
154
+ 💡 Embeddings: {'Có' if stats['has_embeddings'] else 'Không'}
155
+ """
156
+ except Exception as e:
157
+ return f"❌ Lỗi lấy thống kê: {str(e)}"
158
+
159
+ def search_rag_database(query):
160
+ """Tìm kiếm để kiểm tra dữ liệu"""
161
+ if not query.strip():
162
+ return [{"message": "Nhập từ khóa để tìm kiếm"}]
163
+
164
+ try:
165
+ results = rag_system.semantic_search(query, top_k=3)
166
+
167
+ if not results:
168
+ return [{"message": "Không tìm thấy kết quả nào", "query": query}]
169
+
170
+ formatted_results = []
171
+ for i, result in enumerate(results):
172
+ formatted_results.append({
173
+ 'id': result.id,
174
+ 'text': result.text[:150] + "..." if len(result.text) > 150 else result.text,
175
+ 'similarity': round(result.similarity, 3),
176
+ 'metadata': result.metadata
177
+ })
178
+
179
+ return formatted_results
180
+
181
+ except Exception as e:
182
+ return [{"error": f"Lỗi tìm kiếm: {str(e)}"}]
183
 
184
+ # Event handlers
185
  upload_btn.click(upload_wikipedia_file, inputs=[file_upload], outputs=[upload_status])
186
+ stats_btn.click(get_rag_stats, inputs=[], outputs=[stats_display])
187
+ search_btn.click(search_rag_database, inputs=[search_query], outputs=[rag_results])
188
  def create_audio_tab(audio_service: AudioService):
189
  gr.Markdown("## Nói chuyện với AI (Đa ngôn ngữ)")
190
  audio_input, transcription_output, response_output, tts_audio_output, process_button = create_audio_components()