Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Bug fixes for exceptions observed during usage. #41

Merged
merged 1 commit into from
Jul 27, 2023
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion AudioRecorder.py
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ def __init__(self):
print("[ERROR] No loopback device found.")

source = sr.Microphone(speaker=True,
device_index= default_speakers["index"],
device_index=default_speakers["index"],
sample_rate=int(default_speakers["defaultSampleRate"]),
chunk_size=pyaudio.get_sample_size(pyaudio.paInt16),
channels=default_speakers["maxInputChannels"])
Expand Down
26 changes: 17 additions & 9 deletions GPTResponder.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
import openai
import datetime
import GlobalVars
from prompts import create_prompt, INITIAL_RESPONSE
import prompts
import time
import conversation
import constants
Expand All @@ -12,7 +13,7 @@

class GPTResponder:
def __init__(self, convo: conversation.Conversation):
self.response = INITIAL_RESPONSE
self.response = prompts.INITIAL_RESPONSE
self.response_interval = 2
self.gl_vars = GlobalVars.TranscriptionGlobals()
openai.api_key = self.gl_vars.api_key
Expand All @@ -22,18 +23,25 @@ def __init__(self, convo: conversation.Conversation):

def generate_response_from_transcript_no_check(self, transcript):
try:
prompt_content = create_prompt(transcript)
response = openai.ChatCompletion.create(
# prompt_content = create_prompt(transcript)
# prompt_api_message = [{"role": "system", "content": prompt_content}]
prompt_api_message = prompts.create_single_turn_prompt_message(transcript)
multiturn_prompt_content = self.conversation.get_merged_conversation(length=MAX_PHRASES)
multiturn_prompt_api_message = prompts.create_multiturn_prompt(multiturn_prompt_content)
# print(f'Usual prompt api message: {prompt_api_message}')
# print(f'Multiturn prompt: {multiturn_prompt_api_message}')
usual_response = openai.ChatCompletion.create(
model=self.model,
messages=[{"role": "system", "content": prompt_content}],
messages=prompt_api_message,
temperature=0.0
)

except Exception as exception:
print(exception)
return ''
full_response = response.choices[0].message.content
usual_full_response = usual_response.choices[0].message.content
try:
return full_response.split('[')[1].split(']')[0]
return usual_full_response.split('[')[1].split(']')[0]
except:
return ''

Expand All @@ -44,7 +52,7 @@ def generate_response_from_transcript(self, transcript):
if self.gl_vars.freeze_state[0]:
return ''

return generate_response_from_transcript_no_check(self, transcript)
return self.generate_response_from_transcript_no_check(transcript)

def respond_to_transcriber(self, transcriber):
while True:
Expand All @@ -63,7 +71,7 @@ def respond_to_transcriber(self, transcriber):
self.response = response
self.conversation.update_conversation(persona=constants.PERSONA_ASSISTANT,
text=response,
time_spoken=end_time)
time_spoken=datetime.datetime.now())

remaining_time = self.response_interval - execution_time
if remaining_time > 0:
Expand Down
2 changes: 1 addition & 1 deletion TranscriberModels.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,7 +10,7 @@ def get_model(use_api: bool, model: str = None):
return APIWhisperTranscriber()

model_cleaned = model if model else 'tiny'
print(f'Using model: {model_cleaned}')
print(f'[INFO] Using local model: {model_cleaned}')
return WhisperTranscriber(model=model_cleaned)


Expand Down
30 changes: 30 additions & 0 deletions conversation.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,14 @@
from heapq import merge
import constants
import configuration
import datetime

DEFAULT_PREAMBLE = """You are a casual pal, genuinely interested in the conversation at hand.""" \
"""Please respond, in detail, to the conversation. Confidently give a """\
"""straightforward response to the speaker, even if you don't understand """\
"""them. Give your response in square brackets. DO NOT ask to repeat, """\
"""and DO NOT ask for clarification. Just answer the speaker directly."""\
"""A poor transcription of conversation is given below."""


class Conversation:
Expand All @@ -13,6 +21,8 @@ def __init__(self):
constants.PERSONA_YOU: [],
constants.PERSONA_SPEAKER: [],
constants.PERSONA_ASSISTANT: []}
transcript = self.transcript_data[constants.PERSONA_SYSTEM]
transcript.append((f"{constants.PERSONA_SYSTEM}: [{DEFAULT_PREAMBLE}]\n\n", datetime.datetime.now()))
config = configuration.Config().get_data()

def clear_conversation_data(self):
Expand Down Expand Up @@ -58,3 +68,23 @@ def get_conversation(self,
key=lambda x: x[1]))
combined_transcript = combined_transcript[-length:]
return "".join([t[0] for t in combined_transcript])

def get_merged_conversation(self, length: int = 0) -> list:
"""Creates a prompt to be sent to LLM (OpenAI by default)
length: Get the last length elements from the audio transcript.
Default value = 0, gives the complete transcript
"""
# print(f'You: Length: {len(self.transcript_data[constants.PERSONA_YOU])}')
# print(f'Speaker: Length: {len(self.transcript_data[constants.PERSONA_SPEAKER])}')
# print(f'Assistant: Length: {len(self.transcript_data[constants.PERSONA_ASSISTANT])}')
# print(f'System: Length: {len(self.transcript_data[constants.PERSONA_SYSTEM])}')

combined_transcript = list(merge(
self.transcript_data[constants.PERSONA_YOU][-length:],
self.transcript_data[constants.PERSONA_SPEAKER][-length:],
self.transcript_data[constants.PERSONA_ASSISTANT][-length:],
key=lambda x: x[1]))
combined_transcript = combined_transcript[-length:]

combined_transcript.insert(0, (f"{constants.PERSONA_SYSTEM}: [{self.transcript_data[constants.PERSONA_SYSTEM][0]}]\n\n", datetime.datetime.now()))
return combined_transcript
2 changes: 1 addition & 1 deletion main.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,7 +62,7 @@ def main():
if response.status_code != 200:
print(f'Error received: {response}')
except ConnectionError:
print('Operating as a standalone client')
print('[INFO] Operating in Desktop mode')

config = configuration.Config().get_data()

Expand Down
15 changes: 15 additions & 0 deletions prompts.py
Original file line number Diff line number Diff line change
Expand Up @@ -8,3 +8,18 @@ def create_prompt(transcript):
\
{transcript}.\
{EPILOGUE}'


def create_single_turn_prompt_message(transcript: str):
message = f'{PREAMBLE} \
\
{transcript}.\
{EPILOGUE}'

prompt_api_message = [{"role": "system", "content": message}]
return prompt_api_message


def create_multiturn_prompt(convo: list):
# print(convo)
return ''