Update services/audio_service.py
Browse files- 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
|
| 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 =
|
| 15 |
-
self.tts_service =
|
| 16 |
-
self.multilingual_manager = MultilingualManager()
|
| 17 |
-
|
| 18 |
|
| 19 |
-
def transcribe_audio(self, audio:
|
| 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 |
-
|
| 23 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 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.
|
| 36 |
model=settings.WHISPER_MODEL,
|
| 37 |
-
|
| 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 |
-
|
| 46 |
|
| 47 |
tts_audio = None
|
| 48 |
-
if
|
| 49 |
-
tts_bytes = self.tts_service.text_to_speech(
|
| 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 |
-
|
|
|
|
| 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=
|
| 85 |
max_tokens=512,
|
| 86 |
temperature=0.7,
|
| 87 |
)
|
| 88 |
-
|
|
|
|
|
|
|
| 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}"
|
|
|