pass the input history as a prompt to whisper

This commit is contained in:
Paul Gauthier 2023-08-11 11:03:37 -03:00
parent 9815d14368
commit b6b271b70c
3 changed files with 30 additions and 5 deletions

View file

@ -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()

View file

@ -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()

View file

@ -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