§
   ¶‡GXàïŠã            
       ó¨   — d Z ddlZddddddd	d
ddœ	Zd„ Zd„ Zg d¢g d¢g d¢g d¢g d¢g d¢dœZd„ Z	 	 	 d!d„Z	 	 	 d!d„Zd„ Z	dZ
dZd"d„Z	 d#d„Zd „ ZdS )$zö
Prompt builders for Continuous Chat Millionaire.

Single module for all prompt construction: system prompt, user messages
(welcome, question, feedback). Used by MillionaireGameController.

Prompt guidelines: .agents/skills/app-prompts/SKILL.md.
é    Nõ	   1 000 KÄ�u	   2 000 KÄ�u	   5 000 KÄ�u
   10 000 KÄ�u
   20 000 KÄ�u
   50 000 KÄ�u   100 000 KÄ�u   500 000 KÄ�u   1 000 000 KÄ�)	é   é   é   é   é   é   é   é   é	   c                 ó&   — | dk    rdS | dk    rdS dS )z7Return difficulty label for a given round number (1-9).r   õ   SNADNÃ�r	   õ	   STÅ˜EDNÃ�õ   TÄšÅ½KÃ�© )Ú	round_nums    úk/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/millionaire_prompts.pyÚ_get_difficulty_for_roundr      s#   € à�A‚~€~ØˆyØ	�aŠˆØˆ{Øˆ:ó    c                  ó|   — t          j        ¦   «         } |                      d¦  «        }|dk    r	 dS |dk    r	 dS 	 dS )z{Return global difficulty header from addon settings.

    Settings: millionaire_difficulty (0=easy, 1=medium, 2=hard).
    Úmillionaire_difficultyÚ0uÉ   HLAVNÃ� OBTÃ�Å½NOST CELÃ‰ HRY: SNADNÃ� â€“ Formuluj otÃ¡zky jednoduÅ¡e z obecnÄ› znÃ¡mÃ½ch informacÃ­. VyhÃ½bej se detailÅ¯m a insider faktÅ¯m. MoÅ¾nosti odpovÄ›dÃ­ musÃ­ bÃ½t zÅ™etelnÄ› odliÅ¡itelnÃ©.Ú2uÑ   HLAVNÃ� OBTÃ�Å½NOST CELÃ‰ HRY: TÄšÅ½KÃ� â€“ OpÃ­rej otÃ¡zky o hlubÅ¡Ã­ znalosti a pÅ™esnÃ© kontexty. VyuÅ¾Ã­vej odbornÄ›jÅ¡Ã­ pojmy. MoÅ¾nosti odpovÄ›dÃ­ musÃ­ bÃ½t velmi vÄ›rohodnÃ© a peÄ�livÄ› odliÅ¡itelnÃ©.u¹   HLAVNÃ� OBTÃ�Å½NOST CELÃ‰ HRY: STÅ˜EDNÃ� â€“ Pracuj s mÃ­rnou mÃ­rou detailu nad mainstream. Zachovej srozumitelnost. MoÅ¾nosti odpovÄ›dÃ­ musÃ­ bÃ½t vÄ›rohodnÃ©, nikoli zavÃ¡dÄ›jÃ­cÃ­.)Ú	xbmcaddonÚAddonÚ
getSetting)ÚaddonÚsettings     r   Ú_get_global_difficultyr   '   si   € õ
 ŒOÑÔ€EØ×ÒÐ7Ñ8Ô8€GØ�#‚~€~ðHð	
ð 	
ð
 
