§
   *A‰…Ø“Õìã            
       ót   — d dl Z d dlZd dlZd dlZd dlmZmZ d dlmZm	Z	 dZ
d„ Zddeded	ed
eeffd„Zd„ ZdS )é    N)Úshow_api_request_debugÚshow_api_response_debug)ÚDEFAULT_MODELÚmodel_or_default)zgpt-5zgpt-6Úo1Úo3Úo4c                  óˆ   — t          j        ¦   «         } t          d|                      d¦  «        pt          d         ¦  «        S )u5   VracÃ­ aktuÃ¡lnÄ› vybranÃ½ OpenAI model z nastavenÃ­.ÚopenaiÚopenai_model)Ú	xbmcaddonÚAddonr   Ú
getSettingr   )Úaddons    úa/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/OpenAIClient.pyÚget_current_modelr      s8   € åŒOÑÔ€EÝ˜H e×&6Ò&6°~Ñ&FÔ&FÐ&aÍ-ÐX`ÔJaÑbÔbÐbó    FÚpromptÚmodelÚ	use_toolsÚreturnc           	      ó  — t          j        ¦   «         }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|st	          d¦  «        ‚|€t          ¦   «         }t          |                     d¦  «        pd¦  «        }	t          |                     d¦  «        pd¦  «        }
t          |                     d	¦  «        p|                     d
¦  «        pd¦  «        }|                     d¦  «        pd}d}d|› �ddœ}g }|                     dd¦  «        }|                     dd ¦  «        }|rŠt          d„ |D ¦   «         ¦  «        }|r|s| 	                    d|dœ¦  «         t          |¦  «        D ]D\  }}|d         }|r|dk    r|d         dk    r|› d�}| 	                    |d         |dœ¦  «         ŒEn;|r| 	                    d|dœ¦  «         | }|r| › d�}| 	                    d|dœ¦  «         d„ |D ¦   «         }|                     t          ¦  «        }|r||ddid |i|d!œ}n|||	|
|d"œ}|r||d#<   |                     dd¦  «        }|rd$|vri |d$<   d%d&i|d$         d'<   |rd%d(ig|d)<   t          j        d*|› �t          t          d+t          j        ¦  «        ¦  «         t          j        d,|› �t          t          d+t          j        ¦  «        ¦  «         |||s|	nd |r|nd |d-œ}|                     d.d¦  «        s#t#          d/||||¬0¦  «        st%          d1¦  «        ‚t'          j        ¦   «         }t)          j        ||||                     d2d3¦  «        ¬4¦  «        }t'          j        ¦   «         }||z
  }	 |                     ¦   «         }|                     d.d¦  «        st/          d/|||¬5¦  «         n7#  |                     d.d¦  «        st/          d/|d6|j        i|¬5¦  «         Y nxY w|                     ¦   «          |                     ¦   «         }|                     d7i ¦  «        } |                     d8g ¦  «        }!d9}t5          |!t6          ¦  «        r—|!D ]”}"t5          |"t8          ¦  «        r}|"                     d%¦  «        d:k    rd|"                     d¦  «        }#t5          |#t6          ¦  «        r d9                     d;„ |#D ¦   «         ¦  «        }n|#p|"                     d$d9¦  «        } nŒ•|sE|                     d<i g¦  «        d                              d:i ¦  «                             dd9¦  «        }|                     d=d¦  «        r|| ||fS || fS )>NÚopenai_api_keyÚcontext_titlesÚcontext_limitÚsystem_promptu!   OpenAI API klÃ­Ä� nenÃ­ nastaven.Úopenai_temperaturez1.0Úopenai_top_pÚmax_output_tokensÚopenai_max_output_tokensÚ16000Úopenai_reasoning_effortÚmediumz#https://api.openai.com/v1/responsesúBearer úapplication/json©ÚAuthorizationzContent-TypeÚ	json_modeFÚmessagesc              3   óH   K  — | ]}|                      d ¦  «        dk    V — ŒdS )ÚroleÚsystemN)Úget©Ú.0Úmsgs     r   ú	<genexpr>zsend_prompt.<locals>.<genexpr>8   s1   è è € ÐNÐN¸˜Ÿš ™œ¨HÒ4ÐNÐNÐNÐNÐNÐNr   r,   )r+   Úcontentr2   r   r+   Úuseru   

[OdpovÄ›z ve formÃ¡tu JSON.]c                 óJ   — g | ] }|d          dk    ¯d|d          |d         dœ‘Œ!S )r+   r,   Úmessager2   )Útyper+   r2   © r.   s     r   ú
<listcomp>zsend_prompt.<locals>.<listcomp>P   sB   € ð ð ð à˜s 6œ{¨hÒ6Ð6ð  C¨¤K¸CÀ	¼NÐKÐKØ6Ð6Ð6r   Ú	verbosityÚlowÚeffort)r   ÚinputÚtextÚ	reasoningr   )r   r<   ÚtemperatureÚtop_pr   Úinstructionsr=   r6   Újson_objectÚformatÚ
web_searchÚtoolsz[wcs][openai] URL: Ú	LOGNOTICEz[wcs][openai] Model: )r)   r   r?   Úreasoning_effortÚ
max_tokensÚprivate_contentÚOpenAI)r   r   u2   OdeslÃ¡nÃ­ API requestu bylo zruÅ¡eno uÅ¾ivatelem.Úrequest_timeoutéx   )ÚheadersÚjsonÚtimeout)ÚlatencyÚraw_textÚusageÚoutputÚ r5   c              3   ól   K  — | ]/}t          |t          ¦  «        ¯|                     d d¦  «        V — Œ0dS )r=   rT   N)Ú
isinstanceÚdictr-   )r/   Úsegs     r   r1   zsend_prompt.<locals>.<genexpr>¤   sA   è è € Ð%cÐ%c¸cÍZÐX[Õ]aÑMbÔMbÐ%c c§g¢g¨f°bÑ&9Ô&9Ð%cÐ%cÐ%cÐ%cÐ%cÐ%cr   ÚchoicesÚinclude_raw)r   r   r   r-   Ú
ValueErrorr   ÚfloatÚintÚanyÚappendÚ	enumerateÚ
startswithÚREASONING_PREFIXESÚxbmcÚlogÚgetattrÚLOGINFOr   Ú	ExceptionÚtimeÚrequestsÚpostrN   r   r=   Úraise_for_statusrV   ÚlistrW   Újoin)$r   r   r   Úkwargsr   ÚAPI_KEYr   r   r   r?   r@   r   rG   ÚurlrM   r)   r(   Úmessages_listÚ
has_systemÚir0   r2   Úinput_messagesÚis_reasoning_modelÚpayloadÚdebug_payloadÚ
start_timeÚresponseÚend_timerP   Úresponse_dataÚdatarR   ÚoutputsÚevtÚconts$                                       r   Úsend_promptr€      s–  € åŒOÑÔ€EØ×ÒÐ/Ñ0Ô0€Gð —Z’ZÐ 0Ñ1Ô1€NØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€Màð >ÝÐ<Ñ=Ô=Ð=ð €}Ý!Ñ#Ô#ˆõ ˜×(Ò(Ð)=Ñ>Ô>ÐGÀ%ÑHÔH€KÝ�%×"Ò" >Ñ2Ô2Ð;°eÑ<Ô<€EÝ˜FŸJšJÐ':Ñ;Ô;Ðv¸u×?OÒ?OÐPjÑ?kÔ?kÐvÐovÑwÔwÐØ×'Ò'Ð(AÑBÔBÐNÀhÐà
/€Cà, 7Ð,Ð,Ø*ðð €Gð €Hà—
’
˜;¨Ñ.Ô.€Ià—J’J˜z¨4Ñ0Ô0€MØð >åÐNÐNÀÐNÑNÔNÑNÔNˆ
ð ð 	J ð 	JØ�OŠO X¸-ÐHÐHÑIÔIÐIå Ñ.Ô.ð 	Gð 	G‰FˆAˆsØ˜)”nˆGð ð G˜Q !šV˜V¨¨F¬°vÒ(=Ð(=Ø$ÐFÐFÐF�Ø�OŠO S¨¤[¸WÐEÐEÑFÔFÐFÐFð	Gð ð 	JØ�OŠO X¸-ÐHÐHÑIÔIÐIØˆØð 	BØÐAÐAÐAˆGØ�Š °GÐ<Ð<Ñ=Ô=Ð=ðð àðñ ô €Nð
 ×)Ò)Õ*<Ñ=Ô=Ðàð 
àØ#Ø  %Ð(Ø"Ð$4Ð5Ø!2ð
ð 
ˆˆð Ø#Ø&ØØ!2ð
ð 
ˆð ð 0Ø"/ˆ�Ñð —
’
˜;¨Ñ.Ô.€IØð <Ø˜Ð Ð Ø ˆG�F‰OØ%+¨]Ð$;ˆ�Œ˜Ñ!ð ð 4Ø# \Ð2Ð3ˆ�Ñå„HÐ( 3Ð(Ð(­'µ$¸ÅTÄ\Ñ*RÔ*RÑSÔSÐSÝ„HÐ, UÐ,Ð,­gµd¸KÍÌÑ.VÔ.VÑWÔWÐWð ØØ*<ÐF�{�{À$Ø0BÐLÐ,Ð,ÈØ'ðð €Mð �:Š:Ð'¨Ñ/Ô/ð NÕ8NÈxÐY^Ð`mð  Mð  ]jð  9kñ  9kô  9kð NÝÐLÑMÔMÐMå”‘”€JÝŒ}˜S¨'¸ÈÏÊÐTeÐgjÑIkÔIkÐlÑlÔl€HÝŒy‰{Œ{€HØ˜Ñ#€GðcØ Ÿš™œˆØ�zŠzÐ+¨UÑ3Ô3ð 	UÝ# H¨e°]ÈGÐTÑTÔTÐTøøðcØ�zŠzÐ+¨UÑ3Ô3ð 	cÝ# H¨e°jÀ(Ä-Ð5PÐZaÐbÑbÔbÐbøøøøøà×ÒÑÔÐØ�=Š=‰?Œ?€Dð �HŠH�W˜bÑ!Ô!€Eð �hŠh�x Ñ$Ô$€GØ€GÝ�'�4Ñ Ô ð Øð 	ð 	ˆCÝ˜#�tÑ$Ô$ð ¨¯ª°©¬¸IÒ)EÐ)EØ—w’w˜yÑ)Ô)�Ý˜d¥DÑ)Ô)ð :Ø ŸgšgÐ%cÐ%cÀTÐ%cÑ%cÔ%cÑcÔc�G�Gà"Ð9 c§g¢g¨f°bÑ&9Ô&9�GØ�øð ð UØ—(’(˜9 r dÑ+Ô+¨AÔ.×2Ò2°9¸bÑAÔA×EÒEÀiÐQSÑTÔTˆà‡z‚z�- Ñ'Ô'ð -Ø˜˜t WÐ,Ð,à�Eˆ>Ðs   Î)=O' Ï'2Pc                  ó¸  — t          j        ¦   «         } |                      d¦  «        }|sdS 	 d}d|› �ddœ}t          j        ||d¬¦  «        }|                     ¦   «          d	S # t          j        j        $ rl}|j        j	        d
k    r%t          j        dt          j        ¦  «         Y d}~dS t          j        d|j        j	        › �t          j        ¦  «         Y d}~dS d}~wt          j        j        $ r-}t          j        d|› �t          j        ¦  «         Y d}~dS d}~wt          $ r-}t          j        d|› �t          j        ¦  «         Y d}~dS d}~ww xY w)ur   
    OvÄ›Å™Ã­ platnost API klÃ­Ä�e.
    
    Returns:
        bool: True pokud je klÃ­Ä� platnÃ½, False jinak
    r   Fz https://api.openai.com/v1/modelsr$   r%   r&   é
   )rM   rO   Ti‘  u>   [wcs][openai_api] validate_api_key: NeplatnÃ½ API klÃ­Ä� (401)Nz/[wcs][openai_api] validate_api_key: HTTP chyba u6   [wcs][openai_api] validate_api_key: SÃ­Å¥ovÃ¡ chyba - u;   [wcs][openai_api] validate_api_key: NeoÄ�ekÃ¡vanÃ¡ chyba - )r   r   r   ri   r-   rk   Ú
