datbkpro commited on
Commit
a42e45a
·
verified ·
1 Parent(s): 0943c25

Update services/audio_service.py

Browse files
Files changed (1) hide show
  1. services/audio_service.py +30 -20
services/audio_service.py CHANGED
@@ -5,22 +5,26 @@ from groq import Groq
5
  from config.settings import settings
6
  from core.rag_system import EnhancedRAGSystem
7
  from core.tts_service import EnhancedTTSService
8
- from core.multilingual_manager import MultilingualManager # NEW
9
 
10
  class AudioService:
11
 
12
  def __init__(self, groq_client: Groq, rag_system: EnhancedRAGSystem, tts_service: EnhancedTTSService):
13
  self.groq_client = groq_client
14
- self.rag_system = EnhancedRAGSystem()
15
- self.tts_service = EnhancedTTSService()
16
- self.multilingual_manager = MultilingualManager() # NEW
17
-
18
 
19
- def transcribe_audio(self, audio: str) -> str:
20
  """Chuyển đổi giọng nói thành văn bản sử dụng mô hình Whisper."""
21
  if not audio:
22
- raise ValueError("Audio input is empty.")
23
- sr, y =audio
 
 
 
 
 
24
 
25
  if y.ndim > 1:
26
  y = np.mean(y, axis=1) # Chuyển đổi sang mono nếu cần
@@ -32,26 +36,27 @@ class AudioService:
32
  buffer.seek(0)
33
 
34
  try:
35
- completion = self.groq_client.audio.transcribe(
36
  model=settings.WHISPER_MODEL,
37
- audio=buffer,
38
  response_format="text"
39
  )
40
- transcription = completion
41
  except Exception as e:
42
  transcription = f"Error trong quá trình chuyển đổi giọng nói thành văn bản: {e}"
43
 
44
  language = self.multilingual_manager.detect_language(transcription)
45
- respone = self._generate_response_with_rag(transcription, language)
46
 
47
  tts_audio = None
48
- if respone and respone.startswith("Error") is False:
49
- tts_bytes = self.tts_service.text_to_speech(respone, language)
50
  if tts_bytes:
51
  tts_audio_path = self.tts_service.save_tts_audio(tts_bytes)
52
  tts_audio = tts_audio_path
53
- return transcription, respone, tts_audio, language
54
 
 
 
55
  def _generate_response_with_rag(self, query: str, language: str) -> str:
56
  """Tạo phản hồi sử dụng hệ thống RAG dựa trên truy vấn và ngôn ngữ."""
57
  if not query or query.startswith("Error"):
@@ -62,7 +67,9 @@ class AudioService:
62
  if rag_results:
63
  for result in rag_results:
64
  context_text += result.document + "\n"
 
65
  llm_model = self.multilingual_manager.get_llm_model(language)
 
66
  if language == "vi":
67
  system_prompt = """Bạn là trợ lý AI thông minh chuyên về tiếng Việt. Hãy sử dụng thông tin từ cơ sở kiến thức được cung cấp để trả lời câu hỏi một cách chính xác và hữu ích bằng tiếng Việt.
68
  Thông tin tham khảo từ cơ sở kiến thức:
@@ -75,17 +82,20 @@ class AudioService:
75
  {context}
76
 
77
  If the information from the knowledge base is not sufficient to answer, rely on your general knowledge. Always respond in natural and easy-to-understand language matching the user's language."""
78
- message = [
 
79
  {"role": "system", "content": system_prompt.format(context=context_text)},
80
  {"role": "user", "content": query}
81
  ]
 
82
  completion = self.groq_client.chat.completions.create(
83
  model=llm_model,
84
- messages=message,
85
  max_tokens=512,
86
  temperature=0.7,
87
  )
88
- return completion.choices[0].message['content'].strip()
 
 
89
  except Exception as e:
90
- return f"Error trong quá trình tạo phản hồi với RAG: {e}"
91
-
 
5
  from config.settings import settings
6
  from core.rag_system import EnhancedRAGSystem
7
  from core.tts_service import EnhancedTTSService
8
+ from core.multilingual_manager import MultilingualManager
9
 
10
  class AudioService:
11
 
12
  def __init__(self, groq_client: Groq, rag_system: EnhancedRAGSystem, tts_service: EnhancedTTSService):
13
  self.groq_client = groq_client
14
+ self.rag_system = rag_system # Sử dụng parameter thay vì tạo mới
15
+ self.tts_service = tts_service # Sử dụng parameter thay vì tạo mới
16
+ self.multilingual_manager = MultilingualManager()
 
17
 
18
+ def transcribe_audio(self, audio: tuple) -> tuple:
19
  """Chuyển đổi giọng nói thành văn bản sử dụng mô hình Whisper."""
20
  if not audio:
21
+ return "Error: Audio input is empty.", "Error: Không có dữ liệu âm thanh", None, "unknown"
22
+
23
+ # Xử lý audio input từ Gradio
24
+ if isinstance(audio, tuple):
25
+ sr, y = audio
26
+ else:
27
+ return "Error: Invalid audio format", "Error: Định dạng âm thanh không hợp lệ", None, "unknown"
28
 
29
  if y.ndim > 1:
30
  y = np.mean(y, axis=1) # Chuyển đổi sang mono nếu cần
 
36
  buffer.seek(0)
37
 
38
  try:
39
+ completion = self.groq_client.audio.transcriptions.create(
40
  model=settings.WHISPER_MODEL,
41
+ file=buffer,
42
  response_format="text"
43
  )
44
+ transcription = completion.text
45
  except Exception as e:
46
  transcription = f"Error trong quá trình chuyển đổi giọng nói thành văn bản: {e}"
47
 
48
  language = self.multilingual_manager.detect_language(transcription)
49
+ response = self._generate_response_with_rag(transcription, language)
50
 
51
  tts_audio = None
52
+ if response and not response.startswith("Error"):
53
+ tts_bytes = self.tts_service.text_to_speech(response, language)
54
  if tts_bytes:
55
  tts_audio_path = self.tts_service.save_tts_audio(tts_bytes)
56
  tts_audio = tts_audio_path
 
57
 
58
+ return transcription, response, tts_audio, language
59
+
60
  def _generate_response_with_rag(self, query: str, language: str) -> str:
61
  """Tạo phản hồi sử dụng hệ thống RAG dựa trên truy vấn và ngôn ngữ."""
62
  if not query or query.startswith("Error"):
 
67
  if rag_results:
68
  for result in rag_results:
69
  context_text += result.document + "\n"
70
+
71
  llm_model = self.multilingual_manager.get_llm_model(language)
72
+
73
  if language == "vi":
74
  system_prompt = """Bạn là trợ lý AI thông minh chuyên về tiếng Việt. Hãy sử dụng thông tin từ cơ sở kiến thức được cung cấp để trả lời câu hỏi một cách chính xác và hữu ích bằng tiếng Việt.
75
  Thông tin tham khảo từ cơ sở kiến thức:
 
82
  {context}
83
 
84
  If the information from the knowledge base is not sufficient to answer, rely on your general knowledge. Always respond in natural and easy-to-understand language matching the user's language."""
85
+
86
+ messages = [
87
  {"role": "system", "content": system_prompt.format(context=context_text)},
88
  {"role": "user", "content": query}
89
  ]
90
+
91
  completion = self.groq_client.chat.completions.create(
92
  model=llm_model,
93
+ messages=messages,
94
  max_tokens=512,
95
  temperature=0.7,
96
  )
97
+
98
+ return completion.choices[0].message.content.strip()
99
+
100
  except Exception as e:
101
+ return f"Error trong quá trình tạo phản hồi với RAG: {e}"