�CŠˆð[ð	
ð 	
ð	Nðð r   )u&   Pouze nÃ¡zev hry, Å¾Ã¡dnÃ© uvÃ­tÃ¡nÃ­.õ*   Jedna krÃ¡tkÃ¡ vÄ›ta, nejvÃ½Å¡e 90 znakÅ¯.u4   DvÄ› krÃ¡tkÃ© vÄ›ty, dohromady nejvÃ½Å¡e 170 znakÅ¯.u    3-4 vÄ›ty, nejvÃ½Å¡e 300 znakÅ¯.)u   Pouze poÄ�et otÃ¡zek.u*   Jedna krÃ¡tkÃ¡ vÄ›ta, nejvÃ½Å¡e 80 znakÅ¯.u"   Jedna vÄ›ta, nejvÃ½Å¡e 110 znakÅ¯.u    2-3 vÄ›ty, nejvÃ½Å¡e 220 znakÅ¯.)u1   Å½Ã¡dnÃ½ Ãºvod, rovnou otÃ¡zka. Ponech prÃ¡zdnÃ©.r    u)   1-2 krÃ¡tkÃ© vÄ›ty, nejvÃ½Å¡e 150 znakÅ¯.u-   2-3 vÄ›ty, dramatickÃ©, nejvÃ½Å¡e 250 znakÅ¯.)u&   Jedno slovo: SprÃ¡vnÄ›! nebo Å patnÄ›!u*   Jedna krÃ¡tkÃ¡ vÄ›ta, nejvÃ½Å¡e 70 znakÅ¯.u3   1-2 krÃ¡tkÃ© vÄ›ty, dohromady nejvÃ½Å¡e 110 znakÅ¯.u    2-3 vÄ›ty, nejvÃ½Å¡e 200 znakÅ¯.)u$   Å½Ã¡dnÃ½ pÅ™echod. Ponech prÃ¡zdnÃ©.u*   Jedna krÃ¡tkÃ¡ vÄ›ta, nejvÃ½Å¡e 60 znakÅ¯.u)   1-2 krÃ¡tkÃ© vÄ›ty, nejvÃ½Å¡e 100 znakÅ¯.u   2 vÄ›ty, nejvÃ½Å¡e 160 znakÅ¯.)u(   Å½Ã¡dnÃ© vysvÄ›tlenÃ­. Ponech prÃ¡zdnÃ©.u"   Jedna vÄ›ta, nejvÃ½Å¡e 130 znakÅ¯.u    1-2 vÄ›ty, nejvÃ½Å¡e 200 znakÅ¯.u-   2-3 vÄ›ty, edukativnÃ­, nejvÃ½Å¡e 300 znakÅ¯.)ÚwelcomeÚrules_summaryÚintroÚresultÚ
transitionÚexplanationc                  óÎ  — ddl }  | j        ¦   «         }|                     d¦  «        pd|                     d¦  «        pd|                     d¦  «        pd|                     d¦  «        pd|                     d	¦  «        pdd
œ}i }|                     ¦   «         D ]p\  }}	 t	          |¦  «        }n# t
          $ r d}Y nw xY wt                               |dgdz  ¦  «        }|t          |t          |¦  «        dz
  ¦  «                 ||<   Œqt	          |                     dd¦  «        ¦  «        }t          d         }	|	t          |t          |	¦  «        dz
  ¦  «                 |d<   |S )zCLoad text length settings from addon. Returns dict of instructions.r   NÚmilionar_len_welcomer   Úmilionar_len_introÚ1Úmilionar_len_resultÚmilionar_len_transitionÚmilionar_len_explanation)r!   r#   r$   r%   r&   r   u   1 vÄ›ta.r   r!   r"   )
r   r   r   ÚitemsÚintÚ
ValueErrorÚ_LENGTH_INSTRUCTIONSÚgetÚminÚlen)
r   r   Úsettingsr$   ÚkeyÚrawÚidxÚinstructionsÚwelcome_idxÚrules_instrs
             r   Ú_load_text_lengthsr<   u   s‹  € àÐÐÐØˆIŒOÑÔ€Eà×#Ò#Ð$:Ñ;Ô;ÐB¸sØ×!Ò!Ð"6Ñ7Ô7Ð>¸3Ø×"Ò"Ð#8Ñ9Ô9Ð@¸SØ×&Ò&Ð'@ÑAÔAÐHÀSØ×'Ò'Ð(BÑCÔCÐJÀsðð €Hð €FØ—N’NÑ$Ô$ð Dð D‰ˆˆSð	Ý�c‘(”(ˆCˆCøÝð 	ð 	ð 	ØˆCˆCˆCð	øøøå+×/Ò/°°j°\ÀAÑ5EÑFÔFˆØ"¥3 s­C°Ñ,=Ô,=ÀÑ,AÑ#BÔ#BÔCˆˆs‰ˆå�h—l’l 9¨cÑ2Ô2Ñ3Ô3€KÝ& Ô7€KØ)­#¨k½3¸{Ñ;KÔ;KÈaÑ;OÑ*PÔ*PÔQ€Fˆ?ÑØ€Ms   Â!B1Â1C Â?C Ú c                 óN  — g }| dv �r|pi }	|	                      d|¦  «        }
|	                      dd¦  «        }|	                      dg ¦  «        }dddd	dœ}|                     d
                     |                      | d¦  «        |
¦  «        ¦  «         |r0|                     d                     |dd…         ¦  «        ¦  «         |rOd„ |dd…         D ¦   «         }|                     d                     d                     |¦  «        ¦  «        ¦  «         �nû| dk    r†d                     |¦  «        }|                     d                     |¦  «        ¦  «         |r0|                     d                     |dd…         ¦  «        ¦  «         |                     d¦  «         �no| dk    rÐ|r4d                     ||¦  «        }|r|r|d                     ||¦  «        z  }nd                     |¦  «        }|                     d                     |¦  «        ¦  «         |r0|                     d                     |dd…         ¦  «        ¦  «         |r(|                     d                     |¦  «        ¦  «         n™d                     |¦  «        }|                     d                     |¦  «        ¦  «         |r0|                     d                     |dd…         ¦  «        ¦  «         |r(|                     d                     |¦  «        ¦  «         d                      |¦  «        S )!z•Build media context block for system prompt.

    Returns a multi-line string with subject identification, plot/bio,
    genre, and known roles.
    )ÚactorÚdirectorÚwriterÚcreatorÚnameÚ	biographyr=   Ú	known_forÚherciu   reÅ¾isÃ©roviu   scÃ©nÃ¡ristoviu   tvÅ¯rci seriÃ¡lÅ¯u   PÅ˜EDMÄšT KVÃ�ZU: {} {}Ú	osobnostiu   Å½IVOTOPIS: {}NiX  c                 ód   — g | ]-}|                      d ¦  «        p|                      dd¦  «        ‘Œ.S )ÚtitlerC   r=   )r2   )Ú.0Úitems     r   ú