exceptionsÚ	HTTPErrorry   Ústatus_coderc   rd   Ú
LOGWARNINGÚRequestExceptionrg   )r   ro   rp   rM   ry   Úes         r   Úvalidate_api_keyr‰   ²   s—  € õ ŒOÑÔ€EØ×ÒÐ/Ñ0Ô0€Gàð ØˆuðØ0ˆà0 wÐ0Ð0Ø.ð
ð 
ˆõ ”< ¨W¸bÐAÑAÔAˆØ×!Ò!Ñ#Ô#Ð#ØˆtøÝÔÔ(ð ð ð ØŒ:Ô! SÒ(Ð(ÝŒHÐUÕW[ÔWfÑgÔgÐgØ�5�5�5�5�5åŒHÐ_ÀqÄzÔG]Ð_Ð_ÕaeÔapÑqÔqÐqØ�5�5�5�5�5øøøøÝÔÔ/ð ð ð ÝŒÐMÈ!ÐMÐMÍtÌÑ_Ô_Ð_ØˆuˆuˆuˆuˆuøøøøÝð ð ð ÝŒÐRÈqÐRÐRÕTXÔTcÑdÔdÐdØˆuˆuˆuˆuˆuøøøøðøøøs5   ®5A% Á%EÁ9/C Â.,C Ã EÃ7"DÄEÄ,"EÅE)NF)ri   r   rc   rh   Úwcs.ai.DialogAIDebugRequestr   r   Úwcs.ai.model_catalogr   r   rb   r   ÚstrÚboolrW   r€   r‰   r7   r   r   ú<module>rŽ      sÕ   ðØ €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ð :Ð ðcð cð cð^ð ^˜ð ^ Cð ^¸4ð ^ÐWZÐ\`ÐVað ^ð ^ð ^ð ^ð@"ð "ð "ð "ð "r   