File size: 1,704 Bytes
77eb34e
 
 
29b313e
 
 
 
 
77eb34e
 
 
 
 
 
 
 
 
 
 
 
29b313e
 
 
 
 
 
77eb34e
29b313e
77eb34e
29b313e
77eb34e
29b313e
 
77eb34e
29b313e
 
 
 
77eb34e
29b313e
 
 
 
77eb34e
29b313e
 
 
 
 
77eb34e
29b313e
77eb34e
 
29b313e
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from chatbot.agents.graphs.food_similarity_graph import food_similarity_graph
import logging

# --- Cấu hình logging ---
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)

# --- Định nghĩa request body ---
class Request(BaseModel):
    user_id: str
    food_old: dict

# --- Tạo router ---
router = APIRouter(
    prefix="/food-replace",
    tags=["Food Replace"]
)

try:
    replace_app = food_similarity_graph()
except Exception as e:
    logger.error(f"❌ Failed to compile Food Graph: {e}")
    raise e

@router.post("/")
def replace_food(request: Request):
    try:
        logger.info(f"Nhận được yêu cầu thay thế món từ user: {request.user_id}")
        
        food_data = request.food_old.copy()
        bounds = food_data.get("solver_bounds")
        
        if bounds and isinstance(bounds, list):
            food_data["solver_bounds"] = tuple(bounds)
        elif not bounds:
            food_data["solver_bounds"] = (0.5, 2.0)

        initial_state = {
            "user_id": request.user_id,
            "food_old": food_data,
        }

        final_state = replace_app.invoke(initial_state)
        response = {"best_replacement": final_state["best_replacement"]}
        
        if not response:
            return {"status": "failed", "response": []}

        return {"status": "success", "response": response}

    except Exception as e:
        logger.error(f"Lỗi xử lý thay thế món: {e}", exc_info=True)
        raise HTTPException(status_code=500, detail=f"Lỗi hệ thống: {str(e)}")