<listcomp>z(_build_media_context.<locals>.<listcomp>®   sG   € ð ð ð àð —’˜Ñ!Ô!Ð9 T§X¢X¨f°bÑ%9Ô%9ðð ð r   é
   u   ZNÃ�MÃ� DÃ�LA: {}z, Úchannelu!   kanÃ¡l "{}" (mix vÃ­ce seriÃ¡lÅ¯)u   PÅ˜EDMÄšT KVÃ�ZU: {}u   SERIÃ�LY V KANÃ�LU:
{}iÐ  uõ   INSTRUKCE: OtÃ¡zky generuj STÅ˜Ã�DAVÄš a NÃ�HODNÄš ze vÅ¡ech seriÃ¡lÅ¯ v kanÃ¡lu. KaÅ¾dÃ¡ otÃ¡zka by mÄ›la bÃ½t z jinÃ©ho seriÃ¡lu neÅ¾ pÅ™edchozÃ­ (pokud je to moÅ¾nÃ©). V moderator_intro vÅ¾dy uveÄ�, ze kterÃ©ho seriÃ¡lu je aktuÃ¡lnÃ­ otÃ¡zka.Úseriesu   seriÃ¡l "{}", epizoda "{}"z (S{:02d}E{:02d})u   seriÃ¡l "{}"u   DÄšJ: {}u
   Å½Ã�NR: {}z	film "{}"ú
)r2   ÚappendÚformatÚjoin)Ú
media_typerI   ÚplotÚgenreÚepisode_titleÚseason_numberÚepisode_numberÚ
actor_dataÚlinesÚdatarC   ÚbiorE   Úrole_labelsÚtitlesÚsubjs                   r   Ú_build_media_contextra   “   s]  € ð €EàÐ?Ð?Ñ?ØÐ˜RˆØ�xŠx˜ Ñ&Ô&ˆØ�hŠh�{ BÑ'Ô'ˆØ—H’H˜[¨"Ñ-Ô-ˆ	àØ&Ø&Ø*ð	
ð 
ˆð 	�ŠÐ.×5Ò5Ø�OŠO˜J¨Ñ4Ô4°dñ
ô 
ñ 	ô 	ð 	ð ð 	=Ø�LŠLÐ)×0Ò0°°T°c°T´Ñ;Ô;Ñ<Ô<Ð<Øð 	Hðð à% c r cœNðñ ô ˆFð �LŠLÐ,×3Ò3°D·I²I¸fÑ4EÔ4EÑFÔFÑGÔGÐGùð ˜Ò"Ð"Ø6×=Ò=¸eÑDÔDˆDØ�LŠLÐ/×6Ò6°tÑ<Ô<Ñ=Ô=Ð=Øð LØ—’Ð6×=Ò=¸dÀ5ÀDÀ5¼kÑJÔJÑKÔKÐKØ�LŠLðEñô ð ñ ð ˜8Ò#Ð#Øð 4Ø3×:Ò:¸5À-ÑPÔP�Ø ð  ^ð ØÐ/×6Ò6Ø% ~ñô ñ �Døð &×,Ò,¨UÑ3Ô3�Ø�LŠLÐ/×6Ò6°tÑ<Ô<Ñ=Ô=Ð=Øð <Ø—’˜Z×.Ò.¨t°D°S°D¬zÑ:Ô:Ñ;Ô;Ð;Øð 9Ø—’˜\×0Ò0°Ñ7Ô7Ñ8Ô8Ð8øà×%Ò% eÑ,Ô,ˆDØ�LŠLÐ/×6Ò6°tÑ<Ô<Ñ=Ô=Ð=Øð <Ø—’˜Z×.Ò.¨t°D°S°D¬zÑ:Ô:Ñ;Ô;Ð;Øð 9Ø—’˜\×0Ò0°Ñ7Ô7Ñ8Ô8Ð8à�9Š9�UÑÔÐr   c                 ó8  — t          ¦   «         }t          | |||||||¦  «        }	ddlm}
  |
¦   «         }t	          ¦   «         }ddlm} d} |¦   «         rd}d                     |||	||d         |d         |d	         |d
         |d         |d         ¬¦
  «
        }|S )z¨Build the fixed system prompt for an entire Millionaire game session.

    Structure:
    Role -> Context -> Style (from SKILL.md) -> Task -> Format -> Constraints
    r   )Úget_style_prompt_block)Úis_elevenlabs_v3_activer=   u´  

AUDIO TAGY:
Text je Ä�ten nahlas expresivnÃ­m TTS modelem. Do textovÃ½ch polÃ­ (moderator_welcome, rules_summary, moderator_intro, result_announcement, transition_text, explanation) vklÃ¡dej audio tagy v [hranatÃ½ch zÃ¡vorkÃ¡ch] -- Å™Ã­dÃ­ emoce a tempo hlasu.

