
    (_j_}              	      N   U d Z ddlmZ ddlZddlZddlZddlZddlmZm	Z	m
Z
mZmZmZmZ ddlmZmZ  ej$                  e      ZdZdZdd	d
ddddddZded<   dZd,dZdZd-dZ G d de      Z G d de      Z	 	 	 	 d.dZ d/dZ!dZ"	 	 	 	 	 	 d0dZ#	 	 	 	 d1dZ$	 	 	 	 	 	 d2d Z% e&       f	 	 	 	 	 d3d!Z'	 	 	 	 	 	 d4d"Z(	 	 	 	 	 	 d5	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d6d$Z)	 	 	 	 	 	 	 	 d7d%Z*	 	 	 	 	 	 d8d&Z+ddd'd(ejX                  d#d)d*	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 	 d9d+Z-y):uS  background_prompt — Phase 7 Step 5 / Phase 8 v2 / D6 v6.

배경별 detailed t2i prompt 생성. 도면 ref + 이전 배경 ref 활용 가이드 포함.
plot-critical 시각 요소를 LLM이 scene segments에서 자연히 picking하도록.

Phase 8 v2:
- t2i_prompt 본문 = ``scene_segments`` 원문 언어 (한국 시나리오면 한국어).
  → 식별자(bg_id, sub_location, state_label, shot_id)에만 ASCII 검증 유지,
  t2i_prompt 본문에는 ASCII 검증 제거.
- ``floor_plan_prompt`` 가 산출한 ``numbered_elements`` + ``camera_recommendation``
  (현재 bg_id 매칭 단일 entry) 을 user_template 에 inject한다. 두 값이 None
  이면 "(none — derive ...)" fallback 가이드 문자열로 대체된다.

D6 v6: BG_ID_RE (`^L\d{2,3}B\d{2,3}$`) 정합 + 2-layer 방어.
- L1 static schema: ``bg_id`` pattern → BG_ID_RE. 옛 lowercase pattern reject.
- L2 runtime enum injection: ``run_background_prompt`` 가 schema deep-copy +
  ``bg_id.enum=[expected_bg_id]`` 주입 → LLM 출력을 정확한 ID 로 강제.

추가: ``build_bg_user_prompt`` 가 D6 raw intent 의 ``state_label_raw`` /
``sub_location_label`` 우선 사용 (legacy ``state_label`` / ``sub_location``
fallback 유지). prior 5.x 까지는 D6 master_plan 의 raw intent 출력에서
이 두 필드가 빈 문자열로 inject 되는 silent gap 결함이 있었다.
    )annotationsN)AnyCallableDict	FrozenSetListOptionalSet)load_promptload_schemabackground_promptu;   (none — derive from scene segments and shot descriptions)z6.202605091200z7.202605262330z8.202605282046z9.202605290248z10.202605290451z11.202605300939z12.202605310513z14.202607141240)678910111214zDict[str, str]PROMPT_VERSION_MAPz15.202607221105c                 J    t        t        dt              j                         S )u]  건축 규모 휴먼 스케일 앵커 규칙 — 활성 system 프롬프트에 부착.

    실측(E2E11): 옥탑방(창 1개)이 건물 덩어리로 과대 렌더 — 규모 계약이
    저작 프롬프트에 구조적으로 없었다. 문/창/층고/난간 등 사람 크기 고정
    요소 기준의 범용 앵커(시나리오 특정 0).
    human_scale_ruleversion)r   _MODULEHUMAN_SCALE_RULE_PACKstrip     \/Users/manta/Documents/Projects/TheRoad-I1/backend/app/modules/pipeline/background_prompt.pyload_human_scale_ruler!   P   s!     #-Begr   uj   (none — no verified anchor projection plate for this background; derive the plate from the inputs above)c           	     v    	 t         |    S # t        $ r$}t        d| dt        t                      |d}~ww xY w)uJ   selector ("6"|"7"|"8"|"9"|"10"|"11"|"12") → on-disk pack directory name.z#unknown background_prompt selector z; allowed: N)r   KeyError
