Commit graph

1520 commits

Author SHA1 Message Date
Paul Gauthier
1053d1781c aider: Added a function record_and_transcribe to aider/voice.py that records audio until the user presses a key, then submits it to the Whisper API to get the text back.
# Aider chat conversation:

USER: what file formats does the openai whisper api accept?

ASSISTANT: The OpenAI Whisper ASR API accepts audio data in the following formats:

- FLAC: Free Lossless Audio Codec. This is a lossless audio format that doesn't lose any data during compression. It's the recommended format for best performance.
- WAV: Waveform Audio File Format. This is a standard audio format used mainly in Windows PCs.
- MULAW: μ-law algorithm (or mu-law) is a companding algorithm, primarily used in the digital telecommunication systems of North America and Japan.

Please note that the audio data must be single-channel (mono), and the sample rate must be 16 kHz for FLAC and WAV formats, and 8 kHz for MULAW format.

USER: make a script that records audio until the user presses a key, then submits it to whisper to get the text back

ASSISTANT: To accomplish this, we need to create a new Python script that uses the `sounddevice` library to record audio, the `keyboard` library to listen for a key press, and the `openai.Whisper` API to transcribe the audio.

Here is the *edit block* for this new script:

```python
newfile/record_and_transcribe.py
<<<<<<< HEAD

=======
import sounddevice as sd
import numpy as np
import keyboard
import openai
import io
import os

# Set your OpenAI API key
openai.api_key = 'your-api-key'

# Set the sample rate and duration for the recording
sample_rate = 16000  # 16kHz
duration = 10  # in seconds

# Create a callback function to stop recording when a key is pressed
def on_key_press(e):
    print("Key pressed, stopping recording...")
    sd.stop()

# Start the recording
print("Recording started, press any key to stop...")
recording = sd.rec(int(sample_rate * duration), samplerate=sample_rate, channels=1, callback=on_key_press)

# Wait for a key press
keyboard.wait()

# Convert the recording to bytes
recording_bytes = io.BytesIO()
np.save(recording_bytes, recording, allow_pickle=False)
recording_bytes = recording_bytes.getvalue()

# Transcribe the audio using the Whisper API
response = openai.Whisper.asr.create(audio_data=recording_bytes)

# Print the transcription
print("Transcription: ", response['choices'][0]['text'])
>>>>>>> updated
```

Please replace `'your-api-key'` with your actual OpenAI API key. This script records audio for a maximum of 10 seconds, but it stops recording as soon as any key is pressed. The recorded audio is then transcribed using the Whisper API, and the transcription is printed to the console.

Please note that you need to install the `sounddevice`, `numpy`, `keyboard`, and `openai` Python libraries to run this script. You can install them using pip:

```bash
pip install sounddevice numpy keyboard openai
```

Also, please note that the `keyboard` library requires root privileges to work, so you might need to run your script as a superuser.

USER: make a function that records audio until the user presses a key, then submits it to whisper to get the text back

ASSISTANT: To create a function that accomplishes this, we need to modify the `aider/voice.py` file. The function should be named `record_and_transcribe` and it should use the `sounddevice` and `keyboard` libraries to record audio and listen for a key press, respectively. It should also use the `openai.Whisper` API to transcribe the audio.

Here is the *edit block* for this change:

```python
aider/voice.py
<<<<<<< HEAD

=======
import sounddevice as sd
import numpy as np
import keyboard
import openai
import io

def record_and_transcribe():
    # Set your OpenAI API key
    openai.api_key = 'your-api-key'

    # Set the sample rate and duration for the recording
    sample_rate = 16000  # 16kHz
    duration = 10  # in seconds

    # Create a callback function to stop recording when a key is pressed
    def on_key_press(e):
        print("Key pressed, stopping recording...")
        sd.stop()

    # Start the recording
    print("Recording started, press any key to stop...")
    recording = sd.rec(int(sample_rate * duration), samplerate=sample_rate, channels=1, callback=on_key_press)

    # Wait for a key press
    keyboard.wait()

    # Convert the recording to bytes
    recording_bytes = io.BytesIO()
    np.save(recording_bytes, recording, allow_pickle=False)
    recording_bytes = recording_bytes.getvalue()

    # Transcribe the audio using the Whisper API
    response = openai.Whisper.asr.create(audio_data=recording_bytes)

    # Return the transcription
    return response['choices'][0]['text']
>>>>>>> updated
```

Please replace `'your-api-key'` with your actual OpenAI API key. This function records audio for a maximum of 10 seconds, but it stops recording as soon as any key is pressed. The recorded audio is then transcribed using the Whisper API, and the transcription is returned by the function.

