回调逻辑修改
This commit is contained in:
@@ -81,7 +81,7 @@ class LCAgent(ls.LitAPI):
|
|||||||
user_id=request.user_id,
|
user_id=request.user_id,
|
||||||
gender=request.gender,
|
gender=request.gender,
|
||||||
callback_url=request.callback_url)
|
callback_url=request.callback_url)
|
||||||
logger.info("\n--- Final Recommendation Results ---")
|
logger.info("--- Final Recommendation Results ---")
|
||||||
for i, path in enumerate(recommendation_results.get("successful_outfits", [])):
|
for i, path in enumerate(recommendation_results.get("successful_outfits", [])):
|
||||||
logger.info(f"✅ Outfit {i + 1} saved to: {path}")
|
logger.info(f"✅ Outfit {i + 1} saved to: {path}")
|
||||||
for failed in recommendation_results.get("failed_outfits", []):
|
for failed in recommendation_results.get("failed_outfits", []):
|
||||||
|
|||||||
@@ -282,6 +282,14 @@ class AsyncStylistAgent:
|
|||||||
logger.info(response_data)
|
logger.info(response_data)
|
||||||
item_id = ""
|
item_id = ""
|
||||||
item_category = ""
|
item_category = ""
|
||||||
|
headers = {
|
||||||
|
'Accept': "*/*",
|
||||||
|
'Accept-Encoding': "gzip, deflate, br",
|
||||||
|
'User-Agent': "PostmanRuntime-ApipostRuntime/1.1.0",
|
||||||
|
'Connection': "keep-alive",
|
||||||
|
'Content-Type': "application/json"
|
||||||
|
}
|
||||||
|
url = f'{callback_url}/api/style/callback'
|
||||||
while True:
|
while True:
|
||||||
# 1. 准备用户输入(上下文)
|
# 1. 准备用户输入(上下文)
|
||||||
user_input = self._build_user_input()
|
user_input = self._build_user_input()
|
||||||
@@ -292,12 +300,15 @@ class AsyncStylistAgent:
|
|||||||
response_data['path'] = minio_path
|
response_data['path'] = minio_path
|
||||||
if item_id:
|
if item_id:
|
||||||
response_data['items'].append({"item_id": item_id, "category": item_category})
|
response_data['items'].append({"item_id": item_id, "category": item_category})
|
||||||
|
|
||||||
if not gemini_data:
|
if not gemini_data:
|
||||||
# if gemini_data:
|
# if gemini_data:
|
||||||
print("🚨 Agent 返回无效响应,终止流程。")
|
print("🚨 Agent 返回无效响应,终止流程。")
|
||||||
self.stop_reason = "Agent failed to return response"
|
self.stop_reason = "Agent failed to return response"
|
||||||
response_data['status'] = "failed"
|
response_data['status'] = "failed"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
break
|
break
|
||||||
|
|
||||||
# 3. 检查终止条件
|
# 3. 检查终止条件
|
||||||
@@ -306,6 +317,8 @@ class AsyncStylistAgent:
|
|||||||
self.stop_reason = "Finish reason: " + gemini_data.get('reason', 'No reason provided')
|
self.stop_reason = "Finish reason: " + gemini_data.get('reason', 'No reason provided')
|
||||||
response_data['status'] = "stop"
|
response_data['status'] = "stop"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
break
|
break
|
||||||
|
|
||||||
# 4. 处理推荐单品
|
# 4. 处理推荐单品
|
||||||
@@ -320,6 +333,8 @@ class AsyncStylistAgent:
|
|||||||
# 这里简化为跳过本次循环
|
# 这里简化为跳过本次循环
|
||||||
response_data['status'] = "continue"
|
response_data['status'] = "continue"
|
||||||
response_data['message'] = f"❌ Agent 推荐了无效类别: {category}。要求 Agent 重新输出。",
|
response_data['message'] = f"❌ Agent 推荐了无效类别: {category}。要求 Agent 重新输出。",
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
continue
|
continue
|
||||||
|
|
||||||
# 4b. 在本地 DB 中查询单品
|
# 4b. 在本地 DB 中查询单品
|
||||||
@@ -338,6 +353,8 @@ class AsyncStylistAgent:
|
|||||||
self.stop_reason = "Finish reason: Duplicate item selected."
|
self.stop_reason = "Finish reason: Duplicate item selected."
|
||||||
response_data['status'] = "stop"
|
response_data['status'] = "stop"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
break
|
break
|
||||||
|
|
||||||
if new_item['item_id'] == "ELG383":
|
if new_item['item_id'] == "ELG383":
|
||||||
@@ -345,17 +362,23 @@ class AsyncStylistAgent:
|
|||||||
self.stop_reason = "Finish reason: ELG383 is seleced repeatly."
|
self.stop_reason = "Finish reason: ELG383 is seleced repeatly."
|
||||||
response_data['status'] = "stop"
|
response_data['status'] = "stop"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
break
|
break
|
||||||
|
|
||||||
self.outfit_items.append(new_item)
|
self.outfit_items.append(new_item)
|
||||||
# print(f"➕ 成功添加单品: {new_item['category']} ({new_item['item_id']}). 当前搭配数量: {len(self.outfit_items)}")
|
# print(f"➕ 成功添加单品: {new_item['category']} ({new_item['item_id']}). 当前搭配数量: {len(self.outfit_items)}")
|
||||||
response_data['status'] = "ok"
|
response_data['status'] = "ok"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
else:
|
else:
|
||||||
print("⚠️ 未找到匹配单品,无法继续搭配。终止。")
|
print("⚠️ 未找到匹配单品,无法继续搭配。终止。")
|
||||||
self.stop_reason = "Finish reason: No matching item found in local database."
|
self.stop_reason = "Finish reason: No matching item found in local database."
|
||||||
response_data['status'] = "stop"
|
response_data['status'] = "stop"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
break
|
break
|
||||||
|
|
||||||
if len(self.outfit_items) >= self.max_len: # 设置一个最大循环限制,防止无限循环
|
if len(self.outfit_items) >= self.max_len: # 设置一个最大循环限制,防止无限循环
|
||||||
@@ -363,19 +386,9 @@ class AsyncStylistAgent:
|
|||||||
self.stop_reason = "Finish reason: Reached max outfit length."
|
self.stop_reason = "Finish reason: Reached max outfit length."
|
||||||
response_data['status'] = "stop"
|
response_data['status'] = "stop"
|
||||||
response_data['message'] = self.stop_reason
|
response_data['message'] = self.stop_reason
|
||||||
break
|
|
||||||
|
|
||||||
logger.info(f"request data :{response_data}")
|
|
||||||
headers = {
|
|
||||||
'Accept': "*/*",
|
|
||||||
'Accept-Encoding': "gzip, deflate, br",
|
|
||||||
'User-Agent': "PostmanRuntime-ApipostRuntime/1.1.0",
|
|
||||||
'Connection': "keep-alive",
|
|
||||||
'Content-Type': "application/json"
|
|
||||||
}
|
|
||||||
url = f'{callback_url}/api/style/callback'
|
|
||||||
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
response = post_request(url=url, data=json.dumps(response_data), headers=headers)
|
||||||
logger.info(f"JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
logger.info(f"request data :{response_data} | JAVA callback info -> status:{response.status_code} | message:{response.text}")
|
||||||
|
break
|
||||||
return response_data
|
return response_data
|
||||||
|
|
||||||
def _upload_to_gcs(self, bucket_name: str, blob_name: str, mime_type, image_bytes) -> str:
|
def _upload_to_gcs(self, bucket_name: str, blob_name: str, mime_type, image_bytes) -> str:
|
||||||
|
|||||||
Reference in New Issue
Block a user