-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmain.py
More file actions
84 lines (69 loc) · 2.76 KB
/
Copy pathmain.py
File metadata and controls
84 lines (69 loc) · 2.76 KB
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
72
73
74
75
76
77
78
79
80
81
82
83
84
from fastapi import FastAPI
from pydantic import BaseModel
from typing import List, Optional
from gpt_intent import classify_intent_gpt
from llm_answer import answer_question
import requests
app = FastAPI()
# 요청 body 정의
class UserData(BaseModel):
goal: Optional[str] = "fat_loss"
preferred_parts: Optional[List[str]] = []
level: Optional[str] = "beginner"
gender: Optional[str] = None
weight: Optional[float] = None
top_k: Optional[int] = 5
class MessageRequest(BaseModel):
message: str
userData: Optional[UserData] = None
@app.post("/chat")
async def chat_endpoint(data: MessageRequest):
user_input = data.message
user_data = data.userData
parsed = classify_intent_gpt(user_input) # {"intent": "...", "category": "하체" 등}
if parsed["intent"] == "routine":
# 루틴 요청 JSON 생성
routine_req_payload = {
"goal": parsed.get("goal") if parsed.get("goal") is not None else user_data.goal,
"preferred_parts": parsed.get("preferred_parts") if parsed.get("preferred_parts") else user_data.preferred_parts,
"level": parsed.get("level") if parsed.get("level") is not None else user_data.level,
"gender": parsed.get("gender") if parsed.get("gender") is not None else user_data.gender,
"weight": parsed.get("weight") if parsed.get("weight") is not None else user_data.weight,
"top_k": parsed.get("top_k") if parsed.get("top_k") is not None else user_data.top_k,
}
try:
#return routine_req_payload
# 루틴 서버에 POST 요청
response = requests.post("http://34.227.127.99/recommend", json=routine_req_payload)
response.raise_for_status()
routine = response.json()
#return routine
# 최종 응답
return {
"type": "routine",
"preferred": routine_req_payload["preferred_parts"],
"level": routine_req_payload["level"],
"goal": routine_req_payload["goal"],
"routine": {
"name": routine.get("name"),
"routineItems": routine.get("routineItems")
}
}
except requests.RequestException as e:
return {
"type": "error",
"message": "루틴 추천 서버 요청에 실패했습니다.",
"details": str(e)
}
elif parsed["intent"] == "qa":
answer = answer_question(user_input)
return {
"type": "qa",
"question": user_input,
"answer": answer
}
else:
return {
"type": "error",
"message": "의도를 분류하지 못했습니다."
}