blob: 3cc6c147ce4a89431bf0311bd73e0843f4c5f34e [file]
"""Message handler for processing travel task requests"""
import json
import logging
from common.model.models import MessagePayload, AgentRole
from travel_agent.bailian.bailian_service import generate_travel_itinerary_streaming
from travel_agent.config.config import DEFAULT_DATE_INFO, DEFAULT_WEATHER_INFO
from travel_agent.rocketmq.mq_service import send_message
logger = logging.getLogger(__name__)
def handle_message(payload: MessagePayload) -> None:
"""
Process travel task message and send back the result using streaming.
Extracts request, date, and weather_info from payload, calls Bailian AI to generate
a weather-aware travel itinerary with streaming output.
Args:
payload: Message payload containing travel task details with weather information
"""
try:
# Parse message content
data = json.loads(payload.content)
request = data.get("request", "")
date_info = data.get("date", DEFAULT_DATE_INFO)
weather_info = data.get("weather_info", DEFAULT_WEATHER_INFO)
logger.info(f"Processing travel request - TraceID: {payload.trace_id}")
logger.info(f"Date: {date_info}, Weather info length: {len(weather_info)} chars")
# Generate weather-aware travel itinerary using Bailian AI with streaming
generate_travel_itinerary_streaming(request, date_info, weather_info, payload)
logger.info(f"Travel itinerary streaming completed for trace_id: {payload.trace_id}")
except Exception as e:
logger.error(f"Error processing travel request: {e}", exc_info=True)
# Send error response
error_payload = MessagePayload(
trace_id=payload.trace_id,
role=AgentRole.TRAVEL,
content=f"Processing failed: {str(e)}",
bind_topic=None,
lite_topic=None,
metadata={"chunk_index": 0, "is_final": True, "error": True}
)
send_message(payload.bind_topic, error_payload, payload.lite_topic)