cookbook / app.py
JasonFinley0821's picture
feat : upgrade embedding
a4137be
# app.py
import os
import uvicorn
from fastapi import FastAPI, HTTPException
from pydantic import BaseModel
from dotenv import load_dotenv
from rag import build_rag_chain
load_dotenv()
app = FastAPI(
title="Recipe RAG API (Gemini 2.0)",
description="使用 FastAPI + LangChain + postgres + PGVector + HuggingFace Embeddings 的服務",
version="1.0.0"
)
# 建立 RAG chain(可共用)
RAG_CHAIN = build_rag_chain(k=4)
class RecipeRequest(BaseModel):
query: str
@app.get("/")
def root():
return {"message": "COOK BOOK API ready!"}
@app.post("/recipe")
def generate_recipe(req: RecipeRequest):
if not req.query or req.query.strip() == "":
raise HTTPException(status_code=400, detail="query 必填")
try:
# 使用 LangChain chain 呼叫
output = RAG_CHAIN( req.query )
# output 結構通常包含 'result' 和 'source_documents'
result_text = output.get("result") or output.get("output_text") or str(output)
sources = []
for d in output.get("source_documents", []):
sources.append({"content": d.page_content, "meta": getattr(d, "metadata", {})})
return {"query": req.query, "recipe": result_text, "sources": sources}
except Exception as e:
raise HTTPException(status_code=500, detail=str(e))
if __name__ == "__main__":
uvicorn.run("app:app", host="0.0.0.0", port=7860, reload=False)