forked from Years96/Jarvis
-
Notifications
You must be signed in to change notification settings - Fork 0
/
jarvis.py
122 lines (102 loc) · 3.62 KB
/
jarvis.py
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
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
import speech_recognition as sr
import openai
from elevenlabs import generate, play
openai.api_key = 'Your OpenAi Api Key Here'
elevenLabsAPIKey = 'ElevenLabs Api Key Here
r = sr.Recognizer()
mic = sr.Microphone()
conversation = [
{"role": "system", "content": "Your name is Bella and your purpose is to be a human-like assistant. The user's name is {user_name}."},
]
assistant_name = "bella"
activated = False
def play_greeting():
greeting = "Hi, I am Bella. And you?"
audio = generate(
text=greeting,
voice="Bella",
model='eleven_multilingual_v1',
api_key=elevenLabsAPIKey
)
play(audio)
def play_how_can_i_help():
message = "How can I help you?"
audio = generate(
text=message,
voice="Bella",
model='eleven_multilingual_v1',
api_key=elevenLabsAPIKey
)
play(audio)
def ask_for_name():
play_greeting()
print("Please say your name")
with mic as source:
r.adjust_for_ambient_noise(source, duration=1)
r.energy_threshold = 3000
r.dynamic_energy_threshold = True
audio = r.listen(source)
try:
name = r.recognize_google(audio, language="en-US").lower()
return name
except sr.UnknownValueError:
print("Google Speech Recognition could not understand audio")
return None
except sr.RequestError as e:
print(f"Could not request results from Google Speech Recognition service; {e}")
return None
def execute_task(task):
if task == "open notepad":
subprocess.run(["notepad.exe"])
elif task == "type hello":
pyautogui.typewrite("Hello")
elif "search for" in task:
search_query = task.replace("search for", "").strip()
# Perform a search using the search_query
# Add more tasks here
user_name = None
while user_name is None:
user_name = ask_for_name()
conversation[0]["content"] = conversation[0]["content"].format(user_name=user_name)
play_how_can_i_help()
while True:
with mic as source:
r.adjust_for_ambient_noise(source, duration=1)
r.energy_threshold = 3000
r.dynamic_energy_threshold = True
print("Talk now")
audio = r.listen(source)
try:
word = r.recognize_google(audio, language="en-US").lower()
if assistant_name in word:
activated = True
word = word.replace(assistant_name, '').strip()
if activated:
conversation.append({"role": "user", "content": word})
response = openai.ChatCompletion.create(
model="gpt-3.5-turbo",
messages=conversation
)
message = response["choices"][0]["message"]["content"]
conversation.append({"role": "assistant", "content": message})
execute_task(message)
for i in range(0, len(message), 5000):
audio = generate(
text=message[i:i+5000],
voice="Bella",
model='eleven_multilingual_v1',
api_key=elevenLabsAPIKey
)
play(audio)
except sr.UnknownValueError:
if activated:
print("Google Speech Recognition could not understand audio")
audio = generate(
text="I'm sorry, I couldn't understand that. Could you please speak more clearly or loudly?",
voice="Bella",
model='eleven_multilingual_v1',
api_key=elevenLabsAPIKey
)
play(audio)
except sr.RequestError as e:
print(f"Could not request results from Google Speech Recognition service; {e}")