
    6j~                       d Z ddlmZ ddlmZmZ ddlmZmZ  G d de          Z	 G d de          Z
 G d	 d
e          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d de          Z G d d e          Z G d! d"e          Zd#S )$u   角色脑的结构化输出 schema(pydantic;走 LLM 的 with_structured_output,免脆弱正则)。

每个决策点一个 schema。day_speech 顺带产出 reads[] —— agent 对各人的最新判断,回写主观对局板。
    )annotations)ListOptional)	BaseModelFieldc                  V    e Zd ZU  ed          Zded<    edd          Zded	<   d
S )WolfDiscussOutu   你提议今晚刀的座位号descriptioninttarget u9   给狼队友的一句话(私聊频道,只有狼看得到)defaultr   strmessageN)__name__
__module____qualname__r   r   __annotations__r        2/root/genesis-world/src/genesis/werewolf/schema.pyr	   r	      sR         %$DEEEFEEEE51lmmmGmmmmmmr   r	   c                  V    e Zd ZU  ed          Zded<    edd          Zded	<   d
S )NightKillOutu   今晚狼队要刀的座位号r
   r   r   r      简短理由r   r   reasonNr   r   r   r   r   r   r   r   r   r   r   r      sQ         %$DEEEFEEEE%???F??????r   r   c                  V    e Zd ZU  ed          Zded<    edd          Zded	<   d
S )NightCheckOutu   今晚要查验的座位号r
   r   r   r   u   为什么查这个人r   r   r   Nr   r   r   r   r    r       sR         %$ABBBFBBBB%0GHHHFHHHHHHr   r    c                  |    e Zd ZU  edd          Zded<    edd          Zded	<    ed
d          Zded<   dS )WitchOutFu   是否用解药救今晚刀口r   boolsaveNu!   要毒的座位号;不毒填 nullOptional[int]poison_targetr   r   r   r   )r   r   r   r   r$   r   r&   r   r   r   r   r"   r"      st         u2RSSSDSSSS#(5Cf#g#g#gMgggg%???F??????r   r"   c                  V    e Zd ZU  ed          Zded<    edd          Zded	<   d
S )RunSheriffOutu   是否上警竞选警长r
   r#   runr   r   r   r   r   N)r   r   r   r   r)   r   r   r   r   r   r(   r(   "   sQ         "<===C====%???F??????r   r(   c                  X    e Zd ZU  edd          Zded<    edd          Zded<   d	S )
SpeechDirOutcwum   发言方向:cw=从你左手边(座位顺位)起 | ccw=从你右手边(逆位)起;你自己压轴最后发言r   r   	directionr   r   r   N)r   r   r   r   r-   r   r   r   r   r   r+   r+   '   sk         U4 (WX X XI X X X X%???F??????r   r+   c                  X    e Zd ZU  edd          Zded<    edd          Zded	<   d
S )WithdrawOutFu    是否退水(退出警长竞选)r   r#   withdrawr   r   r   r   N)r   r   r   r   r0   r   r   r   r   r   r/   r/   -   sS         U56XYYYHYYYY%???F??????r   r/   c                  X    e Zd ZU  edd          Zded<    edd          Zded	<   dS )
BadgePassOutNu3   把警徽移交给的座位号;撕毁警徽填 nullr   r%   r   r   r   r   r   r   r   r   r   r2   r2   2   sS         !E$<qrrrFrrrr%???F??????r   r2   c                  X    e Zd ZU  edd          Zded<    edd          Zded	<   d
S )
ExplodeOutFun   是否现在自爆(白天掀桌亮狼身份,中止当天发言投票直接入夜);极少用,只在关键时刻r   r#   exploder   r   r   r   N)r   r   r   r   r5   r   r   r   r   r   r4   r4   7   sk         E%  6f  g  g  gG  g  g  g  g%???F??????r   r4   c                      e Zd ZU  ed          Zded<    edd          Zded	<    ed
d          Zded<    edd          Zded<   dS )ReadOutu   被你判断的座位号r
   r   seatunknownzgood | wolf | unknownr   r   judgmentg        u   0~1 的置信float