DostupnÃ© tagy:
- Emoce: [excited] [nervous] [frustrated] [sorrowful] [calm] [sad] [angry] [happily] [tired] [curious] [mischievously]
- Reakce: [sigh] [sighs] [laughs] [laughing] [gasps] [gulps] [whispers] [clears throat] [exhales] [panting] [hesitates] [stammers] [pauses]
- TÃ³n: [cheerfully] [flatly] [deadpan] [playfully] [dramatically] [sarcastically] [matter-of-fact] [whispering] [shouting] [quietly] [loudly] [rushed]
- Zvuky: [clapping] [explosion] [door creaks]

Pravidla:
- KaÅ¾dÃ½ text musÃ­ mÃ­t minimÃ¡lnÄ› 2-3 tagy
- VklÃ¡dej pÅ™irozenÄ› DO textu, ne na zaÄ�Ã¡tek
- Kombinuj emoce + reakce + pacing
- StupÅˆuj expresivitu s rostoucÃ­ Ä�Ã¡stkou
- U sprÃ¡vnÃ© odpovÄ›di: [excited], [laughs], [cheerfully], [clapping]
- U Å¡patnÃ© odpovÄ›di: [sighs], [sorrowful], [pauses], [quietly]
- U napÃ­navÃ½ch momentÅ¯: [dramatically], [pauses], [whispers], [gasps]
- NEpouÅ¾Ã­vej tagy v poli "question" a "options" -- tam patÅ™Ã­ Ä�istÃ½ text

PÅ™Ã­klad moderator_intro: "[dramatically] Tak tady jsme, [pauses] otÃ¡zka za padesÃ¡t tisÃ­c! [excited] Jste pÅ™ipraveni?"
PÅ™Ã­klad result_announcement: "[gasps] [excited] A je to sprÃ¡vnÄ›! [clapping] [cheerfully] VÃ½bornÄ›, postupujete dÃ¡l!"
uM  ROLE:
Jsi moderÃ¡tor Ä�eskÃ©ho kvÃ­zu "Chcete bÃ½t milionÃ¡Å™em". ZnÃ¡Å¡ dÃ­lo, o kterÃ©m se hraje, a odkazujeÅ¡ na nÄ›j v komentÃ¡Å™Ã­ch. HrÃ¡Ä�e oslovujeÅ¡ vykÃ¡nÃ­m.

STYL MODERÃ�TORA:
{style_block}

{global_difficulty}

KONTEXT:
{media_context}
{audio_tags_block}
HERNÃ� STRUKTURA:
- 9 kol, 3 ÃºrovnÄ› obtÃ­Å¾nosti; kaÅ¾dÃ© kolo je tÄ›Å¾Å¡Ã­ neÅ¾ pÅ™edchozÃ­
- Kola 1-3: SNADNÃ� â€“ odpovÃ­ kaÅ¾dÃ½, kdo dÃ­lo vidÄ›l: hlavnÃ­ postavy a jejich pÅ™edstavitelÃ©, zÃ¡kladnÃ­ zÃ¡pletka, nejslavnÄ›jÅ¡Ã­ momenty
- Kola 4-6: STÅ˜EDNÃ� â€“ pro pozornÃ©ho divÃ¡ka: vedlejÅ¡Ã­ postavy, konkrÃ©tnÃ­ scÃ©ny, jmÃ©na mÃ­st a pÅ™edmÄ›tÅ¯, motivace postav
- Kola 7-9: TÄšÅ½KÃ� â€“ pro skuteÄ�nÃ©ho fanouÅ¡ka: drobnÃ© detaily konkrÃ©tnÃ­ch scÃ©n, citÃ¡ty, souvislosti mezi udÃ¡lostmi, mÃ©nÄ› znÃ¡mÃ­ herci a tvÅ¯rci; zÃ¡kulisÃ­ jen tam, kde je fakt vÅ¡eobecnÄ› doloÅ¾enÃ½
- ÄŒÃ¡stky: 1 000 / 2 000 / 5 000 / 10 000 / 20 000 / 50 000 / 100 000 / 500 000 / 1 000 000 KÄ�
- 3 nÃ¡povÄ›dy: 50:50, Tip, HlasovÃ¡nÃ­ divÃ¡kÅ¯

ÃšKOL:
VedeÅ¡ celou hru jako continuous chat. V kaÅ¾dÃ©m kole dostaneÅ¡ instrukci, jakÃ½ typ odpovÄ›di mÃ¡Å¡ vrÃ¡tit (welcome / otÃ¡zka / feedback). VÅ¾dy odpovÃ­dÃ¡Å¡ POUZE validnÃ­m JSON objektem.

TÅ˜I TYPY ODPOVÄšDÃ�:

1. WELCOME (ÃºvodnÃ­ zprÃ¡va):
{{"moderator_welcome": "PÅ™ivÃ­tÃ¡nÃ­ hrÃ¡Ä�e u kvÃ­zu o tomto dÃ­le: osobnÃ­ myÅ¡lenka k dÃ­lu nebo jeho atmosfÃ©Å™e, kterÃ¡ naladÃ­ na hru. Neprozrazuj dÄ›j ani odpovÄ›di. {len_welcome}", "rules_summary": "Pravidla: 9 otÃ¡zek od snadnÃ½ch po tÄ›Å¾kÃ©, 3 nÃ¡povÄ›dy, cÃ­lem je virtuÃ¡lnÃ­ milion. {len_rules}"}}
Ãšvod hrÃ¡Ä� Ä�te na obrazovce s nÃ¡zvem dÃ­la, poÄ�tem otÃ¡zek a nÃ¡povÄ›d: drÅ¾ ho krÃ¡tkÃ½ a nezaÄ�Ã­nej pokaÅ¾dÃ© stejnou formulÃ­.

