|
|
from fastapi import Request |
|
|
from pipeline.preprocess import preprocess_input |
|
|
from pipeline.generator import generate_response |
|
|
from pipeline.postprocess import postprocess_pipeline, fallback_final_check |
|
|
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) |
|
|
|
|
|
|
|
|
fb_checked = await fallback_final_check( |
|
|
request=request, |
|
|
fb_response=fb_raw, |
|
|
player_utt=pre["player_utterance"], |
|
|
npc_config=pre["tags"], |
|
|
action_delta=pre.get("trigger_meta", {}) |
|
|
) |
|
|
|
|
|
|
|
|
return { |
|
|
"session_id" : session_id, |
|
|
"npc_output_text": fb_checked, |
|
|
"flags": {}, |
|
|
"deltas": pre.get("trigger_meta", {}).get("delta", {}), |
|
|
"meta": { |
|
|
"npc_id": pre["npc_id"], |
|
|
"quest_stage": pre["game_state"].get("quest_stage", "default"), |
|
|
"location": pre["game_state"].get("location", context.get("location", "unknown")) |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
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 = await postprocess_pipeline( |
|
|
request=request, |
|
|
pre_data=pre, |
|
|
model_payload=result, |
|
|
context=context |
|
|
) |
|
|
|
|
|
return return_payload |
|
|
|