|
|
from fastapi import Request |
|
|
from pipeline.preprocess import preprocess_input |
|
|
from pipeline.generator import generate_response |
|
|
from pipeline.postprocess import postprocess_fallback, postprocess_main |
|
|
from models.fallback_model import generate_fallback_response |
|
|
from .prompt_builder import build_main_prompt, build_fallback_prompt |
|
|
|
|
|
async def handle_dialogue( |
|
|
request: Request, |
|
|
session_id: str, |
|
|
npc_id: str, |
|
|
user_input: str, |
|
|
context: dict, |
|
|
) -> dict: |
|
|
""" |
|
|
์ ์ฒด ๋ํ ์ฒ๋ฆฌ ํ์ดํ๋ผ์ธ: |
|
|
1) preprocess_input() โ pre ๋ฐ์ดํฐ ์์ฑ |
|
|
2) main ๊ฒฝ๋ก: main prompt โ main model โ postprocess_pipeline() |
|
|
3) fallback ๊ฒฝ๋ก: fallback prompt โ fallback model โ fallback_final_check() |
|
|
""" |
|
|
|
|
|
pre = await preprocess_input(request, session_id, npc_id, user_input, context) |
|
|
|
|
|
|
|
|
if not pre.get("is_valid", True): |
|
|
|
|
|
fb_prompt = build_fallback_prompt(pre, session_id, npc_id) |
|
|
|
|
|
|
|
|
fb_raw = await generate_fallback_response(request, fb_prompt) |
|
|
|
|
|
return_payload_fb = postprocess_fallback(request, pre, fb_raw) |
|
|
|
|
|
return return_payload_fb |
|
|
|
|
|
|
|
|
main_prompt = build_main_prompt(pre, session_id, npc_id) |
|
|
|
|
|
|
|
|
result = await generate_response(session_id, npc_id, main_prompt, max_tokens=200) |
|
|
|
|
|
|
|
|
return_payload_main = await postprocess_main( |
|
|
request=request, |
|
|
pre_data=pre, |
|
|
model_payload=result, |
|
|
) |
|
|
|
|
|
return return_payload_main |
|
|
|