2. QUESTION (otÃ¡zka pro hrÃ¡Ä�e):
{{"moderator_intro": "Ãšvod ke kolu. ZmÃ­Åˆ Ä�Ã­slo kola, Ä�Ã¡stku, vytvoÅ™ napÄ›tÃ­, odkaÅ¾ na kontext dÃ­la. {len_intro}", "explanation": "Fakt z dÃ­la, na kterÃ©m otÃ¡zka stojÃ­, a proÄ� je sprÃ¡vnÃ¡ odpovÄ›Ä� sprÃ¡vnÃ¡. {len_explanation}", "question": "Text otÃ¡zky", "options": {{"A": "MoÅ¾nost A", "B": "MoÅ¾nost B", "C": "MoÅ¾nost C", "D": "MoÅ¾nost D"}}, "correct": "A"}}
Pole "explanation" piÅ¡ pÅ™ed otÃ¡zkou: nejdÅ™Ã­v si zvol fakt, kterÃ½ znÃ¡Å¡ jistÄ›, a otÃ¡zku postav aÅ¾ na nÄ›m. HrÃ¡Ä� vysvÄ›tlenÃ­ uvidÃ­ aÅ¾ po odpovÄ›di.

3. FEEDBACK (vÃ½sledek odpovÄ›di):
{{"result_announcement": "Reakce moderÃ¡tora na odpovÄ›Ä�: Å™ekni, zda je sprÃ¡vnÃ¡, a pÅ™idej jeden vtipnÃ½ nebo zajÃ­mavÃ½ postÅ™eh k dÃ­lu nebo k tÃ©matu otÃ¡zky. {len_result}", "transition_text": "NaladÄ›nÃ­ na dalÅ¡Ã­ kolo -- u pÅ™echodu obtÃ­Å¾nosti ho zmiÅˆ; po Å¡patnÃ© odpovÄ›di nebo milionu rozlouÄ�enÃ­. {len_transition}"}}
HrÃ¡Ä� mÃ¡ pÅ™ed sebou na obrazovce velkÃ½ nÃ¡pis SprÃ¡vnÄ›/Å patnÄ›, sprÃ¡vnou odpovÄ›Ä�, vysvÄ›tlenÃ­, zÃ­skanou Ä�Ã¡stku i Ä�Ã¡stku dalÅ¡Ã­ otÃ¡zky: ve feedbacku je neopakuj, pÅ™idej to, co tam nenÃ­ (milion v poslednÃ­m kole zmÃ­nit mÅ¯Å¾eÅ¡). ZaÄ�Ã¡tek obmÄ›Åˆuj, nezaÄ�Ã­nej pokaÅ¾dÃ© slovem "SprÃ¡vnÄ›".