ValueErrorsorted)selectorexcs     r    resolve_prompt_versionr(   i   sQ    !(++ 1( >1235
 	s    	838c                      e Zd ZdZy)BackgroundPromptErroru   retry 한도까지 실패.N__name__
__module____qualname____doc__r   r   r    r*   r*   t   s    $r   r*   c                      e Zd ZdZy)BackgroundPromptOverlayErroruE   v7 path 의 overlay payload 가 누락/형상-오류 — fail-closed.Nr+   r   r   r    r1   r1   x   s    Or   r1   c           
        | st         S g }| D ]f  }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }|j                  | d| d	| d
|        h dj                  |      S )uK  floor_plan_prompt 결과의 ``numbered_elements`` 를 자연어 블록으로 직렬화.

    한 줄 1 entry: ``"<number>. <label> [<category>] — <position_hint>"``.
    LLM이 t2i_prompt 작성 시 번호 ref 를 자연어로 변환하는 dictionary 역할.
    None / empty list 이면 fallback 가이드 문자열 반환.
    number?label(missing label)categoryposition_hint(missing position).  [   ] — 
)_FALLBACK_BLOCKgetappendjoin)itemslinesitnumr5   r7   poss          r    _format_numbered_elements_blockrG   |   s     EffXs#w 1266*c*ff_&:;uBugRzu=>  99Ur   c           
        | syg }| D ]  }|j                  dd      }|j                  dd      }|j                  dd      }|j                  dd      }g }|j                  d	      }|r|d
k7  r|j                  t        |             |j                  d      }	|	r|	d
k7  r|j                  d|	        |rdj                  |g|      n|}
|j                  | d| d|
 d|         dj                  |      S )u  W19B-2 v7 helper: ``base_markers_to_reference`` 또는
    ``transient_markers_to_describe`` 의 marker entry 리스트를 자연어 블록으로
    직렬화. 한 줄 1 entry: ``"<number>. <label> [<category>] — <position_hint>"``.

    label/prose 의미 추출 X — entry 의 number / label / category / position_hint
    필드만 그대로 사용. clean BG 의 sentinel 은 caller (``_format_transient_block``)
    에서 처리한다.

    W21B-wave-4 A2 (Claude+Codex lock): marker entry 가 ``render_role`` /
    ``top_down_legibility`` 를 carry 하면 ``[<category>, <render_role>,
    legibility=<clear|low>]`` 로 확장한다. 두 필드가 없거나 ``not_applicable``
    이면 옛 라인과 **byte-identical** (backward-compat). ``not_applicable`` 은
    prompt 에 짧게 표기하지 않고 아예 생략한다 (값 자체는 payload enum 보존).
    enum 값을 그대로 출력만 — 어떤 lexical 분류도 하지 않는다.
     r3   r4   r5   r6   r7   r8   r9   render_rolenot_applicabletop_down_legibilityzlegibility=z, r:   r;   r<   r=   )r?   r@   strrA   )markersrC   rD   rE   r5   r7   rF   extrasrolelegbrackets              r    _format_layer_markers_blockrS      s     EffXs#w 1266*c*ff_&:;vvm$D,,MM#d)$ff*+3**MMKu-.4:$))X//0uBugRyse<=  99Ur   u   (none — clean / undisturbed state; do not introduce any transient cue, debris, mark, or displaced object in the t2i_prompt body, and do not enumerate marker numbers or labels in any 'missing' or 'absent' sentence)c               8    | rt        |       S |rt        S t        S )u   v7 transient markers 직렬화. empty 인 경우 clean sentinel 반환.

    ``clean_background_expected`` 는 overlay payload 의 동일 필드. 직접 길이
    체크와 별개로 sentinel 표기 조건을 명시적으로 carry 한다.
    )rS   _CLEAN_BG_SENTINEL)	transientclean_background_expecteds     r    _format_transient_blockrX      s!     *955 !!r   c                L   t               }t        | t              s