confidencer   u    该玩家自报的身份(若有)claimN)	r   r   r   r   r8   r   r:   r<   r=   r   r   r   r7   r7   <   s         "<===D====E)9PQQQHQQQQcGGGJGGGGr/QRRRERRRRRRr   r7   c                      e Zd ZU  ed          Zded<    edd          Zded<    ed	d
          Zded<    ed	d          Zded<    edd          Z	ded<   d	S )	SpeechOutu&   你这一轮的口语发言(一段话)r
   r   speech_textr   u%   你自报的身份;不跳身份填空r   
claim_roleNu+   你重点指认/最怀疑是狼的座位号r%   accuseu   你打算投谁出局vote_intentu$   你的站边/归票倾向(一句话)stance)
r   r   r   r   r@   r   rA   rB   rC   rD   r   r   r   r?   r?   C   s          u)QRRRKRRRReB4[\\\J\\\\!E$<ijjjFjjjj!&tAX!Y!Y!YKYYYY%0VWWWFWWWWWWr   r?   c                  X    e Zd ZU  edd          Zded<    edd          Zded	<   dS )
VoteOutNu   投谁出局;弃票填 nullr   r%   r   r   r   r   r   r   r   r   r   rF   rF   M   sS         !E$<YZZZFZZZZ%???F??????r   rF   c                  X    e Zd ZU  edd          Zded<    edd          Zded	<   dS )
HunterShootOutNu   开枪带走谁;放弃填 nullr   r%   r   r   r   r   r   r   r   r   r   rH   rH   R   sS         !E$<\]]]F]]]]%???F??????r   rH   c                      e Zd ZU  edd          Zded<    ed          Zded<    ed	d
          Zded<    ed	d          Zded<   d	S )DayDigestOutr   u'  【铁的事实·累积更新别丢旧的】客观线索清单(简短分点):死亡名单+你推断的死法(刀/毒/枪/放逐)、谁公开自报了什么身份/谁对跳谁、公开的查验结果、警长是谁、明显的票型异常(谁救谁/谁带头投谁)。只记事实,不下判断。r   r   	key_factsu   【主观分析·滚动重写】基于事实,几句话:你各人的好狼判断与理由、当前阵营局势、你下一步计划(在旧 notes 上更新,别太长)r
   notesNu$   你现在最怀疑是狼的座位号r%   prime_suspectu)   你现在最信任(像好人)的座位号most_trusted)	r   r   r   r   rK   r   rL   rM   rN   r   r   r   rJ   rJ   W   s         U{| | |I | | | |  {| | |E | | | |#(5Ci#j#j#jMjjjj"'%Bm"n"n"nLnnnnnnr   rJ   c                  4    e Zd ZU  edd          Zded<   dS )	RecallOutr   uZ   想查阅的原始记录:某座位号、'day:2'、或一个关键词;不需要查就留空r   r   queryN)r   r   r   r   rQ   r   r   r   r   rP   rP   c   sQ         r  0L  M  M  ME  M  M  M  M  M  Mr   rP   N)__doc__
__future__r   typingr   r   pydanticr   r   r	   r   r    r"   r(   r+   r/   r2   r4   r7   r?   rF   rH   rJ   rP   r   r   r   <module>rV      sM   
 # " " " " " ! ! ! ! ! ! ! ! % % % % % % % %n n n n nY n n n
@ @ @ @ @9 @ @ @
I I I I II I I I
@ @ @ @ @y @ @ @@ @ @ @ @I @ @ @
@ @ @ @ @9 @ @ @@ @ @ @ @) @ @ @
@ @ @ @ @9 @ @ @
@ @ @ @ @ @ @ @
S S S S Si S S SX X X X X	 X X X@ @ @ @ @i @ @ @
@ @ @ @ @Y @ @ @
	o 	o 	o 	o 	o9 	o 	o 	oM M M M M	 M M M M Mr   