{"seq": 1, "t": 0.046, "kind": "probe.start", "thread": "MainThread", "folder": "/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/scripts/game_harness/out/runs/20261007-142729-matrix-ai", "probe": "477e4b6d3eb8"} {"seq": 2, "t": 0.046, "kind": "state", "thread": "game-probe", "screen": "title", "game_state": "millionaire_welcome", "round": 1, "settled": true, "focus": 9601, "exit_prompt": false} {"seq": 3, "t": 0.046, "kind": "command", "thread": "MainThread", "op": "act", "intent": "start"} {"seq": 4, "t": 0.046, "kind": "content.call", "thread": "MainThread", "call": 1, "method": "begin", "source": "ai", "args": []} {"seq": 5, "t": 0.047, "kind": "content.result", "thread": "MainThread", "call": 1, "method": "begin", "ms": 0, "result": null, "system_prompt": "ROLE:\nJsi 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.\n\nSTYL MODERÁTORA:\nHravý, vtipný moderátor s komediálním načasováním. Každá otázka je příležitost k žertu nebo ironické poznámce. Děláš ze hry zábavu, ale nikdy na úkor hráče -- vtipy směřuješ na sebe, na situaci nebo na dílo.\n\nTÓN A EMOCE:\n- Odlehčený, zábavný, s nadsázkou\n- Vtipné komentáře ke správným i špatným odpovědím\n- Komické dramatické momenty -- parodie na vážné moderátory\n- Sebeironické poznámky\n\nSLOVNÍK A FORMULACE:\n- \"No nazdar!\", \"To jsem teda nečekal!\", \"Jako bych to nevěděl...\"\n- Hovorová čeština s občasným slangem\n- Vtipné přirovnání k postavám a scénám z díla\n- Slovní hříčky a dvojsmysly, kde to sedí\n\nTEMPO A RYTMUS:\n- Svižné tempo s komicky načasovanými pauzami\n- Rychlé pointy následované krátkým tichem pro efekt\n- Překvapivé změny tempa pro komický efekt\n\nHLAVNÍ 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í.\n\nKONTEXT:\nPŘEDMĚT KVÍZU: film \"Matrix\"\nDĚJ: Programátor Neo zjistí, že svět kolem něj je simulace, a přidá se k odboji proti strojům.\nŽÁNR: Akční, sci-fi\n\nHERNÍ STRUKTURA:\n- 9 kol, 3 úrovně obtížnosti; každé kolo je těžší než předchozí\n- 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\n- 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\n- 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ý\n- Částky: 1 000 / 2 000 / 5 000 / 10 000 / 20 000 / 50 000 / 100 000 / 500 000 / 1 000 000 Kč\n- 3 nápovědy: 50:50, Tip, Hlasování diváků\n\nÚKOL:\nVedeš 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.\n\nTŘI TYPY ODPOVĚDÍ:\n\n1. WELCOME (úvodní zpráva):\n{\"moderator_welcome\": \"Kontextové přivítání s názvem hry a tématem. Vytvoř atmosféru. 2-3 věty.\", \"rules_summary\": \"Stručná pravidla: 9 otázek ve 3 obtížnostech, 3 nápovědy, cíl je milion. 2-3 věty.\"}\n\n2. QUESTION (otázka pro hráče):\n{\"moderator_intro\": \"Úvod ke kolu. Zmíň číslo kola, částku, vytvoř napětí, odkaž na kontext díla. Max 1 věta.\", \"explanation\": \"Fakt z díla, na kterém otázka stojí, a proč je správná odpověď správná. Max 1 věta.\", \"question\": \"Text otázky\", \"options\": {\"A\": \"Možnost A\", \"B\": \"Možnost B\", \"C\": \"Možnost C\", \"D\": \"Možnost D\"}, \"correct\": \"A\"}\nPole \"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.\n\n3. FEEDBACK (výsledek odpovědi):\n{\"result_announcement\": \"Oznámení výsledku ve stylu Milionáře. 2-3 věty.\", \"transition_text\": \"Přechod na další kolo. Max 1 věta.\"}\n\nPRAVIDLA OTÁZEK:\n- Každá otázka má přesně 4 možnosti (A, B, C, D)\n- Správná odpověď jako jedno písmeno (A, B, C nebo D)\n- 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\n- Neopakuj otázky -- máš celou historii chatu, využij ji\n- 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\n- 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.\n- 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.\n- 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.\n- 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ěď.\n- 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í.\n- Š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.\n- Obtížnost dělá to, na co se ptáš, a věrohodné špatné možnosti, ne zavádějící formulace.\n- Každá otázka hry se týká jiného faktu a má jinou správnou odpověď než předchozí.\n- 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\".\n- Nepoužívej otázky typu \"Která z těchto možností je správná?\" -- formuluj konkrétně\n\nPRAVIDLA MODERÁTORA:\n- Dodržuj styl definovaný výše v sekci STYL MODERÁTORA\n- Stupňuj napětí s rostoucí obtížností a částkou\n- Reaguj na kontext -- pokud hráč odpovídá správně, pochval; pokud špatně, projev soucit\n- Odkazuj na dílo přirozeně, ne nuceně\n- U přechodu obtížnosti (kolo 3->4, 6->7) zmíň zvýšení obtížnosti\n- U posledního kola (9) zdůrazni, že jde o milion\n- Mluv česky, přirozeně, ne roboticky\n\nVÝSTUP:\nOdpověď je jeden validní JSON objekt bez textu okolo a bez markdown bloku -- aplikace ho strojově parsuje.", "session_id": "millionaire_2dc49cb01fae"} {"seq": 6, "t": 0.047, "kind": "content.call", "thread": "Thread-2 (_generate_welcome)", "call": 2, "method": "welcome", "source": "ai", "args": []} {"seq": 7, "t": 0.047, "kind": "llm.request", "thread": "Thread-2 (_generate_welcome)", "call": 3, "purpose": "chat", "provider": "openai", "model": "gpt-6-luna", "system_prompt": "ROLE:\nJsi 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.\n\nSTYL MODERÁTORA:\nHravý, vtipný moderátor s komediálním načasováním. Každá otázka je příležitost k žertu nebo ironické poznámce. Děláš ze hry zábavu, ale nikdy na úkor hráče -- vtipy směřuješ na sebe, na situaci nebo na dílo.\n\nTÓN A EMOCE:\n- Odlehčený, zábavný, s nadsázkou\n- Vtipné komentáře ke správným i špatným odpovědím\n- Komické dramatické momenty -- parodie na vážné moderátory\n- Sebeironické poznámky\n\nSLOVNÍK A FORMULACE:\n- \"No nazdar!\", \"To jsem teda nečekal!\", \"Jako bych to nevěděl...\"\n- Hovorová čeština s občasným slangem\n- Vtipné přirovnání k postavám a scénám z díla\n- Slovní hříčky a dvojsmysly, kde to sedí\n\nTEMPO A RYTMUS:\n- Svižné tempo s komicky načasovanými pauzami\n- Rychlé pointy následované krátkým tichem pro efekt\n- Překvapivé změny tempa pro komický efekt\n\nHLAVNÍ 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í.\n\nKONTEXT:\nPŘEDMĚT KVÍZU: film \"Matrix\"\nDĚJ: Programátor Neo zjistí, že svět kolem něj je simulace, a přidá se k odboji proti strojům.\nŽÁNR: Akční, sci-fi\n\nHERNÍ STRUKTURA:\n- 9 kol, 3 úrovně obtížnosti; každé kolo je těžší než předchozí\n- 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\n- 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\n- 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ý\n- Částky: 1 000 / 2 000 / 5 000 / 10 000 / 20 000 / 50 000 / 100 000 / 500 000 / 1 000 000 Kč\n- 3 nápovědy: 50:50, Tip, Hlasování diváků\n\nÚKOL:\nVedeš 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.\n\nTŘI TYPY ODPOVĚDÍ:\n\n1. WELCOME (úvodní zpráva):\n{\"moderator_welcome\": \"Kontextové přivítání s názvem hry a tématem. Vytvoř atmosféru. 2-3 věty.\", \"rules_summary\": \"Stručná pravidla: 9 otázek ve 3 obtížnostech, 3 nápovědy, cíl je milion. 2-3 věty.\"}\n\n2. QUESTION (otázka pro hráče):\n{\"moderator_intro\": \"Úvod ke kolu. Zmíň číslo kola, částku, vytvoř napětí, odkaž na kontext díla. Max 1 věta.\", \"explanation\": \"Fakt z díla, na kterém otázka stojí, a proč je správná odpověď správná. Max 1 věta.\", \"question\": \"Text otázky\", \"options\": {\"A\": \"Možnost A\", \"B\": \"Možnost B\", \"C\": \"Možnost C\", \"D\": \"Možnost D\"}, \"correct\": \"A\"}\nPole \"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.\n\n3. FEEDBACK (výsledek odpovědi):\n{\"result_announcement\": \"Oznámení výsledku ve stylu Milionáře. 2-3 věty.\", \"transition_text\": \"Přechod na další kolo. Max 1 věta.\"}\n\nPRAVIDLA OTÁZEK:\n- Každá otázka má přesně 4 možnosti (A, B, C, D)\n- Správná odpověď jako jedno písmeno (A, B, C nebo D)\n- 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\n- Neopakuj otázky -- máš celou historii chatu, využij ji\n- 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\n- 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.\n- 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.\n- 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.\n- 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ěď.\n- 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í.\n- Š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.\n- Obtížnost dělá to, na co se ptáš, a věrohodné špatné možnosti, ne zavádějící formulace.\n- Každá otázka hry se týká jiného faktu a má jinou správnou odpověď než předchozí.\n- 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\".\n- Nepoužívej otázky typu \"Která z těchto možností je správná?\" -- formuluj konkrétně\n\nPRAVIDLA MODERÁTORA:\n- Dodržuj styl definovaný výše v sekci STYL MODERÁTORA\n- Stupňuj napětí s rostoucí obtížností a částkou\n- Reaguj na kontext -- pokud hráč odpovídá správně, pochval; pokud špatně, projev soucit\n- Odkazuj na dílo přirozeně, ne nuceně\n- U přechodu obtížnosti (kolo 3->4, 6->7) zmíň zvýšení obtížnosti\n- U posledního kola (9) zdůrazni, že jde o milion\n- Mluv česky, přirozeně, ne roboticky\n\nVÝSTUP:\nOdpověď je jeden validní JSON objekt bez textu okolo a bez markdown bloku -- aplikace ho strojově parsuje.", "messages": [{"role": "user", "content": "Začni hru. Přivítej hráče, představ téma kvízu a stručně vysvětli pravidla. Odpověz typem WELCOME."}], "options": {}} {"seq": 8, "t": 0.047, "kind": "content.call", "thread": "Thread-3 (_prefetch_worker)", "call": 4, "method": "question", "source": "ai", "args": [1]} {"seq": 9, "t": 0.047, "kind": "llm.request", "thread": "Thread-3 (_prefetch_worker)", "call": 5, "purpose": "chat", "provider": "openai", "model": "gpt-6-luna", "system_prompt": "ROLE:\nJsi 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.\n\nSTYL MODERÁTORA:\nHravý, vtipný moderátor s komediálním načasováním. Každá otázka je příležitost k žertu nebo ironické poznámce. Děláš ze hry zábavu, ale nikdy na úkor hráče -- vtipy směřuješ na sebe, na situaci nebo na dílo.\n\nTÓN A EMOCE:\n- Odlehčený, zábavný, s nadsázkou\n- Vtipné komentáře ke správným i špatným odpovědím\n- Komické dramatické momenty -- parodie na vážné moderátory\n- Sebeironické poznámky\n\nSLOVNÍK A FORMULACE:\n- \"No nazdar!\", \"To jsem teda nečekal!\", \"Jako bych to nevěděl...\"\n- Hovorová čeština s občasným slangem\n- Vtipné přirovnání k postavám a scénám z díla\n- Slovní hříčky a dvojsmysly, kde to sedí\n\nTEMPO A RYTMUS:\n- Svižné tempo s komicky načasovanými pauzami\n- Rychlé pointy následované krátkým tichem pro efekt\n- Překvapivé změny tempa pro komický efekt\n\nHLAVNÍ 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í.\n\nKONTEXT:\nPŘEDMĚT KVÍZU: film \"Matrix\"\nDĚJ: Programátor Neo zjistí, že svět kolem něj je simulace, a přidá se k odboji proti strojům.\nŽÁNR: Akční, sci-fi\n\nHERNÍ STRUKTURA:\n- 9 kol, 3 úrovně obtížnosti; každé kolo je těžší než předchozí\n- 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\n- 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\n- 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ý\n- Částky: 1 000 / 2 000 / 5 000 / 10 000 / 20 000 / 50 000 / 100 000 / 500 000 / 1 000 000 Kč\n- 3 nápovědy: 50:50, Tip, Hlasování diváků\n\nÚKOL:\nVedeš 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.\n\nTŘI TYPY ODPOVĚDÍ:\n\n1. WELCOME (úvodní zpráva):\n{\"moderator_welcome\": \"Kontextové přivítání s názvem hry a tématem. Vytvoř atmosféru. 2-3 věty.\", \"rules_summary\": \"Stručná pravidla: 9 otázek ve 3 obtížnostech, 3 nápovědy, cíl je milion. 2-3 věty.\"}\n\n2. QUESTION (otázka pro hráče):\n{\"moderator_intro\": \"Úvod ke kolu. Zmíň číslo kola, částku, vytvoř napětí, odkaž na kontext díla. Max 1 věta.\", \"explanation\": \"Fakt z díla, na kterém otázka stojí, a proč je správná odpověď správná. Max 1 věta.\", \"question\": \"Text otázky\", \"options\": {\"A\": \"Možnost A\", \"B\": \"Možnost B\", \"C\": \"Možnost C\", \"D\": \"Možnost D\"}, \"correct\": \"A\"}\nPole \"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.\n\n3. FEEDBACK (výsledek odpovědi):\n{\"result_announcement\": \"Oznámení výsledku ve stylu Milionáře. 2-3 věty.\", \"transition_text\": \"Přechod na další kolo. Max 1 věta.\"}\n\nPRAVIDLA OTÁZEK:\n- Každá otázka má přesně 4 možnosti (A, B, C, D)\n- Správná odpověď jako jedno písmeno (A, B, C nebo D)\n- 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\n- Neopakuj otázky -- máš celou historii chatu, využij ji\n- 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\n- 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.\n- 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.\n- 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.\n- 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ěď.\n- 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í.\n- Š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.\n- Obtížnost dělá to, na co se ptáš, a věrohodné špatné možnosti, ne zavádějící formulace.\n- Každá otázka hry se týká jiného faktu a má jinou správnou odpověď než předchozí.\n- 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\".\n- Nepoužívej otázky typu \"Která z těchto možností je správná?\" -- formuluj konkrétně\n\nPRAVIDLA MODERÁTORA:\n- Dodržuj styl definovaný výše v sekci STYL MODERÁTORA\n- Stupňuj napětí s rostoucí obtížností a částkou\n- Reaguj na kontext -- pokud hráč odpovídá správně, pochval; pokud špatně, projev soucit\n- Odkazuj na dílo přirozeně, ne nuceně\n- U přechodu obtížnosti (kolo 3->4, 6->7) zmíň zvýšení obtížnosti\n- U posledního kola (9) zdůrazni, že jde o milion\n- Mluv česky, přirozeně, ne roboticky\n\nVÝSTUP:\nOdpověď je jeden validní JSON objekt bez textu okolo a bez markdown bloku -- aplikace ho strojově parsuje.", "messages": [{"role": "user", "content": "Kolo 1/9, obtížnost: SNADNÁ, částka: 1 000 Kč. Otázka pro každého, kdo dílo viděl. Úhel otázky: známá hláška nebo citát. Když k němu neznáš jistý fakt v této obtížnosti, zvol jiný úhel. Vygeneruj otázku. Odpověz typem QUESTION."}], "options": {}} {"seq": 10, "t": 0.048, "kind": "state", "thread": "MainThread", "screen": "intro", "game_state": "generating_welcome", "round": 1, "settled": false, "focus": 9601, "exit_prompt": false} {"seq": 11, "t": 0.051, "kind": "llm.error", "thread": "Thread-2 (_generate_welcome)", "call": 3, "purpose": "chat", "provider": "openai", "model": "gpt-6-luna", "ms": 1, "error": "ValueError: AI API klíč není nastaven nebo dialog byl zrušen.", "traceback": "Traceback (most recent call last):\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 172, in chat_wrapper\n data, usage = chat(system_prompt, messages, session_id=session_id, **kwargs)\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIHandler.py\", line 397, in generate_millionaire_chat\n response_text, usage = send_prompt(\n ~~~~~~~~~~~^\n last_user_msg,\n ^^^^^^^^^^^^^^\n ...<5 lines>...\n json_mode=True,\n ^^^^^^^^^^^^^^^\n )\n ^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 197, in send_prompt\n return ai_provider.send_prompt(prompt, model, use_tools, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 84, in send_prompt\n raise ValueError(\"AI API klíč není nastaven nebo dialog byl zrušen.\")\nValueError: AI API klíč není nastaven nebo dialog byl zrušen.\n"} {"seq": 12, "t": 0.051, "kind": "llm.error", "thread": "Thread-3 (_prefetch_worker)", "call": 5, "purpose": "chat", "provider": "openai", "model": "gpt-6-luna", "ms": 1, "error": "ValueError: AI API klíč není nastaven nebo dialog byl zrušen.", "traceback": "Traceback (most recent call last):\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 172, in chat_wrapper\n data, usage = chat(system_prompt, messages, session_id=session_id, **kwargs)\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIHandler.py\", line 397, in generate_millionaire_chat\n response_text, usage = send_prompt(\n ~~~~~~~~~~~^\n last_user_msg,\n ^^^^^^^^^^^^^^\n ...<5 lines>...\n json_mode=True,\n ^^^^^^^^^^^^^^^\n )\n ^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 197, in send_prompt\n return ai_provider.send_prompt(prompt, model, use_tools, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 84, in send_prompt\n raise ValueError(\"AI API klíč není nastaven nebo dialog byl zrušen.\")\nValueError: AI API klíč není nastaven nebo dialog byl zrušen.\n"} {"seq": 13, "t": 0.051, "kind": "content.error", "thread": "Thread-2 (_generate_welcome)", "call": 2, "method": "welcome", "ms": 3, "error": "ValueError: AI API klíč není nastaven nebo dialog byl zrušen.", "traceback": "Traceback (most recent call last):\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 126, in wrapper\n result = original(*args, **kwargs)\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/content/ai.py\", line 58, in welcome\n return self._chat(prompts.build_welcome_message())\n ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/content/ai.py\", line 121, in _chat\n data, _usage = ai_handler.generate_millionaire_chat(self.system_prompt, messages,\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n session_id=self.session_id)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 172, in chat_wrapper\n data, usage = chat(system_prompt, messages, session_id=session_id, **kwargs)\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIHandler.py\", line 397, in generate_millionaire_chat\n response_text, usage = send_prompt(\n ~~~~~~~~~~~^\n last_user_msg,\n ^^^^^^^^^^^^^^\n ...<5 lines>...\n json_mode=True,\n ^^^^^^^^^^^^^^^\n )\n ^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 197, in send_prompt\n return ai_provider.send_prompt(prompt, model, use_tools, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 84, in send_prompt\n raise ValueError(\"AI API klíč není nastaven nebo dialog byl zrušen.\")\nValueError: AI API klíč není nastaven nebo dialog byl zrušen.\n"} {"seq": 14, "t": 0.051, "kind": "content.error", "thread": "Thread-3 (_prefetch_worker)", "call": 4, "method": "question", "ms": 3, "error": "ValueError: AI API klíč není nastaven nebo dialog byl zrušen.", "traceback": "Traceback (most recent call last):\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 126, in wrapper\n result = original(*args, **kwargs)\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/content/ai.py\", line 63, in question\n return self._chat(prompts.build_question_message(round_num, angle), transform=self._place_correct)\n ~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/games/content/ai.py\", line 121, in _chat\n data, _usage = ai_handler.generate_millionaire_chat(self.system_prompt, messages,\n ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n session_id=self.session_id)\n ^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/devtools/game_probe.py\", line 172, in chat_wrapper\n data, usage = chat(system_prompt, messages, session_id=session_id, **kwargs)\n ~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIHandler.py\", line 397, in generate_millionaire_chat\n response_text, usage = send_prompt(\n ~~~~~~~~~~~^\n last_user_msg,\n ^^^^^^^^^^^^^^\n ...<5 lines>...\n json_mode=True,\n ^^^^^^^^^^^^^^^\n )\n ^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 197, in send_prompt\n return ai_provider.send_prompt(prompt, model, use_tools, **kwargs)\n ~~~~~~~~~~~~~~~~~~~~~~~^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^\n File \"/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AIProvider.py\", line 84, in send_prompt\n raise ValueError(\"AI API klíč není nastaven nebo dialog byl zrušen.\")\nValueError: AI API klíč není nastaven nebo dialog byl zrušen.\n"} {"seq": 15, "t": 0.052, "kind": "kodi.log", "thread": "Thread-2 (_generate_welcome)", "level": 3, "message": "[plugin.video.milionar] Error generating welcome: AI API klíč není nastaven nebo dialog byl zrušen."} {"seq": 16, "t": 0.052, "kind": "kodi.log", "thread": "Thread-3 (_prefetch_worker)", "level": 3, "message": "[plugin.video.milionar] Prefetch error: AI API klíč není nastaven nebo dialog byl zrušen."} {"seq": 17, "t": 0.105, "kind": "probe.stop", "thread": "MainThread", "probe": "477e4b6d3eb8"}