t               S dD ]q  }| j	                  |      xs g D ]W  }t        |t              s|j	                  d      }t        |t
              s6t        |t              rG|j                  |       Y s t        |      S )u  Structured set of NON-base (transient / ignored-state-overlay) marker
    numbers from a floor_plan_overlay_payload (W21B-wave-4 C4 follow-up).

    These numbers are the BG-plate purity exclusion set: a transient overlay
    marker (event residue, displaced object) or an ignored state-overlay
    marker must never be cited in the background-plate prompt. Base markers
    (``base_markers_to_reference``) are intentionally NOT included — they are
    the layout reference and the LLM legitimately translates them (Rule 7).

    Returns an empty set for any structural gap (None / malformed / no
    transient markers) → no sanitization (e.g. the v6 no-overlay path).
    )transient_markers_to_describeignored_state_overlay_markersr3   )set
isinstancedict	frozensetr?   intbooladd)overlay_payloadnumskeymns        r    !_extract_transient_marker_numbersrh      s     UDot,{Q $$S)/R/A!T"EE(Oa%jD.AHHQK	 0 R T?r   c           
     ~    | r|sy|D ]3  }t        j                  d| d| d| d| t         j                        s3 y y)u  True if ``text`` references a transient marker NUMBER token.

    Self-defined marker-number token check (``number N`` / ``#N`` /
    ``marker N``) over the STRUCTURED transient-number set — identical in
    spirit to the C2 ``find_plate_prose_leaks`` emitted-marker-number check.
    This matches the system's own enumerated reference syntax, NOT natural
    language meaning; Korean / free prose semantics are never parsed.
    Fz	number\s*z\b|#\s*z\b|\bmarker\s*z\bT)research
IGNORECASE)texttransient_numbersrg   s      r    _text_cites_transient_markerro      sM     (9971#^A3b94
 	 
 r   c                   | st         S g }| j                  dd      }t        t        |      |      s|j	                  d|        |j	                  d| j                  dd              |j	                  d| j                  dd              | j                  dd	      }|r)t        t        |      |      s|j	                  d
|        dj                  |      S )ud  현재 bg_id에 매칭되는 단일 camera_recommendation entry를 자연어 블록으로 직렬화.

    None 이면 fallback 가이드 문자열. ``framing_notes`` 가 있을 때만 그 줄 추가.

    W21B-wave-4 C4 follow-up (Codex gate Required): ``transient_numbers`` 가
    주어지면(overlay-path packs v7-v12), camera_position / framing_notes 중
    transient marker 번호를 인용하는 필드는 BG-plate purity 위반이므로
    fail-closed 로 drop 한다(base marker 번호 인용은 정당하므로 유지). 빈 set
    (v6 no-overlay)이면 기존 verbatim 동작과 byte-identical.
    camera_positionz	(missing)zcamera_position: zcamera_height: camera_heightzlens_hint: 	lens_hintframing_notesrI   zframing_notes: r=   )r>   r?   ro   rM   r@   rA   )camrn   partsrF   fns        r    #_format_camera_recommendation_blockrx      s     E
