mirror of
https://github.com/zhayujie/chatgpt-on-wechat.git
synced 2026-03-03 17:05:04 +08:00
71 lines
2.6 KiB
Python
71 lines
2.6 KiB
Python
"""
|
|
google voice service
|
|
"""
|
|
import json
|
|
|
|
import openai
|
|
|
|
from bridge.reply import Reply, ReplyType
|
|
from common.log import logger
|
|
from config import conf
|
|
from voice.voice import Voice
|
|
import requests
|
|
from common import const
|
|
import datetime, random
|
|
|
|
class OpenaiVoice(Voice):
|
|
def __init__(self):
|
|
openai.api_key = conf().get("open_ai_api_key")
|
|
|
|
def voiceToText(self, voice_file):
|
|
logger.debug("[Openai] voice file name={}".format(voice_file))
|
|
try:
|
|
file = open(voice_file, "rb")
|
|
api_base = conf().get("open_ai_api_base") or "https://api.openai.com/v1"
|
|
url = f'{api_base}/audio/transcriptions'
|
|
headers = {
|
|
'Authorization': 'Bearer ' + conf().get("open_ai_api_key"),
|
|
# 'Content-Type': 'multipart/form-data' # 加了会报错,不知道什么原因
|
|
}
|
|
files = {
|
|
"file": file,
|
|
}
|
|
data = {
|
|
"model": "whisper-1",
|
|
}
|
|
response = requests.post(url, headers=headers, files=files, data=data)
|
|
response_data = response.json()
|
|
text = response_data['text']
|
|
reply = Reply(ReplyType.TEXT, text)
|
|
logger.info("[Openai] voiceToText text={} voice file name={}".format(text, voice_file))
|
|
except Exception as e:
|
|
reply = Reply(ReplyType.ERROR, "我暂时还无法听清您的语音,请稍后再试吧~")
|
|
finally:
|
|
return reply
|
|
|
|
|
|
def textToVoice(self, text):
|
|
try:
|
|
api_base = conf().get("open_ai_api_base") or "https://api.openai.com/v1"
|
|
url = f'{api_base}/audio/speech'
|
|
headers = {
|
|
'Authorization': 'Bearer ' + conf().get("open_ai_api_key"),
|
|
'Content-Type': 'application/json'
|
|
}
|
|
data = {
|
|
'model': conf().get("text_to_voice_model") or const.TTS_1,
|
|
'input': text,
|
|
'voice': conf().get("tts_voice_id") or "alloy"
|
|
}
|
|
response = requests.post(url, headers=headers, json=data)
|
|
file_name = "tmp/" + datetime.datetime.now().strftime('%Y%m%d%H%M%S') + str(random.randint(0, 1000)) + ".mp3"
|
|
logger.debug(f"[OPENAI] text_to_Voice file_name={file_name}, input={text}")
|
|
with open(file_name, 'wb') as f:
|
|
f.write(response.content)
|
|
logger.info(f"[OPENAI] text_to_Voice success")
|
|
reply = Reply(ReplyType.VOICE, file_name)
|
|
except Exception as e:
|
|
logger.error(e)
|
|
reply = Reply(ReplyType.ERROR, "遇到了一点小问题,请稍后再问我吧")
|
|
return reply
|