Please note that you need to install the `sounddevice`, `numpy`, `keyboard`, and `openai` Python libraries to use this function. You can install them using pip:

```bash
pip install sounddevice numpy keyboard openai
```

Also, please note that the `keyboard` library requires root privileges to work, so you might need to run your script as a superuser.
2023-08-10 15:45:49 -03:00
Paul Gauthier
fdb1cac20b aider: Added aider/voice.py 2023-08-10 15:41:42 -03:00
Paul Gauthier
2077bdcd79 aider: Add a new /voice command that returns 'hi gpt' when called.
# Aider chat conversation:

USER: add a new /voice command that just returns 'hi gpt' so that message gets sent

ASSISTANT: To add a new command, we need to add a new method to the `Commands` class in the `aider/commands.py` file. The method should be named `cmd_voice` and it should return the string 'hi gpt'.

Here is the *edit block* for this change:

<source>python
aider/commands.py
<<<<<<< HEAD
    def cmd_help(self, args):
        "Show help about all commands"
        commands = sorted(self.get_commands())
        for cmd in commands:
            cmd_method_name = f"cmd_{cmd[1:]}"
            cmd_method = getattr(self, cmd_method_name, None)
            if cmd_method:
                description = cmd_method.__doc__
                self.io.tool_output(f"{cmd} {description}")
            else:
                self.io.tool_output(f"{cmd} No description available.")
=======
    def cmd_help(self, args):
        "Show help about all commands"
        commands = sorted(self.get_commands())
        for cmd in commands:
            cmd_method_name = f"cmd_{cmd[1:]}"
            cmd_method = getattr(self, cmd_method_name, None)
            if cmd_method:
                description = cmd_method.__doc__
                self.io.tool_output(f"{cmd} {description}")
            else:
                self.io.tool_output(f"{cmd} No description available.")

    def cmd_voice(self, args):
        "Respond with 'hi gpt'"
        return 'hi gpt'
>>>>>>> updated
</source>
2023-08-10 15:40:54 -03:00
Paul Gauthier
a1da6cab24 ensure we diff properly in all cases, with tests #191 2023-08-10 15:33:53 -03:00
Paul Gauthier
7924900bc4 updated tests, disabled send cache 2023-08-10 12:27:46 -03:00
Paul Gauthier
7eab7b54b8 Improved summarization split logic 2023-08-10 12:21:51 -03:00
Paul Gauthier
529079ec01 quote the HEAD 2023-08-09 18:51:11 -03:00
Paul Gauthier
fb80377d18 ORIGINAL/UPDATED -> HEAD/updated 2023-08-09 16:16:43 -03:00
Paul Gauthier
fa2da0ef70 bound the summarize() recursion 2023-08-09 12:04:10 -03:00
Paul Gauthier
73c4efea94 ssh 2023-08-09 12:00:37 -03:00
Paul Gauthier
9e64e7bb9d precise edit blocks prompting language 2023-08-09 11:57:00 -03:00
Paul Gauthier
2c53c153b8 Updated ORIGINAL prompting 2023-08-09 11:38:39 -03:00
Paul Gauthier
0aa2ff2cf9 roughed in cache; elide full dirnames from test results to make them deterministic 2023-08-09 11:30:13 -03:00
Paul Gauthier
00512e3d1c no fuzy matching, stronger prompt for whitespace 2023-08-09 08:25:49 -03:00
Paul Gauthier
c6f6ab6070 corrected perfect replace 2023-08-09 08:20:16 -03:00
Paul Gauthier
6c2cafc1ed Removed "pause often to ask the user" prompting 2023-08-08 17:40:45 -03:00
Paul Gauthier
77be993708 Merge branch 'main' into indent-bad-edit 2023-08-08 12:43:57 -03:00
Paul Gauthier
68a3e4f74d set version to 0.11.2-dev 2023-08-08 12:32:49 -03:00
Paul Gauthier
655f6aef2a version bump to 0.11.1 2023-08-08 12:32:25 -03:00
Paul Gauthier
f26e40d48e Skip non-files when building repomap #174 2023-08-08 12:02:40 -03:00
Paul Gauthier
486bcdb815 Merge remote-tracking branch 'origin/main' 2023-08-08 09:01:09 -03:00
Paul Gauthier
589e7eefea We always want diffs of working-dir + index versus repo #184 2023-08-08 09:00:19 -03:00
Joshua Vial
88d7e2ed09 disabling GIT_EDITOR when calling /git 2023-08-08 23:01:36 +12:00
Paul Gauthier
9cb1a9b186 cleanup 2023-08-08 07:38:37 -03:00
paul-gauthier
6a88d0f2b9
Merge pull request #177 from h0x91b/h0x91b-patch-1
Update base_coder.py
2023-08-08 07:37:51 -03:00
Paul Gauthier
3c0720ff1c Fix corner case of undefined text when using --no-pretty 2023-08-08 07:00:21 -03:00
Paul Gauthier
03ac5202dd Handle a pending summarization 2023-08-07 08:33:06 -03:00
Paul Gauthier
6f6ff03338 Merge branch 'main' into indent-bad-edit 2023-08-04 06:41:43 -03:00
Paul Gauthier
c271bfd932 Fixed /commit after repo refactor, added test coverage 2023-08-04 06:39:04 -03:00
Arseniy Pavlenko
aedd6ed8d0
Update base_coder.py
It fixes 2 exceptions on Azure GPT-4