''#[
1C'C2CD(./	LL?377?K#H"IJK	LL;sww{K@ABC	"	%B	.s2w8IJrd+,99Ur   c                   |t        d| d      t        |t              s%t        d| dt        |      j                   d      |j                  d      | k7  r t        d| d|j                  d            dt        fdt        fd	t        fd
t        ffD ]d  \  }}t        |j                  |      |      r"t        d| d|d|j                   dt        |j                  |            j                   d	       |S )uI  v7 path 의 overlay payload 형상 검증 — fail-closed.

    Required keys (W19B-1 출력 shape):
        bg_id, fp_id, use_numbered_elements (list[int]),
        ignore_numbered_elements (list[int]), base_markers_to_reference (list[dict]),
        transient_markers_to_describe (list[dict]), ignored_state_overlay_markers
        (list[dict]), target_unit_marker_numbers (list[int]),
        dominant_target_unit_marker_number (int | None),
        clean_background_expected (bool), diagnostics (list[str]).

    Raises ``BackgroundPromptOverlayError`` 로 step 에서 흡수.
    zbg_id=z? v7 requires floor_plan_overlay_payload entry but received Nonez! overlay payload not a dict (got )bg_idz! overlay payload bg_id mismatch: base_markers_to_referencerZ   r[   rW   z overlay payload z! missing or wrong type (expected z, got )r1   r]   r^   typer,   r?   listra   )r{   rc   fieldexpected_types       r    _validate_overlay_payload_shaper     sN    *UI    
 	
 ot,*UI )22316
 	
 7#u,*UI>""7+.0
 	

 
