Spaces:
Sleeping
Sleeping
| from fastapi import FastAPI | |
| from pydantic import BaseModel, Field | |
| from typing import Optional | |
| from fastapi.middleware.cors import CORSMiddleware | |
| from graph import app as workflow | |
| from fastapi.responses import JSONResponse | |
| from langchain_core.messages import HumanMessage, AIMessage | |
| app = FastAPI(docs_url="/") | |
| app.add_middleware( | |
| CORSMiddleware, | |
| allow_origins=["*"], | |
| allow_credentials=True, | |
| allow_methods=["*"], | |
| allow_headers=["*"], | |
| ) | |
| class Item(BaseModel): | |
| messages: list = Field(..., description="List of messages") | |
| language: Optional[str] = Field("vi", description="Language of the messages") | |
| class Config: | |
| json_schema_extra = { | |
| "example": { | |
| "messages": [ | |
| {"type": "human", "content": "Chào bạn"}, | |
| {"type": "ai", "content": "Bạn muốn tìm job gì?"}, | |
| { | |
| "type": "human", | |
| "content": "Tôi muốn tìm job dạy học cho trung cấp", | |
| }, | |
| ], | |
| "language": "vi", | |
| } | |
| } | |
| def convert_message(messages): | |
| list_message = [] | |
| for message in messages: | |
| if message["type"] == "human": | |
| list_message.append(HumanMessage(content=message["content"])) | |
| else: | |
| list_message.append(AIMessage(content=message["content"])) | |
| return list_message | |
| async def Chat(item: Item): | |
| messages = convert_message(item.messages) | |
| history = messages[:-1] if len(messages) > 1 else [] | |
| try: | |
| response = workflow.invoke( | |
| { | |
| "user_query": messages[-1], | |
| "messages_history": history, | |
| "language": item.language, | |
| } | |
| )["llm_response"] | |
| return JSONResponse(content=response, status_code=200) | |
| except Exception as e: | |
| return JSONResponse(content={"error": str(e)}, status_code=500) | |
| if __name__ == "__main__": | |
| import uvicorn | |
| uvicorn.run("app:app") | |