§
   ¯a_ÉMbã                   ó|   — 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 ddlm	Z	m
Z
 ddlmZ dZdZd„ Zdd	eeffd
„Zd„ ZdS )uo   
Google AI (Gemini) API handler
KompletnÃ­ implementace pro Google AI Gemini API podle oficiÃ¡lnÃ­ dokumentace
é    N)Úshow_api_request_debugÚshow_api_response_debug)ÚDEFAULT_MODELÚmodel_or_default)Úusage_from_googlez)https://generativelanguage.googleapis.comÚv1betac                  óˆ   — t          j        ¦   «         } t          d|                      d¦  «        pt          d         ¦  «        S )u8   VracÃ­ aktuÃ¡lnÄ› vybranÃ½ Google AI model z nastavenÃ­.ÚgoogleÚgoogle_model)Ú	xbmcaddonÚAddonr   Ú
getSettingr   )Úaddons    úa/Users/chudy/Library/Application Support/Kodi/addons/plugin.video.milionar/wcs/ai/GoogleClient.pyÚget_current_modelr      s8   € åŒOÑÔ€EÝ˜H e×&6Ò&6°~Ñ&FÔ&FÐ&aÍ-ÐX`ÔJaÑbÔbÐbó    Úreturnc                 óh	  — t          j        ¦   «         }|                     d¦  «        }|st          d¦  «        ‚|                     d¦  «        }|                     d¦  «        }|                     d¦  «        }|st          ¦   «         }t          |                     d¦  «        pd¦  «        }t          |                     d¦  «        pd	¦  «        }	t          |                     d
¦  «        pd¦  «        }
t          |                     d¦  «        p|                     d¦  «        pd¦  «        }|                     d¦  «        pd}t          › dt          › d|› d�}d|dœ}g }|                     dd¦  «        }|r_t          d„ |D ¦   «         ¦  «        }|r|s|                     d|dœ¦  «         |D ]&}|                     |d         |d         dœ¦  «         Œ'n2|r|                     d|dœ¦  «         |                     d| dœ¦  «         g }|D ]@}|d         dk    rŒ|d         dk    rdnd}|                     |d |d         igd!œ¦  «         ŒAd}|D ]}|d         dk    r
|d         } nŒ|||	|
|d"d#|id$œd%œ}|r
d&d |igi|d'<   |                     d(d)¦  «        }|rd|d*         d+<   t          j        d,|› �t          j        ¦  «         ||||d-œ}|                     d.d)¦  «        s#t          d/||||¬0¦  «        st!          d1¦  «        ‚t#          j        ¦   «         }t%          j        |||d2¬3¦  «        }t#          j        ¦   «         }||z
  }t          j        d4|j        › �t          j        ¦  «         	 |                     ¦   «         }|                     d.d)¦  «        st-          d/|||¬5¦  «         n7#  |                     d.d)¦  «        st-          d/|d6|j        i|¬5¦  «         Y nxY w|                     ¦   «          |                     ¦   «         }d7|v rt3          |d7         ¦  «        ni }d8} d9|v r`t5          |d9         ¦  «        d:k    rG|d9         d:         }!d|!v r5d&|!d         v r+d8                     d;„ |!d         d&         D ¦   «         ¦  «        } |                     d<d)¦  «        r| |||fS | |fS )=u   
    OdeÅ¡le prompt pÅ™es Google AI (Gemini) API.
    
    Args:
        prompt (str): Text prompt k odeslÃ¡nÃ­
        model (str, optional): NÃ¡zev modelu. Pokud nenÃ­ specifikovÃ¡n, pouÅ¾ije se model z nastavenÃ­.
    
    Returns:
        tuple: (response_text: str, usage: dict)
    Úgoogle_api_keyu$   Google AI API klÃ­Ä� nenÃ­ nastaven.Úcontext_titlesÚcontext_limitÚsystem_promptÚgoogle_temperaturez1.0Úgoogle_top_pz0.95Úgoogle_top_kÚ40Úmax_output_tokensÚgoogle_max_tokensÚ16000Úgoogle_thinking_levelÚlowú/z/models/z:generateContentzapplication/json)zContent-Typeúx-goog-api-keyÚmessagesNc              3   óH   K  — | ]}|                      d ¦  «        dk    V — ŒdS )ÚroleÚsystemN©Úget)Ú.0Úmsgs     r   ú	<genexpr>zsend_prompt.<locals>.<genexpr>E   s1   è è € ÐNÐN¸˜Ÿš ™œ¨HÒ4ÐNÐNÐNÐNÐNÐNr   r'   )r&   Úcontentr&   r-   ÚuserÚ	assistantÚmodelÚtext)r&   Úpartsé   ÚthinkingLevel)ÚtemperatureÚtopPÚtopKÚmaxOutputTokensÚcandidateCountÚthinkingConfig)ÚcontentsÚgenerationConfigr2   ÚsystemInstructionÚ	json_modeFr<   ÚresponseMimeTypez[wcs][google_api] Model: )r$   r0   r5   Ú