%d+	($/	($/	$d+	!} /--e4mD.	!25) <""/"8"8!9 :O//67@@AD ! r   r   c                   t        |      }t        t        d|      }|r|nd}dj                  d |D              xs d}dj                  d | j	                  d      xs g D              xs d}g }|D ]  }|j	                  d      }|j	                  d	      xs d
j                         }|j	                  d      xs d
j                         }|j                  |rd| d| nd|        |j                  |       |j                  d
        dj                  |      j                         xs d}t        |t        |	            }| j	                  d      xs | j	                  d      xs d
}| j	                  d      xs | j	                  d      xs d
}| j	                  dd
      }|dv r|xs d}n|xs d}|j                  d|      j                  d| j	                  dd
            j                  d|      j                  d|      j                  d|      j                  d| j	                  dd
      xs d      j                  d |      j                  d!|      j                  d"|      j                  d#|      j                  d$|      j                  d%|      j                  d&|xs d      }|d'k(  rt        |      }|j                  d(|      }n|d)k(  r]t        ||	      }t        |d*         xs d}t        |d+   t        |d,         -      }|j                  d.|      j                  d/|      }nd|dv r`| j	                  dd
      xs d0} |d1v xr |	d2u xr	 | xr | d3v }!|!rd4}nt        ||	      }t        |d*         xs d}|j                  d.|      }|d5k(  r0|
xs d
j                         }"|"xs t         }#|j                  d6|#      }|S )7u+  배경 user prompt — scene text 무절단 inject.

    .replace() 사용 (.format() brace 충돌 회피, T4/T7/T9 동일 패턴).

    Phase 8 v2:
    - ``numbered_elements`` : floor_plan_prompt 결과 list 전체 (도면의 모든 번호).
    - ``camera_recommendation`` : 현재 bg_id 에 해당하는 단일 entry (없으면 None).

    Phase 8.1:
    - ``source_language`` : ISO 639-1 코드 (예: "ko", "en"). 빈 문자열이면 LLM이
      scene_segments 에서 자체 추론 (system prompt fallback). v3 prompt 가
      이 값을 본문 언어로 강제한다.

    W19B-2 / W21B-w1 / W21B-wave-2 (selector "6"|"7"|"8"|"9"|"10"):
    - ``prompt_version="6"`` (default): 기존 v6 pack + flat numbered_elements_block
      유지. ``overlay_payload`` 는 무시 (v6 user_template 에 해당 placeholder 없음).
    - ``prompt_version="7"`` (opt-in): v7 pack 로드. ``overlay_payload`` 필수
      (None / shape 오류 시 ``BackgroundPromptOverlayError`` raise).
      ``base_markers_to_reference`` → ``{base_markers_block}``,
      ``transient_markers_to_describe`` (또는 clean sentinel) →
      ``{transient_markers_block}``. ignored_state_overlay_markers 는 prompt 에
      번호/라벨 X (overlay leak 방지).
    - ``prompt_version="8"`` (opt-in, W21B-wave-1): v7 와 동일한 overlay payload
      SOT 를 그대로 받지만 BG plate purity 강화로 prompt 본문에 transient
      overlay markers / scene_segments verbatim 본문 어떤 것도 surface 시키지
      않는다. user_template 에 ``{transient_markers_block}``,
      ``{scene_segments_block}`` placeholder 모두 부재 — base markers / camera
      recommendation / applies_to_shots / visual_world_rules / source language
      만 본문에 들어간다. source_language fallback 도 visual_world_rules +
      주변 context 기반으로 분리 (scene_segments 언급 제거). system rules 가
      cinematic photoreal plate 톤 + 인물/팔/손/얼굴/시신/혈흔/photo-handling
      action 차단을 명시한다.
    - ``prompt_version="9"`` (opt-in, W21B-wave-2): v8 의 BG-purity contract 를
      유지하면서 background_master_plan 의 ``surface_role`` 을 prompt 에
      노출하고 TV/monitor/photo-frame 내부 content 를 non-semantic surface 로
      제한한다. ``interior_room`` / floor-plan-backed BG 는 overlay payload 를
      계속 필수로 요구한다. fp-less exterior / transition / site plate 는 overlay
      cp 의 대상이 아니므로 base marker block 없이 prompt 를 구성한다.
    - ``prompt_version="10"`` (opt-in, W21B-wave-2.1): v9 의 surface_role /
      fp-less plate path 를 유지하면서 screen / display / frame 내부 content 를
      더 강하게 blank/off/glare/static/unreadable-only 로 제한한다.
    - ``prompt_version="12"`` (opt-in, W21B-wave-4 C4): v10 contract 를 그대로
      받고 ``{projection_card_plate_block}`` 하나만 추가한다. ``projection_plate_prose``
      (projection-card guard 가 inject=True 로 판정한 anchor plate prose) 가
      주어지면 그것만 block 에 surface 시키고, None 이면 clean sentinel 로
      치환한다. base markers / overlay / fp-less path 는 v10 과 동일. plate prose
      외 어떤 card 필드(scene_visible_description / visible_items / marker_registry
      / card_id / enum)도 노출하지 않는다.
    user_templater   z(none)r=   c              3  &   K   | ]	  }d |   ywz- Nr   ).0ps     r    	<genexpr>z'build_bg_user_prompt.<locals>.<genexpr>  s     =nbHn   c              3  &   K   | ]	  }d |   ywr   r   )r   ss     r    r   z'build_bg_user_prompt.<locals>.<genexpr>  s     L%JqBqc(%Jr   applies_to_shotsscene_indexheadingrI   rm   z
### Scene u    — )rn   sub_location_labelsub_locationstate_label_rawstate_labelr{   )r   r   r   r   r   u?   (unknown — derive from visual_world_rules and source context)u(   (unknown — derive from scene_segments)z{bg_id}z{loc_id}loc_idz{sub_location}z{state_label_raw}z{state_label}z{surface_role}surface_rolez(unspecified)z{source_language}z{floor_plan_path_block}z{prior_bg_paths_block}z{camera_recommendation_block}z{applies_to_shots_block}z{scene_segments_block}z{visual_world_rules}r   z{numbered_elements_block}r   r|   rZ   rW   )rW   z{base_markers_block}z{transient_markers_block}interior_room>   r   r   r   r   N>   site_surfaceexterior_platetransition_zoneu   (none — fp-less surface plate; derive persistent physical structure from surface_role, sub_location, state_label_raw, applies_to_shots, and visual_world_rules)r   z{projection_card_plate_block})r(   r   r   rA   r?   r   r@   rstriprx   rh   replacerG   r   rS   rX   ra   _PROJECTION_PLATE_NONE_SENTINEL)$bg_specfloor_plan_pathprior_bg_pathsscene_segmentsvisual_world_rulesnumbered_elementscamera_recommendationsource_languageprompt_versionrc   projection_plate_proseresolvedtemplatefp_blockprior_blockshots_block	seg_linessegsir   rm   	seg_blockcamera_blockr   r   r{   source_language_fallbackrenderednumbered_blockpayload
base_blocktransient_blockr   fp_less_surface_plateplateprojection_blocks$                                       r    build_bg_user_promptr   H  s0   | &n5H7OXFH"1xH))=n==IK		LW[[1C%D%J%JLL 	 
 IWW]#779%+224%2,,./6jE'+j<M	
 	  		)$++-9I 7;OLL 	()NW[[-HNB  	%&J'++m*DJ  KK$E 55 QP 	! II 	!
 		E	"	W[[26	7	!<	0 
$o	6	/	2	!7;;~r#B#Uo	V	$&>	?	*H	5	);	7	0,	?	+[	9	)9	5	');)Gx	H! & 89JK##$?P	3	 2%I'0K(LM  	 234&*73N+O&P

 W+Z8W0/B 	
 
7	7 {{>26I/55 V4'V##V  UU	 	 !<  6e_MG+G4O,PQ   ##$:JG (-2446 C$C##+-=
 Or   c                @   ddl m} | j                  d      |k7  r t        d| j                  d      d|      | j                  d      xs d}t	        |      dk  rt        d	| d
t	        |       d      | j                  d      xs g }|D ch c]$  }t        |t              s|j                  d      & }}||z
  }|rt        d	| dt        |             | j                  d      }	t        |	t              s%t        d	| dt        |	      j                   d      t        |	      D ](  \  }
}t        |t              s	 |j                  d       *  ||	      }|st        d	| d      || d<   yc c}w # t        $ r t        d	| d|
 d|d      w xY w)u  Phase 8 v2 + G3.2 invariants:
    1. ``bg_id`` matches expected (식별자 ASCII는 schema pattern에서 강제).
    2. ``t2i_prompt`` >= 50 chars (본문 ASCII guard 제거 — source-language 허용).
    3. ``shot_guides`` covers every applies_to_shots entry.
    4. (G3.2) ``objects_owned_by_background`` 는 list, normalize 후 1+ entries.
       in-place normalize (strip/dedupe/sort/maxLen=80) — 단순 검증 아닌 저장
       직전 정규화 책임.
    r   )normalize_owned_listr{   zbg_id mismatch: got z, expected 
t2i_promptrI   2   background_prompt z t2i too short (rz   shot_guidesshot_idz missing shot_guides for: objects_owned_by_backgroundz/ objects_owned_by_background must be list (got asciiz$ objects_owned_by_background entry [z] zx contains non-ASCII (Hangul/CJK/Kana). owned MUST be English canonical common nouns (round 4 Q2=B / round 6 BLOCKING 3).zI objects_owned_by_background empty after normalize (must have 1+ entries)N)app.core.steps._owned_helpersr   r?   r$   lenr]   r^   r%   r~   r}   r,   	enumeraterM   encodeUnicodeEncodeError)outputexpected_bg_idr   r   t2iguidesgguide_shot_idsmissing	raw_ownedidxitem
normalizeds                r    validate_bg_prompt_outputr     s    Czz'n,"6::g#6"9^DVW
 	
 **\
