Spaces:
Running
Running
File size: 2,172 Bytes
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 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
from fastapi import APIRouter, HTTPException
from pydantic import BaseModel
from langchain_core.documents import Document
from langchain_elasticsearch import ElasticsearchStore
from chatbot.config import ELASTIC_CLOUD_URL, ELASTIC_API_KEY, FOOD_DB_INDEX
from chatbot.models.embeddings import embeddings
import logging
# --- Cấu hình logging ---
logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)
# --- Định nghĩa request body ---
class FoodItemPayload(BaseModel):
text_for_embedding: str
metadata: dict
# --- Tạo router ---
router = APIRouter(
prefix="/manage-food",
tags=["Food Management (CRUD)"]
)
try:
es_store = ElasticsearchStore(
es_url=ELASTIC_CLOUD_URL,
es_api_key=ELASTIC_API_KEY,
index_name=FOOD_DB_INDEX,
embedding=embeddings,
)
logger.info("✅ Connected to Elasticsearch for Management.")
except Exception as e:
logger.error(f"❌ Failed to connect to Elasticsearch: {e}")
es_store = None
@router.post("/save")
def save_food(item: FoodItemPayload):
if not es_store:
raise HTTPException(status_code=500, detail="Elasticsearch connection failed.")
try:
page_content = item.text_for_embedding
metadata = item.metadata
id = metadata["meal_id"]
doc = Document(
page_content=page_content,
metadata=metadata
)
es_store.add_documents(documents=[doc], ids=[id])
logger.info(f"Saved food: {id}")
return {"status": "success"}
except Exception as e:
logger.error(f"Error saving food: {e}")
raise HTTPException(status_code=500, detail=str(e))
@router.delete("/delete/{meal_id}")
def delete_food(meal_id: str):
if not es_store:
raise HTTPException(status_code=500, detail="Elasticsearch connection failed.")
try:
es_store.delete(ids=[meal_id])
logger.info(f"Deleted food: {meal_id}")
return {"status": "success"}
except Exception as e:
logger.error(f"Error deleting food: {e}")
raise HTTPException(status_code=500, detail=str(e)) |