Socketを使ったWhisperAPIでエラー
解決したいこと
Socketを利用してWhisperのAPIを利用したい。
開発の経緯
マイコンでマイクを接続してWhisperを利用するアプリを作っています。
Whisperの処理には時間が掛かる為、ローカルモデルではなく、APIを使おうと考えています。
また今回使うSDKの都合上、pysocksライブラリを利用して通信を行います。
該当するソースコード
## Socket version ############################################################
import requests
import json
import os
import base64
# API key
with open('OPENAI_API_KEY', 'rb') as f:
OPENAI_API_KEY = json.load(f)['key'][0]
# API URL
url = "https://api.openai.com//v1/audio/translations"
# Proxy
proxy = os.environ.get("HTTPS_PROXY")
# Audio file
with open("sample.mp3", "rb") as f:
audio = f.read()
audio_base64 = base64.b64encode(audio).decode("utf-8")
# Request
headers = {
"Content-Type": "application/json",
"Authorization": f"Bearer {OPENAI_API_KEY}"
}
data = {
"model": "whisper-1",
"audio": audio_base64,
"type": "transcription",
}
response = requests.post(
url = url,
headers=headers,
json=data,
proxies={'https': proxy}
)
# Output the result
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
発生している問題・エラー
{
"error": {
"message": "1 validation error for Request\nbody -> file\n field required (type=value_error.missing)",
"type": "invalid_request_error",
"param": null,
"code": null
}
}
どなたか解決方法を教えてください
私にはこのエラーを修正することが出来ませんでした。
どなたか解決方法を知っている方がいらっしゃれば、教えていただきたいです。
自分で試したこと
Content-Typeでmultipart formを利用しようともしてみましたが、上手くいきませんでした。
GPT3.5でも試してみる
import requests
import json
import os
# API Key
with open('OPENAI_API_KEY', 'rb') as f:
OPENAI_API_KEY = json.load(f)['key'][0]
# API URL
url = "https://api.openai.com/v1/chat/completions"
# Proxy
proxy = os.environ.get("HTTPS_PROXY")
# Request
headers = {
'Content-Type': 'application/json',
'Authorization': f'Bearer {OPENAI_API_KEY}'
}
data = {
"model": "gpt-3.5-turbo",
"messages": [
{"role": "user", "content": "Say this is a test!"},
],
"temperature": 0.7
}
response = requests.post(
url=url,
headers=headers,
json=data,
proxies={'https': proxy}
)
# Output the result
result = response.json()
print(json.dumps(result, indent=2, ensure_ascii=False))
こちらは上手くいきました。
・・・
"choices": [
{
"message": {
"role": "assistant",
"content": "This is a test!"
},
"finish_reason": "stop",
"index": 0
}
]
・・・
0