File size: 2,213 Bytes
5fc69e4
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39671d3
 
 
 
5fc69e4
 
 
39671d3
 
 
 
 
 
 
5fc69e4
 
 
 
 
 
 
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
from pydantic import BaseModel, Field
from typing import List, Dict, Optional, Any

class NPCConfig(BaseModel):
    id: Optional[str] = Field(None, description="NPC ๊ณ ์œ  ID (์„ค๊ณ„ ๊ธฐ์ค€)")
    name: Optional[str] = Field(None, description="NPC ํ‘œ์‹œ ์ด๋ฆ„")
    persona_name: Optional[str] = Field(None, description="NPC ํŽ˜๋ฅด์†Œ๋‚˜ ์ด๋ฆ„")
    dialogue_style: Optional[str] = Field(None, description="๋Œ€ํ™” ์Šคํƒ€์ผ")
    relationship: Optional[float] = Field(None, description="๊ธฐ๋ณธ ๊ด€๊ณ„ ์ˆ˜์น˜ (-1.0~1.0)")
    npc_mood: Optional[str] = Field(None, description="๊ธฐ๋ณธ ๊ฐ์ • ์ƒํƒœ")
    trigger_values: Optional[Dict[str, List[str]]] = Field(None, description="ํŠธ๋ฆฌ๊ฑฐ ๊ฐ’ ๋ชฉ๋ก")
    trigger_definitions: Optional[Dict[str, Dict[str, Any]]] = Field(None, description="ํŠธ๋ฆฌ๊ฑฐ ์ •์˜")

class DialogueTurn(BaseModel):
    player: str
    npc: str

class Context(BaseModel):
    require: Dict[str, Any] = Field(..., description="pre 1์ฐจ ์กฐ๊ฑด ํŒ๋‹จ์šฉ ํ•„์ˆ˜/์„ ํƒ ์š”์†Œ")
    player_state: Dict[str, Any] = Field(..., description="ํ”Œ๋ ˆ์ด์–ด ํ˜„์žฌ ์ƒํƒœ")
    game_state: Dict[str, Any] = Field(..., description="๊ฒŒ์ž„ ์ „์—ญ ์ƒํƒœ")
    npc_state: Dict[str, Any] = Field(..., description="DB ์ตœ์‹  NPC ์ƒํƒœ")
    npc_config: Optional[NPCConfig] = Field(None, description="RAG ๊ธฐ๋ฐ˜ ์„ค๊ณ„ ์ •๋ณด")
    dialogue_history: Optional[List[DialogueTurn]] = Field(default_factory=list, description="์ตœ๊ทผ ๋Œ€ํ™” ํžˆ์Šคํ† ๋ฆฌ")


class AskReq(BaseModel):
    session_id: str = Field(..., description="์„ธ์…˜ ๊ณ ์œ  ID")
    npc_id: str = Field(..., description="NPC ๊ณ ์œ  ID")
    user_input: str = Field(..., description="ํ”Œ๋ ˆ์ด์–ด ์ž…๋ ฅ ๋ฌธ์žฅ")
    context: Optional[Context] = Field(default_factory=Context, description="๊ฒŒ์ž„ ๋ฐ NPC ์ƒํƒœ ์ •๋ณด")

class AskRes(BaseModel):
    session_id: str
    npc_output_text: str
    deltas: Dict[str, float] = Field(default_factory=dict, description="์ด๋ฒˆ ํ„ด ๋ณ€ํ™”๋Ÿ‰")
    flags: Dict[str, int] = Field(default_factory=dict, description="ํ”Œ๋ž˜๊ทธ ์ด์ง„๊ฐ’ {flag_name: 0|1}")
    valid: bool
    meta: Dict[str, Any] = Field(default_factory=dict, description="์ถ”๊ฐ€ ๋ฉ”ํƒ€๋ฐ์ดํ„ฐ (npc_id, quest_stage, location ๋“ฑ)")