max_tokensÚprivate_contentÚGoogle)r   r   u2   OdeslÃ¡nÃ­ API requestu bylo zruÅ¡eno uÅ¾ivatelem.é´   )ÚheadersÚjsonÚtimeoutz[wcs][google_api] Status: )ÚlatencyÚraw_textÚusageMetadataÚ Ú
candidatesr   c              3   ól   K  — | ]/}|                      d ¦  «        °|                      dd¦  «        V — Œ0dS )Úthoughtr1   rJ   Nr(   )r*   Úparts     r   r,   zsend_prompt.<locals>.<genexpr>§   sT   è è € ð :ð :°tØ%)§X¢X¨iÑ%8Ô%8ð:˜dŸhšh v¨rÑ2Ô2ð :ð :ð :ð :ð :ð :r   Úinclude_raw)r   r   r   Ú
ValueErrorr)   r   ÚfloatÚintÚAPI_BASE_URLÚAPI_VERSIONÚanyÚappendÚxbmcÚlogÚLOGINFOr   Ú	ExceptionÚtimeÚrequestsÚpostÚstatus_coderE   r   r1   Úraise_for_statusr   ÚlenÚjoin)"Úpromptr0   Úkwargsr   Úapi_keyr   r   r   r5   Útop_pÚtop_kr@   Úthinking_levelÚurlrD   r$   Úmessages_listÚ
has_systemr+   r;   r&   Úfinal_system_promptÚdatar>   Údebug_payloadÚ
start_timeÚresponseÚend_timerG   Úresponse_dataÚresultÚusager-   Ú	candidates"                                     r   Úsend_promptru      sö  € õ ŒOÑÔ€EØ×ÒÐ/Ñ0Ô0€Gàð AÝÐ?Ñ@Ô@Ð@ð —Z’ZÐ 0Ñ1Ô1€NØ—J’J˜Ñ/Ô/€MØ—J’J˜Ñ/Ô/€Màð $Ý!Ñ#Ô#ˆõ ˜×(Ò(Ð)=Ñ>Ô>ÐGÀ%ÑHÔH€KÝ�%×"Ò" >Ñ2Ô2Ð<°fÑ=Ô=€EÝ�× Ò  Ñ0Ô0Ð8°DÑ9Ô9€EÝ�V—Z’ZÐ 3Ñ4Ô4Ðh¸×8HÒ8HÐI\Ñ8]Ô8]ÐhÐahÑiÔi€JØ×%Ò%Ð&=Ñ>Ô>ÐGÀ%€Nõ Ð
HÐ
H�KÐ
HÐ
H°Ð
HÐ
HÐ
H€Cð +Ø!ðð €Gð €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Ð;Ð;Ñ<Ô<Ð<ð €HØð ð ˆØˆvŒ;˜(Ò"Ð"ØØ˜fœ+¨Ò4Ð4ˆwˆw¸&ˆØ�ŠØØ˜s 9œ~Ð.Ð/ð
ð 
ñ 	ô 	ð 	ð 	ð ÐØð ð ˆØˆvŒ;˜(Ò"Ð"Ø"% i¤.ÐØˆEð #ð
 à&ØØØ)ØØ.°Ð?ð
ð 
ð
ð 
€Dð ð 
à�vÐ2Ð3Ð4ð%
ˆÐ Ñ!ð
 —
’
˜;¨Ñ.Ô.€IØð JØ7IˆÐÔ Ð!3Ñ4å„HÐ0¨Ð0Ð0µ$´,Ñ?Ô?Ð?ð ØØ"Ø ð	ð €Mð �:Š:Ð'¨Ñ/Ô/ð NÕ8NÈxÐY^Ð`mð  Mð  ]jð  9kñ  9kô  9kð NÝÐLÑMÔMÐMå”‘”€JÝŒ}˜S¨'¸ÀcÐJÑJÔJ€HÝŒy‰{Œ{€HØ˜Ñ#€Gå„HÐ@¨(Ô*>Ð@Ð@Å$Ä,ÑOÔOÐOð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øøøøøà×ÒÑÔÐØ�]Š]‰_Œ_€Fð ;JÈVÐ:SÐ:SÕ˜f _Ô5Ñ6Ô6Ð6ÐY[€Eð €GØ�vÐÐ¥# f¨\Ô&:Ñ";Ô";¸aÒ"?Ð"?Ø˜<Ô(¨Ô+ˆ	Ø˜	Ð!Ð! g°¸9Ô1EÐ&EÐ&Eà—g’gð :ð :¸yÈÔ?SÐT[Ô?\ð :ñ :ô :ñ :ô :ˆGð ‡z‚z�- Ñ'Ô'ð /Ø˜˜v wÐ.Ð.à�Eˆ>Ðs   Í6=N4 Î42O(c                  óî   — t          j        ¦   «         } |                      d¦  «        }|sdS 	 t          › dt          › d�}t          j        |d|id¬¦  «        }|                     ¦   «          dS #  Y dS xY w)	ur   
    OvÄ›Å™Ã­ platnost API klÃ­Ä�e.
    
    Returns:
        bool: True pokud je klÃ­Ä� platnÃ½, False jinak
    r   Fr"   z/modelsr#   é
   )rD   rF   T)r   r   r   rS   rT   r\   r)   r_   )r   rd   rh   ro   s       r   Úvalidate_api_keyrx   ¯   s‘   € õ ŒOÑÔ€EØ×ÒÐ/Ñ0Ô0€Gàð ØˆuðåÐ4Ð4¥Ð4Ð4Ð4ˆÝ”< Ð.>ÀÐ-HÐRTÐUÑUÔUˆØ×!Ò!Ñ#Ô#Ð#ØˆtøðØˆuˆuøøøs   ®?A/ Á/A4)N)Ú__doc__r\   r   rW   r[   Úwcs.ai.DialogAIDebugRequestr   r   Úwcs.ai.model_catalogr   r   Úwcs.ai.UsageTrackerr   rS   rT   r   ÚstrÚdictru   rx   © r   r   ú<module>r€      sÚ   ððð ð
 €€€Ø Ð Ð Ð Ø €€€Ø €€€Ø WÐ WÐ WÐ WÐ WÐ WÐ WÐ WØ @Ð @Ð @Ð @Ð @Ð @Ð @Ð @Ø 1Ð 1Ð 1Ð 1Ð 1Ð 1à:€Ø€ðcð cð cð
Vð V°#°t°ð Vð Vð Vð Vðpð ð ð ð r   