可愛すぎかよ! ハッカーの新しい相棒 コマンドラインからLLMを使えるgptme
こういうのが欲しかったんだよ。マジで。
コマンドラインからLLMを呼び出せるgptmeというツールがアツい
これは、gptmeコマンドを追加するというもの。
環境変数としてOPENAI_API_KEYとかAnthropicのキーとかを設定しておくと勝手にAPIを呼び出してくれる。もちろん、クラウドに送信するとかけしからんという勢にはローカルLLMでも対応できる。
こいつはコマンドライン版ChatGPTのようなものなので、コマンドラインで動くのだが、その真価は例えばパイプで繋いだ時とかに発揮される。
$ du -d 1|gptme "一番容量を食ってるフォル ダは何Gバイト使ってんの?"
Found OpenAI API key, using OpenAI provider
[10:13:32] No model specified, using recommended model for provider: gpt-4o
Using logdir /Users/shi3z/Library/Application
Support/gptme/logs/2024-10-05-singing-pink-unicorn
Using workspace at /Users/shi3z
System:
```stdin
11000 ./v1
64 ./.config
51344 ./Music
3031336 ./.cursor
8 ./insta360
30720 ./chromedriver-mac-arm64
28168 ./.docker
26152 ./nltk_data
90040 ./xlsからpptx
298528 ./.haystack-editor
0 ./.plastic4
0 ./.thumbnails
3291128 ./Creative Cloud Files Personal Account [email protected] 06A2759650641
0 ./aiderdemo
8101112 ./ardemo
757408 ./.local
23679880 ./projects
1773446968 ./Pictures
2020696 ./.bun
3646496 ./My project
73400 ./junk
1544 ./.ipython
228673024 ./Library
672 ./.matplotlib
296 ./.sonic-pi
2522840 ./My project (1)
75248 ./.quicklisp
3096280 ./esp32
304336 ./.cargo
3972960 ./.espressif
8 ./.cups
32 ./.bash_sessions
48616 ./.wdm
0 ./Public
3512 ./AI
2387104 ./.rustup
104 ./.ssh
2864490672 ./Movies
4264 ./Applications
47312 ./.opennsfw2
9384 ./.degit
8 ./.ipynb_checkpoints
8 ./.jupyter
8 ./.keras
0 ./.aider
1088456 ./.npm
582072 ./chrome-mac-arm64
16060168 ./.pyenv
2082440 ./.vscode
1528 ./.cursor-tutor
1230280 ./.insightface
695352704 ./iCloud Drive(アーカイブ)
0 ./.swiftpm
696760 ./data
640757360 ./Downloads
253655720 ./.cache
8 ./.ndi
90107200 ./.ollama
856 ./.zsh_sessions
564955584 ./git
8 ./.conda
3488 ./.slime
24165008 ./miniconda3
7215461224 .
```
Skipped 1 hidden system messages, show with --show-hidden
--- ^^^ past messages ^^^ ---
User: 一番容量を食ってるフォル ダは何Gバイト使ってんの?
Assistant: 一番容量を食っているフォルダは `Movies` で、容量は 2,864,490,672 バイトです。これをギガバイトに換算すると、約 2,664.5 GB です。
User:
プログラムの改造も簡単に命令できる。リダイレクトを使えばいい。
$ cat recog.py|gptme transcribeの時間を計測して表示しろ
Found OpenAI API key, using OpenAI provider
[10:13:24] No model specified, using recommended model for provider: gpt-4o
Using logdir /Users/shi3z/Library/Application
Support/gptme/logs/2024-10-05-jumping-sad-robot
Using workspace at /Users/shi3z/projects/speech
System:
```stdin
import pyaudio
import numpy as np
import mlx_whisper
# 音声キャプチャの設定
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024*2 # 5秒間の音声をキャプチャ
# PyAudioの初期化
audio = pyaudio.PyAudio()
# ストリームの開始
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
try:
buffer=[]
print("開始")
while True:
# 音声データを取得
try:
data = stream.read(CHUNK, exception_on_overflow=False)
data = np.frombuffer(data, dtype=np.int16)/32768.0
buffer.append(data)
if len(buffer)>30:
data = np.array(buffer)
# NumPy配列に変換
audio_data = data.reshape(data.shape[0]*data.shape[1])
print("認識中")
print(audio_data)
# 音声データを転写
result = mlx_whisper.transcribe(audio_data,language="ja",
path_or_hf_repo="mlx-community/whisper-large-v3
print(result['text'])
buffer=[]
print("音声データ収集中")
except Exception as e:
print(e)
pass
except KeyboardInterrupt:
print("音声認識を終了します。")
finally:
# ストリームの停止と終了
stream.stop_stream()
stream.close()
audio.terminate()
```
Skipped 1 hidden system messages, show with --show-hidden
--- ^^^ past messages ^^^ ---
User:
transcribeの時間を計測して表示
しろ
Assistant: To measure and display the time taken for the `transcribe` function, we can use the `time` module in Python. We'll record the time just before calling the `transcribe` function and then again immediately after it returns. The difference will give us the duration of the transcription process.
Let's modify the code to include this timing functionality:
```python
import pyaudio
import numpy as np
import mlx_whisper
import time # Import the time module
# 音声キャプチャの設定
FORMAT = pyaudio.paInt16
CHANNELS = 1
RATE = 16000
CHUNK = 1024*2 # 5秒間の音声をキャプチャ
# PyAudioの初期化
audio = pyaudio.PyAudio()
# ストリームの開始
stream = audio.open(format=FORMAT,
channels=CHANNELS,
rate=RATE,
input=True,
frames_per_buffer=CHUNK)
try:
buffer=[]
print("開始")
while True:
# 音声データを取得
try:
data = stream.read(CHUNK, exception_on_overflow=False)
data = np.frombuffer(data, dtype=np.int16)/32768.0
buffer.append(data)
if len(buffer)>30:
data = np.array(buffer)
# NumPy配列に変換
audio_data = data.reshape(data.shape[0]*data.shape[1])
print("認識中")
print(audio_data)
# Measure the time taken for transcription
start_time = time.time() # Start time
result = mlx_whisper.transcribe(audio_data, language="ja",
path_or_hf_repo="mlx-community/whisper-large-v3-turbo")
end_time = time.time() # End time
# Calculate and print the duration
duration = end_time - start_time
print(f"Transcription took {duration:.2f} seconds")
print(result['text'])
buffer=[]
print("音声データ収集中")
except Exception as e:
print(e)
pass
except KeyboardInterrupt:
print("音声認識を終了します。")
finally:
# ストリームの停止と終了
stream.stop_stream()
stream.close()
audio.terminate()
```
This code will now print the time taken for each transcription in seconds.
すると音声認識の時間が表示される。
認識中
[-0.01153564 -0.00827026 -0.00796509 ... 0.00320435 0.01583862
0.01443481]
こんにちは、お疲れ様です。
Transcription time: 0.44 seconds
さすがM2 Max。音声認識も速い。
gptme、嬉しすぎる。頼りになる相棒。にくいあんちくししょう。
ログインできる全ての環境に入れておきたい。ラズパイでも動くし。そこが凄いよなあ