§
   2ƒ“^Ò]¹ã                   ó�   — d 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mZmZ dZdZdZd„ Zd	„ Zd
„ Zddededefd„Zd„ ZdS )aø  
Anthropic Claude API handler (Messages API over raw HTTP -- Kodi has no pip/SDK).

Current models (claude-haiku-5-5, claude-sonnet-5-5, claude-opus-5-5)
think, reject sampling parameters (temperature/top_p/top_k), and return a
`thinking` block before the text -- so depth is set with output_config.effort,
max_tokens leaves room for thinking, and the answer is read from text blocks.
Refusals (stop_reason "refusal") are rerouted server-side via fallbacks (not on Haiku 5.5: its refusal is the answer).
é    N)Úshow_api_request_debugÚshow_api_response_debugÚshow_api_error_debug)ÚCLAUDE_EFFORT_MODELSÚCLAUDE_FALLBACK_MODELSÚDEFAULT_MODELÚmodel_or_defaultzhttps://api.anthropic.comz
2023-06-01zserver-side-fallback-2026-07-01c                  óˆ   — t          j        ¦   «         } t          d|                      d¦  «        pt          d         ¦  «        S )u8   VracÃ­ aktuÃ¡lnÄ› vybranÃ½ Anthropic model z nastavenÃ­.Ú	anthropicÚanthropic_model)Ú	xbmcaddonÚAddonr	   Ú
getSettingr   )Úaddons    úd/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/AnthropicClient.pyÚget_current_modelr      s:   € åŒOÑÔ€EÝ˜K¨×)9Ò)9Ð:KÑ)LÔ)LÐ)jÕP]Ð^iÔPjÑkÔkÐkó    c                 óD   — | t           dddœ}|t          v r
t          |d<   |S )Nzapplication/json)ú	x-api-keyúanthropic-versionzContent-TypeÚAcceptzanthropic-beta)ÚAPI_VERSIONr   ÚFALLBACK_BETA)Úapi_keyÚmodelÚheaderss      r   Ú_headersr      s8   € àÝ(Ø*Ø$ð	ð €Gð Õ&Ð&Ð&Ý$1ˆÐ Ñ!Ø€Nr   c                 óŒ   — d                      d„ |                      dg ¦  «        D ¦   «         ¦  «                             ¦   «         S )z@Join text blocks; thinking/fallback blocks carry no answer text.Ú c              3   ót   K  — | ]3}|                      d ¦  «        dk    ¯|                      dd¦  «        V — Œ4dS )ÚtypeÚtextr   N)Úget)Ú.0Úblocks     r   ú	<genexpr>z _extract_text.<locals>.<genexpr>-   sR   è è € ð 3ð 3¨UØ—i’i Ñ'Ô'¨6Ò1Ð1ð —9’9˜V RÑ(Ô(Ø1Ð1Ð1Ð1ð3ð 3r   Úcontent)Újoinr#   Ústrip)Údatas    r   Ú_extract_textr+   +   sJ   € à�7Š7ð 3ð 3°d·h²h¸yÈ"Ñ6MÔ6Mð 3ñ 3ô 3ñ 3ô 3ß38²5±7´7ð;r   Úpromptr   Úreturnc           
      óÚ
  — t          j        ¦   «         }|                     d¦  «        }|st          d¦  «        ‚|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|pt          ¦   «         }t          |                     d¦  «        p|                     d¦  «        pd¦  «        }|                     d	¦  «        pd
}	|                     d¦  «        }
|
rd„ |
D ¦   «         }nd| dœg}|||dœ}|r||d<   |t          v rd|	i|d<   |t          v rd|d<   t          › d�}	 t          j        d|› �t          j        ¦  «         |rd|dœgng |z   }||||                     di ¦  «                             d¦  «        dœ}|                     dd¦  «        s#t          d||||¬¦  «        st          d¦  «        ‚t          j        ¦   «         }t!          j        |t%          ||¦  «        ||                     dd¦  «        ¬¦  «        }t          j        ¦   «         |z
  }|j        d k    r;|j        d!d"…         }t           j                             d#|j        › d$|› �|¬%¦  «        ‚|                     ¦   «         }|                     d&¦  «        d'k    rd|                     d(¦  «        pi                      d)¦  «        }d*                     |pd+¦  «        }t          j        d,|› �t          j        ¦  «         nIt5          |¦  «        pd-}|                     d&¦  «        d.k    rt          j        d/t          j        ¦  «         |                     dd¦  «        st7          d0||||¬1¦  «         |                     d2i ¦  «        }|                     d3d4¦  «        |                     d5d4¦  «        |                     d6d4¦  «        |                     d7d4¦  «        |                     d3d4¦  «        |                     d5d4¦  «        z   d8œ}t          j        d9t9          |¦  «        › d:|                     d;|¦  «        › d<�t          j        ¦  «         |                     d=d¦  «        r||||fS ||fS # t           j        j        $ ri}d>t=          |¦  «        › �}t          j        d?|› �t          j        ¦  «         tA          d0||d@t=          |¦  «        i¦  «         t          |¦  «        ‚d!}~wt          $ ri}dAt=          |¦  «        › �}t          j        d?|› �t          j        ¦  «         tA          d0||d@t=          |¦  «        i¦  «         t          |¦  «        ‚d!}~ww xY w)BuK  
    OdeÅ¡le prompt na Anthropic Claude API.

    Args:
        prompt (str): Text promptu (pouÅ¾ije se, kdyÅ¾ nejsou pÅ™edÃ¡ny `messages`)
        model (str, optional): SpecifickÃ½ model (pokud None, pouÅ¾ije se z nastavenÃ­)

    Returns:
        tuple: (response_text, usage_data) nebo s include_raw i (â€¦, data, latency)
    Úanthropic_api_keyu$   Anthropic API klÃ­Ä� nenÃ­ nastaven.Úcontext_titlesÚcontext_limitÚsystem_promptÚmax_output_tokensÚanthropic_max_tokensÚ16000Úanthropic_effortÚlowÚmessagesc                 ó0   — g | ]}|d          |d         dœ‘ŒS )Úroler'   ©r:   r'   © )r$   Úmsgs     r   ú
