Spaces:
Runtime error
Runtime error
Update main.py
Browse files
main.py
CHANGED
|
@@ -92,28 +92,34 @@ def handle_text_message(event):
|
|
| 92 |
if user_states[user_id]["is_ready"]:
|
| 93 |
prompt = (
|
| 94 |
f"我提供了三件上衣圖片和三件下半身圖片。請根據這些衣服,為我推薦一個適合「{text}」的穿搭建議,並詳細描述你推薦的上衣與下衣組合。請以繁體中文回答。"
|
|
|
|
|
|
|
| 95 |
)
|
| 96 |
|
| 97 |
all_images = user_states[user_id]["upper_body_images"] + user_states[user_id]["lower_body_images"]
|
| 98 |
|
| 99 |
# 準備要回覆的訊息列表
|
| 100 |
messages_to_send = [
|
| 101 |
-
TextSendMessage(text="
|
| 102 |
]
|
| 103 |
|
| 104 |
-
#
|
| 105 |
-
|
| 106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
f"https://placehold.co/1024x1024?text=Upper_Body_{i+1}" for i in range(MAX_IMAGES_PER_TYPE)
|
| 108 |
-
]
|
|
|
|
| 109 |
f"https://placehold.co/1024x1024?text=Lower_Body_{i+1}" for i in range(MAX_IMAGES_PER_TYPE)
|
| 110 |
]
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
-
|
| 115 |
-
|
| 116 |
-
for url in placeholder_image_urls:
|
| 117 |
messages_to_send.append(ImageSendMessage(original_content_url=url, preview_image_url=url))
|
| 118 |
|
| 119 |
line_bot_api.push_message(
|
|
@@ -123,10 +129,27 @@ def handle_text_message(event):
|
|
| 123 |
|
| 124 |
response_text = get_gemini_response(prompt, all_images)
|
| 125 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 126 |
line_bot_api.push_message(
|
| 127 |
user_id,
|
| 128 |
-
TextSendMessage(text=
|
| 129 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
# 重置狀態以便下一次使用
|
| 131 |
user_states[user_id] = defaultdict(lambda: {"upper_body_images": [], "lower_body_images": [], "current_mode": None, "is_ready": False})[user_id]
|
| 132 |
return
|
|
|
|
| 92 |
if user_states[user_id]["is_ready"]:
|
| 93 |
prompt = (
|
| 94 |
f"我提供了三件上衣圖片和三件下半身圖片。請根據這些衣服,為我推薦一個適合「{text}」的穿搭建議,並詳細描述你推薦的上衣與下衣組合。請以繁體中文回答。"
|
| 95 |
+
"請在描述中以圖片連結的形式(例如:'https://example.com/outfit1.jpg')顯示你搭配好的衣物組合。"
|
| 96 |
+
"請將圖片連結放在一個新行,並使用 markdown 語法。"
|
| 97 |
)
|
| 98 |
|
| 99 |
all_images = user_states[user_id]["upper_body_images"] + user_states[user_id]["lower_body_images"]
|
| 100 |
|
| 101 |
# 準備要回覆的訊息列表
|
| 102 |
messages_to_send = [
|
| 103 |
+
TextSendMessage(text="已收到場合資訊,正在為您生成穿搭建議... 請稍候。")
|
| 104 |
]
|
| 105 |
|
| 106 |
+
# 在這裡顯示使用者上傳的原始圖片
|
| 107 |
+
messages_to_send.append(
|
| 108 |
+
TextSendMessage(text="這是您上傳的所有衣物:")
|
| 109 |
+
)
|
| 110 |
+
|
| 111 |
+
# 使用一個佔位符來顯示所有上傳的圖片
|
| 112 |
+
upper_placeholders = [
|
| 113 |
f"https://placehold.co/1024x1024?text=Upper_Body_{i+1}" for i in range(MAX_IMAGES_PER_TYPE)
|
| 114 |
+
]
|
| 115 |
+
lower_placeholders = [
|
| 116 |
f"https://placehold.co/1024x1024?text=Lower_Body_{i+1}" for i in range(MAX_IMAGES_PER_TYPE)
|
| 117 |
]
|
| 118 |
+
|
| 119 |
+
for url in upper_placeholders:
|
| 120 |
+
messages_to_send.append(ImageSendMessage(original_content_url=url, preview_image_url=url))
|
| 121 |
+
|
| 122 |
+
for url in lower_placeholders:
|
|
|
|
| 123 |
messages_to_send.append(ImageSendMessage(original_content_url=url, preview_image_url=url))
|
| 124 |
|
| 125 |
line_bot_api.push_message(
|
|
|
|
| 129 |
|
| 130 |
response_text = get_gemini_response(prompt, all_images)
|
| 131 |
|
| 132 |
+
# 解析 Gemini 的回應,將圖片 URL 和文字分開
|
| 133 |
+
lines = response_text.split('\n')
|
| 134 |
+
gemini_messages = []
|
| 135 |
+
for line in lines:
|
| 136 |
+
if line.startswith('http'):
|
| 137 |
+
# 這是圖片 URL,將其轉為 ImageSendMessage
|
| 138 |
+
gemini_messages.append(ImageSendMessage(original_content_url=line, preview_image_url=line))
|
| 139 |
+
else:
|
| 140 |
+
# 這是文字,將其轉為 TextSendMessage
|
| 141 |
+
gemini_messages.append(TextSendMessage(text=line))
|
| 142 |
+
|
| 143 |
line_bot_api.push_message(
|
| 144 |
user_id,
|
| 145 |
+
TextSendMessage(text="這是為您推薦的搭配:")
|
| 146 |
)
|
| 147 |
+
|
| 148 |
+
line_bot_api.push_message(
|
| 149 |
+
user_id,
|
| 150 |
+
gemini_messages
|
| 151 |
+
)
|
| 152 |
+
|
| 153 |
# 重置狀態以便下一次使用
|
| 154 |
user_states[user_id] = defaultdict(lambda: {"upper_body_images": [], "lower_body_images": [], "current_mode": None, "is_ready": False})[user_id]
|
| 155 |
return
|