mogmol
@mogmol (mogmol)

Are you sure you want to delete the question?

Leaving a resolved question undeleted may help others!

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

No Answers yet.

Your answer might help someone💌