Nihal2000's picture
Initial deployment of AI Digital Library Assistant
86aa5e4
raw
history blame
2.04 kB
import logging
from typing import Dict, Any, Optional
import asyncio
logger = logging.getLogger(__name__)
class VoiceTool:
"""
MCP Tool for voice-based Q&A using ElevenLabs conversational AI
"""
def __init__(self, elevenlabs_service):
"""
Initialize Voice Tool
Args:
elevenlabs_service: ElevenLabs service instance
"""
self.elevenlabs_service = elevenlabs_service
async def voice_qa(
self,
question: str,
session_id: Optional[str] = None
) -> Dict[str, Any]:
"""
MCP Tool: Ask a question using voice assistant
Args:
question: User's question (text or transcribed from voice)
session_id: Optional session ID for conversation context
Returns:
Dictionary with answer, audio URL (if applicable), and sources
"""
try:
if not self.elevenlabs_service or not self.elevenlabs_service.is_available():
return {
"success": False,
"error": "Voice assistant not configured. Please set ELEVENLABS_API_KEY and ELEVENLABS_AGENT_ID"
}
logger.info(f"Voice QA: {question}")
# For text-based queries, we can use the RAG tool directly
# This provides the backend for voice queries
result = await self.elevenlabs_service.llamaindex_service.query(question)
return {
"success": True,
"question": question,
"answer": result,
"session_id": session_id,
"mode": "text" # Could be "voice" if audio processing is involved
}
except Exception as e:
logger.error(f"Voice QA failed: {str(e)}")
return {
"success": False,
"error": str(e),
"question": question
}