§
   ©â€¬plã                   ó¨   — d Z ddlZddl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
 ddlmZmZ  ej        ¦   «         ZdZd„ Zd„ Zdded	ed
efd„Zd„ ZdS )ua   
Mistral AI API handler
KompletnÃ­ implementace pro Mistral AI API podle oficiÃ¡lnÃ­ dokumentace
é    N)Úshow_api_request_debugÚshow_api_response_debugÚshow_api_error_debug)ÚDEFAULT_MODELÚmodel_or_defaultzhttps://api.mistral.ai/v1c                  óˆ   — t          j        ¦   «         } t          d|                      d¦  «        pt          d         ¦  «        S )u6   VracÃ­ aktuÃ¡lnÄ› vybranÃ½ Mistral model z nastavenÃ­.ÚmistralÚmistral_model)Ú	xbmcaddonÚAddonr   Ú
getSettingr   )Úaddons    úb/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/MistralClient.pyÚget_current_modelr      s8   € åŒOÑÔ€EÝ˜I u×'7Ò'7¸Ñ'HÔ'HÐ'dÍMÐZcÔLdÑeÔeÐeó    c                 ór   — t          | t          ¦  «        rd                     d„ | D ¦   «         ¦  «        S | pdS )zHReasoning-capable models may return content as chunks (thinking + text).Ú c              3   óž   K  — | ]H}t          |t          ¦  «        r1|                     d ¦  «        dk    ¯0|                     dd¦  «        V — ŒIdS )ÚtypeÚtextr   N)Ú
isinstanceÚdictÚget)Ú.0Úchunks     r   ú	<genexpr>z _message_text.<locals>.<genexpr>   si   è è € ð Sð S°Ý$ U­DÑ1Ô1ðSØ6;·i²iÀÑ6GÔ6GÈ6Ò6QÐ6Qð —y’y ¨Ñ,Ô,Ø6QÐ6QÐ6QÐ6QðSð Sr   )r   ÚlistÚjoin)Úcontents    r   Ú_message_textr       sX   € å�'�4Ñ Ô ð SØ�wŠwð Sð S¸'ð Sñ Sô Sñ Sô Sð 	Sàˆ=�bÐr   ÚpromptÚmodelÚreturnc           
      ób
  — t          j        ¦   «         }|                     d¦  «        }|st          d¦  «        ‚|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|€t          ¦   «         }t          › d�}d|› �d	d	d
œ}	t          |                     d¦  «        pd¦  «        }
t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        p|                     d¦  «        pd¦  «        }t          |                     d¦  «        pd¦  «        }g }|                     dd¦  «        }|r_t          d„ |D ¦   «         ¦  «        }|r|s| 
                    d|dœ¦  «         |D ]&}| 
                    |d         |d         dœ¦  «         Œ'n2|r| 
                    d|dœ¦  «         | 
                    d| dœ¦  «         |||
||dœ}|dk    r||d<   |                     dd¦  «        }|rd d!i|d"<   	 t          j        d#|› �t          j        ¦  «         |||
|d$œ}|                     d%d¦  «        s#t          d&||||¬'¦  «        st          d(¦  «        ‚t!          j        ¦   «         }t#          j        ||	|d)¬*¦  «        }t!          j        ¦   «         }||z
  }|                     ¦   «          |                     ¦   «         }d+|v rNt+          |d+         ¦  «        dk    r5t-          |d+         d         d,                              d¦  «        ¦  «        }nd-}|                     d%d¦  «        st/          d.||||¬/¦  «         i }d0|v r€|d0                              d1d¦  «        |d0                              d2d¦  «        |d0                              d3d¦  «        d4œ}|d0                              d5¦  «        r|d0         d5         |d5<   t          j        d6t+          |¦  «        › d7�t          j        ¦  «         |                     d8d¦  «        r||||fS ||fS # t"          j        j        $ ri}d9t5          |¦  «        › �}t          j        d:|› �t          j        ¦  «         t9          d.||d;t5          |¦  «        i¦  «         t          |¦  «        ‚d}~wt          $ ri}d<t5          |¦  «        › �}t          j        d:|› �t          j        ¦  «         t9          d.||d;t5          |¦  «        i¦  «         t          |¦  «        ‚d}~ww xY w)=uö   
    OdeÅ¡le prompt na Mistral AI API.
    
    Args:
        prompt (str): Text promptu
        model (str, optional): SpecifickÃ½ model (pokud None, pouÅ¾ije se z nastavenÃ­)
        
    Returns:
        tuple: (response_text, usage_data)
    Úmistral_api_keyu"   Mistral API klÃ­Ä� nenÃ­ nastaven.Úcontext_titlesÚcontext_limitÚsystem_promptNz/chat/completionsúBearer úapplication/json)ÚAuthorizationzContent-TypeÚAcceptÚmistral_temperaturez0.7Úmistral_top_pz1.0Úmax_output_tokensÚmistral_max_tokensÚ4096Úmistral_random_seedÚ0Úmessagesc              3   óH   K  — | ]}|                      d ¦  «        dk    V — ŒdS )ÚroleÚsystemN)r   )r   Úmsgs     r   r   zsend_prompt.<locals>.<genexpr>O   s1   è è € ÐNÐN¸˜Ÿš ™œ¨HÒ4ÐNÐNÐNÐNÐNÐNr   r7   )r6   r   r6   r   Úuser)r"   r4   ÚtemperatureÚ