PRAVIDLA OTÃ�ZEK:
- KaÅ¾dÃ¡ otÃ¡zka mÃ¡ pÅ™esnÄ› 4 moÅ¾nosti (A, B, C, D)
- SprÃ¡vnÃ¡ odpovÄ›Ä� jako jedno pÃ­smeno (A, B, C nebo D)
- KaÅ¾dÃ¡ moÅ¾nost odpovÄ›di mÃ¡ nejvÃ½Å¡e 25 znakÅ¯ vÄ�etnÄ› mezer: heslovitÄ› (jmÃ©no, slovo nebo krÃ¡tkÃ© spojenÃ­), ne vÄ›ta -- delÅ¡Ã­ text se na tlaÄ�Ã­tko nevejde
- Neopakuj otÃ¡zky -- mÃ¡Å¡ celou historii chatu, vyuÅ¾ij ji
- ObtÃ­Å¾nost otÃ¡zky odpovÃ­dÃ¡ aktuÃ¡lnÃ­mu kolu (vidÃ­Å¡ v user message); hlavnÃ­ postavy a pÅ™edstavitelÃ© hlavnÃ­ch rolÃ­ patÅ™Ã­ do snadnÃ½ch kol
- Ptej se jen na fakta, kterÃ¡ znÃ¡Å¡ jistÄ›. KdyÅ¾ si fakt nejsi jistÃ½, vyber jinou otÃ¡zku -- chybnou sprÃ¡vnou odpovÄ›Ä� hrÃ¡Ä� poznÃ¡ a hra ztratÃ­ dÅ¯vÄ›ryhodnost.
- PravdivÃ© musÃ­ bÃ½t celÃ© zadÃ¡nÃ­, nejen sprÃ¡vnÃ¡ odpovÄ›Ä�: kaÅ¾dÃ¡ postava, role, mÃ­sto a okolnost, kterou otÃ¡zka zmiÅˆuje, odpovÃ­dÃ¡ dÃ­lu.
- NevymÃ½Å¡lej jmÃ©na, pÅ™ezdÃ­vky ani Ä�Ã­sla, kterÃ¡ si pÅ™esnÄ› nepamatujeÅ¡; na jmÃ©no postavy, kterÃ¡ ho v dÃ­le nemÃ¡, se neptej.
- OtÃ¡zka se ptÃ¡ na jednu vÄ›c, kterou sama neuvÃ¡dÃ­; sprÃ¡vnÃ¡ odpovÄ›Ä� ani jejÃ­ Ä�Ã¡st (jmÃ©no, Ä�Ã­slo) nezaznÃ­ v textu otÃ¡zky. MÃ¡ jedinou jednoznaÄ�nÄ› sprÃ¡vnou odpovÄ›Ä�.
- JmÃ©na postav, mÃ­st a pÅ™edmÄ›tÅ¯ piÅ¡ tak, jak je znÃ¡ Ä�eskÃ½ divÃ¡k z dabingu nebo pÅ™ekladu; kdyÅ¾ Ä�eskÃ½ nÃ¡zev jistÄ› neznÃ¡Å¡, pouÅ¾ij originÃ¡lnÃ­.
- Å patnÃ© moÅ¾nosti jsou skuteÄ�nÃ© vÄ›ci stejnÃ©ho druhu jako sprÃ¡vnÃ¡ odpovÄ›Ä� (jmÃ©na se jmÃ©ny, roky s roky), nejlÃ©pe z tÃ©hoÅ¾ dÃ­la; Å¾Ã¡dnÃ¡ nenÃ­ jinÃ½ nÃ¡zev, pÅ™eklad nebo zkrÃ¡cenÃ­ sprÃ¡vnÃ© odpovÄ›di a Å¾Ã¡dnÃ¡ nenÃ­ vymyÅ¡lenÃ½ nesmysl.
- ObtÃ­Å¾nost dÄ›lÃ¡ to, na co se ptÃ¡Å¡, a vÄ›rohodnÃ© Å¡patnÃ© moÅ¾nosti, ne zavÃ¡dÄ›jÃ­cÃ­ formulace.
- KaÅ¾dÃ¡ otÃ¡zka hry se tÃ½kÃ¡ jinÃ©ho faktu a mÃ¡ jinou sprÃ¡vnou odpovÄ›Ä� neÅ¾ pÅ™edchozÃ­.
- HrÃ¡Ä� vidÃ­ jen text: otÃ¡zka musÃ­ dÃ¡vat smysl bez obrÃ¡zku a bez odkazu na "tuto scÃ©nu" nebo "tento zÃ¡bÄ›r".
- NepouÅ¾Ã­vej otÃ¡zky typu "KterÃ¡ z tÄ›chto moÅ¾nostÃ­ je sprÃ¡vnÃ¡?" -- formuluj konkrÃ©tnÄ›

PRAVIDLA MODERÃ�TORA:
- DodrÅ¾uj styl definovanÃ½ vÃ½Å¡e v sekci STYL MODERÃ�TORA
- StupÅˆuj napÄ›tÃ­ s rostoucÃ­ obtÃ­Å¾nostÃ­ a Ä�Ã¡stkou
- Reaguj na kontext -- pokud hrÃ¡Ä� odpovÃ­dÃ¡ sprÃ¡vnÄ›, pochval; pokud Å¡patnÄ›, projev soucit
- Odkazuj na dÃ­lo pÅ™irozenÄ›, ne nucenÄ›
- U pÅ™echodu obtÃ­Å¾nosti (kolo 3->4, 6->7) zmÃ­Åˆ zvÃ½Å¡enÃ­ obtÃ­Å¾nosti
- U poslednÃ­ho kola (9) zdÅ¯razni, Å¾e jde o milion
- Mluv Ä�esky, pÅ™irozenÄ›, ne roboticky
- PohlavÃ­ hrÃ¡Ä�e neznÃ¡Å¡: vykej v mnoÅ¾nÃ©m Ä�Ã­sle (zvlÃ¡dli jste), nikdy nepiÅ¡ tvary typu "trefil(a)"
- U vÃ¡Å¾nÃ½ch a tragickÃ½ch dÄ›l (katastrofy, vÃ¡lka, smrt) tlum humor: vtipkuj o sobÄ› nebo o hÅ™e, nikdy o obÄ›tech a utrpenÃ­
- NepoÄ�Ã­tej odehranÃ¡ kola a neopakuj obraty z pÅ™edchozÃ­ch kol -- kaÅ¾dÃ¡ reakce je novÃ¡
- Limity znakÅ¯ u jednotlivÃ½ch polÃ­ dodrÅ¾: texty se Ä�tou na televiznÃ­ obrazovce a delÅ¡Ã­ se nevejdou

