datbkpro commited on
Commit
5b64acb
·
verified ·
1 Parent(s): 5b4cd8d

Update core/multilingual_manager.py

Browse files
Files changed (1) hide show
  1. core/multilingual_manager.py +54 -54
core/multilingual_manager.py CHANGED
@@ -2,13 +2,15 @@ import re
2
  from typing import Dict, Tuple, Optional
3
  from sentence_transformers import SentenceTransformer
4
  from config.settings import settings
 
 
 
5
 
6
  class MultilingualManager:
7
  def __init__(self):
8
- self.vietnamese_model = None
9
- self.multilingual_model = None
10
- self.current_language = 'vi'
11
-
12
  # Phát hiện thuộc ngôn ngữ dựa trên các mẫu ký tự và từ phổ biến
13
  self.language_patterns = {
14
  'vi': {
@@ -37,31 +39,45 @@ class MultilingualManager:
37
  },
38
  'ko': {
39
  'chars': set('가-힣'),
40
- 'common_words': ['이', '그', '에', '를', '', '에', '에서', '으로', '하다', '이다']
41
  },
42
  'zh': {
43
  'chars': set('一-鿌'),
44
  'common_words': ['的', '是', '在', '有', '和', '了', '人', '我', '他', '这']
45
  }
46
  }
47
- self._initialize_models()
48
- def _initialize_models(self):
49
- """Khởi tạo các mô hình đa ngôn ngữ"""
50
- try:
51
- print("🔄 Đang tải mô hình embedding tiếng Việt...")
52
- self.vietnamese_model = SentenceTransformer(settings.VIETNAMESE_EMBEDDING_MODEL)
53
- print("✅ Đã tải mô hình embedding tiếng Việt")
54
- except Exception as e:
55
- print(f"❌ Lỗi tải mô hình embedding tiếng Việt: {e}")
56
- self.vietnamese_model = None
57
 
58
- try:
59
- print("🔄 Đang tải mô hình embedding đa ngôn ngữ...")
60
- self.multilingual_model = SentenceTransformer(settings.MULTILINGUAL_EMBEDDING_MODEL,trust_remote_code=True )
61
- print(" Đã tải mô hình embedding đa ngôn ngữ")
62
- except Exception as e:
63
- print(f"❌ Lỗi tải mô hình embedding đa ngôn ngữ: {e}")
64
- self.multilingual_model = None
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
65
 
66
  def detect_language(self, text: str) -> str:
67
  """Phát hiện ngôn ngữ với độ chính xác cao"""
@@ -102,45 +118,29 @@ class MultilingualManager:
102
  return 'en' # Default to English for other cases
103
 
104
  return detected_lang
 
105
  def get_embedding_model(self, language: str = None) -> Optional[SentenceTransformer]:
106
- """Lấy mô hình embedding dựa trên ngôn ngữ đã phát hiện"""
107
- lang = language if language in settings.SUPPORTED_LANGUAGES else self.current_language
108
-
109
- if lang == 'vi':
110
- return self.vietnamese_model
111
- else:
112
- return self.multilingual_model
113
 
114
- def get_llm_model_name(self, language: str = None) -> str:
115
- """Lấy tên mô hình LLM dựa trên ngôn ngữ đã phát hiện"""
116
  lang = language if language in settings.SUPPORTED_LANGUAGES else self.current_language
117
 
 
118
  if lang == 'vi':
119
- return settings.VIETNAMESE_LLM_MODEL
120
  else:
121
- return settings.MULTILINGUAL_LLM_MODEL
122
 
123
  def get_language_info(self, language: str = None) -> Dict:
124
- """Lấy thông tin ngôn ngữ bao gồm mã và tên đầy đủ"""
125
  lang = language if language in settings.SUPPORTED_LANGUAGES else self.current_language
126
 
127
- model_info = {
128
- 'vi': {
129
- 'name': 'Tiếng Việt',
130
- 'embedding_model': settings.VIETNAMESE_EMBEDDING_MODEL,
131
- 'llm_model': settings.VIETNAMESE_LLM_MODEL,
132
- 'status': 'active' if self.vietnamese_model else 'inactive'
133
- },
134
- 'other': {
135
- 'name': 'Multilingual',
136
- 'embedding_model': settings.MULTILINGUAL_EMBEDDING_MODEL,
137
- 'llm_model': settings.MULTILINGUAL_LLM_MODEL,
138
- 'status': 'active' if self.multilingual_model else 'inactive'
139
- }
140
- }
141
-
142
- if lang == 'vi':
143
- return model_info['vi']
144
- else:
145
- return model_info['other']
146
-
 
