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

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,15 +2,13 @@ import re
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,45 +37,31 @@ class MultilingualManager:
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,29 +102,45 @@ class MultilingualManager:
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
- }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
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
  },
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
  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
+