VÃ�STUP:
OdpovÄ›Ä� je jeden validnÃ­ JSON objekt bez textu okolo a bez markdown bloku -- aplikace ho strojovÄ› parsuje.r!   r"   r#   r$   r%   r&   )
Ústyle_blockÚglobal_difficultyÚmedia_contextÚaudio_tags_blockÚlen_welcomeÚ	len_rulesÚ	len_introÚ
len_resultÚlen_transitionÚlen_explanation)r   ra   Úwcs.games.moderator_stylesrc   r<   Úwcs.games.millionaire_ttsrd   rR   )rT   rI   rU   rV   rW   rX   rY   rZ   rf   rg   rc   re   Úlengthsrd   rh   Úprompts                   r   Úbuild_system_promptrs   Ý   s  € õ /Ñ0Ô0ÐÝ(Ø�E˜4 Ø�} n°jñô €Mð BÐAÐAÐAÐAÐAØ(Ð(Ñ*Ô*€Kõ !Ñ"Ô"€Gð BÐAÐAÐAÐAÐAØÐØÐÑ Ô ð ðÐð2Dr÷H syÒrxØØ+Ø#Ø)Ø˜IÔ&Ø˜/Ô*Ø˜'Ô"Ø˜8Ô$Ø˜|Ô,Ø Ô.ð syñ sô sðI ðb €Mr   c                  ód   — t          ¦   «         } dt          d| d         fd| d         f¦  «        z   S )z;Build user message for the welcome inference (inference 1).un   ZaÄ�ni hru. PÅ™ivÃ­tej hrÃ¡Ä�e, pÅ™edstav tÃ©ma kvÃ­zu a struÄ�nÄ› vysvÄ›tli pravidla. OdpovÄ›z typem WELCOME.Úmoderator_welcomer!   r"   )r<   Ú_length_note)rq   s    r   Úbuild_welcome_messagerw   g  sB   € å Ñ"Ô"€Gð	,åÐ)¨7°9Ô+=Ð>ÀÐRYÐZiÔRjÐ@kÑlÔlñmð mr   )u=   co konkrÃ©tnÃ­ postava udÄ›lÃ¡ nebo Å™ekne v urÄ�itÃ© scÃ©nÄ›u   mÃ­sto, kde se nÄ›co odehrÃ¡vÃ¡u-   pÅ™edmÄ›t nebo rekvizita dÅ¯leÅ¾itÃ¡ pro dÄ›ju   znÃ¡mÃ¡ hlÃ¡Å¡ka nebo citÃ¡tu   vztah mezi dvÄ›ma postavamiu   vedlejÅ¡Ã­ postavau   zaÄ�Ã¡tek dÄ›jeu   zlom nebo vyvrcholenÃ­ dÄ›jeu+   jmÃ©no, pÅ™ezdÃ­vka nebo povolÃ¡nÃ­ postavyu   hudba nebo pÃ­seÅˆ v dÃ­leu   herec nebo hereÄ�ka v roliu$   Ä�Ã­slo, datum nebo Ä�Ã¡stka z dÄ›jeu*   zvÃ­Å™e nebo dopravnÃ­ prostÅ™edek v dÃ­leu    dopis, dÃ¡rek nebo vzkaz v dÄ›ji)ÚmovierO   rN   c                 ól  — t          | ¦  «        }t                               | d¦  «        }d}| dk    rd}n| dk    rd}n| dk    rd}d	d
ddœ|         }|rd                     |¦  «        nd}t	          ¦   «         }d                     | |||||¬¦  «        t          d|d         fd|d         f¦  «        z   S )zâBuild user message requesting a new question (inference 2, 4, 6, ...).

    Args:
        round_num: Current round number (1-9).
        angle: Optional angle of the question (QUESTION_ANGLES), drawn per game for variety.
    r   r=   r   u(    PÅ™echÃ¡zÃ­me na STÅ˜EDNÃ� obtÃ­Å¾nost.r
   u'    PÅ™echÃ¡zÃ­me na TÄšÅ½KOU obtÃ­Å¾nost.r   u%    Toto je POSLEDNÃ� otÃ¡zka za MILION!u(   OtÃ¡zka pro kaÅ¾dÃ©ho, kdo dÃ­lo vidÄ›l.uC   OtÃ¡zka pro pozornÃ©ho divÃ¡ka, tÄ›Å¾Å¡Ã­ neÅ¾ v pÅ™edchozÃ­m kole.uz   OtÃ¡zka pro skuteÄ�nÃ©ho fanouÅ¡ka, tÄ›Å¾Å¡Ã­ neÅ¾ v pÅ™edchozÃ­m kole -- ne na hlavnÃ­ postavy ani jejich pÅ™edstavitele.)r   r   r   u^    Ãšhel otÃ¡zky: {}. KdyÅ¾ k nÄ›mu neznÃ¡Å¡ jistÃ½ fakt v tÃ©to obtÃ­Å¾nosti, zvol jinÃ½ Ãºhel.u•   Kolo {round_num}/9, obtÃ­Å¾nost: {difficulty}, Ä�Ã¡stka: {money}.{transition_note} {audience}{angle_note} Vygeneruj otÃ¡zku. OdpovÄ›z typem QUESTION.)r   Ú
difficultyÚmoneyÚtransition_noteÚaudienceÚ
angle_noteÚmoderator_intror#   r&   )r   ÚMONEY_AMOUNTSr2   rR   r<   rv   )r   Úanglerz   r{   r|   r}   r~   rq   s           r   Úbuild_question_messager‚   …  s  € õ +¨9Ñ5Ô5€JÝ×Ò˜i¨Ñ5Ô5€Eð €OØ�A‚~€~ØDˆˆØ	�aŠˆØCˆˆØ	�aŠˆØAˆð >ØZð Qðð ð ô	€Hð ð#Ðr×yÒyÐzñ  Aô  Að  AØ "ð õ !Ñ"Ô"€Gð	_ç‚fØØØØ'ØØð ñ ô õ 	Ð'¨°Ô)9Ð:¸]ÈGÐTaÔLbÐ<cÑdÔdñ
eð 
er   Fc                 ó  — |rdnd}d                      | |||||¬¦  «        }|r|r|dz  }n(|r!|dddd	œ                     | d
z   d¦  «        z  }n|dz  }|dz  }t          ¦   «         }	|t          d|	d         fd|	d         f¦  «        z   S )aÎ  Build user message requesting feedback after player's answer.

    Args:
        round_num: Current round number (1-9).
        player_answer_letter: Letter chosen by player (A/B/C/D).
        player_answer_text: Text of the chosen answer.
        correct_answer_letter: Correct answer letter.
        correct_answer_text: Text of the correct answer.
        is_correct: Whether the player answered correctly.
        is_last_round: Whether this is round 9.
    u	   SPRÃ�VNÄšu   Å PATNÄšu•   Kolo {round_num}/9. HrÃ¡Ä� vybral {player_letter}: {player_text}. SprÃ¡vnÃ¡ odpovÄ›Ä�: {correct_letter}: {correct_text}. HrÃ¡Ä� odpovÄ›dÄ›l {result}.)r   Úplayer_letterÚplayer_textÚcorrect_letterÚcorrect_textr$   u.    HrÃ¡Ä� vyhrÃ¡l MILION! Gratuluj a rozluÄ� se.u0    DalÅ¡Ã­ kolo zaÄ�Ã­nÃ¡ STÅ˜EDNÃ� obtÃ­Å¾nostÃ­.u/    DalÅ¡Ã­ kolo zaÄ�Ã­nÃ¡ TÄšÅ½KOU obtÃ­Å¾nostÃ­.u    DalÅ¡Ã­ otÃ¡zka je o milion.)r   r
   r   r   r=   u"    Konec hry. RozluÄ� se s hrÃ¡Ä�em.u    OdpovÄ›z typem FEEDBACK.Úresult_announcementr$   Útransition_textr%   )rR   r2   r<   rv   )
