Skip to content

Commit 14fed81

Browse files
committed
✨ Feature: Add the function of uploading original image Q&A.
💻 Code: Upgrade ModelMerge version to 0.6.6
1 parent a42131c commit 14fed81

File tree

3 files changed

+40
-80
lines changed

3 files changed

+40
-80
lines changed

bot.py

+39-53
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@
77
from md2tgmd import escape
88

99
from ModelMerge.utils.prompt import translator_en2zh_prompt, translator_prompt, claude3_doc_assistant_prompt
10-
from ModelMerge.utils.scripts import Document_extract, claude_replace
10+
from ModelMerge.utils.scripts import Document_extract, claude_replace, get_image_message
1111

1212
import config
1313
from config import (
@@ -24,7 +24,6 @@
2424
update_ENGINE,
2525
reset_ENGINE,
2626
get_robot,
27-
get_image_message,
2827
get_ENGINE,
2928
update_language_status,
3029
update_models_buttons,
@@ -89,16 +88,26 @@ def CutNICK(update_text, update_message):
8988
else:
9089
return None
9190

91+
async def get_file_url(file, context):
92+
file_id = file.file_id
93+
new_file = await context.bot.get_file(file_id)
94+
file_url = new_file.file_path
95+
return file_url
96+
9297
async def GetMesage(update_message, context):
9398
image_url = None
99+
file_url = None
94100
reply_to_message_text = None
101+
95102
chatid = update_message.chat_id
96103
message_thread_id = update_message.message_thread_id
97104
if message_thread_id:
98105
convo_id = str(chatid) + "_" + str(message_thread_id)
99106
else:
100107
convo_id = chatid
108+
101109
messageid = update_message.message_id
110+
102111
if update_message.text:
103112
message = CutNICK(update_message.text, update_message)
104113
rawtext = update_message.text
@@ -108,24 +117,31 @@ async def GetMesage(update_message, context):
108117

109118
if update_message.photo:
110119
photo = update_message.photo[-1]
111-
file_id = photo.file_id
112-
photo_file = await context.bot.getFile(file_id)
113-
image_url = photo_file.file_path
120+
121+
image_url = await get_file_url(photo, context)
114122

115123
message = rawtext = CutNICK(update_message.caption, update_message)
116-
return message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id
124+
125+
if update_message.document:
126+
file = update_message.document
127+
128+
file_url = await get_file_url(file, context)
129+
130+
message = rawtext = CutNICK(update_message.caption, update_message)
131+
132+
return message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id, file_url
117133

118134
async def GetMesageInfo(update, context):
119135
if update.edited_message:
120-
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id = await GetMesage(update.edited_message, context)
136+
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id, file_url = await GetMesage(update.edited_message, context)
121137
update_message = update.edited_message
122138
elif update.callback_query:
123-
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id = await GetMesage(update.callback_query.message, context)
139+
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id, file_url = await GetMesage(update.callback_query.message, context)
124140
update_message = update.callback_query.message
125141
else:
126-
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id = await GetMesage(update.message, context)
142+
message, rawtext, image_url, chatid, messageid, reply_to_message_text, message_thread_id, convo_id, file_url = await GetMesage(update.message, context)
127143
update_message = update.message
128-
return message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id
144+
return message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id, file_url
129145

130146
# 定义一个缓存来存储消息
131147
message_cache = defaultdict(lambda: [])
@@ -136,7 +152,7 @@ async def GetMesageInfo(update, context):
136152
async def command_bot(update, context, language=None, prompt=translator_prompt, title="", robot=None, has_command=True):
137153
stop_event.clear()
138154
print("update", update)
139-
message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id = await GetMesageInfo(update, context)
155+
message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id, file_url = await GetMesageInfo(update, context)
140156
print("\033[32m", update.effective_user.username, update.effective_user.id, rawtext, "\033[0m")
141157

142158
if has_command == False or len(context.args) > 0:
@@ -188,7 +204,7 @@ async def command_bot(update, context, language=None, prompt=translator_prompt,
188204

189205
if "gpt" in engine or (config.CLAUDE_API and "claude-3" in engine):
190206
message = [{"type": "text", "text": message}]
191-
message = get_image_message(image_url, message, convo_id)
207+
message = get_image_message(image_url, message, engine)
192208
await context.bot.send_chat_action(chat_id=chatid, message_thread_id=message_thread_id, action=ChatAction.TYPING)
193209
if Users.get_config(convo_id, "TITLE"):
194210
title = f"`🤖️ {engine}`\n\n"
@@ -219,7 +235,7 @@ async def delete_message(update, context, messageid, delay=60):
219235
@decorators.Authorization
220236
async def reset_chat(update, context):
221237
global target_convo_id
222-
_, _, _, chatid, _, _, _, message_thread_id, convo_id = await GetMesageInfo(update, context)
238+
_, _, _, chatid, _, _, _, message_thread_id, convo_id, file_url = await GetMesageInfo(update, context)
223239
target_convo_id = convo_id
224240
print("target_chatid", convo_id)
225241
stop_event.set()
@@ -322,7 +338,7 @@ async def getChatGPT(update, context, title, robot, message, chatid, messageid,
322338
@decorators.Authorization
323339
async def button_press(update, context):
324340
"""Function to handle the button press"""
325-
message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id = await GetMesageInfo(update, context)
341+
message, rawtext, image_url, chatid, messageid, reply_to_message_text, update_message, message_thread_id, convo_id, file_url = await GetMesageInfo(update, context)
326342
callback_query = update.callback_query
327343
print("callback_query chatid", chatid)
328344
info_message = update_info_message(convo_id)
@@ -429,55 +445,25 @@ async def button_press(update, context):
429445
@decorators.GroupAuthorization
430446
@decorators.Authorization
431447
async def info(update, context):
432-
_, _, _, chatid, _, _, _, message_thread_id, convo_id = await GetMesageInfo(update, context)
448+
_, _, _, chatid, _, _, _, message_thread_id, convo_id, file_url = await GetMesageInfo(update, context)
433449
info_message = update_info_message(convo_id)
434450
message = await context.bot.send_message(chat_id=chatid, message_thread_id=message_thread_id, text=escape(info_message), reply_markup=InlineKeyboardMarkup(update_first_buttons_message(convo_id)), parse_mode='MarkdownV2', disable_web_page_preview=True)
435451
await delete_message(update, context, message.message_id)
436452

437453
@decorators.GroupAuthorization
438454
@decorators.Authorization
439-
async def handle_pdf(update, context):
440-
# 获取接收到的文件
441-
pdf_file = update.message.document
442-
# 得到文件的url
443-
file_id = pdf_file.file_id
444-
new_file = await context.bot.get_file(file_id)
445-
file_url = new_file.file_path
446-
extracted_text_with_prompt = Document_extract(file_url)
455+
async def handle_file(update, context):
447456
robot, role = get_robot()
457+
_, _, image_url, chatid, _, messageid, update_message, message_thread_id, convo_id, file_url = await GetMesageInfo(update, context)
458+
engine = get_ENGINE(chatid)
448459

449-
_, _, _, chatid, _, _, _, message_thread_id, convo_id = await GetMesageInfo(update, context)
450-
robot.add_to_conversation(extracted_text_with_prompt, role, str(convo_id))
451-
engine = get_ENGINE(convo_id)
452-
if config.CLAUDE_API and "claude-3" in engine:
453-
robot.add_to_conversation(claude3_doc_assistant_prompt, "assistant", str(convo_id))
454-
message = (
455-
f"文档上传成功!\n\n"
456-
)
457-
message = await context.bot.send_message(chat_id=chatid, message_thread_id=message_thread_id, text=escape(message), parse_mode='MarkdownV2', disable_web_page_preview=True)
458-
await delete_message(update, context, message.message_id)
459-
460-
461-
@decorators.GroupAuthorization
462-
@decorators.Authorization
463-
async def handle_photo(update, context):
464-
_, _, _, chatid, _, messageid, update_message, message_thread_id, convo_id = await GetMesageInfo(update, context)
465-
466-
photo = update_message.photo[-1]
467-
file_id = photo.file_id
468-
photo_file = await context.bot.getFile(file_id)
469-
image_url = photo_file.file_path
470-
471-
robot, role = get_robot()
472-
message = get_image_message(image_url, [], convo_id)
460+
message = Document_extract(file_url, None, engine)
473461

474462
robot.add_to_conversation(message, role, str(convo_id))
475-
# if config.CLAUDE_API and "claude-3" in config.GPT_ENGINE:
476-
# robot.add_to_conversation(claude3_doc_assistant_prompt, "assistant", str(update.effective_chat.id))
477463
message = (
478-
f"图片上传成功\n\n"
464+
f"上传成功\n\n"
479465
)
480-
message = await context.bot.send_message(chat_id=chatid, text=escape(message), parse_mode='MarkdownV2', disable_web_page_preview=True)
466+
message = await context.bot.send_message(chat_id=chatid, message_thread_id=message_thread_id, text=escape(message), parse_mode='MarkdownV2', disable_web_page_preview=True)
481467
await delete_message(update, context, message.message_id)
482468

483469
# DEBOUNCE_TIME = 4
@@ -596,10 +582,10 @@ async def process_update(update):
596582
application.add_handler(CommandHandler("zh2en", lambda update, context: command_bot(update, context, "english", robot=config.translate_bot)))
597583
application.add_handler(CommandHandler("info", info))
598584
application.add_handler(InlineQueryHandler(inlinequery))
599-
application.add_handler(MessageHandler(filters.Document.PDF | filters.Document.TXT | filters.Document.DOC, handle_pdf))
585+
application.add_handler(MessageHandler(filters.Document.PDF | filters.Document.TXT | filters.Document.DOC | filters.Document.FileExtension("jpg") | filters.Document.FileExtension("jpeg"), handle_file))
600586
application.add_handler(MessageHandler(filters.TEXT & ~filters.COMMAND, lambda update, context: command_bot(update, context, prompt=None, has_command=False), block = False))
601587
application.add_handler(MessageHandler(filters.CAPTION & filters.PHOTO & ~filters.COMMAND, lambda update, context: command_bot(update, context, prompt=None, has_command=False)))
602-
application.add_handler(MessageHandler(~filters.CAPTION & filters.PHOTO & ~filters.COMMAND, handle_photo))
588+
application.add_handler(MessageHandler(~filters.CAPTION & filters.PHOTO & ~filters.COMMAND, handle_file))
603589
application.add_handler(MessageHandler(filters.COMMAND, unknown))
604590
application.add_error_handler(error)
605591

config.py

-26
Original file line numberDiff line numberDiff line change
@@ -221,32 +221,6 @@ def get_robot(chat_id = None):
221221

222222
return robot, role
223223

224-
def get_image_message(image_url, message, chatid = None):
225-
engine = get_ENGINE(chatid)
226-
if image_url:
227-
base64_image = get_encode_image(image_url)
228-
if "gpt-4" in engine or (CLAUDE_API is None and "claude-3" in engine):
229-
message.append(
230-
{
231-
"type": "image_url",
232-
"image_url": {
233-
"url": base64_image
234-
}
235-
}
236-
)
237-
if CLAUDE_API and "claude-3" in engine:
238-
message.append(
239-
{
240-
"type": "image",
241-
"source": {
242-
"type": "base64",
243-
"media_type": "image/jpeg",
244-
"data": base64_image.split(",")[1],
245-
}
246-
}
247-
)
248-
return message
249-
250224
whitelist = os.environ.get('whitelist', None)
251225
if whitelist:
252226
whitelist = [int(id) for id in whitelist.split(",")]

requirements.txt

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
--index-url https://pypi.python.org/simple/
22
python-dotenv
33
md2tgmd==0.2.2
4-
ModelMerge==0.6.3
4+
ModelMerge==0.6.6
55
python-telegram-bot[webhooks,rate-limiter]==21.0.1

0 commit comments

Comments
 (0)