<listcomp>zsend_prompt.<locals>.<listcomp>J   s(   € Ð^Ð^Ð^È˜S œ[°S¸´^ÐDÐDÐ^Ð^Ð^r   Úuserr;   )r   Ú
max_tokensr8   ÚsystemÚeffortÚoutput_configÚdefaultÚ	fallbacksz/v1/messagesu+   [Anthropic API] OdesÃ­lÃ¡m prompt na model )r8   r   r@   rB   Úprivate_contentFÚ	Anthropic)r0   r1   u2   OdeslÃ¡nÃ­ API requestu bylo zruÅ¡eno uÅ¾ivatelem.Úrequest_timeouté´   )r   ÚjsonÚtimeouti�  Niô  zHTTP z: )ÚresponseÚstop_reasonÚrefusalÚstop_detailsÚcategoryu*   Model odmÃ­tl odpovÄ›dÄ›t (kategorie: {}).Ú	neuvedenaz"[Anthropic API] Refusal, category=u*   Chyba: NeplatnÃ¡ odpovÄ›Ä� z Anthropic APIr@   u5   [Anthropic API] OdpovÄ›Ä� useknuta limitem max_tokenszAnthropic Claude)ÚlatencyÚusageÚinput_tokensr   Úoutput_tokensÚcache_read_input_tokensÚcache_creation_input_tokens)rT   rU   Úcached_input_tokensrW   Útotal_tokensu1   [Anthropic API] ÃšspÄ›Å¡nÄ› zÃ­skÃ¡na odpovÄ›Ä�: u    znakÅ¯ (model r   ú)Úinclude_rawu'   Chyba pÅ™i komunikaci s Anthropic API: z[Anthropic API] Ú	exceptionu&   NeoÄ�ekÃ¡vanÃ¡ chyba v Anthropic API: )!r   r   r   Ú
ValueErrorr#   r   Úintr   r   ÚAPI_BASE_URLÚxbmcÚlogÚLOGINFOr   Ú	ExceptionÚtimeÚrequestsÚpostr   Ústatus_coder"   Ú
exceptionsÚ	HTTPErrorrJ   ÚformatÚ
LOGWARNINGr+   r   ÚlenÚRequestExceptionÚstrÚLOGERRORr   )r,   r   Úkwargsr   r   r0   r1   r2   r@   rB   Úmessages_listr8   ÚpayloadÚurlÚdebug_messagesÚdebug_payloadÚ
start_timerL   rR   Údetailr*   rP   Úresponse_textrS   Ú
usage_dataÚeÚ	error_msgs                              r   Úsend_promptr|   1   s  € õ ŒOÑÔ€EØ×ÒÐ2Ñ3Ô3€GØð AÝÐ?Ñ@Ô@Ð@à—Z’ZÐ 0Ñ1Ô1€NØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€MØÐ(Õ&Ñ(Ô(€EÝ�V—Z’ZÐ 3Ñ4Ô4Ðk¸×8HÒ8HÐI_Ñ8`Ô8`ÐkÐdkÑlÔl€JØ×ÒÐ0Ñ1Ô1Ð:°U€Fà—J’J˜zÑ*Ô*€MØð 9Ø^Ð^ÐP]Ð^Ñ^Ô^ˆˆà#°Ð7Ð7Ð8ˆà¨ZÀXÐNÐN€GØð *Ø)ˆ�ÑØÕ$Ð$Ð$Ø$,¨fÐ#5ˆ�Ñ ØÕ&Ð&Ð&Ø(ˆ�ÑåÐ
'Ð
'Ð
'€Cð6#ÝŒÐF¸uÐFÐFÍÌÑUÔUÐUð MZÐa H¸ÐGÐGÐHÐHÐ_aÐemÑmˆØ%3¸eÐS]Ø#*§;¢;¨ÀÑ#CÔ#C×#GÒ#GÈÑ#QÔ#QðSð Sˆà�zŠzÐ+¨UÑ3Ô3ð 	RÕ<RÐS^Ð`eÐgtð  FTð  dqð  =rñ  =rô  =rð 	RÝÐPÑQÔQÐQå”Y‘[”[ˆ
Ý”= ­h°wÀÑ.FÔ.FÈWØ)/¯ªÐ4EÀsÑ)KÔ)KðMñ Mô Mˆå”)‘+”+ 
Ñ*ˆØÔ 3Ò&Ð&Ø”] 4 C 4Ô(ˆFÝÔ%×/Ò/Ð0X¸Ô8LÐ0XÐ0XÐPVÐ0XÐ0XÐckÐ/ÑlÔlÐlØ�}Š}‰Œˆà�8Š8�MÑ"Ô" iÒ/Ð/ØŸš Ñ0Ô0Ð6°B×;Ò;¸JÑGÔGˆHØH×OÒOÐPXÐPgÐ\gÑhÔhˆMÝŒHÐD¸(ÐDÐDÅdÄoÑVÔVÐVÐVå)¨$Ñ/Ô/Ð_Ð3_ˆMØ�xŠx˜Ñ&Ô&¨,Ò6Ð6Ý”ÐPÕRVÔRaÑbÔbÐbà�zŠzÐ+¨UÑ3Ô3ð 	eÝ#Ð$6¸¸tÀ]Ð\cÐdÑdÔdÐdà—’˜ "Ñ%Ô%ˆà!ŸIšI n°aÑ8Ô8Ø"ŸYšY ¸Ñ:Ô:Ø#(§9¢9Ð-FÈÑ#JÔ#JØ+0¯9ª9Ð5RÐTUÑ+VÔ+VØ!ŸIšI n°aÑ8Ô8¸5¿9º9À_ÐVWÑ;XÔ;XÑXð
ð 
ˆ
õ 	Œð  DÅSÈÑEWÔEWð  Dð  DÐhl×hpÒhpÐqxÐzñ  iAô  iAð  Dð  Dð  Dõ  FJô  FRñ  	Sô  	Sð  	SØ�:Š:�m UÑ+Ô+ð 	<Ø  *¨d°GÐ;Ð;Ø˜jÐ(Ð(øåÔÔ/ð #ð #ð #ØF½cÀ!¹f¼fÐFÐFˆ	ÝŒÐ/ IÐ/Ð/µ´Ñ?Ô?Ð?ÝÐ/°¸	ÀKÕQTÐUVÑQWÔQWÐCXÑYÔYÐYÝ˜	Ñ"Ô"Ð"øøøøÝð #ð #ð #ØE½SÀ¹V¼VÐEÐEˆ	ÝŒÐ/ IÐ/Ð/µ´Ñ?Ô?Ð?ÝÐ/°¸	ÀKÕQTÐUVÑQWÔQWÐCXÑYÔYÐYÝ˜	Ñ"Ô"Ð"øøøøð	#øøøs-   Ä9L>Q< Ñ8Q< Ñ<U*ÒA$S4Ó4U*ÔA$U%Õ%U*c                  óž  — t          j        ¦   «         } |                      d¦  «        }|sdS 	 t          j        t
          › d�|t          dœd¬¦  «        }|j        dk    rdS t          j	        d	|j        › �t          j
        ¦  «         dS # t          j        j        $ r-}t          j	        d
|› �t          j
        ¦  «         Y d}~dS d}~ww xY w)u›   
    OvÄ›Å™Ã­ platnost API klÃ­Ä�e pÅ™es GET /v1/models (bez spotÅ™eby tokenÅ¯).

    Returns:
        bool: True pokud je klÃ­Ä� platnÃ½, False jinak
    r/   Fz