max_tokensÚtop_pr   Úrandom_seedÚ	json_modeFr   Újson_objectÚresponse_formatu)   [Mistral API] OdesÃ­lÃ¡m prompt na model )r4   r"   r:   r;   Úprivate_contentÚMistral)r&   r'   u2   OdeslÃ¡nÃ­ API requestu bylo zruÅ¡eno uÅ¾ivatelem.éx   )ÚheadersÚjsonÚtimeoutÚchoicesÚmessageu(   Chyba: NeplatnÃ¡ odpovÄ›Ä� z Mistral APIz
Mistral AI)ÚlatencyÚusageÚprompt_tokensÚcompletion_tokensÚtotal_tokens)rK   rL   rM   Úprompt_tokens_detailsu/   [Mistral API] ÃšspÄ›Å¡nÄ› zÃ­skÃ¡na odpovÄ›Ä�: u    znakÅ¯Úinclude_rawu%   Chyba pÅ™i komunikaci s Mistral API: z[Mistral API] Ú	exceptionu$   NeoÄ�ekÃ¡vanÃ¡ chyba v Mistral API: )r   r   r   Ú
ValueErrorr   r   ÚAPI_BASE_URLÚfloatÚintÚanyÚappendÚxbmcÚlogÚLOGINFOr   Ú	ExceptionÚtimeÚrequestsÚpostÚraise_for_statusrE   Úlenr    r   Ú
exceptionsÚRequestExceptionÚstrÚLOGERRORr   )r!   r"   Úkwargsr   ÚAPI_KEYr&   r'   r(   ÚurlrD   r:   r<   r;   r=   r4   Úmessages_listÚ
has_systemr8   Úpayloadr>   Údebug_payloadÚ
start_timeÚresponseÚend_timerI   ÚdataÚresponse_textÚ
usage_dataÚeÚ	error_msgs                                 r   Úsend_promptrs       sî  € õ ŒOÑÔ€EØ×ÒÐ0Ñ1Ô1€Gàð ?ÝÐ=Ñ>Ô>Ð>ð —Z’ZÐ 0Ñ1Ô1€NØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€Mð €}Ý!Ñ#Ô#ˆåÐ
,Ð
,Ð
,€Cð - 7Ð,Ð,Ø*Ø$ðð €Gõ ˜×(Ò(Ð)>Ñ?Ô?ÐHÀ5ÑIÔI€KÝ�%×"Ò" ?Ñ3Ô3Ð<°uÑ=Ô=€EÝ�V—Z’ZÐ 3Ñ4Ô4Ðh¸×8HÒ8HÐI]Ñ8^Ô8^ÐhÐbhÑiÔi€JÝ�e×&Ò&Ð'<Ñ=Ô=ÐDÀÑEÔE€Kð €Hð —J’J˜z¨4Ñ0Ô0€MØð =åÐNÐNÀÐNÑNÔNÑNÔNˆ
ð ð 	J ð 	JØ�OŠO X¸-ÐHÐHÑIÔIÐIð !ð 	Nð 	NˆCØ�OŠO S¨¤[¸SÀ¼^ÐLÐLÑMÔMÐMÐMð	Nð ð 	JØ�OŠO X¸-ÐHÐHÑIÔIÐIØ�Š °FÐ;Ð;Ñ<Ô<Ð<ð ØØ"Ø Øðð €Gð �aÒÐØ!,ˆ�Ñð —
’
˜;¨Ñ.Ô.€IØð =Ø&,¨mÐ%<ˆÐ!Ñ"ð@#ÝŒÐD¸UÐDÐDÅdÄlÑSÔSÐSð !ØØ&Ø$ð	
ð 
ˆð �zŠzÐ+¨UÑ3Ô3ð 	RÕ<RÐS\Ð^cÐerð  DRð  boð  =pñ  =pô  =pð 	RÝÐPÑQÔQÐQå”Y‘[”[ˆ
Ý”= ¨g¸GÈSÐQÑQÔQˆÝ”9‘;”;ˆØ˜ZÑ'ˆØ×!Ò!Ñ#Ô#Ð#à�}Š}‰Œˆð
 ˜ÐÐ¥ T¨)¤_Ñ!5Ô!5¸Ò!9Ð!9Ý)¨$¨y¬/¸!Ô*<¸YÔ*G×*KÒ*KÈIÑ*VÔ*VÑWÔWˆMˆMàFˆMð �zŠzÐ+¨UÑ3Ô3ð 	_Ý# L°%¸¸}ÐV]Ð^Ñ^Ô^Ð^ð ˆ
Ø�dˆ?ˆ?à!% g¤×!2Ò!2°?ÀAÑ!FÔ!FØ%)¨'¤]×%6Ò%6Ð7JÈAÑ%NÔ%NØ $ W¤× 1Ò 1°.À!Ñ DÔ Dðð ˆJð
 �GŒ}× Ò Ð!8Ñ9Ô9ð ]Ø6:¸7´mÐD[Ô6\�
Ð2Ñ3åŒÐ^Å3À}ÑCUÔCUÐ^Ð^Ð^Õ`dÔ`lÑmÔmÐmà�:Š:�m UÑ+Ô+ð 	=Ø! :¨t°WÐ<Ð<à˜jÐ(Ð(øåÔÔ/ð #ð #ð #ØD½CÀ¹F¼FÐDÐDˆ	ÝŒÐ- )Ð-Ð-­t¬}Ñ=Ô=Ð=å˜\¨5°)¸kÍ3ÈqÉ6Ì6Ð=RÑSÔSÐSÝ˜	Ñ"Ô"Ð"øøøøÝð #ð #ð #ØC½3¸q¹6¼6ÐCÐCˆ	ÝŒÐ- )Ð-Ð-­t¬}Ñ=Ô=Ð=å˜\¨5°)¸kÍ3ÈqÉ6Ì6Ð=RÑSÔSÐSÝ˜	Ñ"Ô"Ð"øøøøð#øøøs-   ÈHQ  Ð<Q  Ñ T.ÑA$R8Ò8T.ÓA$T)Ô)T.c                  óÈ  — t          j        ¦   «         } |                      d¦  «        }|sdS 	 t          › 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/modelsr)   r*   )r+   r,   é
   )rD   rF   Ti‘  u?   [wcs][mistral_api] validate_api_key: NeplatnÃ½ API klÃ­Ä� (401)Nz0[wcs][mistral_api] validate_api_key: HTTP chyba u7   [wcs][mistral_api] validate_api_key: SÃ­Å¥ovÃ¡ chyba - u<   [wcs][mistral_api] validate_api_key: NeoÄ�ekÃ¡vanÃ¡ chyba - )r   r   r   rR   r\   r   r^   r`   Ú	HTTPErrorrl   Ústatus_coderW   rX   Ú
LOGWARNINGra   rZ   )r   re   rf   rD   rl   rq   s         r   Úvalidate_api_keyry   ±   s£  € õ ŒOÑÔ€EØ×ÒÐ0Ñ1Ô1€Gàð ØˆuðåÐ&Ð&Ð&ˆà0 wÐ0Ð0Ø(ð
ð 
ˆõ ”< ¨W¸bÐAÑAÔAˆØ×!Ò!Ñ#Ô#Ð#ØˆtøÝÔÔ(ð ð ð ØŒ:Ô! SÒ(Ð(ÝŒHÐVÕX\ÔXgÑhÔhÐhØ�5�5�5�5�5åŒHÐ`ÈÌ
ÔH^Ð`Ð`ÕbfÔbqÑrÔrÐrØ�5�5�5�5�5øøøøÝÔÔ/ð ð ð ÝŒÐNÈ1ÐNÐNÕPTÔP_Ñ`Ô`Ð`ØˆuˆuˆuˆuˆuøøøøÝð ð ð ÝŒÐSÐPQÐSÐSÕUYÔUdÑeÔeÐeØˆuˆuˆuˆuˆuøøøøðøøøs5   ®=A- Á-E!Â/C(Â6,C(Ã(E!Ã?"D'Ä'E!Ä4"EÅE!)N)Ú__doc__Úosr\   r   rW   rE   r[   Úwcs.ai.DialogAIDebugRequestr   r   r   Úwcs.ai.model_catalogr   r   r   r   rR   r   r    rb   Útuplers   ry   © r   r   ú<module>r€      s  ððð ð
 
€	€	€	Ø €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø €€€Ø mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @ð 	ˆ	ŒÑÔ€Ø*€ðfð fð fðð ð ðO#ð O#˜ð O# Cð O#¸Uð O#ð O#ð O#ð O#ðb#ð #ð #ð #ð #r   