"
(bC
3x"}  00@S
!L
 	
 ZZ&,"F06N1*Q:MaeeI&NN/G  00J6RY?J[\
 	
 

89Ii&  0 1!!%i!9!9 :!=
 	
 y)	T$$	KK 	 * &i0J  0 1; ;
 	
 -7F()E O* " 	$^$4 5b )'' 	s   E9(E9E>>Fc                    t        j                  |       }|j                  di       j                  d      }t        |t              rd|j                  dd      |gd|d   d<   |S )u   schema deep-copy + ``bg_id.enum=[expected_bg_id]`` 주입.

    D6 v6 L2 방어. base_schema 는 매 호출마다 새 dict 지만 DB cache /
    공유 dict 가능성 + retry 회로 안 mutation 누수 방어를 위해 deep-copy.
    
propertiesr{   stringpatternz^L\d{2,3}B\d{2,3}$)r}   r   enum)copydeepcopyr?   r]   r^   )base_schemar   schemabg_propss       r    _inject_bg_id_enumr   U  sg     ]];'Fzz,+//8H(D!||I/DE#$)
|W%
 Mr      g       @F)project_configopik_metadatamax_retriesbackoff_base_secsleep_fnr   scale_anchorc           
        t        |	      }t        t        d|      }|
r|dz   t               z   }t	        t        d|      }t        ||      }t        |      }d}t        |      D ]"  }	  |d|| ||d|      }t        |||       |c S  t        d
| d| d|       # t        $ r>}|}t        j                  d||d	z   ||       |d	z   |k  r |||d	z   z         Y d}~{d}~ww xY w)u  W19B-2: selector default ``"6"`` 는 기존 v6 pack 을 정확히 pin (latest-pack
    auto-resolve silent shift 방지). ``"7"`` opt-in 시 v7 pack 의 system/schema
    로드. schema 출력 shape 은 v6/v7 동일 → 기존 validator 그대로 사용.

    scale_anchor (E2E11 fix①): True 면 활성 system 에 휴먼 스케일 앵커
    규칙을 부착 — selector 계약(v7 shot-aware 등) 무변경. False(default)=
    기존 프롬프트 byte-identical.
    systemr   r=   r   Nr   )stepsystem_promptuser_promptresponse_schemar   schema_namer   z-background_prompt %s attempt %d/%d failed: %s   r   z exhausted z
 retries: )r(   r   r   r!   r   r   r\   ranger   	Exceptionloggerwarningr*   )r   r   r   call_structured_fnr   r   r   r   r   r   r   r   r   r   r   shot_setlast_errattemptresultr'   s                       r    run_background_promptr   h  s   , &n5H(H=F$!6!88gxBK^<F#$H$(H%	;'($' &-/+F &fnhGM &*  
^,K}JxjY   	;HNN?![# {[()Wq[9:	;s   *B	C&(4C!!C&)returnrM   )r&   rM   r   rM   )rB   Optional[List[Dict[str, Any]]]r   rM   )rN   List[Dict[str, Any]]r   rM   )rV   r   rW   ra   r   rM   )rc   Optional[Dict[str, Any]]r   FrozenSet[int])rm   rM   rn   r   r   ra   )ru   r   rn   r   r   rM   )r{   rM   rc   r   r   Dict[str, Any])NNrI   r   NN)r   r   r   Optional[str]r   	List[str]r   r   r   rM   r   r   r   r   r   rM   r   rM   rc   r   r   r   r   rM   )r   r   r   rM   r   zSet[str]r   None)r   r   r   rM   r   r   )r   rM   r   rM   r   r   r   zCallable[..., Dict[str, Any]]r   r   r   r   r   r`   r   floatr   zCallable[[float], None]r   rM   r   ra   r   r   ).r/   
__future__r   r   loggingrj   timetypingr   r   r   r   r   r	   r
   app.modules.prompt_loaderr   r   	getLoggerr,   r   r   r>   r   __annotations__r   r!   r   r(   r   r*   r1   rG   rS   rU   rX   rh   ro   r_   rx   r   r   r   r   sleepr   r   r   r    <module>r
     s  . #   	  F F F >			8	$
O0 
			


 & N $ * 	(.  %I %P9 P)*!J #  $ 		$-6
"0	. )2	!% 	8**!9**f 9=6:04,0LL"L L )	L
 L 6L 4L L L .L *L 	L^;7;7;7 ;7 
	;7|142 04.2!(,

66 6  	6
 66 -6 ,6 6 6 &6 6 6 6r   