HaRin2806 commited on
Commit
289c45a
·
1 Parent(s): ca362fb
Files changed (3) hide show
  1. Dockerfile +4 -1
  2. config.py +2 -2
  3. core/embedding_model.py +31 -9
Dockerfile CHANGED
@@ -28,7 +28,10 @@ COPY requirements.txt .
28
  RUN pip install --no-cache-dir -r requirements.txt
29
 
30
  COPY . .
31
- RUN mkdir -p logs uploads chroma_data
 
 
 
32
 
33
  EXPOSE 7860
34
  CMD ["python", "app.py"]
 
28
  RUN pip install --no-cache-dir -r requirements.txt
29
 
30
  COPY . .
31
+
32
+ # Tạo thư mục với permissions đúng cho ChromaDB và logs
33
+ RUN mkdir -p logs uploads chroma_data chroma_db && \
34
+ chmod -R 777 logs uploads chroma_data chroma_db
35
 
36
  EXPOSE 7860
37
  CMD ["python", "app.py"]
config.py CHANGED
@@ -9,8 +9,8 @@ GEMINI_API_KEY = os.getenv("GEMINI_API_KEY", "YOUR_API_KEY_HERE")
9
  # Embedding model
10
  EMBEDDING_MODEL = "intfloat/multilingual-e5-base"
11
 
12
- # ChromaDB settings
13
- CHROMA_PERSIST_DIRECTORY = "chroma_db"
14
  COLLECTION_NAME = "nutrition_data"
15
 
16
  # RAG settings
 
9
  # Embedding model
10
  EMBEDDING_MODEL = "intfloat/multilingual-e5-base"
11
 
12
+ # ChromaDB settings - sử dụng absolute path
13
+ CHROMA_PERSIST_DIRECTORY = os.path.join(os.getcwd(), "chroma_db")
14
  COLLECTION_NAME = "nutrition_data"
15
 
16
  # RAG settings
core/embedding_model.py CHANGED
@@ -3,6 +3,7 @@ from sentence_transformers import SentenceTransformer
3
  import chromadb
4
  from chromadb.config import Settings
5
  import uuid
 
6
  from config import EMBEDDING_MODEL, CHROMA_PERSIST_DIRECTORY, COLLECTION_NAME
7
 
8
  # Cấu hình logging
@@ -35,20 +36,42 @@ class EmbeddingModel:
35
  except Exception as e:
36
  logger.error(f"Lỗi khởi tạo model: {e}")
37
  # Thử với cache_folder explicit
38
- import os
39
  cache_dir = os.getenv('SENTENCE_TRANSFORMERS_HOME', '/app/.cache/sentence-transformers')
40
  self.model = SentenceTransformer(EMBEDDING_MODEL, cache_folder=cache_dir, trust_remote_code=True)
41
  logger.info("Đã tải sentence transformer model với cache folder explicit")
42
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  # Khởi tạo ChromaDB client với persistent storage
44
- self.chroma_client = chromadb.PersistentClient(
45
- path=CHROMA_PERSIST_DIRECTORY,
46
- settings=Settings(
47
- anonymized_telemetry=False,
48
- allow_reset=True
 
 
49
  )
50
- )
51
- logger.info(f"Đã kết nối ChromaDB tại: {CHROMA_PERSIST_DIRECTORY}")
 
 
 
 
52
 
53
  # Lấy hoặc tạo collection
54
  try:
@@ -207,7 +230,6 @@ class EmbeddingModel:
207
  logger.error(f"Lỗi thêm documents: {e}")
208
  return False
209
 
210
- # Các phương thức khác giữ nguyên...
211
  def index_chunks(self, chunks):
212
  """
213
  Index các chunks dữ liệu vào ChromaDB
 
3
  import chromadb
4
  from chromadb.config import Settings
5
  import uuid
6
+ import os
7
  from config import EMBEDDING_MODEL, CHROMA_PERSIST_DIRECTORY, COLLECTION_NAME
8
 
9
  # Cấu hình logging
 
36
  except Exception as e:
37
  logger.error(f"Lỗi khởi tạo model: {e}")
38
  # Thử với cache_folder explicit
 
39
  cache_dir = os.getenv('SENTENCE_TRANSFORMERS_HOME', '/app/.cache/sentence-transformers')
40
  self.model = SentenceTransformer(EMBEDDING_MODEL, cache_folder=cache_dir, trust_remote_code=True)
41
  logger.info("Đã tải sentence transformer model với cache folder explicit")
42
 
43
+ # Đảm bảo thư mục ChromaDB tồn tại và có quyền ghi
44
+ try:
45
+ os.makedirs(CHROMA_PERSIST_DIRECTORY, exist_ok=True)
46
+ # Test ghi file để kiểm tra permission
47
+ test_file = os.path.join(CHROMA_PERSIST_DIRECTORY, 'test_permission.tmp')
48
+ with open(test_file, 'w') as f:
49
+ f.write('test')
50
+ os.remove(test_file)
51
+ logger.info(f"Thư mục ChromaDB đã sẵn sàng: {CHROMA_PERSIST_DIRECTORY}")
52
+ except Exception as e:
53
+ logger.error(f"Lỗi tạo/kiểm tra thư mục ChromaDB: {e}")
54
+ # Fallback to /tmp directory
55
+ import tempfile
56
+ CHROMA_PERSIST_DIRECTORY = os.path.join(tempfile.gettempdir(), 'chroma_db')
57
+ os.makedirs(CHROMA_PERSIST_DIRECTORY, exist_ok=True)
58
+ logger.warning(f"Sử dụng thư mục tạm thời: {CHROMA_PERSIST_DIRECTORY}")
59
+
60
  # Khởi tạo ChromaDB client với persistent storage
61
+ try:
62
+ self.chroma_client = chromadb.PersistentClient(
63
+ path=CHROMA_PERSIST_DIRECTORY,
64
+ settings=Settings(
65
+ anonymized_telemetry=False,
66
+ allow_reset=True
67
+ )
68
  )
69
+ logger.info(f"Đã kết nối ChromaDB tại: {CHROMA_PERSIST_DIRECTORY}")
70
+ except Exception as e:
71
+ logger.error(f"Lỗi kết nối ChromaDB: {e}")
72
+ # Fallback to in-memory client
73
+ logger.warning("Fallback to in-memory ChromaDB client")
74
+ self.chroma_client = chromadb.Client()
75
 
76
  # Lấy hoặc tạo collection
77
  try:
 
230
  logger.error(f"Lỗi thêm documents: {e}")
231
  return False
232
 
 
233
  def index_chunks(self, chunks):
234
  """
235
  Index các chunks dữ liệu vào ChromaDB