r   Úplayer_answer_letterÚplayer_answer_textÚcorrect_answer_letterÚcorrect_answer_textÚ
is_correctÚis_last_roundr$   Úmsgrq   s
             r   Úbuild_feedback_messager‘   °  sí   € ð 'Ð6ˆ[ˆ[¨J€Fð
	'÷ ‚fØØ*Ø&Ø,Ø(Øð ñ ô ð	 ð ð 4�mð 4ØÐ?Ñ?ˆˆØ	ð 4ØÐEÐJ{Ø2ð4ð 4ß47²C¸	ÀA¹ÀrÑ4JÔ4Jñ	Kˆˆð 	Ð3Ñ3ˆØÐ&Ñ&€Cå Ñ"Ô"€GØ•Ð4°g¸hÔ6GÐHÐK\Ð^eÐfrÔ^sÐJtÑuÔuÑuÐur   c                  óL   — dd                      d„ | D ¦   «         ¦  «        z   dz   S )z The length limits repeated next to the request: in a long chat the system prompt is far away and models drift
    to longer texts (texts are read on a TV card).u	    DÃ©lky: z; c              3   ón   K  — | ]0\  }}d                       ||                     d¦  «        ¦  «        V — Œ1dS )z{} -- {}ú.N)rR   Úrstrip)rJ   rC   Úrules      r   ú	<genexpr>z_length_note.<locals>.<genexpr>ß  sE   è è € Ð"fÐ"fÑQ[ÐQUÐW[ :×#4Ò#4°T¸4¿;º;ÀsÑ;KÔ;KÑ#LÔ#LÐ"fÐ"fÐ"fÐ"fÐ"fÐ"fr   r”   )rS   )Úfieldss    r   rv   rv   Ü  s1   € ð ˜ŸšÐ"fÐ"fÐ_eÐ"fÑ"fÔ"fÑfÔfÑfÐilÑlÐlr   )r=   r=   r=   NNN)N)F)Ú__doc__r   r€   r   r   r1   r<   ra   rs   rw   ÚQUESTION_ANGLESÚANGLE_MEDIAr‚   r‘   rv   r   r   r   ú<module>rœ      sš  ððð ð Ð Ð Ð ð ØØØØØØØØð
ð 
€ðð ð ðð ð ðFð ð ðð ð ðð ð ðð ð ðð ð ðð ð ðM,ð ,Ð ð^ð ð ð< <>Ø9=Ø9=ðCð Cð Cð CðT ;=Ø8<Ø8<ðCð Cð Cð CðTmð mð mð€ð  -€ð(eð (eð (eð (eðZ 6;ð)vð )vð )vð )vðXmð mð mð mð mr   