File size: 3,207 Bytes
dea8d0d
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
"""
voice_bot.py — Full Voice-enabled Assistant for NeuraAI v200 Hardcode
- Integrates BotEngine + VoiceEngine
- Handles user input (text or speech)
- Supports personas, voice gender, and polite/friendly styles
- Offline fallback supported
"""

import threading
import queue
import time
try:
    from bot_engine import BotEngine
except Exception:
    BotEngine = None

try:
    from voice_engine import VoiceEngine
except Exception:
    VoiceEngine = None

class VoiceBot:
    def __init__(self, persona="friendly", voice_gender="female", enable_voice=True):
        # Initialize BotEngine
        self.bot = BotEngine(persona=persona, enable_voice=enable_voice)
        self.enable_voice = enable_voice and (VoiceEngine is not None)
        # Initialize VoiceEngine
        if self.enable_voice:
            self.voice = VoiceEngine(prefer_online=False)
            self.voice.set_voice(voice_gender)
        else:
            self.voice = None
        self.persona = persona
        self.voice_gender = voice_gender

    # ----------------------------
    # Change persona / voice
    # ----------------------------
    def set_persona(self, persona: str):
        self.persona = persona
        if self.bot:
            self.bot.set_persona(persona)

    def set_voice_gender(self, gender: str):
        self.voice_gender = gender
        if self.voice:
            self.voice.set_voice(gender)

    # ----------------------------
    # Speak wrapper (non-blocking)
    # ----------------------------
    def speak(self, text: str):
        if self.enable_voice and self.voice:
            try:
                self.voice.speak(text)
            except Exception:
                pass

    # ----------------------------
    # Generate response
    # ----------------------------
    def respond(self, user_input: str, user_id="local_user", is_premium=False, online=True):
        """
        Main interaction: returns AI response text & speaks it
        """
        if self.bot:
            reply = self.bot.generate_response(
                user_input=user_input,
                user_id=user_id,
                is_premium=is_premium,
                online=online
            )
            return reply
        return "Bot engine not initialized."

    # ----------------------------
    # Simple interaction loop
    # ----------------------------
    def chat_loop(self):
        print("🎤 VoiceBot Ready! Type 'exit' to quit.\n")
        while True:
            user_input = input("You: ")
            if user_input.lower() in ("exit", "quit"):
                print("Exiting VoiceBot...")
                break
            reply = self.respond(user_input)
            print("Bot:", reply)

    # ----------------------------
    # Introduce assistant
    # ----------------------------
    def introduce(self):
        intro = f"Hello! I am your NeuraAI v200 assistant ({self.persona} persona, {self.voice_gender} voice)."
        print(intro)
        self.speak(intro)

# ----------------------------
# Quick test
# ----------------------------
if __name__ == "__main__":
    vb = VoiceBot(persona="friendly", voice_gender="female", enable_voice=True)
    vb.introduce()
    vb.chat_loop()