From b6b271b70cd78625e00f7b7d8d6cba97f391358e Mon Sep 17 00:00:00 2001 From: Paul Gauthier Date: Fri, 11 Aug 2023 11:03:37 -0300 Subject: [PATCH] pass the input history as a prompt to whisper --- aider/commands.py | 20 +++++++++++++++++++- aider/io.py | 7 +++++++ aider/voice.py | 8 ++++---- 3 files changed, 30 insertions(+), 5 deletions(-) diff --git a/aider/commands.py b/aider/commands.py index 82b26a7ba..b562ea4e5 100644 --- a/aider/commands.py +++ b/aider/commands.py @@ -442,7 +442,25 @@ class Commands: self.io.tool_error("Unable to import `sounddevice`, is portaudio installed?") return - text = v.record_and_transcribe() + history_iter = self.io.get_input_history() + + history = [] + size = 0 + for line in history_iter: + if line.startswith("/"): + continue + if line in history: + continue + if size + len(line) > 1024: + break + size += len(line) + history.append(line) + + history.reverse() + history = "\n".join(history) + dump(history) + + text = v.record_and_transcribe(history) if text: self.io.add_to_input_history(text) print() diff --git a/aider/io.py b/aider/io.py index a7f528aff..1c63c10de 100644 --- a/aider/io.py +++ b/aider/io.py @@ -236,6 +236,13 @@ class InputOutput: return FileHistory(self.input_history_file).append_string(inp) + def get_input_history(self): + if not self.input_history_file: + return [] + + fh = FileHistory(self.input_history_file) + return fh.load_history_strings() + def user_input(self, inp, log_only=True): if not log_only: style = dict(style=self.user_input_color) if self.user_input_color else dict() diff --git a/aider/voice.py b/aider/voice.py index c2ac4df0c..1c4cfad4f 100644 --- a/aider/voice.py +++ b/aider/voice.py @@ -54,13 +54,13 @@ class Voice: dur = time.time() - self.start_time return f"Recording, press ENTER when done... {dur:.1f}sec {bar}" - def record_and_transcribe(self): + def record_and_transcribe(self, history=None): try: - return self.raw_record_and_transcribe() + return self.raw_record_and_transcribe(history) except KeyboardInterrupt: return - def raw_record_and_transcribe(self): + def raw_record_and_transcribe(self, history): self.q = queue.Queue() filename = tempfile.mktemp(suffix=".wav") @@ -77,7 +77,7 @@ class Voice: file.write(self.q.get()) with open(filename, "rb") as fh: - transcript = openai.Audio.transcribe("whisper-1", fh) + transcript = openai.Audio.transcribe("whisper-1", fh, prompt=history) text = transcript["text"] return text