1)
Traceback (most recent call last):
  File "/opt/homebrew/bin//aider", line 8, in <module>
    sys.exit(main())
  File "/opt/homebrew/lib/python3.10/site-packages/aider/main.py", line 523, in main
    coder.run()
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 339, in run
    new_user_message = self.run_loop()
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 423, in run_loop
    return self.send_new_user_message(inp)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 456, in send_new_user_message
    interrupted = self.send(messages, functions=self.functions)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 580, in send
    self.show_send_output_stream(completion)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 680, in show_send_output_stream
    sys.stdout.write(text)
UnboundLocalError: local variable 'text' referenced before assignment

2) 
Traceback (most recent call last):
  File "/opt/homebrew/bin//aider", line 8, in <module>
    sys.exit(main())
  File "/opt/homebrew/lib/python3.10/site-packages/aider/main.py", line 523, in main
    coder.run()
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 339, in run
    new_user_message = self.run_loop()
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 423, in run_loop
    return self.send_new_user_message(inp)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 456, in send_new_user_message
    interrupted = self.send(messages, functions=self.functions)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 580, in send
    self.show_send_output_stream(completion)
  File "/opt/homebrew/lib/python3.10/site-packages/aider/coders/base_coder.py", line 656, in show_send_output_stream
    if chunk.choices[0].finish_reason == "length":
IndexError: list index out of range
2023-08-03 23:37:44 +03:00
Paul Gauthier
8c401ceae7 cleanup 2023-08-03 16:30:38 -03:00
Paul Gauthier
5f7e1d8675 only add newline for non-empty blocks 2023-08-03 16:24:48 -03:00
Paul Gauthier
26ebc715eb works 2023-08-03 16:22:49 -03:00
Paul Gauthier
a0f03ab0ce regularize inputs 2023-08-03 15:39:46 -03:00
Paul Gauthier
a6c2841342 noop 2023-08-03 15:37:18 -03:00
Paul Gauthier
8456caae1d refac 2023-08-03 15:36:06 -03:00
Paul Gauthier
e60a332fda go for the full line match first 2023-08-03 14:59:59 -03:00
Paul Gauthier
004c0529c6 keepends 2023-08-03 14:56:29 -03:00
Paul Gauthier
390d7faec4 put back bailout logic 2023-08-03 14:49:20 -03:00
Paul Gauthier
c596ea543b cleanup 2023-08-03 14:24:54 -03:00
Paul Gauthier
2cd2ff6f02 Merge branch 'main' into indent-bad-edit 2023-08-03 14:18:53 -03:00
Paul Gauthier
3ef16827fc show a progress bar if there are on tags/idents caches 2023-08-03 12:07:53 -03:00
Paul Gauthier
c7358c96b9 wip 2023-08-03 09:44:31 -03:00
Paul Gauthier
f15b8c610b set version to 0.11.0-dev 2023-08-02 16:22:00 -03:00
Paul Gauthier
ce27820e9a version bump to 0.11.0 2023-08-02 16:21:39 -03:00
Paul Gauthier
1858f0504b Strip asterisks from filenames suggested by GPT-3.5 #157 #168 2023-08-02 06:58:59 -03:00
Paul Gauthier
d5a7aac560 include token/cost in log 2023-07-28 11:33:37 -03:00
Paul Gauthier
80d5c0b75c use 3.5 for summaries 2023-07-27 22:54:26 -03:00
Paul Gauthier
d1d498bb24 cleanup 2023-07-27 22:34:41 -03:00
Paul Gauthier
16dea76691 Merge branch 'main' into chat-history 2023-07-27 22:32:33 -03:00