2
  from typing import Dict, Tuple, Optional
3
  from sentence_transformers import SentenceTransformer
4
  from config.settings import settings
5
+ import logging
6
+
7
+ logger = logging.getLogger(__name__)
8
 
9
  class MultilingualManager:
10
  def __init__(self):
11
+ self.embedding_model = None
12
+ self.current_language = 'vi'
13
+
 
14
  # Phát hiện thuộc ngôn ngữ dựa trên các mẫu ký tự và từ phổ biến
15
  self.language_patterns = {
16
  'vi': {
 
39
  },
40
  'ko': {
41
  'chars': set('가-힣'),
42
+ 'common_words': ['이', '그', '에', '를', '', '에', '에서', '으로', '하다', '이다']
43
  },
44
  'zh': {
45
  'chars': set('一-鿌'),
46
  'common_words': ['的', '是', '在', '有', '和', '了', '人', '我', '他', '这']
47
  }
48
  }
 
 
 
 
 
 
 
 
 
 
49
 
50
+ self._initialize_model()
51
+
52
+ def _initialize_model(self):
53
+ """Khởi tạo mô hình embedding với fallback"""
54
+ model_attempts = [
55
+ settings.VIETNAMESE_EMBEDDING_MODEL,
56
+ settings.MULTILINGUAL_EMBEDDING_MODEL,
57
+ settings.FALLBACK_EMBEDDING_MODEL,
58
+ 'all-MiniLM-L6-v2', # Model mặc định
59
+ 'paraphrase-MiniLM-L6-v2' # Model fallback cuối cùng
60
+ ]
61
+
62
+ for model_name in model_attempts:
63
+ try:
64
+ logger.info(f"🔄 Đang thử tải mô hình embedding: {model_name}")
65
+ self.embedding_model = SentenceTransformer(model_name)
66
+ logger.info(f"✅ Đã tải thành công mô hình: {model_name}")
67
+ break
68
+ except Exception as e:
69
+ logger.warning(f"❌ Không thể tải {model_name}: {e}")
70
+ continue
71
+
72
+ if self.embedding_model is None:
73
+ logger.error("❌ Không thể tải bất kỳ mô hình embedding nào!")
74
+ # Tạo một model đơn giản để tránh crash
75
+ try:
76
+ self.embedding_model = SentenceTransformer('all-MiniLM-L6-v2', device='cpu')
77
+ except:
78
+ # Fallback cứng
79
+ from sentence_transformers import SentenceTransformer as ST
80
+ self.embedding_model = ST('sentence-transformers/all-MiniLM-L6-v2')
81
 
82
  def detect_language(self, text: str) -> str:
83
  """Phát hiện ngôn ngữ với độ chính xác cao"""
 
118
  return 'en' # Default to English for other cases
119
 
120
  return detected_lang
121
+
122
  def get_embedding_model(self, language: str = None) -> Optional[SentenceTransformer]:
123
+ """Lấy mô hình embedding - sử dụng model chung cho tất cả ngôn ngữ"""
124
+ return self.embedding_model
 
 
 
 
 
125
 
126
+ def get_llm_model(self, language: str = None) -> str:
127
+ """Lấy tên mô hình LLM dựa trên ngôn ngữ"""
128
  lang = language if language in settings.SUPPORTED_LANGUAGES else self.current_language
129
 
130
+ # Groq models - sử dụng model chung
131
  if lang == 'vi':
132
+ return "llama-3.1-8b-instant" # Model Groq hỗ trợ tiếng Việt
133
  else:
134
+ return "llama-3.1-8b-instant" # Model Groq đa ngôn ngữ
135
 
136
  def get_language_info(self, language: str = None) -> Dict:
137
+ """Lấy thông tin ngôn ngữ"""
138
  lang = language if language in settings.SUPPORTED_LANGUAGES else self.current_language
139
 
140
+ return {
141
+ 'code': lang,
142
+ 'name': settings.SUPPORTED_LANGUAGES.get(lang, 'Unknown'),
143
+ 'embedding_model': getattr(self.embedding_model, 'get_sentence_embedding_dimension', 'N/A'),
144
+ 'llm_model': self.get_llm_model(lang),
145
+ 'status': 'active' if self.embedding_model else 'inactive'
146
+ }