mirror of
https://github.com/cdryzun/tg_bot_collections.git
synced 2025-04-29 00:27:09 +08:00
feat: chatgpt photo stream
This commit is contained in:
parent
16735551c0
commit
394dc8df99
@ -174,26 +174,19 @@ def chatgpt_pro_handler(message: Message, bot: TeleBot) -> None:
|
||||
return
|
||||
|
||||
|
||||
def _image_to_data_uri(file_path):
|
||||
with open(file_path, "rb") as image_file:
|
||||
encoded_image = base64.b64encode(image_file.read()).decode("utf-8")
|
||||
return f"data:image/png;base64,{encoded_image}"
|
||||
|
||||
|
||||
def chatgpt_photo_handler(message: Message, bot: TeleBot) -> None:
|
||||
s = message.caption
|
||||
reply_message = bot.reply_to(
|
||||
message,
|
||||
"Generating chatgpt vision answer please wait.",
|
||||
)
|
||||
prompt = s.strip()
|
||||
reply_id = bot_reply_first(message, "ChatGPT Vision", bot)
|
||||
# get the high quaility picture.
|
||||
max_size_photo = max(message.photo, key=lambda p: p.file_size)
|
||||
file_path = bot.get_file(max_size_photo.file_id).file_path
|
||||
downloaded_file = bot.download_file(file_path)
|
||||
with open("chatgpt_temp.jpg", "wb") as temp_file:
|
||||
temp_file.write(downloaded_file)
|
||||
|
||||
with open("chatgpt_temp.jpg", "rb") as image_file:
|
||||
image_data = image_file.read()
|
||||
base64_image_data = base64.b64encode(image_data).decode("utf-8")
|
||||
try:
|
||||
r = client.chat.completions.create(
|
||||
max_tokens=1024,
|
||||
@ -205,28 +198,54 @@ def chatgpt_photo_handler(message: Message, bot: TeleBot) -> None:
|
||||
{
|
||||
"type": "image_url",
|
||||
"image_url": {
|
||||
"url": _image_to_data_uri("chatgpt_temp.jpg")
|
||||
"url": f"data:image/jpeg;base64,{base64_image_data}"
|
||||
},
|
||||
},
|
||||
],
|
||||
}
|
||||
],
|
||||
model=CHATGPT_PRO_MODEL,
|
||||
stream=True,
|
||||
)
|
||||
bot.reply_to(
|
||||
message,
|
||||
"ChatGPT vision answer:\n"
|
||||
+ r.choices[0].message.content.encode("utf8").decode(),
|
||||
)
|
||||
except Exception as e:
|
||||
print(e)
|
||||
bot.reply_to(
|
||||
message,
|
||||
"ChatGPT vision answer:\n" + "chatgpt vision answer wrong",
|
||||
s = "ChatGPT Vision answer:\n"
|
||||
start = time.time()
|
||||
for chunk in r:
|
||||
if chunk.choices[0].delta.content is None:
|
||||
break
|
||||
s += chunk.choices[0].delta.content
|
||||
|
||||
if time.time() - start > 1.7:
|
||||
start = time.time()
|
||||
try:
|
||||
bot.edit_message_text(
|
||||
message_id=reply_id.message_id,
|
||||
chat_id=reply_id.chat.id,
|
||||
text=convert(s),
|
||||
parse_mode="MarkdownV2",
|
||||
)
|
||||
finally:
|
||||
bot.delete_message(reply_message.chat.id, reply_message.message_id)
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
try:
|
||||
# maybe not complete
|
||||
# maybe the same message
|
||||
bot.edit_message_text(
|
||||
message_id=reply_id.message_id,
|
||||
chat_id=reply_id.chat.id,
|
||||
text=convert(s),
|
||||
parse_mode="MarkdownV2",
|
||||
)
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
return
|
||||
|
||||
except Exception as e:
|
||||
print(str(e))
|
||||
bot.reply_to(
|
||||
message,
|
||||
"ChatGPT Vision answer:\n" + "ChatGPT Vision answer timeout",
|
||||
parse_mode="MarkdownV2",
|
||||
)
|
||||
return
|
||||
|
||||
|
||||
def register(bot: TeleBot) -> None:
|
||||
|
Loading…
x
Reference in New Issue
Block a user