/v1/models)r   r   é
   )r   rK   éÈ   Tz,[wcs][anthropic_api] validate_api_key: HTTP u9   [wcs][anthropic_api] validate_api_key: SÃ­Å¥ovÃ¡ chyba - N)r   r   r   re   r#   r_   r   rg   r`   ra   rk   rh   rm   )r   r   rL   rz   s       r   Úvalidate_api_keyr€   �   sô   € õ ŒOÑÔ€EØ×ÒÐ2Ñ3Ô3€GØð Øˆuð
Ý”<¥<Ð ;Ð ;Ð ;Ø6=ÕT_Ð(`Ð(`Ø(*ð,ñ ,ô ,ˆð Ô 3Ò&Ð&Ø�4ÝŒÐVÀÔ@TÐVÐVÕX\ÔXgÑhÔhÐhØˆuøÝÔÔ/ð ð ð ÝŒÐPÈQÐPÐPÕRVÔRaÑbÔbÐbØˆuˆuˆuˆuˆuøøøøðøøøs   ®2B Á"'B ÂCÂ"CÃC)N)Ú__doc__rd   re   r`   r   Úwcs.ai.DialogAIDebugRequestr   r   r   Úwcs.ai.model_catalogr   r   r   r	   r_   r   r   r   r   r+   rn   Útupler|   r€   r<   r   r   ú<module>r…      s	  ððð ð €€€à €€€Ø €€€Ø Ð Ð Ð à mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mÐ mØ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nÐ nà*€Ø€Ø1€ðlð lð lð	ð 	ð 	ð;ð ;ð ;ð\#ð \#˜ð \# Cð \#¸Uð \#ð \#ð \#ð \#ð~ð ð ð ð r   